From fed801bc2896e3c2093b648093289ead6630cee0 Mon Sep 17 00:00:00 2001 From: Jorylee <1747358809@qq.com> Date: Fri, 24 Jan 2025 15:48:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A9=BA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E4=BB=8D=E6=8F=90=E7=A4=BA=E4=BF=9D=E5=AD=98=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 StageManager 中添加 isEmpty 函数,用于判断当前项目是否为空 - 修改 AppMenu 组件中的新建草稿和打开文件逻辑,增加对空项目的处理 - 更新 StartFilePanel 组件中的文件加载逻辑,考虑空项目情况 --- src/core/stage/stageManager/StageManager.tsx | 3 + src/pages/_app_menu.tsx | 64 +++++++++++--------- src/pages/_start_file_panel.tsx | 5 +- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/core/stage/stageManager/StageManager.tsx b/src/core/stage/stageManager/StageManager.tsx index c50c126d..978e0662 100644 --- a/src/core/stage/stageManager/StageManager.tsx +++ b/src/core/stage/stageManager/StageManager.tsx @@ -64,6 +64,9 @@ export namespace StageManager { }); } + export function isEmpty(): boolean { + return entities.length === 0; + } export function getTextNodes(): TextNode[] { return entities.valuesToArray().filter((node) => node instanceof TextNode); } diff --git a/src/pages/_app_menu.tsx b/src/pages/_app_menu.tsx index 7a180ec5..4e20c640 100644 --- a/src/pages/_app_menu.tsx +++ b/src/pages/_app_menu.tsx @@ -69,7 +69,7 @@ export default function AppMenu({ * 新建草稿 */ const onNewDraft = () => { - if (StageSaveManager.isSaved()) { + if (StageSaveManager.isSaved() || StageManager.isEmpty()) { StageManager.destroy(); setFile("Project Graph"); } else { @@ -99,36 +99,42 @@ export default function AppMenu({ }; const onOpen = async () => { - if (Stage.Path.isDraft() && !StageSaveManager.isSaved()) { - Dialog.show({ - title: "草稿未保存", - content: "当前草稿未保存,是否保存?", - buttons: [ - { text: "我再想想" }, - { text: "保存草稿", onClick: onSave }, - { - text: "丢弃并打开新文件", - onClick: () => { - StageManager.destroy(); - openFileByDialogWindow(); + if (!StageSaveManager.isSaved()) { + if (StageManager.isEmpty()) { + //空项目不需要保存 + StageManager.destroy(); + openFileByDialogWindow(); + } else if (Stage.Path.isDraft()) { + Dialog.show({ + title: "草稿未保存", + content: "当前草稿未保存,是否保存?", + buttons: [ + { text: "我再想想" }, + { text: "保存草稿", onClick: onSave }, + { + text: "丢弃并打开新文件", + onClick: () => { + StageManager.destroy(); + openFileByDialogWindow(); + }, }, - }, - ], - }); - } else if (!StageSaveManager.isSaved()) { - Dialog.show({ - title: "未保存", - content: "是否保存当前文件?", - buttons: [ - { - text: "保存并打开新文件", - onClick: () => { - onSave().then(openFileByDialogWindow); + ], + }); + } else { + Dialog.show({ + title: "未保存", + content: "是否保存当前文件?", + buttons: [ + { + text: "保存并打开新文件", + onClick: () => { + onSave().then(openFileByDialogWindow); + }, }, - }, - { text: "我再想想" }, - ], - }); + { text: "我再想想" }, + ], + }); + } } else { // 直接打开文件 openFileByDialogWindow(); diff --git a/src/pages/_start_file_panel.tsx b/src/pages/_start_file_panel.tsx index 1af1985f..b1ea08d4 100644 --- a/src/pages/_start_file_panel.tsx +++ b/src/pages/_start_file_panel.tsx @@ -19,6 +19,7 @@ import Switch from "../components/ui/Switch"; import { RecentFileManager } from "../core/service/RecentFileManager"; import { StartFilesManager } from "../core/service/StartFilesManager"; import { StageSaveManager } from "../core/stage/StageSaveManager"; +import { StageManager } from "../core/stage/stageManager/StageManager"; import { fileAtom } from "../state"; import { cn } from "../utils/cn"; import { Dialog } from "../utils/dialog"; @@ -123,7 +124,9 @@ export default function StartFilePanel({ open = false }: { open: boolean }) { }; const onLoadCurrentStartFile = (path: string) => { return function () { - if (currentFile === "Project Graph") { + if (StageManager.isEmpty()) { + checkoutFile(path); + } else if (currentFile === "Project Graph") { Dialog.show({ title: "真的要切换吗?", content: "您现在的新建草稿没有保存,是否要切换项目?",