( name?: string, afterItemId?: string, inFolderId?: string )
| 245 | |
| 246 | // 创建文件夹 |
| 247 | export async function createFolder( |
| 248 | name?: string, |
| 249 | afterItemId?: string, |
| 250 | inFolderId?: string |
| 251 | ): Promise<PageFolder> { |
| 252 | const { page, folder } = stores |
| 253 | |
| 254 | let parentFolderId: string | undefined |
| 255 | let order: number |
| 256 | |
| 257 | if (inFolderId) { |
| 258 | // 直接在指定文件夹中创建 |
| 259 | parentFolderId = inFolderId |
| 260 | const itemsInFolder = [...page.findByFolderId(inFolderId), ...folder.findByParentId(inFolderId)] |
| 261 | order = itemsInFolder.length > 0 ? Math.max(...itemsInFolder.map((i) => i.order ?? 0)) + 1 : 0 |
| 262 | } else { |
| 263 | const position = await prepareInsertPosition(afterItemId) |
| 264 | parentFolderId = position.parentFolderId |
| 265 | order = position.order |
| 266 | } |
| 267 | |
| 268 | // Generate unique name among sibling folders |
| 269 | const baseName = name || '新文件夹' |
| 270 | const siblingFolders = folder.findByParentId(parentFolderId) |
| 271 | const existingNames = siblingFolders.map((f) => f.name) |
| 272 | const uniqueName = generateUniqueName(baseName, existingNames) |
| 273 | |
| 274 | return folder.create({ |
| 275 | name: uniqueName, |
| 276 | parentFolderId, |
| 277 | order, |
| 278 | expanded: true |
| 279 | }) |
| 280 | } |
| 281 | |
| 282 | // 更新文件夹 |
| 283 | export async function updateFolder(id: string, updates: Partial<PageFolder>): Promise<void> { |
no test coverage detected