diff --git a/main/manager-web/src/apis/api.js b/main/manager-web/src/apis/api.js index 45a810c7..1ec27302 100755 --- a/main/manager-web/src/apis/api.js +++ b/main/manager-web/src/apis/api.js @@ -10,6 +10,7 @@ import user from './module/user.js' import voiceClone from './module/voiceClone.js' import voiceResource from './module/voiceResource.js' import knowledgeBase from './module/knowledgeBase.js' +import correctWord from './module/correctWord.js' @@ -41,5 +42,6 @@ export default { dict, voiceResource, voiceClone, - knowledgeBase + knowledgeBase, + correctWord } diff --git a/main/manager-web/src/apis/module/correctWord.js b/main/manager-web/src/apis/module/correctWord.js new file mode 100644 index 00000000..3bbb5ce2 --- /dev/null +++ b/main/manager-web/src/apis/module/correctWord.js @@ -0,0 +1,129 @@ +import { getServiceUrl } from '../api'; +import RequestService from '../httpRequest'; + + +export default { + // 获取替换词文件列表 + getFileList(params, callback) { + const queryParams = new URLSearchParams({ + page: params.page, + pageSize: params.pageSize + }).toString(); + + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/list?${queryParams}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .networkFail((err) => { + console.error('获取替换词文件列表失败:', err) + RequestService.reAjaxFun(() => { + this.getFileList(params, callback) + }) + }).send() + }, + + // 获取所有替换词文件(不分页) + selectAll(callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/select`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .networkFail((err) => { + console.error('获取所有替换词文件失败:', err) + RequestService.reAjaxFun(() => { + this.selectAll(callback) + }) + }).send() + }, + + // 下载替换词文件 + downloadFile(id, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/download/${id}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail((err) => { + RequestService.clearRequestTime() + callback(err) + }).send() + }, + + // 新增替换词文件 + addFile(data, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file`) + .method('POST') + .data(data) + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail((err) => { + RequestService.clearRequestTime() + callback(err) + }).send() + }, + + // 更新替换词文件 + updateFile(data, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/${data.id}`) + .method('PUT') + .data({ + fileName: data.fileName, + content: data.content + }) + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail((err) => { + RequestService.clearRequestTime() + callback(err) + }).send() + }, + + // 删除替换词文件 + deleteFile(id, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/${id}`) + .method('DELETE') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .networkFail((err) => { + console.error('删除替换词文件失败:', err) + RequestService.reAjaxFun(() => { + this.deleteFile(id, callback) + }) + }).send() + }, + + // 批量删除替换词文件 + batchDeleteFile(ids, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/correct-word/file/batch-delete`) + .method('POST') + .data(ids) + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .networkFail((err) => { + console.error('批量删除替换词文件失败:', err) + RequestService.reAjaxFun(() => { + this.batchDeleteFile(ids, callback) + }) + }).send() + } +} diff --git a/main/manager-web/src/components/HeaderBar.vue b/main/manager-web/src/components/HeaderBar.vue index 6e3196d8..80139f2a 100644 --- a/main/manager-web/src/components/HeaderBar.vue +++ b/main/manager-web/src/components/HeaderBar.vue @@ -2,7 +2,7 @@
-
+
@@ -14,7 +14,7 @@ $route.path === '/home' || $route.path === '/role-config' || $route.path === '/device-management', - }" @click="goHome"> + }" @click="handleRouter('home')"> + :class="{ 'active-tab': $route.path === '/voice-clone-management' }" @click="handleRouter('voiceCloneManagement')"> - + {{ $t("header.voiceCloneManagement") }} - + {{ $t("header.voiceResourceManagement") }}
+ @click="handleRouter('modelConfig')"> + @click="handleRouter('knowledgeBaseManagement')"> - + {{ $t("header.paramManagement") }} - + {{ $t("header.userManagement") }} - + {{ $t("header.otaManagement") }} - + {{ $t("header.dictManagement") }} - + {{ $t("header.providerManagement") }} - + {{ $t("header.agentTemplate") }} - + + {{ $t("header.replacementWordManagement") }} + + {{ $t("header.serverSideManagement") }} - + {{ $t("header.featureManagement") }} @@ -220,6 +223,23 @@ export default { label: "label", children: "children", }, + // 跳转页面配置 + routerPaths: { + home: "/home", + modelConfig: "/model-config", + knowledgeBaseManagement: "/knowledge-base-management", + voiceCloneManagement: "/voice-clone-management", + voiceResourceManagement: "/voice-resource-management", + paramManagement: "/params-management", + userManagement: "/user-management", + otaManagement: "/ota-management", + dictManagement: "/dict-management", + providerManagement: "/provider-management", + agentTemplate: "/agent-template-management", + replacementWordManagement: "/replacement-word-management", + serverSideManagement: "/server-side-management", + featureManagement: "/feature-management", + } }; }, computed: { @@ -331,49 +351,8 @@ export default { window.removeEventListener("resize", this.checkScreenSize); }, methods: { - goHome() { - // 跳转到首页 - this.$router.push("/home"); - }, - goUserManagement() { - this.$router.push("/user-management"); - }, - goModelConfig() { - this.$router.push("/model-config"); - }, - goKnowledgeBaseManagement() { - this.$router.push("/knowledge-base-management"); - }, - goVoiceCloneManagement() { - this.$router.push("/voice-clone-management"); - }, - goParamManagement() { - this.$router.push("/params-management"); - }, - goOtaManagement() { - this.$router.push("/ota-management"); - }, - goDictManagement() { - this.$router.push("/dict-management"); - }, - goProviderManagement() { - this.$router.push("/provider-management"); - }, - goServerSideManagement() { - this.$router.push("/server-side-management"); - }, - - // 跳转到音色资源管理 - goVoiceResourceManagement() { - this.$router.push("/voice-resource-management"); - }, - // 添加默认角色模板管理导航方法 - goAgentTemplateManagement() { - this.$router.push("/agent-template-management"); - }, - // 跳转到功能管理 - goFeatureManagement() { - this.$router.push("/feature-management"); + handleRouter(type) { + this.$router.push(this.routerPaths[type]); }, // 加载功能状态 async loadFeatureStatus() { diff --git a/main/manager-web/src/components/ReplacementWordDialog.vue b/main/manager-web/src/components/ReplacementWordDialog.vue new file mode 100644 index 00000000..2a38885e --- /dev/null +++ b/main/manager-web/src/components/ReplacementWordDialog.vue @@ -0,0 +1,536 @@ + + + + + + + diff --git a/main/manager-web/src/components/TtsAdvancedSettings.vue b/main/manager-web/src/components/TtsAdvancedSettings.vue index fe11b0ac..f24cc59d 100644 --- a/main/manager-web/src/components/TtsAdvancedSettings.vue +++ b/main/manager-web/src/components/TtsAdvancedSettings.vue @@ -57,9 +57,32 @@ class="tts-slider" /> {{ $t('roleConfig.pitchHint') }} -
+
+ + +
+

+ {{ $t('roleConfig.replacementWordLabel') }} + + + +

+ + + +