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.5 KiB
2.5 KiB
项目分镜关联功能实现修复
问题描述
项目树中点击项目节点时,分镜列表无法显示对应的分镜数据。原因是项目选择没有更新全局的 currentProjectId 状态。
解决方案
通过 UI Store 统一管理项目选择,实现项目选择与分镜列表的正确关联。
具体修复内容
1. 扩展 uiStore 添加项目选择功能
文件: client/src/stores/uiStore.ts
修改内容:
- 添加
selectedProjectId: string | null状态字段 - 添加
selectProject(projectId: string | null, projectName?: string)方法 - 在
selectProject方法中:- 更新 uiStore 的 selectedProjectId
- 调用 appStore.setCurrentProjectId 更新全局项目状态
- 调用 editorStore.reset() 清理编辑器状态
- 触发 projectSelected 自定义事件
- 将 selectedProjectId 添加到持久化配置中
2. 修改 ProjectTreeNode 集成项目选择逻辑
文件: client/src/components/features/project/ProjectTreeNode.tsx
修改内容:
- 移除本地
selectedId状态管理和相关的 useState 导入 - 从 uiStore 获取
selectProject方法和selectedProjectId状态 - 修改
handleClick方法:- 当点击项目节点时,调用
selectProject(node.projectId.toString(), node.name)
- 当点击项目节点时,调用
- 更新选中状态判断逻辑:
- 使用
selectedProjectId === node.projectId.toString()判断选中状态
- 使用
- 更新样式应用,使用新的
isSelected变量
3. 状态同步验证
验证内容:
- 确认
StoryboardDescPanel使用useStoryboards(currentProjectId)正确响应项目变化 - 验证项目选择时编辑器状态正确重置
- 确保状态持久化正常工作
技术要点
- 状态管理统一: 通过 uiStore 统一管理项目选择,避免状态分散
- 状态同步: 项目选择时同步更新多个 store 的相关状态
- 组件解耦: 移除组件内部的选择状态管理,使用全局状态
- 事件通信: 通过自定义事件支持跨组件通信
预期效果
- 点击项目节点时,分镜列表自动显示对应项目的分镜数据
- 项目选择状态在UI中有明确的视觉反馈
- 项目切换时编辑器状态正确重置
- 状态变化响应及时,用户体验流畅
测试验证
- 语法检查通过,无 TypeScript 错误
- 功能测试:点击不同项目验证分镜列表更新
- 状态测试:验证项目选择状态持久化
- 边界测试:处理项目不存在等异常情况