添加国际化的功能,调整页面

This commit is contained in:
LiJinHui
2025-09-18 16:43:52 +08:00
parent a199e47701
commit 6a8c4ccbf8
6 changed files with 327 additions and 83 deletions
@@ -1,8 +1,14 @@
<template>
<el-dialog :title="title" :visible.sync="visible" width="60%" @close="handleClose">
<el-form ref="templateForm" :model="templateData" label-width="120px" :rules="rules">
<el-form-item label="模板名称" prop="agentName">
<el-input v-model="templateData.agentName" placeholder="请输入模板名称" />
<el-form-item :label="$t('agentTemplateManagement.templateDialog.templateName')" prop="agentName">
<el-input v-model="templateData.agentName" :placeholder="$t('agentTemplateManagement.templateDialog.templateNamePlaceholder')" />
</el-form-item>
<el-form-item :label="$t('agentTemplateManagement.templateDialog.description')" prop="description">
<el-input v-model="templateData.description" :placeholder="$t('agentTemplateManagement.templateDialog.descriptionPlaceholder')" />
</el-form-item>
<el-form-item :label="$t('agentTemplateManagement.templateDialog.roleName')" prop="roleName">
<el-input v-model="templateData.roleName" :placeholder="$t('agentTemplateManagement.templateDialog.roleNamePlaceholder')" />
</el-form-item>
<el-form-item label="语言编码" prop="langCode">
<el-input v-model="templateData.langCode" placeholder="请输入语言编码,如zh-CN" />
@@ -20,8 +26,8 @@
<el-option label="记录文本和语音" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="角色设定参数" prop="systemPrompt">
<el-input v-model="templateData.systemPrompt" type="textarea" placeholder="请输入角色设定参数" :rows="4" />
<el-form-item :label="$t('agentTemplateManagement.templateDialog.systemPrompt')" prop="systemPrompt">
<el-input v-model="templateData.systemPrompt" type="textarea" :placeholder="$t('agentTemplateManagement.templateDialog.systemPromptPlaceholder')" :rows="4" />
<div class="form-tip">角色设定参数将作为智能体的系统提示定义智能体的行为和回答风格</div>
</el-form-item>
<el-form-item label="总结记忆" prop="summaryMemory">
@@ -30,8 +36,8 @@
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleSave">确定</el-button>
<el-button @click="handleClose">{{ $t('agentTemplateManagement.templateDialog.cancel') }}</el-button>
<el-button type="primary" @click="handleSave">{{ $t('agentTemplateManagement.templateDialog.save') }}</el-button>
</div>
</el-dialog>
</template>
@@ -58,18 +64,13 @@ export default {
// 表单验证规则
rules: {
agentName: [
{ required: true, message: '请输入模板名称', trigger: 'blur' },
{ min: 2, max: 50, message: '模板名称长度在 2 到 50 个字符', trigger: 'blur' }
{ required: true, message: this.$t('agentTemplateManagement.templateDialog.nameRequired'), trigger: 'blur' }
],
langCode: [
{ required: true, message: '请输入语言编码', trigger: 'blur' }
],
language: [
{ required: true, message: '请输入交互语种', trigger: 'blur' }
roleName: [
{ required: true, message: this.$t('agentTemplateManagement.templateDialog.roleNameRequired'), trigger: 'blur' }
],
systemPrompt: [
{ required: true, message: '请输入角色设定参数', trigger: 'blur' },
{ min: 10, message: '角色设定参数至少需要 10 个字符', trigger: 'blur' }
{ required: true, message: this.$t('agentTemplateManagement.templateDialog.systemPromptRequired'), trigger: 'blur' }
]
}
}
+70
View File
@@ -824,4 +824,74 @@ export default {
'providerDialog.selectFieldsToDelete': 'Please select fields to delete first',
'providerDialog.confirmBatchDeleteFields': 'Are you sure to delete {count} selected fields?',
'providerDialog.batchDeleteFieldsSuccess': 'Successfully deleted {count} fields',
// ...existing code ...
agentTemplateManagement: {
title: 'Default Role Management',
templateName: 'Template Name',
description: 'Description',
createTime: 'Creation Time',
action: 'Action',
createTemplate: 'Create Template',
editTemplate: 'Edit Template',
deleteTemplate: 'Delete Template',
deleteSuccess: 'Template deleted successfully',
confirmDelete: 'Are you sure you want to delete the selected templates?',
batchDelete: 'Batch Delete',
batchDeleteSuccess: 'Batch deletion successful',
selectTemplate: 'Please select a template',
select: 'Select',
searchPlaceholder: 'Please enter template name to search',
search: 'Search',
serialNumber: 'Serial Number',
selectAll: 'Select All',
deselectAll: 'Deselect All',
templateDialog: {
title: 'Template Configuration',
templateName: 'Template Name',
templateNamePlaceholder: 'Please enter template name',
description: 'Description',
descriptionPlaceholder: 'Please enter description',
roleName: 'Role Name',
roleNamePlaceholder: 'Please enter role name',
avatar: 'Avatar',
selectAvatar: 'Select Avatar',
systemPrompt: 'System Prompt',
systemPromptPlaceholder: 'Please enter system prompt',
modelConfig: 'Model Configuration',
modelName: 'Model Name',
temperature: 'Temperature',
topP: 'Top P',
maxTokens: 'Max Tokens',
save: 'Save',
cancel: 'Cancel',
nameRequired: 'Please enter template name',
roleNameRequired: 'Please enter role name',
systemPromptRequired: 'Please enter system prompt'
}
},
templateQuickConfig: {
title: 'Module Quick Configuration',
basicSettings: 'Basic Settings',
agentSettings: {
agentName: 'Nickname',
agentNamePlaceholder: 'Please enter nickname',
systemPrompt: 'Introduction',
systemPromptPlaceholder: 'Please enter introduction'
},
modelSettings: 'Model Settings',
voiceSettings: 'Voice Settings',
serviceSettings: 'Service Settings',
deviceSettings: 'Device Settings',
pluginSettings: 'Plugin Settings',
saveConfig: 'Save Configuration',
resetConfig: 'Reset Configuration',
configSaved: 'Configuration saved successfully',
configReset: 'Configuration has been reset',
confirmReset: 'Are you sure you want to reset the configuration?',
success: 'Success',
error: 'Error',
warning: 'Warning',
info: 'Info'
}
};
+74 -2
View File
@@ -385,7 +385,7 @@ export default {
'dictManagement.dictValue': '字典值',
'dictManagement.sort': '排序',
'dictManagement.delete': '删除',
'dictManagement.selectAll': '全选',
'dictManagement.selectAll': '默认角色管理',
'dictManagement.deselectAll': '取消全选',
'dictManagement.addDictType': '新增字典类型',
'dictManagement.batchDeleteDictType': '批量删除字典类型',
@@ -825,4 +825,76 @@ export default {
'providerDialog.selectFieldsToDelete': '请先选择要删除的字段',
'providerDialog.confirmBatchDeleteFields': '确定要删除选中的{count}个字段吗?',
'providerDialog.batchDeleteFieldsSuccess': '成功删除{count}个字段',
};
// 默认角色模版和模版快速配置页面
// 在agentTemplateManagement对象中添加
agentTemplateManagement: {
title: '默认角色管理',
templateName: '模板名称',
description: '模板描述',
createTime: '创建时间',
action: '操作',
createTemplate: '创建模板',
editTemplate: '编辑模板',
deleteTemplate: '删除模板',
deleteSuccess: '模板删除成功',
confirmDelete: '确定要删除选中的模板吗?',
batchDelete: '批量删除',
batchDeleteSuccess: '批量删除成功',
selectTemplate: '请选择模板',
select: '选择',
searchPlaceholder: '请输入模板名称搜索',
search: '搜索',
serialNumber: '序号',
selectAll: '全选',
deselectAll: '取消全选',
templateDialog: {
title: '模板配置',
templateName: '模板名称',
templateNamePlaceholder: '请输入模板名称',
description: '模板描述',
descriptionPlaceholder: '请输入模板描述',
roleName: '角色名称',
roleNamePlaceholder: '请输入角色名称',
avatar: '头像',
selectAvatar: '选择头像',
systemPrompt: '系统提示词',
systemPromptPlaceholder: '请输入系统提示词',
modelConfig: '模型配置',
modelName: '模型名称',
temperature: '温度',
topP: 'Top P',
maxTokens: '最大 tokens',
save: '保存',
cancel: '取消',
nameRequired: '请输入模板名称',
roleNameRequired: '请输入角色名称',
systemPromptRequired: '请输入系统提示词'
}
},
templateQuickConfig: {
title: '模块快速配置',
basicSettings: '基本设置',
agentSettings: '助手昵称',
agentSettings: {
agentName: '助手昵称',
agentNamePlaceholder: '请输入助手昵称',
systemPrompt: '角色介绍',
systemPromptPlaceholder: '请输入角色介绍'
},
modelSettings: '模型设置',
voiceSettings: '语音设置',
serviceSettings: '服务设置',
deviceSettings: '设备设置',
pluginSettings: '插件设置',
saveConfig: '保存配置',
resetConfig: '重置配置',
configSaved: '配置保存成功',
configReset: '配置已重置',
confirmReset: '确定要重置配置吗?',
success: '成功',
error: '错误',
warning: '警告',
info: '提示'
}
}
+70 -1
View File
@@ -824,4 +824,73 @@ export default {
'providerDialog.selectFieldsToDelete': '請先選擇要刪除的字段',
'providerDialog.confirmBatchDeleteFields': '確定要刪除選中的{count}個字段嗎?',
'providerDialog.batchDeleteFieldsSuccess': '成功刪除{count}個字段',
};
agentTemplateManagement: {
title: '預設角色管理',
templateName: '模板名稱',
description: '模板描述',
createTime: '建立時間',
action: '操作',
createTemplate: '建立模板',
editTemplate: '編輯模板',
deleteTemplate: '刪除模板',
deleteSuccess: '模板刪除成功',
confirmDelete: '確定要刪除選取的模板嗎?',
batchDelete: '批次刪除',
batchDeleteSuccess: '批次刪除成功',
selectTemplate: '請選擇模板',
select: '選擇',
searchPlaceholder: '請輸入模板名稱搜尋',
search: '搜尋',
serialNumber:'序號',
selectAll: '全選',
deselectAll: '取消全選',
templateDialog: {
title: '模板配置',
templateName: '模板名稱',
templateNamePlaceholder: '請輸入模板名稱',
description: '模板描述',
descriptionPlaceholder: '請輸入模板描述',
roleName: '角色名稱',
roleNamePlaceholder: '請輸入角色名稱',
avatar: '頭像',
selectAvatar: '選擇頭像',
systemPrompt: '系統提示詞',
systemPromptPlaceholder: '請輸入系統提示詞',
modelConfig: '模型配置',
modelName: '模型名稱',
temperature: '溫度',
topP: 'Top P',
maxTokens: '最大 tokens',
save: '保存',
cancel: '取消',
nameRequired: '請輸入模板名稱',
roleNameRequired: '請輸入角色名稱',
systemPromptRequired: '請輸入系統提示詞'
}
},
templateQuickConfig: {
title: '模組快速配置',
basicSettings: '基本設置',
agentSettings: {
agentName: '助手暱稱',
agentNamePlaceholder: '請輸入助手暱稱',
systemPrompt: '角色介紹',
systemPromptPlaceholder: '請輸入角色介紹'
},
modelSettings: '模型設置',
voiceSettings: '語音設置',
serviceSettings: '服務設置',
deviceSettings: '設備設置',
pluginSettings: '外掛設置',
saveConfig: '保存配置',
resetConfig: '重置配置',
configSaved: '配置保存成功',
configReset: '配置已重置',
confirmReset: '確定要重置配置嗎?',
success: '成功',
error: '錯誤',
warning: '警告',
info: '提示'
}
}
@@ -3,12 +3,12 @@
<HeaderBar />
<div class="operation-bar">
<h2 class="page-title">默认角色管理</h2>
<h2 class="page-title">{{ $t('agentTemplateManagement.title') }}</h2>
<div class="right-operations">
<el-input placeholder="请输入模板名称查询" v-model="search" class="search-input" clearable
<el-input :placeholder="$t('agentTemplateManagement.searchPlaceholder')" v-model="search" class="search-input" clearable
@keyup.enter.native="handleSearch" style="width: 240px" />
<el-button class="btn-search" @click="handleSearch">
搜索
{{ $t('agentTemplateManagement.search') }}
</el-button>
</div>
</div>
@@ -23,61 +23,60 @@
<el-table ref="templateTable" :data="templateList" style="width: 100%" v-loading="templateLoading"
element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.7)"
class="transparent-table"> <!-- 移除@row-click="handleRowClick" -->
class="transparent-table" :header-cell-style="{padding: '10px 20px'}" :cell-style="{padding: '10px 20px'}"> <!-- 移除@row-click="handleRowClick" -->
<!-- 自定义选择列实现表头是"选择"文字数据行是小方框 -->
<el-table-column label="选择" align="center" width="80">
<el-table-column :label="$t('agentTemplateManagement.select')" align="center" min-width="100">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.selected" @change="handleRowSelectionChange(scope.row)" @click.stop></el-checkbox>
</template>
</el-table-column>
<el-table-column label="模板名称" prop="agentName" align="center"></el-table-column>
<el-table-column label="语言编码" prop="langCode" align="center"></el-table-column>
<el-table-column label="交互语种" prop="language" align="center"></el-table-column>
<el-table-column label="排序" prop="sort" align="center"></el-table-column>
<!-- 将原来的操作列合并为一列显示编辑和删除按钮 -->
<el-table-column label="操作" width="160" align="center">
<el-table-column :label="$t('agentTemplateManagement.templateName')" prop="agentName" min-width="250" show-overflow-tooltip>
<template slot-scope="scope">
<el-button type="text" size="mini" @click.stop="editTemplate(scope.row)">编辑</el-button>
<el-button type="text" size="mini" @click.stop="deleteTemplate(scope.row)" class="delete-btn">删除</el-button>
<span>{{ scope.row.agentName }}</span>
</template>
</el-table-column>
<!-- 修改为序号列1 -->
<el-table-column :label="$t('agentTemplateManagement.serialNumber')" min-width="120" align="center">
<template slot-scope="scope">
<span>{{ (currentPage - 1) * pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<!-- 删除重复的序号列2 -->
<el-table-column :label="$t('agentTemplateManagement.action')" min-width="250" align="center">
<template slot-scope="scope">
<div style="display: flex; justify-content: center; gap: 15px;">
<el-button type="text" @click="editTemplate(scope.row)">{{ $t('agentTemplateManagement.editTemplate') }}</el-button>
<el-button type="text" @click="handleDelete(scope.row.id)">{{ $t('agentTemplateManagement.deleteTemplate') }}</el-button>
</div>
</template>
</el-table-column>
</el-table>
<!-- 修改table_bottom结构添加按钮组容器 -->
<!-- 表格底部操作栏 -->
<div class="table_bottom">
<!-- 左侧按钮组 -->
<div class="ctrl_btn">
<!-- 将checkbox改为按钮样式 -->
<el-button size="mini" type="primary" class="select-all-btn" @click="handleSelectAll">
{{ isAllSelected ? '取消全选' : '全选' }}
<el-button type="primary" @click="handleSelectAll" size="mini" class="select-all-btn">
{{ isAllSelected ? $t('agentTemplateManagement.deselectAll') : $t('agentTemplateManagement.selectAll') }}
</el-button>
<el-button size="mini" type="success" @click="showAddTemplateDialog">新增模板</el-button>
<el-button size="mini" type="danger" @click="batchDeleteTemplate" :disabled="selectedTemplates.length === 0">
批量删除模板
<el-button type="success" @click="handleCreate" size="mini">
{{ $t('agentTemplateManagement.createTemplate') }}
</el-button>
<el-button type="danger" @click="batchDeleteTemplate" :disabled="!hasSelected" size="mini">
{{ $t('agentTemplateManagement.batchDelete') }}
</el-button>
</div>
<!-- 右侧分页控件 -->
<div class="custom-pagination">
<el-select v-model="pageSize" @change="handlePageSizeChange" class="page-size-select">
<el-option v-for="item in pageSizeOptions" :key="item" :label="`${item}条/页`" :value="item">
</el-option>
</el-select>
<button class="pagination-btn" :disabled="currentPage === 1" @click="goFirst">
首页
</button>
<button class="pagination-btn" :disabled="currentPage === 1" @click="goPrev">
上一页
</button>
<button v-for="page in visiblePages" :key="page" class="pagination-btn"
:class="{ active: page === currentPage }" @click="goToPage(page)">
{{ page }}
</button>
<button class="pagination-btn" :disabled="currentPage === pageCount" @click="goNext">
下一页
</button>
<span class="total-text">{{ total }}条记录</span>
<!-- 分页 -->
<div class="custom-pagination">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="pageSizeOptions"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handlePageSizeChange"
@current-change="handlePageChange"
/>
</div>
</div>
</el-card>
@@ -85,12 +84,14 @@
</div>
</div>
<!-- 使用模板编辑弹框组件 -->
<AgentTemplateDialog :visible.sync="templateDialogVisible" :title="templateDialogTitle" :templateData="templateForm"
@save="saveTemplate" />
<el-footer style="flex-shrink:unset;">
<version-footer />
</el-footer>
<!-- 模板编辑弹框 -->
<AgentTemplateDialog
ref="templateDialog"
:visible.sync="templateDialogVisible"
:title="templateDialogTitle"
:template-data="templateForm"
@save="saveTemplate"
/>
</div>
</template>
@@ -147,14 +148,18 @@ export default {
created() {
this.loadTemplateList()
},
// 在computed部分添加hasSelected属性
computed: {
pageCount() {
return Math.ceil(this.total / this.pageSize)
pageCount() {
return Math.ceil(this.total / this.pageSize)
},
visiblePages() {
return this.getVisiblePages()
},
hasSelected() {
return this.selectedTemplates.length > 0
}
},
visiblePages() {
return this.getVisiblePages()
}
},
methods: {
// 加载模板列表
// 改进loadTemplateList方法的错误处理逻辑
@@ -230,8 +235,13 @@ export default {
})
},
// 添加handleCreate方法,与模板中绑定的按钮保持一致
handleCreate() {
this.showAddTemplateDialog();
},
// 保留原有的editTemplate方法
// 编辑模板 - 完全替换这个方法
// 编辑模板
editTemplate(row) {
// 跳转到模板快速配置页面,并传递模板ID参数
this.$router.push({
@@ -341,9 +351,31 @@ export default {
// 分页相关方法
handlePageSizeChange() {
this.currentPage = 1
// 添加日期格式化函数
formatDate(dateString) {
if (!dateString) return ''
const date = new Date(dateString)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
},
// 完善分页相关方法
handlePageChange(page) {
this.currentPage = page
this.loadTemplateList()
},
handlePageSizeChange(size) {
this.pageSize = size
this.currentPage = 1
this.loadTemplateList()
},
goFirst() {
this.currentPage = 1
},
@@ -3,7 +3,7 @@
<HeaderBar />
<div class="operation-bar">
<h2 class="page-title">模板快速配置</h2>
<h2 class="page-title">{{ $t('templateQuickConfig.title') }}</h2>
</div>
<div class="main-wrapper">
@@ -17,8 +17,8 @@
</div>
<span class="header-title">{{ form.agentName }}</span>
<div class="header-actions">
<el-button type="primary" class="save-btn" @click="saveConfig">保存配置</el-button>
<el-button class="reset-btn" @click="resetConfig">重置</el-button>
<el-button type="primary" class="save-btn" @click="saveConfig">{{ $t('templateQuickConfig.saveConfig') }}</el-button>
<el-button class="reset-btn" @click="resetConfig">{{ $t('templateQuickConfig.resetConfig') }}</el-button>
<button class="custom-close-btn" @click="goToHome">
×
</button>
@@ -28,21 +28,21 @@
<el-form ref="form" :model="form" label-width="72px" class="full-height-form">
<!-- 助手昵称 -->
<el-form-item label="助手昵称" prop="agentName" class="nickname-item">
<el-form-item :label="$t('templateQuickConfig.agentSettings.agentName')" prop="agentName" class="nickname-item">
<el-input
v-model="form.agentName"
placeholder="请输入助手昵称"
:placeholder="$t('templateQuickConfig.agentSettings.agentNamePlaceholder')"
:validate-event="false"
class="form-input"
/>
</el-form-item>
<!-- 角色介绍 -->
<el-form-item label="角色介绍" prop="systemPrompt" class="description-item">
<el-form-item :label="$t('templateQuickConfig.agentSettings.systemPrompt')" prop="systemPrompt" class="description-item">
<el-input
v-model="form.systemPrompt"
type="textarea"
placeholder="请输入角色介绍"
:placeholder="$t('templateQuickConfig.agentSettings.systemPromptPlaceholder')"
:validate-event="false"
show-word-limit
maxlength="2000"