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

共享资源选择面板接入真实 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 一致。

实现要点

  1. folderApi.getTree
    参数:includeProjects: trueincludeSubprojects: trueincludeFullProjectFields: true
    对返回的 tree 做顶层过滤:仅保留 folderCategory === 1subproject,再映射为 ResourceTreeNode。项目节点初始 children 为空,由懒加载填充。

  2. getProjectResources(projectId, { pageSize: 200 })
    用于展开项目时拉取该项目的素材列表。将 itemstype 为 character/scene/prop 的项转为树子节点(id=projectResourceId, type, name),不展示 footage。

  3. 懒加载与 loading

    • 使用 useQueries 按「当前已展开的项目 id」批量请求资源。
    • 合并 loadedResourcesMapbaseTree 得到最终展示树 treeData
    • 项目节点展开且对应请求未完成时,显示「加载角色/场景/道具...」占位。
  4. 类型

    • FolderTreeNode 增加 'subproject'
    • shared-resources 导出 ProjectResourceListItemProjectResourceListResult,与后端分页列表一致。

涉及文件

  • 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'

相关文档