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 @@