From 8eef4606c5f0442c1a32198066e6132560fc1e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Tue, 25 Aug 2026 12:30:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E6=9C=8D=E5=8A=A1=20AppDialog,Promi?= =?UTF-8?q?se=20=E9=A3=8E=E6=A0=BC=20appAlert/appConfirm/appPrompt=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E5=8E=9F=E7=94=9F=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ai/AiPanel.vue | 7 +-- src/components/common/AppDialog.vue | 66 +++++++++++++++++++++++++ src/components/editor/ThumbBar.vue | 8 ++- src/components/editor/Toolbar.vue | 9 ++-- src/components/modals/LibraryModal.vue | 9 ++-- src/components/modals/TemplateModal.vue | 38 +++++++++----- src/core/dialog.ts | 66 +++++++++++++++++++++++++ tests/dialog.test.ts | 66 +++++++++++++++++++++++++ vitest.config.ts | 9 ++++ 9 files changed, 253 insertions(+), 25 deletions(-) create mode 100644 src/components/common/AppDialog.vue create mode 100644 src/core/dialog.ts create mode 100644 tests/dialog.test.ts create mode 100644 vitest.config.ts diff --git a/src/components/ai/AiPanel.vue b/src/components/ai/AiPanel.vue index e63ec48..69b5a3c 100644 --- a/src/components/ai/AiPanel.vue +++ b/src/components/ai/AiPanel.vue @@ -9,6 +9,7 @@ import { store } from '../../core/store' import { generate, polish, chat, beautifyPage, isConfigured } from '../../core/ai' import { elementTypes } from '../../core/sample' import { renderMd } from '../../core/markdown' +import { appPrompt, appConfirm } from '../../core/dialog' import OutlinePanel from './OutlinePanel.vue' const emit = defineEmits<{ @@ -292,7 +293,7 @@ function onStop() { /* ---------- 生成整套 ---------- */ async function onGenerate() { if (busy.value) return - const topic = inputText.value.trim() || prompt('请输入演示主题,例如「远程办公的兴起与未来」') + const topic = inputText.value.trim() || await appPrompt('生成整套', { message: '请输入演示主题', placeholder: '例如「远程办公的兴起与未来」' }) if (!topic) return if (!isConfigured()) { toast('请先配置 API Key'); emit('open-settings'); return } inputText.value = '' @@ -345,9 +346,9 @@ async function onPolish() { } /* ---------- 清空 ---------- */ -function onClear() { +async function onClear() { if (!chatLog.value.length) { toast('对话已是空的'); return } - if (!confirm('清空当前 PPT 的对话记录?')) return + if (!(await appConfirm('清空对话记录?', '将清空当前 PPT 的对话记录', { danger: true, okText: '清空' }))) return chatLog.value = [] store.clearChat(currentChatId.value) renderMsgs.value = [] diff --git a/src/components/common/AppDialog.vue b/src/components/common/AppDialog.vue new file mode 100644 index 0000000..27f8581 --- /dev/null +++ b/src/components/common/AppDialog.vue @@ -0,0 +1,66 @@ + + + + diff --git a/src/components/editor/ThumbBar.vue b/src/components/editor/ThumbBar.vue index e00d98a..344357e 100644 --- a/src/components/editor/ThumbBar.vue +++ b/src/components/editor/ThumbBar.vue @@ -4,6 +4,7 @@