From c42c878ac896444c42e42f5c918bc997a89b0411 Mon Sep 17 00:00:00 2001 From: SunWuyuan Date: Sun, 18 May 2025 10:54:39 +0800 Subject: [PATCH] Enhance App.vue, axios.js, MigrationTool.vue, index.vue, settings.vue, and related utilities to support namespace management and improve configuration handling. Add namespace password to axios request headers, load namespace info on App mount, and update settings structure to include namespace settings. Refactor dataProvider to utilize new kvLocalProvider and kvServerProvider for data operations, ensuring better separation of concerns and improved error handling. --- src/App.vue | 14 +- src/axios/axios.js | 7 + src/components/MigrationTool.vue | 6 +- src/components/NamespaceAccess.vue | 187 ++++++ .../settings/cards/NamespaceSettingsCard.vue | 427 ++++++++++++ src/pages/index.vue | 3 + src/pages/settings.vue | 610 ++++++++++-------- src/utils/dataProvider.js | 13 +- src/utils/providers/kvLocalProvider.js | 49 ++ src/utils/providers/kvProvider.js | 112 ---- src/utils/providers/kvServerProvider.js | 161 +++++ src/utils/settings.js | 101 ++- 12 files changed, 1249 insertions(+), 441 deletions(-) create mode 100644 src/components/NamespaceAccess.vue create mode 100644 src/components/settings/cards/NamespaceSettingsCard.vue create mode 100644 src/utils/providers/kvLocalProvider.js delete mode 100644 src/utils/providers/kvProvider.js create mode 100644 src/utils/providers/kvServerProvider.js diff --git a/src/App.vue b/src/App.vue index 84bf10b..0ed2064 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,11 +17,13 @@ import { getSetting } from "@/utils/settings"; import { useRouter, useRoute } from "vue-router"; import RateLimitModal from "@/components/RateLimitModal.vue"; import Clarity from "@microsoft/clarity"; +import { kvServerProvider } from '@/utils/providers/kvServerProvider'; + const theme = useTheme(); const router = useRouter(); const route = useRoute(); -onMounted(() => { +onMounted(async () => { // 应用保存的主题设置 const savedTheme = getSetting("theme.mode"); theme.global.name.value = savedTheme; @@ -29,6 +31,16 @@ onMounted(() => { // 检查存储提供者类型 checkProviderType(); Clarity.identify(getSetting("device.uuid"), getSetting("server.domain"), getSetting("server.provider"), getSetting("server.classNumber")); // only custom-id is required + + // 如果使用KV服务器,加载命名空间信息 + const provider = getSetting('server.provider'); + if (provider === 'kv-server' || provider === 'classworkscloud') { + try { + await kvServerProvider.loadNamespaceInfo(); + } catch (error) { + console.error('加载命名空间信息失败:', error); + } + } }); // 检查存储提供者类型,如果是已废弃的类型则重定向 diff --git a/src/axios/axios.js b/src/axios/axios.js index cdae19e..3cd2dd7 100644 --- a/src/axios/axios.js +++ b/src/axios/axios.js @@ -16,6 +16,13 @@ axiosInstance.interceptors.request.use( if (siteKey) { requestConfig.headers["x-site-key"] = siteKey; } + + // 自动添加命名空间密码 + const namespacePassword = getSetting("namespace.password"); + if (namespacePassword) { + requestConfig.headers["x-namespace-password"] = namespacePassword; + } + return requestConfig; }, (error) => { diff --git a/src/components/MigrationTool.vue b/src/components/MigrationTool.vue index 26b38c9..a10c655 100644 --- a/src/components/MigrationTool.vue +++ b/src/components/MigrationTool.vue @@ -681,7 +681,7 @@ export default { // 批量导入配置数据 const configResponse = await axios.post( - `${this.targetServerUrl}/${this.machineId}/import/batch-import`, + `${this.targetServerUrl}/${this.machineId}/_batchimport`, batchData, { headers: this.getRequestHeaders(), @@ -798,7 +798,7 @@ export default { // 批量导入配置数据 const configResponse = await axios.post( - `${this.targetServerUrl}/${this.machineId}/import/batch-import`, + `${this.targetServerUrl}/${this.machineId}/_batchimport`, batchData, { headers: this.getRequestHeaders(), @@ -890,7 +890,7 @@ export default { // 发送批量请求 if (Object.keys(batchPayload).length > 0) { const response = await axios.post( - `${this.targetServerUrl}/${this.machineId}/import/batch-import`, + `${this.targetServerUrl}/${this.machineId}/_batchimport`, batchPayload, { headers: this.getRequestHeaders(), diff --git a/src/components/NamespaceAccess.vue b/src/components/NamespaceAccess.vue new file mode 100644 index 0000000..67a0194 --- /dev/null +++ b/src/components/NamespaceAccess.vue @@ -0,0 +1,187 @@ + + + diff --git a/src/components/settings/cards/NamespaceSettingsCard.vue b/src/components/settings/cards/NamespaceSettingsCard.vue new file mode 100644 index 0000000..64822a7 --- /dev/null +++ b/src/components/settings/cards/NamespaceSettingsCard.vue @@ -0,0 +1,427 @@ + + + diff --git a/src/pages/index.vue b/src/pages/index.vue index 8096219..eda4a15 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -11,6 +11,7 @@