From 55e133852ef8b7c5fee5997221521fcafe161c51 Mon Sep 17 00:00:00 2001 From: wintsa <770775984@qq.com> Date: Wed, 18 Mar 2026 10:42:42 +0800 Subject: [PATCH] fix toast Style issue --- .claude/settings.local.json | 5 ++- src/components/ht/Ht.vue | 10 +++--- src/layout/tab.vue | 71 +++++++++++++++++++++++++++++++++++-- src/sql.ts | 7 ++-- 4 files changed, 80 insertions(+), 13 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 134968b..566cfe0 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -11,7 +11,10 @@ "Bash(bun run:*)", "Bash(grep:*)", "mcp__context7__resolve-library-id", - "mcp__context7__query-docs" + "mcp__context7__query-docs", + "mcp__ag-mcp__detect_version", + "WebSearch", + "WebFetch(domain:reka-ui.com)" ] } } diff --git a/src/components/ht/Ht.vue b/src/components/ht/Ht.vue index 7023568..6cf83b7 100644 --- a/src/components/ht/Ht.vue +++ b/src/components/ht/Ht.vue @@ -1756,21 +1756,21 @@ watch(budgetRefreshSignature, (next, prev) => { - {{ toastTitle }} - {{ toastText }} + {{ toastTitle }} + {{ toastText }} 知道了 - + diff --git a/src/layout/tab.vue b/src/layout/tab.vue index 56250f2..e749627 100644 --- a/src/layout/tab.vue +++ b/src/layout/tab.vue @@ -20,6 +20,11 @@ import { AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, + ToastDescription, + ToastProvider, + ToastRoot, + ToastTitle, + ToastViewport } from 'reka-ui' import { decodeZwArchive, encodeZwArchive, ZW_FILE_EXTENSION } from '@/lib/zwArchive' import { PROJECT_TAB_ID, QUICK_TAB_ID, readWorkspaceMode } from '@/lib/workspace' @@ -470,6 +475,37 @@ const tabTitleOverflowMap = ref>({}) let tabStripViewportEl: HTMLElement | null = null let tabTitleOverflowRafId: number | null = null +const reportExportToastOpen = ref(false) +const reportExportProgress = ref(0) +const reportExportStatus = ref<'running' | 'success' | 'error'>('running') +const reportExportText = ref('') +let reportExportToastTimer: ReturnType | null = null + +const clearReportExportToastTimer = () => { + if (!reportExportToastTimer) return + clearTimeout(reportExportToastTimer) + reportExportToastTimer = null +} + +const showReportExportProgress = (progress: number, text: string) => { + clearReportExportToastTimer() + reportExportStatus.value = 'running' + reportExportProgress.value = Math.max(0, Math.min(100, progress)) + reportExportText.value = text + reportExportToastOpen.value = true +} + +const finishReportExportProgress = (success: boolean, text: string) => { + clearReportExportToastTimer() + reportExportStatus.value = success ? 'success' : 'error' + reportExportProgress.value = 100 + reportExportText.value = text + reportExportToastOpen.value = true + reportExportToastTimer = setTimeout(() => { + reportExportToastOpen.value = false + }, success ? 1200 : 1800) +} + const tabsModel = computed({ get: () => tabStore.tabs, set: (value) => { @@ -1575,11 +1611,15 @@ const exportReport = async () => { const now = new Date() const payload = await buildExportReportPayload() const fileName = `${sanitizeFileNamePart(payload.name)}-报表-${formatExportTimestamp(now)}` - console.log(payload) - await exportFile(fileName, payload) + await exportFile(fileName, payload, () => { + showReportExportProgress(30, '正在生成报表文件...') + }) + finishReportExportProgress(true, '报表导出完成') } catch (error) { console.error('export report failed:', error) - // window.alert('导出报表失败,请重试。') + if (reportExportToastOpen.value) { + finishReportExportProgress(false, '报表导出失败,请重试') + } } finally { dataMenuOpen.value = false } @@ -1760,6 +1800,7 @@ watch( + @@ -1967,7 +2008,31 @@ watch( + + + {{ reportExportStatus === 'running' ? '导出报表' : (reportExportStatus === 'success' ? '导出成功' : '导出失败') }} + + {{ reportExportText }} + + + + + {{ reportExportProgress }}% + + + +