Merge pull request #3196 from xinnan-tech/py-device-calling
Py device calling
@@ -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();
|
||||
}
|
||||
};
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
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>
|
||||
@@ -209,16 +209,27 @@ export default {
|
||||
|
||||
// 功能状态
|
||||
featureStatus: {
|
||||
mcpAccessPoint: false
|
||||
mcpAccessPoint: false,
|
||||
addressBook: false
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
selectedList() {
|
||||
return this.allFunctions.filter(f => this.selectedNames.includes(f.name));
|
||||
const list = this.allFunctions.filter(f => this.selectedNames.includes(f.name));
|
||||
// 如果通讯录功能未启用,过滤掉设备呼叫设备插件
|
||||
if (!this.featureStatus.addressBook) {
|
||||
return list.filter(f => f.providerCode !== 'call_device');
|
||||
}
|
||||
return list;
|
||||
},
|
||||
unselected() {
|
||||
return this.allFunctions.filter(f => !this.selectedNames.includes(f.name));
|
||||
const list = this.allFunctions.filter(f => !this.selectedNames.includes(f.name));
|
||||
// 如果通讯录功能未启用,过滤掉设备呼叫设备插件
|
||||
if (!this.featureStatus.addressBook) {
|
||||
return list.filter(f => f.providerCode !== 'call_device');
|
||||
}
|
||||
return list;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -239,11 +250,23 @@ export default {
|
||||
}
|
||||
});
|
||||
},
|
||||
value(v) {
|
||||
async value(v) {
|
||||
this.dialogVisible = v;
|
||||
if (v) {
|
||||
// 加载功能状态(需要在初始化选中态之前)
|
||||
await this.loadFeatureStatus();
|
||||
|
||||
// 对话框打开时,初始化选中态
|
||||
this.selectedNames = this.functions.map(f => f.name);
|
||||
|
||||
// 如果通讯录功能未启用,从已选列表中移除设备呼叫设备插件
|
||||
if (!this.featureStatus.addressBook) {
|
||||
this.selectedNames = this.selectedNames.filter(name => {
|
||||
const func = this.allFunctions.find(f => f.name === name);
|
||||
return func && func.providerCode !== 'call_device';
|
||||
});
|
||||
}
|
||||
|
||||
// 把后端传来的 this.functions(带 params)merge 到 allFunctions 上
|
||||
this.functions.forEach(saved => {
|
||||
const idx = this.allFunctions.findIndex(f => f.name === saved.name);
|
||||
@@ -255,9 +278,6 @@ export default {
|
||||
// 右侧默认指向第一个
|
||||
this.currentFunction = this.selectedList[0] || null;
|
||||
|
||||
// 加载功能状态
|
||||
this.loadFeatureStatus();
|
||||
|
||||
// 加载MCP数据
|
||||
this.loadMcpAddress();
|
||||
this.loadMcpTools();
|
||||
@@ -274,10 +294,11 @@ export default {
|
||||
async loadFeatureStatus() {
|
||||
// 确保featureManager已初始化完成
|
||||
await featureManager.waitForInitialization();
|
||||
|
||||
|
||||
const config = featureManager.getConfig();
|
||||
this.featureStatus = {
|
||||
mcpAccessPoint: config.mcpAccessPoint || false
|
||||
mcpAccessPoint: config.mcpAccessPoint || false,
|
||||
addressBook: config.addressBook || false
|
||||
};
|
||||
},
|
||||
|
||||
@@ -413,7 +434,7 @@ export default {
|
||||
this.tempFunctions = {};
|
||||
this.hasSaved = true;
|
||||
|
||||
const selected = this.selectedList.map(f => {
|
||||
let selected = this.selectedList.map(f => {
|
||||
const modified = this.modifiedFunctions[f.name];
|
||||
return {
|
||||
id: f.id,
|
||||
@@ -424,6 +445,11 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
// 如果通讯录功能未启用,自动取消已选的设备呼叫设备插件
|
||||
if (!this.featureStatus.addressBook) {
|
||||
selected = selected.filter(f => f.providerCode !== 'call_device');
|
||||
}
|
||||
|
||||
this.$emit('update-functions', selected);
|
||||
this.dialogVisible = false;
|
||||
// 通知父组件对话框已关闭且已保存
|
||||
|
||||
@@ -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,
|
||||
}),
|
||||
@@ -658,7 +669,7 @@ export default {
|
||||
gap: 25px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
transform: translateX(calc(-50% - 80px));
|
||||
}
|
||||
|
||||
.header-right {
|
||||
|
||||
@@ -1415,5 +1415,112 @@ export default {
|
||||
'feature.vad.description': 'Sprachaktivität automatisch erkennen, um die Effizienz der Sprachiinteraktion zu optimieren',
|
||||
'feature.asr.name': 'Spracherkennung',
|
||||
'feature.asr.description': 'Sprache in Text umwandeln, um natürliche Sprachinteraktionsfunktionalität zu ermöglichen',
|
||||
'feature.addressBook.name': 'Adressbuch',
|
||||
'feature.addressBook.description': 'Kontakt-Adressbuch verwalten und pflegen, um Kontaktinformationen für KI-Assistenten bereitzustellen',
|
||||
|
||||
// Adressbuch Verwaltungsseite
|
||||
'addressBookManagement.title': 'Adressbuchverwaltung',
|
||||
'addressBookManagement.searchPlaceholder': 'Gerätename oder MAC-Adresse suchen',
|
||||
'addressBookManagement.search': 'Suchen',
|
||||
'addressBookManagement.selectAgent': 'Bitte Agent auswählen',
|
||||
'addressBookManagement.name': 'Adressbuchname',
|
||||
'addressBookManagement.description': 'Adressbuchbeschreibung',
|
||||
'addressBookManagement.contactCount': 'Kontaktanzahl',
|
||||
'addressBookManagement.status': 'Aktiviert',
|
||||
'addressBookManagement.createdAt': 'Erstellt am',
|
||||
'addressBookManagement.operation': 'Aktion',
|
||||
'addressBookManagement.add': 'Hinzufügen',
|
||||
'addressBookManagement.edit': 'Bearbeiten',
|
||||
'addressBookManagement.delete': 'Löschen',
|
||||
'addressBookManagement.itemsPerPage': 'Einträge/Seite',
|
||||
'addressBookManagement.firstPage': 'Erste',
|
||||
'addressBookManagement.prevPage': 'Vorherige',
|
||||
'addressBookManagement.nextPage': 'Nächste',
|
||||
'addressBookManagement.totalRecords': '{total} Einträge insgesamt',
|
||||
'addressBookManagement.addAddressBook': 'Adressbuch hinzufügen',
|
||||
'addressBookManagement.editAddressBook': 'Adressbuch bearbeiten',
|
||||
'addressBookManagement.getAddressBookListFailed': 'Adressbuchliste konnte nicht geladen werden',
|
||||
'addressBookManagement.selectAddressBookFirst': 'Bitte zuerst Adressbücher zum Löschen auswählen',
|
||||
'addressBookManagement.confirmBatchDelete': 'Möchten Sie {count} ausgewählte Adressbücher wirklich löschen?',
|
||||
'addressBookManagement.batchDeleteSuccess': '{count} Adressbücher erfolgreich gelöscht',
|
||||
'addressBookManagement.deleteFailed': 'Löschen fehlgeschlagen, bitte versuchen Sie es erneut',
|
||||
'addressBookManagement.operationCancelled': 'Löschvorgang abgebrochen',
|
||||
'addressBookManagement.updateSuccess': 'Aktualisierung erfolgreich',
|
||||
'addressBookManagement.addSuccess': 'Erfolgreich hinzugefügt',
|
||||
'addressBookManagement.updateFailed': 'Aktualisierung fehlgeschlagen',
|
||||
'addressBookManagement.addFailed': 'Hinzufügen fehlgeschlagen',
|
||||
'addressBookManagement.selectAll': 'Alle auswählen',
|
||||
'addressBookManagement.cancelSelectAll': 'Alle abwählen',
|
||||
'addressBookManagement.deviceName': 'Gerätename',
|
||||
'addressBookManagement.deviceType': 'Gerätetyp',
|
||||
'addressBookManagement.deviceId': 'Geräte-ID',
|
||||
'addressBookManagement.remarks': 'Bemerkungen',
|
||||
'addressBookManagement.addressBookDetail': 'Adressbuchdetails',
|
||||
'addressBookManagement.addressBookName': 'Adressbuchname',
|
||||
'addressBookManagement.addressBookNamePlaceholder': 'Bitte Adressbuchnamen eingeben',
|
||||
'addressBookManagement.addressBookNameRequired': 'Bitte Adressbuchnamen eingeben',
|
||||
'addressBookManagement.addressBookNameLength': 'Adressbuchname muss zwischen 1 und 50 Zeichen lang sein',
|
||||
'addressBookManagement.addressBookDesc': 'Adressbuchbeschreibung',
|
||||
'addressBookManagement.addressBookDescPlaceholder': 'Bitte Adressbuchbeschreibung eingeben',
|
||||
'addressBookManagement.remarksPlaceholder': 'Bitte Bemerkungen eingeben',
|
||||
'addressBookManagement.selectDevice': 'Bitte ein Gerät auswählen, um Adressbuchdetails anzuzeigen',
|
||||
'addressBookManagement.save': 'Speichern',
|
||||
'addressBookManagement.saveSuccess': 'Speichern erfolgreich',
|
||||
'addressBookManagement.saveFailed': 'Speichern fehlgeschlagen',
|
||||
'addressBookManagement.deviceNotSelected': 'Bitte zuerst ein Gerät auswählen',
|
||||
'addressBookManagement.addDeviceTip': 'Gerät hinzufügen Funktion ist in Entwicklung',
|
||||
'addressBookManagement.selectAgentFirst': 'Bitte zuerst einen Agent auswählen',
|
||||
|
||||
// Adressbuch Dialog
|
||||
'addressBookDialog.title': 'Adressbuch',
|
||||
'addressBookDialog.name': 'Adressbuchname',
|
||||
'addressBookDialog.namePlaceholder': 'Bitte Adressbuchnamen eingeben',
|
||||
'addressBookDialog.description': 'Adressbuchbeschreibung',
|
||||
'addressBookDialog.descriptionPlaceholder': 'Bitte detaillierte Adressbuchbeschreibung eingeben',
|
||||
'addressBookDialog.status': 'Status',
|
||||
'addressBookDialog.save': 'Speichern',
|
||||
'addressBookDialog.cancel': 'Abbrechen',
|
||||
'addressBookDialog.confirm': 'Bestätigen',
|
||||
'addressBookDialog.nameRequired': 'Bitte Adressbuchnamen eingeben',
|
||||
'addressBookDialog.nameLength': 'Adressbuchname muss zwischen 1 und 50 Zeichen lang sein',
|
||||
'addressBookDialog.namePattern': 'Adressbuchname darf nur Buchstaben, Zahlen, Leerzeichen, Unterstriche und Bindestriche enthalten',
|
||||
'addressBookDialog.descriptionRequired': 'Bitte Adressbuchbeschreibung eingeben',
|
||||
'addressBookDialog.descriptionLength': 'Adressbuchbeschreibung darf 300 Zeichen nicht überschreiten',
|
||||
|
||||
// Adressbuch Verwaltungsseite - Geräteliste
|
||||
'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': 'Zugeordneter Agent',
|
||||
'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 ({count} ausgewählt)',
|
||||
'addressBookManagement.selectAll': 'Alle auswählen',
|
||||
'addressBookManagement.deselectAll': 'Alle abwählen',
|
||||
'addressBookManagement.save': 'Berechtigungen speichern',
|
||||
|
||||
// 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',
|
||||
|
||||
}
|
||||
@@ -1415,5 +1415,112 @@ export default {
|
||||
'feature.vad.description': 'Automatically detect voice activity to optimize voice interaction response efficiency',
|
||||
'feature.asr.name': 'Speech Recognition',
|
||||
'feature.asr.description': 'Convert speech to text to enable natural language interaction functionality',
|
||||
'feature.addressBook.name': 'Address Book',
|
||||
'feature.addressBook.description': 'Manage and maintain contact address book to provide contact information support for AI assistant',
|
||||
|
||||
// Address Book Management page
|
||||
'addressBookManagement.title': 'Address Book Management',
|
||||
'addressBookManagement.searchPlaceholder': 'Search device name or MAC address',
|
||||
'addressBookManagement.search': 'Search',
|
||||
'addressBookManagement.selectAgent': 'Please select agent',
|
||||
'addressBookManagement.name': 'Address Book Name',
|
||||
'addressBookManagement.description': 'Address Book Description',
|
||||
'addressBookManagement.contactCount': 'Contact Count',
|
||||
'addressBookManagement.status': 'Enabled',
|
||||
'addressBookManagement.createdAt': 'Created Time',
|
||||
'addressBookManagement.operation': 'Operation',
|
||||
'addressBookManagement.add': 'Add',
|
||||
'addressBookManagement.edit': 'Edit',
|
||||
'addressBookManagement.delete': 'Delete',
|
||||
'addressBookManagement.itemsPerPage': 'items/page',
|
||||
'addressBookManagement.firstPage': 'First',
|
||||
'addressBookManagement.prevPage': 'Previous',
|
||||
'addressBookManagement.nextPage': 'Next',
|
||||
'addressBookManagement.totalRecords': '{total} records in total',
|
||||
'addressBookManagement.addAddressBook': 'Add Address Book',
|
||||
'addressBookManagement.editAddressBook': 'Edit Address Book',
|
||||
'addressBookManagement.getAddressBookListFailed': 'Failed to get address book list',
|
||||
'addressBookManagement.selectAddressBookFirst': 'Please select address books to delete first',
|
||||
'addressBookManagement.confirmBatchDelete': 'Are you sure to delete {count} selected address books?',
|
||||
'addressBookManagement.batchDeleteSuccess': 'Successfully deleted {count} address books',
|
||||
'addressBookManagement.deleteFailed': 'Delete failed, please try again',
|
||||
'addressBookManagement.operationCancelled': 'Delete operation cancelled',
|
||||
'addressBookManagement.updateSuccess': 'Update successful',
|
||||
'addressBookManagement.addSuccess': 'Add successful',
|
||||
'addressBookManagement.updateFailed': 'Update failed',
|
||||
'addressBookManagement.addFailed': 'Add failed',
|
||||
'addressBookManagement.selectAll': 'Select All',
|
||||
'addressBookManagement.cancelSelectAll': 'Deselect All',
|
||||
'addressBookManagement.deviceName': 'Device Name',
|
||||
'addressBookManagement.deviceType': 'Device Type',
|
||||
'addressBookManagement.deviceId': 'Device ID',
|
||||
'addressBookManagement.remarks': 'Remarks',
|
||||
'addressBookManagement.addressBookDetail': 'Address Book Detail',
|
||||
'addressBookManagement.addressBookName': 'Address Book Name',
|
||||
'addressBookManagement.addressBookNamePlaceholder': 'Please enter address book name',
|
||||
'addressBookManagement.addressBookNameRequired': 'Please enter address book name',
|
||||
'addressBookManagement.addressBookNameLength': 'Address book name must be between 1 and 50 characters',
|
||||
'addressBookManagement.addressBookDesc': 'Address Book Description',
|
||||
'addressBookManagement.addressBookDescPlaceholder': 'Please enter address book description',
|
||||
'addressBookManagement.remarksPlaceholder': 'Please enter remarks',
|
||||
'addressBookManagement.selectDevice': 'Please select a device to view address book details',
|
||||
'addressBookManagement.save': 'Save',
|
||||
'addressBookManagement.saveSuccess': 'Save successful',
|
||||
'addressBookManagement.saveFailed': 'Save failed',
|
||||
'addressBookManagement.deviceNotSelected': 'Please select a device first',
|
||||
'addressBookManagement.addDeviceTip': 'Add device feature is under development',
|
||||
'addressBookManagement.selectAgentFirst': 'Please select an agent first',
|
||||
|
||||
// Address Book Dialog
|
||||
'addressBookDialog.title': 'Address Book',
|
||||
'addressBookDialog.name': 'Address Book Name',
|
||||
'addressBookDialog.namePlaceholder': 'Please enter address book name',
|
||||
'addressBookDialog.description': 'Address Book Description',
|
||||
'addressBookDialog.descriptionPlaceholder': 'Please enter address book description in detail',
|
||||
'addressBookDialog.status': 'Status',
|
||||
'addressBookDialog.save': 'Save',
|
||||
'addressBookDialog.cancel': 'Cancel',
|
||||
'addressBookDialog.confirm': 'Confirm',
|
||||
'addressBookDialog.nameRequired': 'Please enter address book name',
|
||||
'addressBookDialog.nameLength': 'Address book name must be between 1 and 50 characters',
|
||||
'addressBookDialog.namePattern': 'Address book name can only contain letters, numbers, spaces, underscores and hyphens',
|
||||
'addressBookDialog.descriptionRequired': 'Please enter address book description',
|
||||
'addressBookDialog.descriptionLength': 'Address book description cannot exceed 300 characters',
|
||||
|
||||
// Address Book Management page - Device List
|
||||
'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': 'Assigned Agent',
|
||||
'addressBookManagement.addTime': 'Added Time',
|
||||
'addressBookManagement.lastOnline': 'Last Online',
|
||||
'addressBookManagement.deviceCallPermission': 'Device Call Permission',
|
||||
'addressBookManagement.setPermissionDesc': 'Set which devices the current device can call ({count} selected)',
|
||||
'addressBookManagement.selectAll': 'Select All',
|
||||
'addressBookManagement.deselectAll': 'Deselect All',
|
||||
'addressBookManagement.save': 'Save Permissions',
|
||||
|
||||
// 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',
|
||||
|
||||
}
|
||||
@@ -1415,5 +1415,112 @@ export default {
|
||||
'feature.vad.description': 'Detectar automaticamente atividade de voz para otimizar a eficiência de resposta da interação por voz',
|
||||
'feature.asr.name': 'Reconhecimento de Fala',
|
||||
'feature.asr.description': 'Converter fala em texto para habilitar a funcionalidade de interação por linguagem natural',
|
||||
'feature.addressBook.name': 'Lista de Contatos',
|
||||
'feature.addressBook.description': 'Gerenciar e manter lista de contatos para fornecer suporte de informações de contato para assistente de IA',
|
||||
|
||||
}
|
||||
// Página de Gerenciamento de Lista de Contatos
|
||||
'addressBookManagement.title': 'Gerenciamento de Lista de Contatos',
|
||||
'addressBookManagement.searchPlaceholder': 'Pesquisar nome do dispositivo ou endereço MAC',
|
||||
'addressBookManagement.search': 'Pesquisar',
|
||||
'addressBookManagement.selectAgent': 'Selecione um agente',
|
||||
'addressBookManagement.name': 'Nome da Lista de Contatos',
|
||||
'addressBookManagement.description': 'Descrição da Lista de Contatos',
|
||||
'addressBookManagement.contactCount': 'Número de Contatos',
|
||||
'addressBookManagement.status': 'Ativo',
|
||||
'addressBookManagement.createdAt': 'Data de Criação',
|
||||
'addressBookManagement.operation': 'Operação',
|
||||
'addressBookManagement.add': 'Adicionar',
|
||||
'addressBookManagement.edit': 'Editar',
|
||||
'addressBookManagement.delete': 'Excluir',
|
||||
'addressBookManagement.itemsPerPage': 'itens/página',
|
||||
'addressBookManagement.firstPage': 'Primeira',
|
||||
'addressBookManagement.prevPage': 'Anterior',
|
||||
'addressBookManagement.nextPage': 'Próxima',
|
||||
'addressBookManagement.totalRecords': '{total} registros no total',
|
||||
'addressBookManagement.addAddressBook': 'Adicionar Lista de Contatos',
|
||||
'addressBookManagement.editAddressBook': 'Editar Lista de Contatos',
|
||||
'addressBookManagement.getAddressBookListFailed': 'Falha ao obter lista de contatos',
|
||||
'addressBookManagement.selectAddressBookFirst': 'Selecione as listas de contatos para excluir primeiro',
|
||||
'addressBookManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir {count} listas de contatos selecionadas?',
|
||||
'addressBookManagement.batchDeleteSuccess': '{count} listas de contatos excluídas com sucesso',
|
||||
'addressBookManagement.deleteFailed': 'Falha ao excluir, tente novamente',
|
||||
'addressBookManagement.operationCancelled': 'Operação de exclusão cancelada',
|
||||
'addressBookManagement.updateSuccess': 'Atualização bem-sucedida',
|
||||
'addressBookManagement.addSuccess': 'Adição bem-sucedida',
|
||||
'addressBookManagement.updateFailed': 'Falha na atualização',
|
||||
'addressBookManagement.addFailed': 'Falha ao adicionar',
|
||||
'addressBookManagement.selectAll': 'Selecionar Todos',
|
||||
'addressBookManagement.cancelSelectAll': 'Desmarcar Todos',
|
||||
'addressBookManagement.deviceName': 'Nome do Dispositivo',
|
||||
'addressBookManagement.deviceType': 'Tipo do Dispositivo',
|
||||
'addressBookManagement.deviceId': 'ID do Dispositivo',
|
||||
'addressBookManagement.remarks': 'Observações',
|
||||
'addressBookManagement.addressBookDetail': 'Detalhes da Lista de Contatos',
|
||||
'addressBookManagement.addressBookName': 'Nome da Lista de Contatos',
|
||||
'addressBookManagement.addressBookNamePlaceholder': 'Digite o nome da lista de contatos',
|
||||
'addressBookManagement.addressBookNameRequired': 'Digite o nome da lista de contatos',
|
||||
'addressBookManagement.addressBookNameLength': 'O nome da lista de contatos deve ter entre 1 e 50 caracteres',
|
||||
'addressBookManagement.addressBookDesc': 'Descrição da Lista de Contatos',
|
||||
'addressBookManagement.addressBookDescPlaceholder': 'Digite a descrição da lista de contatos',
|
||||
'addressBookManagement.remarksPlaceholder': 'Digite as observações',
|
||||
'addressBookManagement.selectDevice': 'Selecione um dispositivo para ver os detalhes da lista de contatos',
|
||||
'addressBookManagement.save': 'Salvar',
|
||||
'addressBookManagement.saveSuccess': 'Salvo com sucesso',
|
||||
'addressBookManagement.saveFailed': 'Falha ao salvar',
|
||||
'addressBookManagement.deviceNotSelected': 'Selecione um dispositivo primeiro',
|
||||
'addressBookManagement.addDeviceTip': 'Recurso de adicionar dispositivo em desenvolvimento',
|
||||
'addressBookManagement.selectAgentFirst': 'Selecione um agente primeiro',
|
||||
|
||||
// Diálogo da Lista de Contatos
|
||||
'addressBookDialog.title': 'Lista de Contatos',
|
||||
'addressBookDialog.name': 'Nome da Lista de Contatos',
|
||||
'addressBookDialog.namePlaceholder': 'Digite o nome da lista de contatos',
|
||||
'addressBookDialog.description': 'Descrição da Lista de Contatos',
|
||||
'addressBookDialog.descriptionPlaceholder': 'Digite a descrição detalhada da lista de contatos',
|
||||
'addressBookDialog.status': 'Status',
|
||||
'addressBookDialog.save': 'Salvar',
|
||||
'addressBookDialog.cancel': 'Cancelar',
|
||||
'addressBookDialog.confirm': 'Confirmar',
|
||||
'addressBookDialog.nameRequired': 'Digite o nome da lista de contatos',
|
||||
'addressBookDialog.nameLength': 'O nome da lista de contatos deve ter entre 1 e 50 caracteres',
|
||||
'addressBookDialog.namePattern': 'O nome da lista de contatos pode conter apenas letras, números, espaços, sublinhados e hifens',
|
||||
'addressBookDialog.descriptionRequired': 'Digite a descrição da lista de contatos',
|
||||
'addressBookDialog.descriptionLength': 'A descrição da lista de contatos não pode exceder 300 caracteres',
|
||||
|
||||
// Página de Gerenciamento de Lista de Contatos - Lista de Dispositivos
|
||||
'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': 'Agente Vinculado',
|
||||
'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 ({count} selecionados)',
|
||||
'addressBookManagement.selectAll': 'Selecionar Todos',
|
||||
'addressBookManagement.deselectAll': 'Desmarcar Todos',
|
||||
'addressBookManagement.save': 'Salvar Permissões',
|
||||
|
||||
// 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',
|
||||
|
||||
}
|
||||
@@ -1415,5 +1415,112 @@ export default {
|
||||
'feature.vad.description': 'Tự động phát hiện hoạt động giọng nói, tối ưu hóa hiệu suất phản hồi tương tác giọng nói',
|
||||
'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',
|
||||
'feature.addressBook.name': 'Danh bạ',
|
||||
'feature.addressBook.description': 'Quản lý và duy trì danh bạ liên lạc để cung cấp hỗ trợ thông tin liên lạc cho trợ lý AI',
|
||||
|
||||
// Trang quản lý danh bạ
|
||||
'addressBookManagement.title': 'Quản lý danh bạ',
|
||||
'addressBookManagement.searchPlaceholder': 'Tìm kiếm tên thiết bị hoặc địa chỉ MAC',
|
||||
'addressBookManagement.search': 'Tìm kiếm',
|
||||
'addressBookManagement.selectAgent': 'Vui lòng chọn tác tử',
|
||||
'addressBookManagement.name': 'Tên danh bạ',
|
||||
'addressBookManagement.description': 'Mô tả danh bạ',
|
||||
'addressBookManagement.contactCount': 'Số liên hệ',
|
||||
'addressBookManagement.status': 'Kích hoạt',
|
||||
'addressBookManagement.createdAt': 'Thời gian tạo',
|
||||
'addressBookManagement.operation': 'Thao tác',
|
||||
'addressBookManagement.add': 'Thêm',
|
||||
'addressBookManagement.edit': 'Sửa',
|
||||
'addressBookManagement.delete': 'Xóa',
|
||||
'addressBookManagement.itemsPerPage': 'mục/trang',
|
||||
'addressBookManagement.firstPage': 'Đầu',
|
||||
'addressBookManagement.prevPage': 'Trước',
|
||||
'addressBookManagement.nextPage': 'Tiếp',
|
||||
'addressBookManagement.totalRecords': 'Tổng {total} bản ghi',
|
||||
'addressBookManagement.addAddressBook': 'Thêm danh bạ',
|
||||
'addressBookManagement.editAddressBook': 'Sửa danh bạ',
|
||||
'addressBookManagement.getAddressBookListFailed': 'Lấy danh sách danh bạ thất bại',
|
||||
'addressBookManagement.selectAddressBookFirst': 'Vui lòng chọn danh bạ cần xóa trước',
|
||||
'addressBookManagement.confirmBatchDelete': 'Bạn có chắc muốn xóa {count} danh bạ đã chọn?',
|
||||
'addressBookManagement.batchDeleteSuccess': 'Đã xóa thành công {count} danh bạ',
|
||||
'addressBookManagement.deleteFailed': 'Xóa thất bại, vui lòng thử lại',
|
||||
'addressBookManagement.operationCancelled': 'Đã hủy thao tác xóa',
|
||||
'addressBookManagement.updateSuccess': 'Cập nhật thành công',
|
||||
'addressBookManagement.addSuccess': 'Thêm thành công',
|
||||
'addressBookManagement.updateFailed': 'Cập nhật thất bại',
|
||||
'addressBookManagement.addFailed': 'Thêm thất bại',
|
||||
'addressBookManagement.selectAll': 'Chọn tất cả',
|
||||
'addressBookManagement.cancelSelectAll': 'Bỏ chọn tất cả',
|
||||
'addressBookManagement.deviceName': 'Tên thiết bị',
|
||||
'addressBookManagement.deviceType': 'Loại thiết bị',
|
||||
'addressBookManagement.deviceId': 'ID thiết bị',
|
||||
'addressBookManagement.remarks': 'Ghi chú',
|
||||
'addressBookManagement.addressBookDetail': 'Chi tiết danh bạ',
|
||||
'addressBookManagement.addressBookName': 'Tên danh bạ',
|
||||
'addressBookManagement.addressBookNamePlaceholder': 'Vui lòng nhập tên danh bạ',
|
||||
'addressBookManagement.addressBookNameRequired': 'Vui lòng nhập tên danh bạ',
|
||||
'addressBookManagement.addressBookNameLength': 'Tên danh bạ phải từ 1 đến 50 ký tự',
|
||||
'addressBookManagement.addressBookDesc': 'Mô tả danh bạ',
|
||||
'addressBookManagement.addressBookDescPlaceholder': 'Vui lòng nhập mô tả danh bạ',
|
||||
'addressBookManagement.remarksPlaceholder': 'Vui lòng nhập ghi chú',
|
||||
'addressBookManagement.selectDevice': 'Vui lòng chọn thiết bị để xem chi tiết danh bạ',
|
||||
'addressBookManagement.save': 'Lưu',
|
||||
'addressBookManagement.saveSuccess': 'Lưu thành công',
|
||||
'addressBookManagement.saveFailed': 'Lưu thất bại',
|
||||
'addressBookManagement.deviceNotSelected': 'Vui lòng chọn thiết bị trước',
|
||||
'addressBookManagement.addDeviceTip': 'Tính năng thêm thiết bị đang phát triển',
|
||||
'addressBookManagement.selectAgentFirst': 'Vui lòng chọn tác tử trước',
|
||||
|
||||
// Hộp thoại danh bạ
|
||||
'addressBookDialog.title': 'Danh bạ',
|
||||
'addressBookDialog.name': 'Tên danh bạ',
|
||||
'addressBookDialog.namePlaceholder': 'Vui lòng nhập tên danh bạ',
|
||||
'addressBookDialog.description': 'Mô tả danh bạ',
|
||||
'addressBookDialog.descriptionPlaceholder': 'Vui lòng nhập mô tả danh bạ chi tiết',
|
||||
'addressBookDialog.status': 'Trạng thái',
|
||||
'addressBookDialog.save': 'Lưu',
|
||||
'addressBookDialog.cancel': 'Hủy',
|
||||
'addressBookDialog.confirm': 'Xác nhận',
|
||||
'addressBookDialog.nameRequired': 'Vui lòng nhập tên danh bạ',
|
||||
'addressBookDialog.nameLength': 'Tên danh bạ phải từ 1 đến 50 ký tự',
|
||||
'addressBookDialog.namePattern': 'Tên danh bạ chỉ được chứa chữ cái, số, dấu cách, dấu gạch dưới và dấu gạch ngang',
|
||||
'addressBookDialog.descriptionRequired': 'Vui lòng nhập mô tả danh bạ',
|
||||
'addressBookDialog.descriptionLength': 'Mô tả danh bạ không được vượt quá 300 ký tự',
|
||||
|
||||
// Trang quản lý danh bạ - Danh sách thiết bị
|
||||
'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': 'Tác tử sở hữu',
|
||||
'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 ({count} đã chọn)',
|
||||
'addressBookManagement.selectAll': 'Chọn tất cả',
|
||||
'addressBookManagement.deselectAll': 'Bỏ chọn tất cả',
|
||||
'addressBookManagement.save': 'Lưu quyền',
|
||||
|
||||
// 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ạ',
|
||||
|
||||
}
|
||||
@@ -362,6 +362,8 @@ export default {
|
||||
'replacementWordManagement.edit': '编辑',
|
||||
'replacementWordManagement.download': '下载',
|
||||
'replacementWordManagement.delete': '删除',
|
||||
|
||||
// 替换词对话框相关
|
||||
'replacementDialog.fileName': '文件名称',
|
||||
'replacementDialog.fileNamePlaceholder': '请输入文件名称',
|
||||
'replacementDialog.content': '替换词内容',
|
||||
@@ -1413,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': '搜索设备名称或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': '设置当前设备可以呼叫的设备({count}台)',
|
||||
'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}年前',
|
||||
|
||||
}
|
||||
@@ -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': '設置當前設備可以呼叫的設備({count}台)',
|
||||
'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}年前',
|
||||
|
||||
}
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
@@ -326,6 +332,9 @@ class FeatureManager {
|
||||
Object.keys(featureUpdates).forEach(featureKey => {
|
||||
if (features[featureKey]) {
|
||||
features[featureKey].enabled = featureUpdates[featureKey];
|
||||
} else if (this.defaultFeatures[featureKey]) {
|
||||
features[featureKey] = { ...this.defaultFeatures[featureKey] };
|
||||
features[featureKey].enabled = featureUpdates[featureKey];
|
||||
}
|
||||
});
|
||||
this.saveConfig(features);
|
||||
|
||||
@@ -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'])
|
||||
|
||||
// 恢复用户的选择状态(如果存在)
|
||||
|
||||