From de62bdb146acc4b2a1cce3a450a78ae96ca02487 Mon Sep 17 00:00:00 2001 From: abkkkbb <1536356280@qq.com> Date: Sun, 25 Oct 2026 09:51:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8B=92=E7=BB=9D=E5=B5=8C=E5=A5=97?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E7=9B=AE=E5=BD=95=E6=97=B6=E8=AF=AF=E5=88=A0?= =?UTF-8?q?=E5=B7=B2=E5=85=A5=E5=BA=93=E6=9B=B2=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main/ipc/library.ts | 11 ++++++ shared/types/errors.ts | 2 + src/components/library/FolderManager.vue | 3 +- src/stores/library.spec.ts | 48 ++++++++++++++++++++++++ src/stores/library.ts | 15 +------- 5 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 src/stores/library.spec.ts diff --git a/electron/main/ipc/library.ts b/electron/main/ipc/library.ts index d10b1cd56..e6267e513 100644 --- a/electron/main/ipc/library.ts +++ b/electron/main/ipc/library.ts @@ -164,6 +164,17 @@ export const registerLibraryIpc = (): void => { if (dirs.includes(dir)) { return { success: false, error: ErrorCode.SCAN_DIR_EXISTS }; } + // 嵌套目录在写入前拒绝:撤销流程若已落库,会连带删掉另一目录覆盖下的已入库曲目 + const nested = dirs.some( + (d) => + dir.startsWith(d + "\\") || + dir.startsWith(d + "/") || + d.startsWith(dir + "\\") || + d.startsWith(dir + "/"), + ); + if (nested) { + return { success: false, error: ErrorCode.SCAN_DIR_NESTED }; + } dirs.push(dir); store.set("library.scanDirs", dirs); libraryLog.info(`添加扫描目录: ${dir}`); diff --git a/shared/types/errors.ts b/shared/types/errors.ts index 41ce5e0b3..430ded3cc 100644 --- a/shared/types/errors.ts +++ b/shared/types/errors.ts @@ -57,6 +57,8 @@ export enum ErrorCode { SCAN_DIR_NOT_FOUND = "SCAN_DIR_NOT_FOUND", /** 用户取消了目录选择 */ SCAN_DIR_NOT_SELECTED = "SCAN_DIR_NOT_SELECTED", + /** 目录与已有扫描目录存在嵌套关系 */ + SCAN_DIR_NESTED = "SCAN_DIR_NESTED", // 通用 /** 当前账号没有执行操作所需的权限 */ diff --git a/src/components/library/FolderManager.vue b/src/components/library/FolderManager.vue index 74e08fecb..ac063917f 100644 --- a/src/components/library/FolderManager.vue +++ b/src/components/library/FolderManager.vue @@ -1,5 +1,6 @@