diff --git a/dashboard/src/i18n/locales/en-US/features/persona.json b/dashboard/src/i18n/locales/en-US/features/persona.json index 94708ee56..c9ba4453f 100644 --- a/dashboard/src/i18n/locales/en-US/features/persona.json +++ b/dashboard/src/i18n/locales/en-US/features/persona.json @@ -7,6 +7,7 @@ "createFirst": "Create First Persona", "edit": "Edit", "delete": "Delete", + "copy": "Copy JSON", "cancel": "Cancel", "save": "Save", "addDialogPair": "Add Dialog Pair" @@ -62,6 +63,7 @@ "saveError": "Save failed", "deleteConfirm": "Are you sure you want to delete persona \"{id}\"? This action cannot be undone.", "deleteSuccess": "Deleted successfully", - "deleteError": "Delete failed" + "deleteError": "Delete failed", + "copySuccess": "Copied to clipboard" } } diff --git a/dashboard/src/i18n/locales/zh-CN/features/persona.json b/dashboard/src/i18n/locales/zh-CN/features/persona.json index 15121df41..7c45a237d 100644 --- a/dashboard/src/i18n/locales/zh-CN/features/persona.json +++ b/dashboard/src/i18n/locales/zh-CN/features/persona.json @@ -7,6 +7,7 @@ "createFirst": "创建第一个人格", "edit": "编辑", "delete": "删除", + "copy": "复制 JSON", "cancel": "取消", "save": "保存", "addDialogPair": "添加对话对" @@ -62,6 +63,7 @@ "saveError": "保存失败", "deleteConfirm": "确定要删除人格 \"{id}\" 吗?此操作不可撤销。", "deleteSuccess": "删除成功", - "deleteError": "删除失败" + "deleteError": "删除失败", + "copySuccess": "已复制到剪贴板" } } diff --git a/dashboard/src/views/PersonaPage.vue b/dashboard/src/views/PersonaPage.vue index cffeeb549..9d87f4317 100644 --- a/dashboard/src/views/PersonaPage.vue +++ b/dashboard/src/views/PersonaPage.vue @@ -40,6 +40,12 @@ {{ tm('buttons.edit') }} + + + mdi-content-copy + {{ tm('buttons.copy') || '复制 JSON' }} + + mdi-delete @@ -270,6 +276,30 @@ export default { this.message = message; this.messageType = 'error'; this.showMessage = true; + }, + + async copyPersonaJson(persona) { + try { + // 创建清洁副本,排除系统字段 + const cleanPersona = { + persona_id: persona.persona_id, + system_prompt: persona.system_prompt, + begin_dialogs: persona.begin_dialogs, + tools: persona.tools + }; + + // 格式化 JSON + const jsonString = JSON.stringify(cleanPersona, null, 4); + + // 复制到剪贴板 + await navigator.clipboard.writeText(jsonString); + + // 显示成功消息 + this.showSuccess(this.tm('messages.copySuccess') || 'Copied to clipboard'); + } catch (error) { + // 显示错误消息 + this.showError(error.message || this.tm('messages.copyError') || 'Failed to copy JSON'); + } } } }