90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
import { useConfigStore } from "shared/store/config"
|
|
import { useConfigWebSocket, type ConfigUpdate } from "shared/composables/websocket"
|
|
|
|
export function useMaxKB() {
|
|
const configStore = useConfigStore()
|
|
const isLoaded = ref(false)
|
|
|
|
// 处理 WebSocket 配置更新 - 只处理 MaxKB 相关
|
|
const handleConfigUpdate = (data: ConfigUpdate) => {
|
|
console.log("MaxKB 收到配置更新:", data)
|
|
if (data.key === 'enable_maxkb') {
|
|
if (data.value) {
|
|
loadMaxKBScript()
|
|
} else {
|
|
removeMaxKBScript()
|
|
}
|
|
}
|
|
}
|
|
|
|
// 初始化 WebSocket
|
|
const { connect } = useConfigWebSocket(handleConfigUpdate)
|
|
|
|
const loadMaxKBScript = () => {
|
|
const { enable_maxkb } = configStore.config
|
|
|
|
if (!enable_maxkb) {
|
|
return
|
|
}
|
|
|
|
const existingScript = document.querySelector(`script[src="${import.meta.env.PUBLIC_MAXKB_URL}"]`)
|
|
if (existingScript) {
|
|
isLoaded.value = true
|
|
return
|
|
}
|
|
|
|
// 创建并插入脚本标签
|
|
const script = document.createElement("script")
|
|
script.src = import.meta.env.PUBLIC_MAXKB_URL
|
|
script.async = true
|
|
script.defer = true
|
|
|
|
script.onload = () => {
|
|
isLoaded.value = true
|
|
console.log("MaxKB script loaded successfully")
|
|
}
|
|
|
|
script.onerror = () => {
|
|
console.error("Failed to load MaxKB script")
|
|
}
|
|
|
|
document.head.appendChild(script)
|
|
}
|
|
|
|
const removeMaxKBScript = () => {
|
|
isLoaded.value = false
|
|
const maxkbChatButton = document.getElementById("maxkb-chat-button")
|
|
const maxkbChatContainer = document.getElementById("maxkb-chat-container")
|
|
if (maxkbChatButton) {
|
|
maxkbChatButton.remove()
|
|
}
|
|
if (maxkbChatContainer) {
|
|
maxkbChatContainer.remove()
|
|
}
|
|
}
|
|
|
|
// 连接 WebSocket
|
|
onMounted(() => {
|
|
connect()
|
|
})
|
|
|
|
watch(
|
|
() => configStore.config.enable_maxkb,
|
|
(newValue) => {
|
|
if (newValue) {
|
|
loadMaxKBScript()
|
|
} else {
|
|
console.log("removeMaxKBScript")
|
|
removeMaxKBScript()
|
|
}
|
|
},
|
|
{ immediate: true }
|
|
)
|
|
|
|
return {
|
|
loadMaxKBScript,
|
|
removeMaxKBScript,
|
|
isLoaded: readonly(isLoaded)
|
|
}
|
|
}
|