diff --git a/main/manager-web/src/apis/api.js b/main/manager-web/src/apis/api.js index bb6ec96b..38c2f86b 100755 --- a/main/manager-web/src/apis/api.js +++ b/main/manager-web/src/apis/api.js @@ -1,4 +1,6 @@ // 引入各个模块的请求 +import agent from './module/agent.js' +import device from './module/device.js' import user from './module/user.js' /** @@ -7,7 +9,7 @@ import user from './module/user.js' * 如果你想调用8002端口,就用'/xiaozhi-esp32-api/api/v1',请与vue.config.js的devServer配置相结合,方便跨域请求 * */ -const DEV_API_SERVICE = 'https://apifoxmock.com/m1/5931378-5618560-default' +const DEV_API_SERVICE = 'https://m1.apifoxmock.com/m1/5931378-5618560-default' // 8002开发完成完成后使用这个 // const DEV_API_SERVICE = '/xiaozhi-esp32-api' @@ -24,4 +26,6 @@ export function getServiceUrl() { export default { getServiceUrl, user, + agent, + device } diff --git a/main/manager-web/src/apis/module/agent.js b/main/manager-web/src/apis/module/agent.js new file mode 100755 index 00000000..721f075c --- /dev/null +++ b/main/manager-web/src/apis/module/agent.js @@ -0,0 +1,84 @@ +import RequestService from '../httpRequest' +import {getServiceUrl} from '../api' + + +export default { + //智能体列表 + getAgentList(callback) { + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/user/agent`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail((err) => { + console.error('获取智能体列表失败:', err); + }).send() + }, + //添加智能体 + addAgent(name, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent`) + .method('POST') + .data({name}) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('添加智能体失败:', err); + RequestService.reAjaxFun(() => { + this.addAgent(name, callback); + }); + }).send(); + }, + //获取智能体配置 + getAgentConfig(agent_id, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${agent_id}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取智能体配置失败:', err); + RequestService.reAjaxFun(() => { + this.getAgentConfig(agent_id, callback); + }); + }).send(); + }, + //配置智能体 + saveAgentConfig(agent_id, configData, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${agent_id}`) + .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(agent_id, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/${agent_id}`) + .method('DELETE') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('删除智能体失败:', err); + RequestService.reAjaxFun(() => { + this.deleteAgent(agent_id, callback); + }); + }).send(); + }, +} diff --git a/main/manager-web/src/apis/module/device.js b/main/manager-web/src/apis/module/device.js new file mode 100755 index 00000000..cd568745 --- /dev/null +++ b/main/manager-web/src/apis/module/device.js @@ -0,0 +1,51 @@ +import RequestService from '../httpRequest' +import {getServiceUrl} from '../api' + + +export default { + //设备列表 + getDeviceList(agent_id, callback) { + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agent_id}`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail((err) => { + console.error('获取设备列表失败:', err); + }).send() + }, + //绑定设备 + bindDevice(agent_id, code, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agent_id}`) + .method('POST') + .data({code}) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('绑定设备失败:', err); + RequestService.reAjaxFun(() => { + this.addDevice(name, 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(() => { + RequestService.reAjaxFun(() => { + this.unbindDevice(device_id, callback); + }); + }).send() + }, + +} diff --git a/main/manager-web/src/apis/module/user.js b/main/manager-web/src/apis/module/user.js index bf3eea34..1879afaf 100755 --- a/main/manager-web/src/apis/module/user.js +++ b/main/manager-web/src/apis/module/user.js @@ -47,22 +47,6 @@ export default { }); }).send() }, - // 绑定设备 - bindDevice(deviceCode, callback) { - RequestService.sendRequest() - .url(`${getServiceUrl()}/api/v1/user/device/bind/${deviceCode}`) - .method('POST') - .success((res) => { - RequestService.clearRequestTime(); - callback(res); - }) - .fail((err) => { - console.error('绑定设备失败:', err); - RequestService.reAjaxFun(() => { - this.bindDevice(deviceCode, callback); - }); - }).send(); - }, // 获取验证码 getCaptcha(uuid, callback) { diff --git a/main/manager-web/src/components/AddAgentDialog.vue b/main/manager-web/src/components/AddAgentDialog.vue new file mode 100644 index 00000000..a7df2940 --- /dev/null +++ b/main/manager-web/src/components/AddAgentDialog.vue @@ -0,0 +1,75 @@ + + + + + + + 添加智能体 + + + + + *智能体名称: + + + + + + + + 确定 + + + 取消 + + + + + + + + \ No newline at end of file diff --git a/main/manager-web/src/components/AgentItem.vue b/main/manager-web/src/components/AgentItem.vue new file mode 100644 index 00000000..eb0b852d --- /dev/null +++ b/main/manager-web/src/components/AgentItem.vue @@ -0,0 +1,77 @@ + + + + + {{ agent.agentName }} + + + + + + + + 角色音色:{{ agent.ttsModelName }} + + + 语言模型:{{ agent.llmModelName }} + + + 最近对话:{{ agent.lastConnectedAt }} + + + + 配置角色 + + + 声纹识别 + + + 历史对话 + + + 设备数量({{agent.deviceCount}}) + + + + + + + \ No newline at end of file diff --git a/main/manager-web/src/components/Footer.vue b/main/manager-web/src/components/Footer.vue new file mode 100644 index 00000000..3ccb543c --- /dev/null +++ b/main/manager-web/src/components/Footer.vue @@ -0,0 +1,30 @@ + + + {{message}} + + + + + + \ No newline at end of file diff --git a/main/manager-web/src/components/HeaderBar.vue b/main/manager-web/src/components/HeaderBar.vue index acc0e981..00400e30 100644 --- a/main/manager-web/src/components/HeaderBar.vue +++ b/main/manager-web/src/components/HeaderBar.vue @@ -1,32 +1,40 @@ - + - - - - - 智能体管理 + + + + + 智能体 - - + + 控制台 - + 设备管理 - + - - - - - - {{ userInfo.mobile || '加载中...' }} + + + + + + {{ userInfo.username || '加载中...' }} + + + 个人中心 + 修改密码 + 退出登录 + + @@ -43,6 +51,7 @@ export default { return { serach: '', userInfo: { + username: '', mobile: '' } } @@ -53,7 +62,7 @@ export default { methods: { goHome() { // 跳转到首页 - this.$router.push('/') + this.$router.push('/home') }, // 获取用户信息 fetchUserInfo() { @@ -71,7 +80,7 @@ export default { // 当搜索内容为空时,显示原始完整列表 filteredDevices = this.$parent.originalDevices; } else { - // 过滤逻辑 + // 过滤逻辑 filteredDevices = this.devices.filter(device => { return device.agentName.includes(searchValue) || device.ttsModelName.includes(searchValue) || @@ -88,38 +97,26 @@ export default { \ No newline at end of file diff --git a/main/manager-web/src/router/index.js b/main/manager-web/src/router/index.js index d3add00a..6ceb086f 100644 --- a/main/manager-web/src/router/index.js +++ b/main/manager-web/src/router/index.js @@ -11,6 +11,13 @@ const routes = [ return import('../views/login.vue') } }, + { + path: '/device', + name: 'RoleConfig', + component: function () { + return import('../views/device.vue') + } + }, { path: '/role-config', name: 'RoleConfig', diff --git a/main/manager-web/src/views/device.vue b/main/manager-web/src/views/device.vue new file mode 100644 index 00000000..05daf0a1 --- /dev/null +++ b/main/manager-web/src/views/device.vue @@ -0,0 +1,251 @@ + + + + + + + + + + + 您好,小智 + + + 让我们度过 + + 美好的一天! + + + + Hello, Let's have a wonderful day! + + + + 添加设备 + + + + + + + + + + + + 控制台 + 智能体 + 设备管理 + + + + + + 设备列表 + + + + + + + + + + + + + + + + + + + + + {{ scope.row.desc }} + + + + + + + + + + + + + 解绑 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/manager-web/src/views/home.vue b/main/manager-web/src/views/home.vue index 0c914e77..80cfee1a 100644 --- a/main/manager-web/src/views/home.vue +++ b/main/manager-web/src/views/home.vue @@ -5,8 +5,8 @@ - - + + 您好,小智 @@ -19,7 +19,7 @@ Hello, Let's have a wonderful day! - + 添加智能体 @@ -30,74 +30,107 @@ + + + + 控制台 + 智能体 + + + - + - - ©2025 xiaozhi-esp32-server - - + + + +