diff --git a/dashboard/src/components/folder/BaseFolderItemSelector.vue b/dashboard/src/components/folder/BaseFolderItemSelector.vue index 8ba37b789..4b4b4f1c4 100644 --- a/dashboard/src/components/folder/BaseFolderItemSelector.vue +++ b/dashboard/src/components/folder/BaseFolderItemSelector.vue @@ -119,8 +119,17 @@ @@ -197,6 +206,11 @@ export default defineComponent({ type: Boolean, default: false }, + // 是否显示编辑按钮 + showEditButton: { + type: Boolean, + default: false + }, // 默认项(如 "默认人格") defaultItem: { type: Object as PropType, @@ -221,7 +235,7 @@ export default defineComponent({ default: null } }, - emits: ['update:modelValue', 'navigate', 'create'], + emits: ['update:modelValue', 'navigate', 'create', 'edit'], data() { return { dialog: false, @@ -370,6 +384,17 @@ export default defineComponent({ cancelSelection() { this.selectedItemId = this.modelValue || ''; this.dialog = false; + }, + + isDefaultItem(item: SelectableItem): boolean { + if (this.defaultItem === null) { + return false; + } + return this.getItemId(item) === this.getItemId(this.defaultItem); + }, + + handleEditItem(item: SelectableItem) { + this.$emit('edit', item); } } }); diff --git a/dashboard/src/components/folder/types.ts b/dashboard/src/components/folder/types.ts index 6fbeb39c7..13b636fc2 100644 --- a/dashboard/src/components/folder/types.ts +++ b/dashboard/src/components/folder/types.ts @@ -241,6 +241,7 @@ export interface FolderItemSelectorLabels { // 按钮 createButton?: string; + editButton?: string; confirmButton?: string; cancelButton?: string; diff --git a/dashboard/src/components/shared/PersonaSelector.vue b/dashboard/src/components/shared/PersonaSelector.vue index 393704f4c..a77f27640 100644 --- a/dashboard/src/components/shared/PersonaSelector.vue +++ b/dashboard/src/components/shared/PersonaSelector.vue @@ -8,6 +8,7 @@ :items-loading="itemsLoading" :labels="labels" :show-create-button="true" + :show-edit-button="true" :default-item="defaultPersona" item-id-field="persona_id" item-name-field="persona_id" @@ -15,15 +16,16 @@ :display-value-formatter="formatDisplayValue" @navigate="handleNavigate" @create="openCreatePersona" + @edit="openEditPersona" /> - + @@ -62,7 +64,8 @@ const folderTree = ref([]) const currentPersonas = ref([]) const treeLoading = ref(false) const itemsLoading = ref(false) -const showCreateDialog = ref(false) +const showPersonaDialog = ref(false) +const editingPersona = ref(null) const currentFolderId = ref(null) // 默认人格 @@ -104,6 +107,7 @@ const labels = computed(() => ({ defaultItem: tm('personaSelector.defaultPersona'), noDescription: tm('personaSelector.noDescription'), createButton: tm('personaSelector.createPersona'), + editButton: tm('personaSelector.editPersona') || 'Edit', confirmButton: t('core.common.confirm'), cancelButton: t('core.common.cancel'), rootFolder: tm('personaSelector.rootFolder') || '全部人格', @@ -171,13 +175,21 @@ async function handleNavigate(folderId: string | null) { // 打开创建人格对话框 function openCreatePersona() { - showCreateDialog.value = true + editingPersona.value = null + showPersonaDialog.value = true } -// 人格创建成功 -async function handlePersonaCreated(message: string) { - console.log('人格创建成功:', message) - showCreateDialog.value = false +// 打开编辑人格对话框 +function openEditPersona(persona: Persona) { + editingPersona.value = persona + showPersonaDialog.value = true +} + +// 人格保存成功(创建或编辑) +async function handlePersonaSaved(message: string) { + console.log('人格保存成功:', message) + showPersonaDialog.value = false + editingPersona.value = null // 刷新当前文件夹的人格列表 await loadPersonasInFolder(currentFolderId.value) }