(ids: string[])
| 362 | |
| 363 | // 批量删除文件夹 |
| 364 | export async function deleteFolders(ids: string[]): Promise<void> { |
| 365 | if (ids.length === 0) return |
| 366 | |
| 367 | const { page, folder } = stores |
| 368 | |
| 369 | // 收集所有要删除的文件夹 ID(包括子文件夹) |
| 370 | const allFolderIds = new Set<string>() |
| 371 | for (const id of ids) { |
| 372 | allFolderIds.add(id) |
| 373 | for (const subId of getAllSubFolderIds(id, folder.folders)) { |
| 374 | allFolderIds.add(subId) |
| 375 | } |
| 376 | } |
| 377 | |
| 378 | // 获取根目录现有页面的最大 order |
| 379 | const rootPages = page.pages.filter((p) => !p.parentFolderId) |
| 380 | const maxOrder = rootPages.reduce((max, p) => Math.max(max, p.order ?? 0), -1) |
| 381 | |
| 382 | // 批量移动页面到根目录 |
| 383 | const pagesToMove = page.pages.filter( |
| 384 | (p) => p.parentFolderId && allFolderIds.has(p.parentFolderId) |
| 385 | ) |
| 386 | if (pagesToMove.length > 0) { |
| 387 | await page.updateMany( |
| 388 | pagesToMove.map((p, index) => ({ |
| 389 | id: p.id, |
| 390 | changes: { parentFolderId: undefined, order: maxOrder + index + 1 } |
| 391 | })) |
| 392 | ) |
| 393 | } |
| 394 | |
| 395 | // 批量删除所有文件夹 |
| 396 | await folder.deleteMany([...allFolderIds]) |
| 397 | } |
| 398 | |
| 399 | // 切换文件夹展开状态 |
| 400 | export async function toggleFolderExpanded(id: string): Promise<void> { |
no test coverage detected