import { createApp } from 'vue' import AiChatWidget from '@/components/ai-chat/index.vue' import { setSDKConfig, type SDKConfig } from '@/components/ai-chat/api' // 全局状态 let isInitialized = false let app: any = null let container: HTMLElement | null = null // 默认配置 const defaultConfig: Partial = { themeColor: ['#667eea', '#764ba2'], position: { top: 'auto', right: '20px', bottom: '20px', left: 'auto' }, draggable: true, pollingInterval: 500 } /** * 初始化AI聊天SDK * @param config SDK配置 */ export const init = (config: SDKConfig) => { // 防止重复初始化 if (isInitialized) { console.warn('AI Chat SDK 已经初始化过了') return } // 验证必需参数 if (!config.botCode || !config.userName) { throw new Error('botCode 和 userName 是必需参数') } // 合并配置 const finalConfig = { ...defaultConfig, ...config } // 设置全局配置 setSDKConfig(finalConfig) // 创建容器 container = document.createElement('div') container.id = 'ai-chat-sdk-container' container.style.position = 'fixed' container.style.zIndex = '9999' container.style.pointerEvents = 'none' document.body.appendChild(container) // 创建Vue应用实例 app = createApp(AiChatWidget, { themeColor: finalConfig.themeColor, position: finalConfig.position, draggable: finalConfig.draggable, pollingInterval: finalConfig.pollingInterval }) // 挂载应用 app.mount(container) // 标记为已初始化 isInitialized = true console.log('AI Chat SDK 初始化成功', finalConfig) } /** * 销毁SDK实例 */ export const destroy = () => { if (!isInitialized || !app || !container) { console.warn('AI Chat SDK 未初始化或已经销毁') return } // 卸载Vue应用 app.unmount() app = null // 移除DOM容器 if (container && container.parentNode) { container.parentNode.removeChild(container) } container = null // 重置状态 isInitialized = false console.log('AI Chat SDK 已销毁') } /** * 检查SDK是否已初始化 */ export const isSDKInitialized = () => isInitialized /** * 重新配置SDK(需要先销毁再初始化) */ export const reconfigure = (config: SDKConfig) => { destroy() init(config) } // 导出类型 export type { SDKConfig } from '@/components/ai-chat/api' // 默认导出 export default { init, destroy, isSDKInitialized, reconfigure }