You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.4 KiB
2.4 KiB
共享资源选择面板接入真实 API
日期:2026-02-08
范围:CreateProjectModal → ResourceSelectorPanel 使用真实接口替代 Mock
变更概要
- 文件夹/项目树:使用
folderApi.getTree()(GET /folders/tree)拉取树,仅展示「我的项目」(folderCategory=1),并包装为虚拟根「我的项目」。 - 项目下资源:展开项目节点时懒加载,调用
getProjectResources(projectId)(GET /projects/:id/resources),将角色/场景/道具挂到该节点下。 - API 路径:统一 shared-resources 中接口为相对 baseURL(如
/projects/:id/resources),与 folderApi、projectApi 一致。
实现要点
-
folderApi.getTree
参数:includeProjects: true、includeSubprojects: true、includeFullProjectFields: true。
对返回的tree做顶层过滤:仅保留folderCategory === 1或subproject,再映射为ResourceTreeNode。项目节点初始children为空,由懒加载填充。 -
getProjectResources(projectId, { pageSize: 200 })
用于展开项目时拉取该项目的素材列表。将items中type为 character/scene/prop 的项转为树子节点(id=projectResourceId, type, name),不展示 footage。 -
懒加载与 loading
- 使用
useQueries按「当前已展开的项目 id」批量请求资源。 - 合并
loadedResourcesMap与baseTree得到最终展示树treeData。 - 项目节点展开且对应请求未完成时,显示「加载角色/场景/道具...」占位。
- 使用
-
类型
FolderTreeNode增加'subproject'。shared-resources导出ProjectResourceListItem、ProjectResourceListResult,与后端分页列表一致。
涉及文件
client/src/services/api/shared-resources.ts:修正路径、返回类型,getProjectResources支持 pageSize。client/src/components/features/project/ResourceSelectorPanel.tsx:移除 Mock,接入 folderApi + getProjectResources,懒加载与 loading 状态。client/src/types/shared-resource.ts:FolderTreeNode.type 增加'subproject'。