import { h } from 'vue' import { NIcon, useDialog } from 'naive-ui' import { AlertCircleOutline } from '@vicons/ionicons5' /** * 统一的删除确认弹窗:居中、蓝色调、风格一致 * * 用法: * const confirmDelete = useConfirmDelete() * confirmDelete({ * name: skill.name, * itemType: '技能', * onConfirm: async () => { await api.delete(id) } * }) * * 选项: * - name: 被删项名称(用于展示) * - itemType: 类型标签,如 "技能"/"模型"/"智能体"/"分类",默认空 * - content: 自定义正文(覆盖默认模板) * - onConfirm: 点击"确认删除"后的回调(async) */ export function useConfirmDelete() { const dialog = useDialog() return function confirmDelete(options = {}) { const { name = '', itemType = '', content, onConfirm, } = options const subject = itemType ? `${itemType}「${name}」` : `「${name}」` const body = content || `确定要删除${subject}吗?此操作不可恢复。` dialog.create({ title: '确认删除', content: body, maskClosable: false, positiveText: '确认删除', negativeText: '取消', icon() { return h(NIcon, { color: 'var(--color-primary)', size: 24 }, { default: () => h(AlertCircleOutline), }) }, actionStyle: { // 让按钮区域有一点上边距,整体更紧凑 paddingTop: '8px', }, onPositiveClick: async () => { if (typeof onConfirm === 'function') { await onConfirm() } }, }) } }