feat: 新增设备互相通讯功能

feat: 新增通讯录页面
This commit is contained in:
Sakura-RanChen
2026-05-26 16:37:39 +08:00
parent 7f73dae1bf
commit ce68c83eea
48 changed files with 2361 additions and 7 deletions
+3 -1
View File
@@ -11,6 +11,7 @@ import voiceClone from './module/voiceClone.js'
import voiceResource from './module/voiceResource.js'
import knowledgeBase from './module/knowledgeBase.js'
import correctWord from './module/correctWord.js'
import addressBook from './module/addressBook.js'
@@ -43,5 +44,6 @@ export default {
voiceResource,
voiceClone,
knowledgeBase,
correctWord
correctWord,
addressBook
}
@@ -0,0 +1,60 @@
import { getServiceUrl } from '../api';
import RequestService from '../httpRequest';
export default {
/**
* 获取设备通讯录列表
*/
getAddressBookList(macAddress, callback) {
RequestService.sendRequest()
.url(`${getServiceUrl()}/device/address-book/${macAddress}`)
.method('GET')
.success((res) => {
RequestService.clearRequestTime();
callback(res);
})
.networkFail(() => {
RequestService.reAjaxFun(() => {
this.getAddressBookList(macAddress, callback);
});
}).send();
},
/**
* 更新设备通讯录别名
*/
updateAlias(data, callback) {
RequestService.sendRequest()
.url(`${getServiceUrl()}/device/address-book/alias`)
.method('PUT')
.data(data)
.success((res) => {
RequestService.clearRequestTime();
callback(res);
})
.networkFail(() => {
RequestService.reAjaxFun(() => {
this.updateAlias(data, callback);
});
}).send();
},
/**
* 更新设备通讯录权限
*/
updatePermission(data, callback) {
RequestService.sendRequest()
.url(`${getServiceUrl()}/device/address-book/permission`)
.method('PUT')
.data(data)
.success((res) => {
RequestService.clearRequestTime();
callback(res);
})
.networkFail(() => {
RequestService.reAjaxFun(() => {
this.updatePermission(data, callback);
});
}).send();
}
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,174 @@
<template>
<el-dialog :title="title" :visible="dialogVisible" width="600px" class="address-book-dialog" @close="handleClose">
<el-form ref="addressBookForm" :model="form" :rules="rules" label-width="100px" size="medium">
<el-form-item :label="$t('addressBookDialog.name')" prop="name">
<el-input v-model="form.name" :placeholder="$t('addressBookDialog.namePlaceholder')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('addressBookDialog.description')" prop="description">
<el-input v-model="form.description" :placeholder="$t('addressBookDialog.descriptionPlaceholder')"
type="textarea" :rows="4" maxlength="300" show-word-limit></el-input>
</el-form-item>
<el-form-item :label="$t('addressBookDialog.status')" prop="status">
<el-switch
v-model="form.status"
:active-value="1"
:inactive-value="0"
active-color="#13ce66"
inactive-color="#909399"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose">{{ $t('addressBookDialog.cancel') }}</el-button>
<el-button type="primary" @click="handleSubmit">{{ $t('addressBookDialog.confirm') }}</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: "AddressBookDialog",
props: {
title: {
type: String,
default: ""
},
visible: {
type: Boolean,
default: false
},
form: {
type: Object,
default: () => ({
id: null,
name: "",
description: "",
status: 1
})
}
},
data() {
return {
dialogVisible: this.visible,
rules: {
name: [
{
required: true,
message: this.$t("addressBookDialog.nameRequired"),
trigger: "blur"
},
{
min: 1,
max: 50,
message: this.$t("addressBookDialog.nameLength"),
trigger: "blur"
},
{
pattern: /^[一-龥a-zA-Z0-9\s-_]+$/,
message: this.$t("addressBookDialog.namePattern"),
trigger: "blur"
}
],
description: [
{
required: true,
message: this.$t("addressBookDialog.descriptionRequired"),
trigger: "blur"
},
{
max: 300,
message: this.$t("addressBookDialog.descriptionLength"),
trigger: "blur"
}
]
}
};
},
watch: {
visible(val) {
this.dialogVisible = val;
if (val) {
if (this.$refs.addressBookForm) {
this.$refs.addressBookForm.clearValidate();
}
}
}
},
methods: {
handleClose() {
if (this.$refs.addressBookForm) {
this.$refs.addressBookForm.clearValidate();
}
this.dialogVisible = false;
this.$emit("update:visible", false);
},
handleSubmit() {
this.$refs.addressBookForm.validate(valid => {
if (valid) {
this.$emit("submit", {
...this.form
});
}
});
}
}
};
</script>
<style lang="scss" scoped>
.address-book-dialog {
::v-deep .el-dialog {
border-radius: 20px;
overflow: hidden;
}
::v-deep .el-dialog__body {
padding: 20px 30px;
}
::v-deep .el-form-item {
margin-bottom: 20px;
}
::v-deep .el-form-item__label {
font-weight: 500;
color: #34495e;
font-size: 14px;
}
::v-deep .el-input {
.el-input__inner {
height: 36px;
font-size: 14px;
border-radius: 4px;
border: 1px solid #ddd;
transition: all 0.3s ease;
&:focus {
border-color: #5f70f3;
box-shadow: 0 0 0 2px rgba(95, 112, 243, 0.2);
}
}
}
::v-deep .el-textarea {
.el-textarea__inner {
font-size: 14px;
border-radius: 4px;
border: 1px solid #ddd;
transition: all 0.3s ease;
&:focus {
border-color: #5f70f3;
box-shadow: 0 0 0 2px rgba(95, 112, 243, 0.2);
}
}
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
}
}
</style>
@@ -81,6 +81,15 @@
}" />
<span class="nav-text">{{ $t("header.knowledgeBase") }}</span>
</div>
<div v-if="featureStatus.addressBook" class="equipment-management"
:class="{ 'active-tab': $route.path === '/address-book-management' }"
@click="handleRouter('addressBookManagement')">
<img loading="lazy" alt="" src="@/assets/header/knowledge_base.png" :style="{
filter:
$route.path === '/address-book-management' ? 'brightness(0) invert(1)' : 'None',
}" />
<span class="nav-text">{{ $t("header.addressBook") }}</span>
</div>
<el-dropdown v-if="userInfo.superAdmin" trigger="click" class="equipment-management more-dropdown" :class="{
'active-tab':
$route.path === '/dict-management' ||
@@ -228,6 +237,7 @@ export default {
home: "/home",
modelConfig: "/model-config",
knowledgeBaseManagement: "/knowledge-base-management",
addressBookManagement: "/address-book-management",
voiceCloneManagement: "/voice-clone-management",
voiceResourceManagement: "/voice-resource-management",
paramManagement: "/params-management",
@@ -247,6 +257,7 @@ export default {
featureStatus: (state) => ({
voiceClone: state.pubConfig.systemWebMenu?.features?.voiceClone?.enabled, // 音色克隆功能状态
knowledgeBase: state.pubConfig.systemWebMenu?.features?.knowledgeBase?.enabled, // 知识库功能状态
addressBook: state.pubConfig.systemWebMenu?.features?.addressBook?.enabled, // 通讯录功能状态
}),
userInfo: (state) => state.userInfo,
}),
+35
View File
@@ -1416,4 +1416,39 @@ export default {
'feature.asr.name': 'Spracherkennung',
'feature.asr.description': 'Sprache in Text umwandeln, um natürliche Sprachinteraktionsfunktionalität zu ermöglichen',
// Address Book Management page
'addressBookManagement.mainTitle': 'Adressbuchverwaltung',
'addressBookManagement.subTitle': 'Geräteadressbuch verwalten, Gerätenamen und Anrufpermissions festlegen',
'addressBookManagement.online': 'Online',
'addressBookManagement.offline': 'Offline',
'addressBookManagement.macAddress': 'MAC-Adresse',
'addressBookManagement.status': 'Status',
'addressBookManagement.deviceGroup': 'Gerätegruppe',
'addressBookManagement.addTime': 'Hinzugefügt Zeit',
'addressBookManagement.lastOnline': 'Zuletzt Online',
'addressBookManagement.deviceCallPermission': 'Geräteanrufpermission',
'addressBookManagement.setPermissionDesc': 'Festlegen welche Geräte das aktuelle Gerät anrufen kann',
'addressBookManagement.selectAll': 'Alle auswählen',
'addressBookManagement.deselectAll': 'Alle abwählen',
// Address Book Management page - operation messages
'addressBookManagement.aliasSaved': 'Alias gespeichert',
'addressBookManagement.saveFailed': 'Speichern fehlgeschlagen',
'addressBookManagement.noChanges': 'Keine Änderungen',
'addressBookManagement.permissionSaved': 'Permission gespeichert',
'addressBookManagement.partialSaveFailed': 'Einige Permissions konnten nicht gespeichert werden',
'addressBookManagement.agentNameUpdated': 'Agentname aktualisiert',
'addressBookManagement.updateFailed': 'Aktualisierung fehlgeschlagen',
// Time format
'addressBookManagement.justNow': 'Gerade eben',
'addressBookManagement.minutesAgo': 'vor {minutes} Minuten',
'addressBookManagement.hoursAgo': 'vor {hours} Stunden',
'addressBookManagement.daysAgo': 'vor {days} Tagen',
'addressBookManagement.monthsAgo': 'vor {months} Monaten',
'addressBookManagement.yearsAgo': 'vor {years} Jahren',
// Header navigation
'header.addressBook': 'Adressbuch',
}
+35
View File
@@ -1416,4 +1416,39 @@ export default {
'feature.asr.name': 'Speech Recognition',
'feature.asr.description': 'Convert speech to text to enable natural language interaction functionality',
// Address Book Management page
'addressBookManagement.mainTitle': 'Address Book Management',
'addressBookManagement.subTitle': 'Manage device address book, set device names and call permissions',
'addressBookManagement.online': 'Online',
'addressBookManagement.offline': 'Offline',
'addressBookManagement.macAddress': 'MAC Address',
'addressBookManagement.status': 'Status',
'addressBookManagement.deviceGroup': 'Device Group',
'addressBookManagement.addTime': 'Added Time',
'addressBookManagement.lastOnline': 'Last Online',
'addressBookManagement.deviceCallPermission': 'Device Call Permission',
'addressBookManagement.setPermissionDesc': 'Set which devices the current device can call',
'addressBookManagement.selectAll': 'Select All',
'addressBookManagement.deselectAll': 'Deselect All',
// Address Book Management page - operation messages
'addressBookManagement.aliasSaved': 'Alias saved',
'addressBookManagement.saveFailed': 'Save failed',
'addressBookManagement.noChanges': 'No changes',
'addressBookManagement.permissionSaved': 'Permission saved',
'addressBookManagement.partialSaveFailed': 'Some permissions failed to save',
'addressBookManagement.agentNameUpdated': 'Agent name updated',
'addressBookManagement.updateFailed': 'Update failed',
// Time format
'addressBookManagement.justNow': 'Just now',
'addressBookManagement.minutesAgo': '{minutes} minutes ago',
'addressBookManagement.hoursAgo': '{hours} hours ago',
'addressBookManagement.daysAgo': '{days} days ago',
'addressBookManagement.monthsAgo': '{months} months ago',
'addressBookManagement.yearsAgo': '{years} years ago',
// Header navigation
'header.addressBook': 'Address Book',
}
+35
View File
@@ -1416,4 +1416,39 @@ export default {
'feature.asr.name': 'Reconhecimento de Fala',
'feature.asr.description': 'Converter fala em texto para habilitar a funcionalidade de interação por linguagem natural',
// Address Book Management page
'addressBookManagement.mainTitle': 'Gerenciamento de Lista de Contatos',
'addressBookManagement.subTitle': 'Gerenciar lista de contatos do dispositivo, definir nomes e permissões de chamada',
'addressBookManagement.online': 'Online',
'addressBookManagement.offline': 'Offline',
'addressBookManagement.macAddress': 'Endereço MAC',
'addressBookManagement.status': 'Status',
'addressBookManagement.deviceGroup': 'Grupo de Dispositivos',
'addressBookManagement.addTime': 'Hora de Adição',
'addressBookManagement.lastOnline': 'Última Conexão',
'addressBookManagement.deviceCallPermission': 'Permissão de Chamada do Dispositivo',
'addressBookManagement.setPermissionDesc': 'Definir quais dispositivos o dispositivo atual pode chamar',
'addressBookManagement.selectAll': 'Selecionar Todos',
'addressBookManagement.deselectAll': 'Desmarcar Todos',
// Address Book Management page - operation messages
'addressBookManagement.aliasSaved': 'Apelido salvo',
'addressBookManagement.saveFailed': 'Falha ao salvar',
'addressBookManagement.noChanges': 'Sem alterações',
'addressBookManagement.permissionSaved': 'Permissão salva',
'addressBookManagement.partialSaveFailed': 'Algumas permissões não puderam ser salvas',
'addressBookManagement.agentNameUpdated': 'Nome do agente atualizado',
'addressBookManagement.updateFailed': 'Falha na atualização',
// Time format
'addressBookManagement.justNow': 'Agora mesmo',
'addressBookManagement.minutesAgo': 'há {minutes} minutos',
'addressBookManagement.hoursAgo': 'há {hours} horas',
'addressBookManagement.daysAgo': 'há {days} dias',
'addressBookManagement.monthsAgo': 'há {months} meses',
'addressBookManagement.yearsAgo': 'há {years} anos',
// Header navigation
'header.addressBook': 'Lista de Contatos',
}
+35
View File
@@ -1416,4 +1416,39 @@ export default {
'feature.asr.name': 'Nhận dạng giọng nói',
'feature.asr.description': 'Chuyển đổi giọng nói thành văn bản, thực hiện chức năng tương tác ngôn ngữ tự nhiên',
// Address Book Management page
'addressBookManagement.mainTitle': 'Quản lý danh bạ',
'addressBookManagement.subTitle': 'Quản lý danh bạ thiết bị, đặt tên thiết bị và quyền gọi',
'addressBookManagement.online': 'Trực tuyến',
'addressBookManagement.offline': 'Ngoại tuyến',
'addressBookManagement.macAddress': 'Địa chỉ MAC',
'addressBookManagement.status': 'Trạng thái',
'addressBookManagement.deviceGroup': 'Nhóm thiết bị',
'addressBookManagement.addTime': 'Thời gian thêm',
'addressBookManagement.lastOnline': 'Hoạt động lần cuối',
'addressBookManagement.deviceCallPermission': 'Quyền gọi thiết bị',
'addressBookManagement.setPermissionDesc': 'Đặt thiết bị nào thiết bị hiện tại có thể gọi',
'addressBookManagement.selectAll': 'Chọn tất cả',
'addressBookManagement.deselectAll': 'Bỏ chọn tất cả',
// Address Book Management page - operation messages
'addressBookManagement.aliasSaved': 'Bí danh đã lưu',
'addressBookManagement.saveFailed': 'Lưu thất bại',
'addressBookManagement.noChanges': 'Không có thay đổi',
'addressBookManagement.permissionSaved': 'Quyền đã lưu',
'addressBookManagement.partialSaveFailed': 'Một số quyền không thể lưu',
'addressBookManagement.agentNameUpdated': 'Tên tác tử đã cập nhật',
'addressBookManagement.updateFailed': 'Cập nhật thất bại',
// Time format
'addressBookManagement.justNow': 'Vừa xong',
'addressBookManagement.minutesAgo': '{minutes} phút trước',
'addressBookManagement.hoursAgo': '{hours} giờ trước',
'addressBookManagement.daysAgo': '{days} ngày trước',
'addressBookManagement.monthsAgo': '{months} tháng trước',
'addressBookManagement.yearsAgo': '{years} năm trước',
// Header navigation
'header.addressBook': 'Danh bạ',
}
+106
View File
@@ -1413,5 +1413,111 @@ export default {
'feature.vad.description': '自动检测语音活动,优化语音交互的响应效率',
'feature.asr.name': '语音识别',
'feature.asr.description': '将语音转换为文本,实现自然语言交互功能',
'feature.addressBook.name': '通讯录',
'feature.addressBook.description': '管理和维护联系人通讯录,为AI助手提供联系人信息支持',
// 通讯录管理页面
'addressBookManagement.title': '通讯录管理',
'addressBookManagement.searchPlaceholder': '搜索设备名称或MAC地址',
'addressBookManagement.search': '搜索',
'addressBookManagement.selectAgent': '请选择智能体',
'addressBookManagement.name': '通讯录名称',
'addressBookManagement.description': '通讯录描述',
'addressBookManagement.contactCount': '联系人数量',
'addressBookManagement.status': '启用',
'addressBookManagement.createdAt': '创建时间',
'addressBookManagement.operation': '操作',
'addressBookManagement.add': '新增',
'addressBookManagement.edit': '编辑',
'addressBookManagement.delete': '删除',
'addressBookManagement.itemsPerPage': '条/页',
'addressBookManagement.firstPage': '首页',
'addressBookManagement.prevPage': '上一页',
'addressBookManagement.nextPage': '下一页',
'addressBookManagement.totalRecords': '共{total}条记录',
'addressBookManagement.addAddressBook': '新增通讯录',
'addressBookManagement.editAddressBook': '编辑通讯录',
'addressBookManagement.getAddressBookListFailed': '获取通讯录列表失败',
'addressBookManagement.selectAddressBookFirst': '请先选择需要删除的通讯录',
'addressBookManagement.confirmBatchDelete': '确定要删除选中的{count}个通讯录吗?',
'addressBookManagement.batchDeleteSuccess': '成功删除{count}个通讯录',
'addressBookManagement.deleteFailed': '删除失败,请重试',
'addressBookManagement.operationCancelled': '已取消删除操作',
'addressBookManagement.updateSuccess': '修改成功',
'addressBookManagement.addSuccess': '新增成功',
'addressBookManagement.updateFailed': '更新失败',
'addressBookManagement.addFailed': '新增失败',
'addressBookManagement.selectAll': '全选',
'addressBookManagement.cancelSelectAll': '取消全选',
'addressBookManagement.deviceName': '设备名称',
'addressBookManagement.deviceType': '设备类型',
'addressBookManagement.deviceId': '设备ID',
'addressBookManagement.remarks': '备注',
'addressBookManagement.addressBookDetail': '通讯录详情',
'addressBookManagement.addressBookName': '通讯录名称',
'addressBookManagement.addressBookNamePlaceholder': '请输入通讯录名称',
'addressBookManagement.addressBookNameRequired': '请输入通讯录名称',
'addressBookManagement.addressBookNameLength': '通讯录名称长度在1到50个字符之间',
'addressBookManagement.addressBookDesc': '通讯录描述',
'addressBookManagement.addressBookDescPlaceholder': '请输入通讯录描述',
'addressBookManagement.remarksPlaceholder': '请输入备注信息',
'addressBookManagement.selectDevice': '请选择一个设备查看通讯录详情',
'addressBookManagement.save': '保存',
'addressBookManagement.saveSuccess': '保存成功',
'addressBookManagement.saveFailed': '保存失败',
'addressBookManagement.deviceNotSelected': '请先选择一个设备',
'addressBookManagement.addDeviceTip': '新增设备功能开发中',
'addressBookManagement.selectAgentFirst': '请先选择智能体',
// 通讯录对话框
'addressBookDialog.title': '通讯录',
'addressBookDialog.name': '通讯录名称',
'addressBookDialog.namePlaceholder': '请输入通讯录名称',
'addressBookDialog.description': '通讯录描述',
'addressBookDialog.descriptionPlaceholder': '请详细输入通讯录描述',
'addressBookDialog.status': '状态',
'addressBookDialog.save': '保存',
'addressBookDialog.cancel': '取消',
'addressBookDialog.confirm': '确认',
'addressBookDialog.nameRequired': '请输入通讯录名称',
'addressBookDialog.nameLength': '通讯录名称长度在1到50个字符之间',
'addressBookDialog.namePattern': '通讯录名称只能包含中文、英文、数字、空格、下划线和连字符',
'addressBookDialog.descriptionRequired': '请输入通讯录描述',
'addressBookDialog.descriptionLength': '通讯录描述不能超过300个字符',
// 头部导航
'header.addressBook': '通讯录',
// 通讯录管理页面 - 设备列表
'addressBookManagement.mainTitle': '通讯录管理',
'addressBookManagement.subTitle': '管理设备通讯录,设置设备名称和呼叫权限',
'addressBookManagement.online': '在线',
'addressBookManagement.offline': '离线',
'addressBookManagement.macAddress': 'MAC地址',
'addressBookManagement.status': '状态',
'addressBookManagement.deviceGroup': '设备分组',
'addressBookManagement.addTime': '添加时间',
'addressBookManagement.lastOnline': '最后在线',
'addressBookManagement.deviceCallPermission': '设备呼叫权限',
'addressBookManagement.setPermissionDesc': '设置当前设备可以呼叫的设备',
'addressBookManagement.selectAll': '全选',
'addressBookManagement.deselectAll': '全不选',
// 通讯录管理页面 - 操作消息
'addressBookManagement.aliasSaved': '别名已保存',
'addressBookManagement.saveFailed': '保存失败',
'addressBookManagement.noChanges': '没有变更',
'addressBookManagement.permissionSaved': '权限已保存',
'addressBookManagement.partialSaveFailed': '部分权限保存失败',
'addressBookManagement.agentNameUpdated': '智能体名称已更新',
'addressBookManagement.updateFailed': '更新失败',
// 时间格式
'addressBookManagement.justNow': '刚刚',
'addressBookManagement.minutesAgo': '{minutes}分钟前',
'addressBookManagement.hoursAgo': '{hours}小时前',
'addressBookManagement.daysAgo': '{days}天前',
'addressBookManagement.monthsAgo': '{months}个月前',
'addressBookManagement.yearsAgo': '{years}年前',
}
+106
View File
@@ -1415,5 +1415,111 @@ export default {
'feature.vad.description': '自動檢測語音活動,優化語音交互的響應效率',
'feature.asr.name': '語音識別',
'feature.asr.description': '將語音轉換為文本,實現自然語言交互功能',
'feature.addressBook.name': '通訊錄',
'feature.addressBook.description': '管理和維護聯繫人通訊錄,為AI助手提供聯繫人信息支持',
// 通訊錄管理頁面
'addressBookManagement.title': '通訊錄',
'addressBookManagement.searchPlaceholder': '請輸入通訊錄名稱搜尋',
'addressBookManagement.search': '搜尋',
'addressBookManagement.name': '通訊錄名稱',
'addressBookManagement.description': '通訊錄描述',
'addressBookManagement.contactCount': '聯繫人數量',
'addressBookManagement.status': '啟用',
'addressBookManagement.createdAt': '創建時間',
'addressBookManagement.operation': '操作',
'addressBookManagement.add': '新增',
'addressBookManagement.edit': '編輯',
'addressBookManagement.delete': '刪除',
'addressBookManagement.itemsPerPage': '條/頁',
'addressBookManagement.firstPage': '首頁',
'addressBookManagement.prevPage': '上一頁',
'addressBookManagement.nextPage': '下一頁',
'addressBookManagement.totalRecords': '共{total}條記錄',
'addressBookManagement.addAddressBook': '新增通訊錄',
'addressBookManagement.editAddressBook': '編輯通訊錄',
'addressBookManagement.getAddressBookListFailed': '獲取通訊錄列表失敗',
'addressBookManagement.selectAddressBookFirst': '請先選擇需要刪除的通訊錄',
'addressBookManagement.confirmBatchDelete': '確定要刪除選中的{count}個通訊錄嗎?',
'addressBookManagement.batchDeleteSuccess': '成功刪除{count}個通訊錄',
'addressBookManagement.deleteFailed': '刪除失敗,請重試',
'addressBookManagement.operationCancelled': '已取消刪除操作',
'addressBookManagement.updateSuccess': '修改成功',
'addressBookManagement.addSuccess': '新增成功',
'addressBookManagement.updateFailed': '更新失敗',
'addressBookManagement.addFailed': '新增失敗',
'addressBookManagement.selectAll': '全選',
'addressBookManagement.cancelSelectAll': '取消全選',
'addressBookManagement.selectAgent': '請選擇智能體',
'addressBookManagement.deviceName': '設備名稱',
'addressBookManagement.deviceType': '設備類型',
'addressBookManagement.deviceId': '設備ID',
'addressBookManagement.remarks': '備註',
'addressBookManagement.addressBookDetail': '通訊錄詳情',
'addressBookManagement.addressBookName': '通訊錄名稱',
'addressBookManagement.addressBookNamePlaceholder': '請輸入通訊錄名稱',
'addressBookManagement.addressBookNameRequired': '請輸入通訊錄名稱',
'addressBookManagement.addressBookNameLength': '通訊錄名稱長度在1到50個字元之間',
'addressBookManagement.addressBookDesc': '通訊錄描述',
'addressBookManagement.addressBookDescPlaceholder': '請輸入通訊錄描述',
'addressBookManagement.remarksPlaceholder': '請輸入備註信息',
'addressBookManagement.selectDevice': '請選擇一個設備查看通訊錄詳情',
'addressBookManagement.save': '儲存',
'addressBookManagement.saveSuccess': '儲存成功',
'addressBookManagement.saveFailed': '儲存失敗',
'addressBookManagement.deviceNotSelected': '請先選擇一個設備',
'addressBookManagement.addDeviceTip': '新增設備功能開發中',
'addressBookManagement.selectAgentFirst': '請先選擇智能體',
// 通訊錄對話框
'addressBookDialog.title': '通訊錄',
'addressBookDialog.name': '通訊錄名稱',
'addressBookDialog.namePlaceholder': '請輸入通訊錄名稱',
'addressBookDialog.description': '通訊錄描述',
'addressBookDialog.descriptionPlaceholder': '請詳細輸入通訊錄描述',
'addressBookDialog.status': '狀態',
'addressBookDialog.save': '儲存',
'addressBookDialog.cancel': '取消',
'addressBookDialog.confirm': '確認',
'addressBookDialog.nameRequired': '請輸入通訊錄名稱',
'addressBookDialog.nameLength': '通訊錄名稱長度在1到50個字元之間',
'addressBookDialog.namePattern': '通訊錄名稱只能包含中文、英文、數字、空格、底線和連字符',
'addressBookDialog.descriptionRequired': '請輸入通訊錄描述',
'addressBookDialog.descriptionLength': '通訊錄描述不能超過300個字元',
// 頭部導航
'header.addressBook': '通訊錄',
// 通訊錄管理頁面 - 設備列表
'addressBookManagement.mainTitle': '通訊錄管理',
'addressBookManagement.subTitle': '管理設備通訊錄,設置設備名稱和呼叫權限',
'addressBookManagement.online': '在線',
'addressBookManagement.offline': '離線',
'addressBookManagement.macAddress': 'MAC地址',
'addressBookManagement.status': '狀態',
'addressBookManagement.deviceGroup': '設備分組',
'addressBookManagement.addTime': '添加時間',
'addressBookManagement.lastOnline': '最後在線',
'addressBookManagement.deviceCallPermission': '設備呼叫權限',
'addressBookManagement.setPermissionDesc': '設置當前設備可以呼叫的設備',
'addressBookManagement.selectAll': '全選',
'addressBookManagement.deselectAll': '全不選',
// 通訊錄管理頁面 - 操作消息
'addressBookManagement.aliasSaved': '別名已保存',
'addressBookManagement.saveFailed': '保存失敗',
'addressBookManagement.noChanges': '沒有變更',
'addressBookManagement.permissionSaved': '權限已保存',
'addressBookManagement.partialSaveFailed': '部分權限保存失敗',
'addressBookManagement.agentNameUpdated': '智能體名稱已更新',
'addressBookManagement.updateFailed': '更新失敗',
// 時間格式
'addressBookManagement.justNow': '剛剛',
'addressBookManagement.minutesAgo': '{minutes}分鐘前',
'addressBookManagement.hoursAgo': '{hours}小時前',
'addressBookManagement.daysAgo': '{days}天前',
'addressBookManagement.monthsAgo': '{months}個月前',
'addressBookManagement.yearsAgo': '{years}年前',
}
+13 -1
View File
@@ -208,6 +208,18 @@ const routes = [
title: '替换词管理'
}
},
// 通讯录管理页面路由
{
path: '/address-book-management',
name: 'AddressBookManagement',
component: function () {
return import('../views/AddressBookManagement.vue')
},
meta: {
requiresAuth: true,
title: '通讯录管理'
}
},
]
const router = new VueRouter({
base: process.env.VUE_APP_PUBLIC_PATH || '/',
@@ -229,7 +241,7 @@ VueRouter.prototype.push = function push(location) {
}
// 需要登录才能访问的路由
const protectedRoutes = ['home', 'RoleConfig', 'DeviceManagement', 'UserManagement', 'ModelConfig', 'KnowledgeBaseManagement', 'KnowledgeFileUpload']
const protectedRoutes = ['home', 'RoleConfig', 'DeviceManagement', 'UserManagement', 'ModelConfig', 'KnowledgeBaseManagement', 'KnowledgeFileUpload', 'AddressBookManagement']
// 路由守卫
router.beforeEach((to, from, next) => {
+8 -2
View File
@@ -34,6 +34,11 @@ class FeatureManager {
name: 'feature.asr.name',
enabled: false,
description: 'feature.asr.description'
},
addressBook: {
name: 'feature.addressBook.name',
enabled: false,
description: 'feature.addressBook.description'
}
};
this.currentFeatures = { ...this.defaultFeatures }; // 当前内存中的配置
@@ -220,7 +225,7 @@ class FeatureManager {
paramValue: JSON.stringify({
features: config,
groups: {
featureManagement: ["voiceprintRecognition", "voiceClone", "knowledgeBase", "mcpAccessPoint"],
featureManagement: ["voiceprintRecognition", "voiceClone", "knowledgeBase", "mcpAccessPoint", "addressBook"],
voiceManagement: ["vad", "asr"]
}
}),
@@ -264,7 +269,8 @@ class FeatureManager {
knowledgeBase: features.knowledgeBase?.enabled || false,
mcpAccessPoint: features.mcpAccessPoint?.enabled || false,
vad: features.vad?.enabled || false,
asr: features.asr?.enabled || false
asr: features.asr?.enabled || false,
addressBook: features.addressBook?.enabled || false
};
}
File diff suppressed because it is too large Load Diff
@@ -183,7 +183,7 @@ export default {
})
// 重新加载配置
this.featureManagementFeatures = await this.getFeaturesByIds(['voiceprintRecognition', 'voiceClone', 'knowledgeBase', 'mcpAccessPoint'])
this.featureManagementFeatures = await this.getFeaturesByIds(['voiceprintRecognition', 'voiceClone', 'knowledgeBase', 'mcpAccessPoint', 'addressBook'])
this.voiceManagementFeatures = await this.getFeaturesByIds(['vad', 'asr'])
// 恢复用户的选择状态(如果存在)