diff --git a/src/apis/paths/mcp.ts b/src/apis/paths/mcp.ts index c85d839002614979b1a044cf8009b0dbd463a10b..1931379789366ecf35f8f71ef4629a2fdde5a537 100644 --- a/src/apis/paths/mcp.ts +++ b/src/apis/paths/mcp.ts @@ -84,8 +84,9 @@ const deleteMcpService = (id: string) => { return del<{ serviceId: string }>(`${MCP_BASE_URL}/${id}`); }; -const activeMcpService = (id: string, active: boolean) => { - return post<{ serviceId: string }>(`${MCP_BASE_URL}/${id}`, { active }); +const activeMcpService = (id: string, active: boolean, mcpEnv?: any) => { + return post<{ serviceId: string }>(`${MCP_BASE_URL}/${id}`, { active, mcpEnv }, + { 'Content-Type': 'multipart/form-data' },); }; const installMcpService = (id: string) => { diff --git a/src/components/commonFooter/CommonFooter.vue b/src/components/commonFooter/CommonFooter.vue index b88448bab573aa0423b826106f1af94e50477538..4897990521b8093d4f3043be304b8e71310a090f 100644 --- a/src/components/commonFooter/CommonFooter.vue +++ b/src/components/commonFooter/CommonFooter.vue @@ -8,12 +8,33 @@ const agreeDialogVisiable = ref(false); // 协议内容 const agreement = ref(''); const policy = ref(''); + +/** + * 获取当前语言 + */ +const getLocale = () => { + const localLang = localStorage.getItem('copilot_language'); + let locale = 'zh'; // 默认值 + + if (localLang) { + try { + const parsed = JSON.parse(localLang); + // 处理可能的 language 值:zh, zh_cn, zh-tw 等 + if (parsed.language) { + locale = parsed.language.startsWith('zh') ? 'zh' : parsed.language; + } + } catch (e) { + console.error('解析语言设置失败:', e); + } + } + return locale; +}; + /** * 读取协议 */ const readAgreement = async () => { - const localLang = localStorage.getItem('copilot_language'); - const locale = (localLang && JSON.parse(localLang).language) || 'zh'; + const locale = getLocale(); const response = locale === 'en' ? await import('src/conf/agreement-en.md?raw') @@ -23,8 +44,7 @@ const readAgreement = async () => { }; const readPolicy = async () => { - const localLang = localStorage.getItem('copilot_language'); - const locale = (localLang && JSON.parse(localLang).language) || 'zh'; + const locale = getLocale(); const response = locale === 'en' ? await import('src/conf/policy-en.md?raw') diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 7fe3eb0fd34caaf8d6345c4c9debe190198836ba..e830bea8206a4657683e879d921705650b61a436 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -4,7 +4,19 @@ import zh from './lang/zh-cn'; import en from './lang/en'; const localLang = localStorage.getItem('copilot_language'); -const locale = (localLang && JSON.parse(localLang).language) || 'zh'; +let locale = 'zh'; // 默认值 + +if (localLang) { + try { + const parsed = JSON.parse(localLang); + // 处理可能的 language 值:zh, zh_cn, zh-tw 等 + if (parsed.language) { + locale = parsed.language.startsWith('zh') ? 'zh' : parsed.language; + } + } catch (e) { + console.error('解析语言设置失败:', e); + } +} const i18n = createI18n({ legacy: false, // 设置为 false,启用 composition API 模式 diff --git a/src/i18n/lang/en.ts b/src/i18n/lang/en.ts index dad069f3c04dd5775be8742a8b3c0ed4417909c1..5adcf021c2641305f0bf7df88bea6dac20e453c9 100644 --- a/src/i18n/lang/en.ts +++ b/src/i18n/lang/en.ts @@ -113,6 +113,7 @@ export default { installed: 'Installed', not_active: 'Not Active', active: 'Active', + active_mcp_service: 'Active MCP Service', }, upload_icon: 'Upload Icon', please_upload_icon: 'Upload an icon.', diff --git a/src/i18n/lang/zh-cn.ts b/src/i18n/lang/zh-cn.ts index 1e4eb8716aa35e7f422c830f90e163a75c48eb4e..c729f327166ded1627260adaaf3a78f0990433f9 100644 --- a/src/i18n/lang/zh-cn.ts +++ b/src/i18n/lang/zh-cn.ts @@ -113,6 +113,7 @@ export default { installed: '已安装', not_active: '未激活', active: '已激活', + active_mcp_service: '激活MCP服务', }, upload_icon: '上传图标', please_upload_icon: '请上传图标', diff --git a/src/views/api/components/ActiveModel.vue b/src/views/api/components/ActiveModel.vue new file mode 100644 index 0000000000000000000000000000000000000000..e71f9b18c7e1f6df5d7202dbcd1dfcefc0c28870 --- /dev/null +++ b/src/views/api/components/ActiveModel.vue @@ -0,0 +1,146 @@ + + + + diff --git a/src/views/api/index.vue b/src/views/api/index.vue index 00c3a330742b01a768634fd7d56117c52fb7301d..c313e5ba90acc3683ef7ddf480b53bd20f1ec025 100644 --- a/src/views/api/index.vue +++ b/src/views/api/index.vue @@ -223,15 +223,18 @@ v-if=" (userinfo.user_sub === item.author && pluginType === 'semantic_interface') || - (userinfo.is_admin && pluginType === 'mcp') + pluginType === 'mcp' " class="deleteAndEdit" > {{ item.isActive @@ -260,7 +261,10 @@ {{ $t('semantic.cancel') }} @@ -355,6 +363,12 @@ @change="handleChangePage" /> + +