diff --git a/dashboard/src/components/shared/PersonaForm.vue b/dashboard/src/components/shared/PersonaForm.vue index 0272ad902..7df250db2 100644 --- a/dashboard/src/components/shared/PersonaForm.vue +++ b/dashboard/src/components/shared/PersonaForm.vue @@ -289,6 +289,9 @@ + + {{ tm('buttons.delete') }} + {{ tm('buttons.cancel') }} @@ -325,7 +328,7 @@ export default { default: null } }, - emits: ['update:modelValue', 'saved', 'error'], + emits: ['update:modelValue', 'saved', 'error', 'deleted'], setup() { const { tm } = useModuleI18n('features/persona'); return { tm }; @@ -591,6 +594,32 @@ export default { this.saving = false; }, + async deletePersona() { + if (!this.editingPersona) return; + + if (!confirm(this.tm('messages.deleteConfirm', { id: this.editingPersona.persona_id }))) { + return; + } + + this.saving = true; + try { + const response = await axios.post('/api/persona/delete', { + persona_id: this.editingPersona.persona_id + }); + + if (response.data.status === 'ok') { + this.$emit('deleted', response.data.message || this.tm('messages.deleteSuccess')); + this.closeDialog(); + } else { + this.$emit('error', response.data.message || this.tm('messages.deleteError')); + } + } catch (error) { + this.$emit('error', error.response?.data?.message || this.tm('messages.deleteError')); + } finally { + this.saving = false; + } + }, + addDialogPair() { this.personaForm.begin_dialogs.push('', ''); // 自动展开预设对话面板 diff --git a/dashboard/src/views/persona/PersonaManager.vue b/dashboard/src/views/persona/PersonaManager.vue index d8cf0dfc0..f8b42407b 100644 --- a/dashboard/src/views/persona/PersonaManager.vue +++ b/dashboard/src/views/persona/PersonaManager.vue @@ -110,7 +110,7 @@ + @saved="handlePersonaSaved" @deleted="handlePersonaDeleted" @error="showError" /> @@ -414,6 +414,11 @@ export default defineComponent({ this.refreshCurrentFolder(); }, + handlePersonaDeleted(message: string) { + this.showSuccess(message); + this.refreshCurrentFolder(); + }, + async confirmDeletePersona(persona: Persona) { if (!confirm(this.tm('messages.deleteConfirm', { id: persona.persona_id }))) { return;