import { ref } from 'vue' import { useI18n } from 'vue-i18n' import { ElMessage } from 'element-plus' const SDK_URL = 'https://wwcdn.weixin.qq.com/node/wework/js/wecom-aibot-sdk@0.1.0.min.js' const SOURCE = 'mateclaw' // Module-level guard: the SDK script tag is appended to exactly once // across all component instances and re-renders. let sdkLoadPromise: Promise | null = null function loadSDK(): Promise { if ((window as any).WecomAIBotSDK) return Promise.resolve() if (sdkLoadPromise) return sdkLoadPromise sdkLoadPromise = new Promise((resolve, reject) => { const script = document.createElement('script') script.src = SDK_URL script.async = true script.onload = () => resolve() script.onerror = () => { sdkLoadPromise = null // allow retry on next call reject(new Error('WeCom SDK load failed')) } document.body.appendChild(script) }) return sdkLoadPromise } export interface WecomBotAuthResult { botid: string secret: string } /** * 企业微信扫码授权:动态加载官方 JS SDK,弹出授权窗口,回调 botid/secret。 * * 拆出来的好处: * - SDK 脚本只在用户真点"授权"按钮时才注入,不污染每个页面的 * - 多次点击不会重复 append