diff --git a/src/views/system/jdorder/orderList.vue b/src/views/system/jdorder/orderList.vue index cd25c6c..c7c172f 100644 --- a/src/views/system/jdorder/orderList.vue +++ b/src/views/system/jdorder/orderList.vue @@ -405,6 +405,26 @@ export default { // 设置默认日期为今天 this.setDefaultDateRange() this.getListWithFallback() + + // 监听腾讯文档授权回调消息 + this.handleOAuthMessage = (event) => { + if (event.data && event.data.type === 'tendoc_oauth_callback') { + if (event.data.success) { + this.$message.success(event.data.message || '授权成功!') + // 刷新token状态 + this.checkTokenStatus() + } else { + this.$message.error(event.data.message || '授权失败') + } + } + } + window.addEventListener('message', this.handleOAuthMessage) + }, + beforeDestroy() { + // 移除消息监听器 + if (this.handleOAuthMessage) { + window.removeEventListener('message', this.handleOAuthMessage) + } }, methods: { /** 设置默认日期范围为今天 */ @@ -691,22 +711,22 @@ export default { `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes` ) - // 轮询检查授权是否完成(通过检查token状态) - const checkAuth = setInterval(async () => { + // 监听窗口关闭事件(备用方案,如果postMessage失效) + const checkWindowClosed = setInterval(() => { if (authWindow.closed) { - clearInterval(checkAuth) - - // 等待1秒后检查token状态 + clearInterval(checkWindowClosed) + // 等待1秒后检查token状态(作为备用验证) setTimeout(async () => { try { const tokenStatusRes = await getTokenStatus() if (tokenStatusRes.data && tokenStatusRes.data.hasToken) { - this.$message.success('授权成功!') + // 如果已经通过postMessage收到成功消息,这里不再重复提示 } else { + // 如果没有收到postMessage,可能是授权失败 this.$message.warning('授权未完成,请重新尝试') } } catch (e) { - this.$message.warning('无法验证授权状态') + // 静默处理,避免重复提示 } }, 1000) }