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.6 KiB
2.6 KiB
插入位置计算最终修复
问题回顾
插入新分镜功能存在位置计算错误:
- 插入位置基于变化后的orderIndex而非用户看到的UI位置
- 导致插入位置与用户预期不符
根本原因
使用 storyboard.orderIndex + 1 计算插入位置,但orderIndex在插入操作后会发生变化,导致后续插入位置错误。
解决方案
改用基于UI显示位置的计算方法:
修复前
// 基于数据库orderIndex计算(错误)
onClick={() => handleInsertStoryboard(storyboard.orderIndex + 1)}
修复后
// 基于UI显示位置计算(正确)
onClick={() => handleInsertStoryboard(index + 2)}
测试验证
测试场景
- 初始状态:13个分镜
- 第一次插入:点击第一个插入按钮
- 第二次插入:点击第二个分镜后的插入按钮
测试结果
初始状态: ["分镜1","分镜2","分镜3","分镜4","分镜5","分镜6",...]
第一次插入后: ["新分镜1","分镜1","分镜2","分镜3","分镜4","分镜5","分镜6",...]
✅ 正确:新分镜插入到最前面
第二次插入后: ["新分镜1","分镜1","分镜2","新分镜3","分镜3","分镜4","分镜5","分镜6",...]
✅ 正确:新分镜插入到分镜2后面,分镜3前面
技术细节
插入位置计算逻辑
// 第一个插入按钮:始终插入到位置1
handleInsertStoryboard(1);
// 分镜后插入按钮:插入到当前显示位置+1
handleInsertStoryboard(index + 2);
// index是数组索引(0开始),index+1是显示位置(1开始),index+2是插入位置
标题生成优化
// 修复前:可能与现有分镜标题冲突
title: `分镜${targetOrderIndex}`;
// 修复后:使用"新分镜"前缀,避免冲突
title: `新分镜${targetOrderIndex}`;
核心改进
- 位置计算准确:基于UI显示位置而非数据库orderIndex
- 用户体验一致:插入位置与按钮位置完全匹配
- 标题区分明确:新分镜使用"新分镜"前缀,避免混淆
- 多次插入稳定:连续插入操作位置都准确
验证标准
- ✅ 第一个插入按钮:新分镜出现在最前面
- ✅ 分镜后插入按钮:新分镜出现在对应分镜后面
- ✅ 多次插入:每次位置都准确
- ✅ 标题清晰:新分镜标题与原有分镜区分
修复时间
2026-01-12
总结
通过改用基于UI显示位置的计算方法,彻底解决了插入位置错误的问题。现在用户点击哪个插入按钮,新分镜就会准确插入到对应位置,完全符合用户预期。