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');
+ }
}
}
}