export function useConfirm() { const confirm = (options) => { return new Promise((resolve, reject) => { // 唯一ID,彻底隔离每个弹窗 const eventId = Date.now() + '_' + Math.random().toString(36).substr(2, 9) const resultEvent = `confirmResult_${eventId}` let isFinished = false let timeoutTimer = null // 接收结果 const handleResult = (result) => { if (isFinished) return isFinished = true clearTimeout(timeoutTimer) uni.$off(resultEvent, handleResult) if (result) resolve(true) else reject(new Error('cancel')) } // 监听自己的结果 uni.$on(resultEvent, handleResult) // 打开全局弹窗 uni.$emit('showConfirm', { ...options, eventId }) // 超时保护 timeoutTimer = setTimeout(() => { if (isFinished) return isFinished = true uni.$off(resultEvent, handleResult) reject(new Error('timeout')) }, 60000) }) } return confirm }