From 2988e5eef2f4adf43a233cfea57f1d03f308db45 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Sat, 29 Mar 2025 10:49:55 +0800 Subject: [PATCH] =?UTF-8?q?merge:main=E5=88=86=E6=94=AF=E7=9A=84manager-we?= =?UTF-8?q?b=E5=92=8Cxiaozhi-server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + main/manager-web/src/apis/api.js | 14 +- main/manager-web/src/apis/httpRequest.js | 1 - main/manager-web/src/apis/module/admin.js | 8 +- main/manager-web/src/apis/module/agent.js | 93 ----- main/manager-web/src/apis/module/device.js | 81 ---- main/manager-web/src/apis/module/model.js | 32 -- main/manager-web/src/apis/module/ota.js | 67 --- main/manager-web/src/apis/module/user.js | 222 +++++++--- .../src/components/AddDeviceDialog.vue | 52 ++- .../src/components/AddDeviceOtaDialog.vue | 104 ----- ...gentDialog.vue => AddWisdomBodyDialog.vue} | 40 +- main/manager-web/src/components/AgentItem.vue | 77 ---- .../manager-web/src/components/DeviceItem.vue | 98 +++++ main/manager-web/src/components/Footer.vue | 29 -- main/manager-web/src/components/HeaderBar.vue | 295 +++++++++----- main/manager-web/src/components/TtsModel.vue | 3 +- main/manager-web/src/router/index.js | 48 +-- main/manager-web/src/utils/date.js | 7 +- main/manager-web/src/utils/index.js | 4 +- .../src/views/DeviceManagement.vue | 215 ++++++++++ main/manager-web/src/views/ModelConfig.vue | 202 +++++---- main/manager-web/src/views/UserManagement.vue | 113 +++-- main/manager-web/src/views/device.vue | 231 ----------- main/manager-web/src/views/home.vue | 137 +++---- main/manager-web/src/views/login.vue | 10 +- main/manager-web/src/views/ota.vue | 190 --------- main/manager-web/src/views/roleConfig.vue | 385 ++++++++++-------- main/xiaozhi-server/config.yaml | 35 +- main/xiaozhi-server/config/private_config.py | 77 +--- .../providers/memory/mem_custom/mem_custom.py | 18 - 31 files changed, 1269 insertions(+), 1620 deletions(-) delete mode 100755 main/manager-web/src/apis/module/agent.js delete mode 100755 main/manager-web/src/apis/module/device.js delete mode 100755 main/manager-web/src/apis/module/model.js delete mode 100755 main/manager-web/src/apis/module/ota.js delete mode 100644 main/manager-web/src/components/AddDeviceOtaDialog.vue rename main/manager-web/src/components/{AddAgentDialog.vue => AddWisdomBodyDialog.vue} (66%) delete mode 100644 main/manager-web/src/components/AgentItem.vue create mode 100644 main/manager-web/src/components/DeviceItem.vue delete mode 100644 main/manager-web/src/components/Footer.vue create mode 100644 main/manager-web/src/views/DeviceManagement.vue delete mode 100644 main/manager-web/src/views/device.vue delete mode 100644 main/manager-web/src/views/ota.vue delete mode 100644 main/xiaozhi-server/core/providers/memory/mem_custom/mem_custom.py diff --git a/.gitignore b/.gitignore index 675fb688..e4c2ac00 100644 --- a/.gitignore +++ b/.gitignore @@ -156,3 +156,4 @@ main/manager-web/node_modules main/xiaozhi-server/models/SenseVoiceSmall/model.pt main/xiaozhi-server/models/sherpa-onnx* my_wakeup_words.mp3 +main/manager-api/.vscode diff --git a/main/manager-web/src/apis/api.js b/main/manager-web/src/apis/api.js index 178b2bfc..2f789925 100755 --- a/main/manager-web/src/apis/api.js +++ b/main/manager-web/src/apis/api.js @@ -1,20 +1,15 @@ // 引入各个模块的请求 -import agent from './module/agent.js' -import device from './module/device.js' import user from './module/user.js' -import ota from './module/ota.js' -import model from './module/model.js' import admin from './module/admin.js' - /** * 接口地址 * 当前8002端口接口还没开发完成,暂时用 apifoxmock 接口代替 * 如果你想调用8002端口,就用'/xiaozhi-esp32-api/api/v1',请与vue.config.js的devServer配置相结合,方便跨域请求 * */ -// const DEV_API_SERVICE = 'https://m1.apifoxmock.com/m1/5931378-5618560-default' +const DEV_API_SERVICE = 'https://apifoxmock.com/m1/5931378-5618560-default' // 8002开发完成完成后使用这个 -const DEV_API_SERVICE = '/xiaozhi-esp32-api/api/v1' +// const DEV_API_SERVICE = '/xiaozhi-esp32-api' /** * 根据开发环境返回接口url @@ -29,9 +24,4 @@ export function getServiceUrl() { export default { getServiceUrl, user, - agent, - device, - ota, - model, - admin } diff --git a/main/manager-web/src/apis/httpRequest.js b/main/manager-web/src/apis/httpRequest.js index ec7c922b..98f47bf7 100755 --- a/main/manager-web/src/apis/httpRequest.js +++ b/main/manager-web/src/apis/httpRequest.js @@ -109,7 +109,6 @@ function httpHandlerError(info, callBack) { if (info.data.code === 'success' || info.data.code === 0 || info.data.code === undefined) { return networkError }else if (info.data.code === 401) { - store.commit('setToken','') goToPage(Constant.PAGE.LOGIN, true) return true } else { diff --git a/main/manager-web/src/apis/module/admin.js b/main/manager-web/src/apis/module/admin.js index 231443c3..52468d6b 100644 --- a/main/manager-web/src/apis/module/admin.js +++ b/main/manager-web/src/apis/module/admin.js @@ -5,16 +5,16 @@ import {getServiceUrl} from '../api' export default { // 用户列表 getUserList(callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/admin/users`) + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/admin/users`) .method('GET') .success((res) => { RequestService.clearRequestTime() callback(res) }) .fail(() => { - // RequestService.reAjaxFun(() => { - // this.getUserList() - // }) + RequestService.reAjaxFun(() => { + this.getList() + }) }).send() }, } diff --git a/main/manager-web/src/apis/module/agent.js b/main/manager-web/src/apis/module/agent.js deleted file mode 100755 index 2cac9840..00000000 --- a/main/manager-web/src/apis/module/agent.js +++ /dev/null @@ -1,93 +0,0 @@ -import RequestService from '../httpRequest' -import {getServiceUrl} from '../api' - - -export default { - //智能体列表 - getAgentList(callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/user/agent`) - .method('GET') - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取智能体列表失败:', err); - }).send() - }, - //添加智能体 - addAgent(agentName, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent`) - .method('POST') - .data({agentName}) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('添加智能体失败:', err); - }).send(); - }, - //获取智能体配置 - getAgentConfig(agentId, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/${agentId}`) - .method('GET') - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('获取智能体配置失败:', err); - // RequestService.reAjaxFun(() => { - // this.getAgentConfig(agent_id, callback); - // }); - }).send(); - }, - //配置智能体 - saveAgentConfig(agentId, configData, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/${agentId}`) - .method('PUT') - .data(configData) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('保存智能体配置失败:', err); - // RequestService.reAjaxFun(() => { - // this.saveAgentConfig(device_id, configData, callback); - // }); - }).send(); - }, - //删除智能体 - delAgent(agentId, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/${agentId}`) - .method('DELETE') - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('删除智能体失败:', err); - // RequestService.reAjaxFun(() => { - // this.deleteAgent(agent_id, callback); - // }); - }).send(); - }, - //智能体模板列表 - getAgentTemplateList(callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/user/agent/template`) - .method('GET') - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取智能体模板列表失败:', err); - }).send() - }, -} diff --git a/main/manager-web/src/apis/module/device.js b/main/manager-web/src/apis/module/device.js deleted file mode 100755 index fdf74bbc..00000000 --- a/main/manager-web/src/apis/module/device.js +++ /dev/null @@ -1,81 +0,0 @@ -import RequestService from '../httpRequest' -import {getServiceUrl} from '../api' - - -export default { - //设备列表 - getDeviceList(agent_id, page, callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/user/agent/device/bind/${agent_id}`) - .method('GET') - .data(page) - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取设备列表失败:', err); - }).send() - }, - //绑定设备 - bindDevice(agentId, deviceCode, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/device/bind/${agentId}`) - .method('POST') - .data({deviceCode}) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('绑定设备失败:', err); - // RequestService.reAjaxFun(() => { - // this.addDevice(agentId, deviceCode, callback); - // }); - }).send(); - }, - // 解绑设备 - unbindDevice(deviceId, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/device/unbind/${deviceId}`) - .method('PUT') - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('解绑设备失败:', err); - // RequestService.reAjaxFun(() => { - // this.unbindDevice(deviceId, callback); - // }); - }).send() - }, - // 切换设备OTA升级状态 - toggleAutoUpdate(deviceId, autoUpdate, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/device/autoUpdate/${deviceId}`) - .method('POST') - .data({autoUpdate}) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('切换设备OTA升级状态失败:', err); - }).send() - }, - // 设置设备别名 - setAlias(deviceId, alias, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/user/agent/device/alias/${deviceId}`) - .method('POST') - .data({alias}) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('设置设备别名失败:', err); - }).send() - }, - -} diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js deleted file mode 100755 index c5ee9087..00000000 --- a/main/manager-web/src/apis/module/model.js +++ /dev/null @@ -1,32 +0,0 @@ -import RequestService from '../httpRequest' -import {getServiceUrl} from '../api' - - -export default { - //模型配置列表 - getModelList(callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/model/list`) - .method('GET') - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取模型配置列表失败:', err); - }).send() - }, - - //音色列表 - getTtsVoiceList(ttsModelId, callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/tts/voice`) - .method('GET') - .data({ttsModelId}) - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取音色列表失败:', err); - }).send() - }, -} diff --git a/main/manager-web/src/apis/module/ota.js b/main/manager-web/src/apis/module/ota.js deleted file mode 100755 index 23344b9c..00000000 --- a/main/manager-web/src/apis/module/ota.js +++ /dev/null @@ -1,67 +0,0 @@ -import RequestService from '../httpRequest' -import {getServiceUrl} from '../api' - - -export default { - //设备OTA列表 - getOtaList(page, callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/ota/sys/getOtalist`) - .method('GET') - .data(page) - .success((res) => { - RequestService.clearRequestTime() - callback(res) - }) - .fail((err) => { - console.error('获取设备OTA列表失败:', err); - }).send() - }, - //添加设备OTA - saveOta(ota, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/ota/sys/save`) - .method('POST') - .data(ota) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('添加设备OTA失败:', err); - }).send(); - }, - //配置设备OTA - updateOta(ota, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/ota/sys/update`) - .method('POST') - .data(ota) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('保存设备OTA配置失败:', err); - // RequestService.reAjaxFun(() => { - // this.saveAgentConfig(device_id, configData, callback); - // }); - }).send(); - }, - //切换设备OTA可用状态失败 - toggleEnabled(ota, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/ota/sys/toggleEnabled`) - .method('POST') - .data(ota) - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('切换设备OTA可用状态失败:', err); - // RequestService.reAjaxFun(() => { - // this.deleteAgent(agent_id, callback); - // }); - }).send(); - }, -} diff --git a/main/manager-web/src/apis/module/user.js b/main/manager-web/src/apis/module/user.js index 6aee61bc..1fb3503d 100755 --- a/main/manager-web/src/apis/module/user.js +++ b/main/manager-web/src/apis/module/user.js @@ -5,25 +5,25 @@ import {getServiceUrl} from '../api' export default { // 登录 login(loginForm, callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/user/login`) + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/login`) .method('POST') .data(loginForm) .success((res) => { RequestService.clearRequestTime() callback(res) }) - .fail((err) => { - console.error('登录失败:', err); - // RequestService.reAjaxFun(() => { - // this.login(loginForm, callback) - // }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.login(loginForm, callback) + }) }).send() - }, + }, // 获取验证码 getCaptcha(uuid, callback) { RequestService.sendRequest() - .url(`${getServiceUrl()}/user/captcha?uuid=${uuid}`) + .url(`${getServiceUrl()}/api/v1/user/captcha?uuid=${uuid}`) .method('GET') .type('blob') .header({ @@ -36,57 +36,59 @@ export default { callback(res); }) .fail((err) => { // 添加错误参数 - console.error('获取验证码失败:', err); + }).send() }, // 注册账号 register(registerForm, callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/user/register`).method('POST') + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/register`) + .method('POST') .data(registerForm) .success((res) => { RequestService.clearRequestTime() callback(res) }) - .fail((err) => { - console.error('注册账号失败:', err); + .fail(() => { }).send() }, - // 获取所有模型名称 - getModelNames(callback) { + // 保存设备配置 + saveDeviceConfig(device_id, configData, callback) { RequestService.sendRequest() - .url(`${getServiceUrl()}/models/names`) + .url(`${getServiceUrl()}/api/v1/user/configDevice/${device_id}`) + .method('PUT') + .data(configData) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('保存配置失败:', err); + RequestService.reAjaxFun(() => { + this.saveDeviceConfig(device_id, configData, callback); + }); + }).send(); + }, + // 获取智能体列表 + getAgentList(callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent`) .method('GET') .success((res) => { RequestService.clearRequestTime(); callback(res); }) .fail(() => { - // RequestService.reAjaxFun(() => { - // this.getModelNames(callback); - // }); + RequestService.reAjaxFun(() => { + this.getAgentList(callback); + }); }).send(); }, - - // 获取模型音色 - getModelVoices(modelName, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/models/${modelName}/voices`) - .method('GET') - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail(() => { - // RequestService.reAjaxFun(() => { - // this.getModelVoices(modelName, callback); - // }); - }).send(); - }, - // 获取用户信息 + // 用户信息获取 getUserInfo(callback) { RequestService.sendRequest() - .url(`${getServiceUrl()}/user/info`) + .url(`${getServiceUrl()}/api/v1/user/info`) .method('GET') .success((res) => { RequestService.clearRequestTime() @@ -94,29 +96,157 @@ export default { }) .fail((err) => { console.error('接口请求失败:', err) - // RequestService.reAjaxFun(() => { - // this.getUserInfo(callback) - // }) + RequestService.reAjaxFun(() => { + this.getUserInfo(callback) + }) }).send() }, + // 添加智能体 + addAgent(agentName, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent`) + .method('POST') + .data({name: agentName}) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.addAgent(agentName, callback); + }); + }).send(); + }, + // 删除智能体 + deleteAgent(agentId, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${agentId}`) + .method('DELETE') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.deleteAgent(agentId, callback); + }); + }).send(); + }, // 修改用户密码 changePassword(oldPassword, newPassword, successCallback, errorCallback) { RequestService.sendRequest() - .url(`${getServiceUrl()}/user/change-password`) // 修改URL - .method('PUT') // 修改方法为PUT + .url(`${getServiceUrl()}/api/v1/user/change-password`) + .method('PUT') .data({ - old_password: oldPassword, // 修改参数名 - new_password: newPassword // 修改参数名 + old_password: oldPassword, + new_password: newPassword, }) .success((res) => { RequestService.clearRequestTime(); successCallback(res); }) .fail((error) => { - // RequestService.reAjaxFun(() => { - // this.changePassword(oldPassword, newPassword, successCallback, errorCallback); - // }); + RequestService.reAjaxFun(() => { + this.changePassword(oldPassword, newPassword, successCallback, errorCallback); + }); }) .send(); }, + // 获取智能体配置 + getDeviceConfig(deviceId, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${deviceId}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取配置失败:', err); + RequestService.reAjaxFun(() => { + this.getDeviceConfig(deviceId, callback); + }); + }).send(); + }, + // 配置智能体 + updateAgentConfig(agentId, configData, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${agentId}`) + .method('PUT') + .data(configData) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.updateAgentConfig(agentId, configData, callback); + }); + }).send(); + }, + // 已绑设备 + getAgentBindDevices(agentId, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agentId}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取设备列表失败:', err); + RequestService.reAjaxFun(() => { + this.getAgentBindDevices(agentId, callback); + }); + }).send(); + }, + // 解绑设备 + unbindDevice(device_id, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/device/unbind/${device_id}`) + .method('PUT') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('解绑设备失败:', err); + RequestService.reAjaxFun(() => { + this.unbindDevice(device_id, callback); + }); + }).send(); + }, + // 绑定设备 + bindDevice(agentId, code, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agentId}`) + .method('POST') + .data({ code }) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('绑定设备失败:', err); + RequestService.reAjaxFun(() => { + this.bindDevice(agentId, code, callback); + }); + }).send(); + }, + // 新增方法:获取智能体模板 + getAgentTemplate(templateName, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/templateId`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取模板失败:', err); + RequestService.reAjaxFun(() => { + this.getAgentTemplate(templateName, callback); + }); + }).send(); + }, } diff --git a/main/manager-web/src/components/AddDeviceDialog.vue b/main/manager-web/src/components/AddDeviceDialog.vue index b1c13c6a..129ed156 100644 --- a/main/manager-web/src/components/AddDeviceDialog.vue +++ b/main/manager-web/src/components/AddDeviceDialog.vue @@ -1,15 +1,16 @@