import { createApp } from 'vue' import HelpChatButton from '@/components/help-chat-button/index.vue' import { setHelpChatButtonConfig, getHelpChatButtonConfig, validateConfig, type HelpChatButtonConfig } from '@/components/help-chat-button/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, aiChatConfig: { pollingInterval: 500, botCode: '' }, userId: '', userName: '', feedbackConfig: { systemId: '' } } /** * 初始化 Help Chat Button SDK (Vue 版本) * @param config SDK配置 */ export const init = (config: HelpChatButtonConfig) => { // 防止重复初始化 if (isInitialized) { console.warn('Help Chat Button SDK 已经初始化过了') return } // 验证必需参数 validateConfig(config) // 合并配置 const finalConfig = { ...defaultConfig, ...config } // 设置全局配置 setHelpChatButtonConfig(finalConfig) // 创建容器 container = document.createElement('div') container.id = 'help-chat-button-sdk-container' container.style.position = 'fixed' container.style.zIndex = '9999' container.style.pointerEvents = 'none' document.body.appendChild(container) // 创建Vue应用实例 app = createApp(HelpChatButton, { themeColor: finalConfig.themeColor, position: finalConfig.position, draggable: finalConfig.draggable, aiChatConfig: finalConfig.aiChatConfig, userId: finalConfig.userId, userName: finalConfig.userName, feedbackConfig: finalConfig.feedbackConfig }) // 挂载应用 app.mount(container) // 标记为已初始化 isInitialized = true console.log('Help Chat Button SDK 初始化成功 (Vue版本)', finalConfig) } /** * 销毁SDK实例 */ export const destroy = () => { if (!isInitialized || !app || !container) { console.warn('Help Chat Button SDK 未初始化或已经销毁') return } // 卸载Vue应用 app.unmount() app = null // 移除DOM容器 if (container && container.parentNode) { container.parentNode.removeChild(container) } container = null // 重置状态 isInitialized = false console.log('Help Chat Button SDK 已销毁') } /** * 检查SDK是否已初始化 */ export const isSDKInitialized = () => isInitialized /** * 重新配置SDK(需要先销毁再初始化) */ export const reconfigure = (config: HelpChatButtonConfig) => { destroy() init(config) } /** * 获取当前配置 */ export const getConfig = () => getHelpChatButtonConfig() /** * 更新配置(部分更新) */ export const updateConfig = (config: Partial) => { if (!isInitialized) { console.warn('Help Chat Button SDK 未初始化,无法更新配置') return } const currentConfig = getHelpChatButtonConfig() const newConfig = { ...currentConfig, ...config } // 验证新配置 validateConfig(newConfig) // 重新配置 reconfigure(newConfig) } // 导出类型 export type { HelpChatButtonConfig } from '@/components/help-chat-button/api' // 默认导出 export default { init, destroy, isSDKInitialized, reconfigure, getConfig, updateConfig }