Seating canvas — 融合方案:画布主视图 + 表格视图并存
真实任务不变:教师对已生成方案做局部调整——挪 2–3 名学生、批量锁定/移动、精确指定座位。画布为默认视图(缩放/平移 + 拖拽整块跟随 + 框选批量),表格为辅助视图(精确输入/无障碍),两视图共享同一编辑状态与 undo 栈。
不可违反约束(G-2):画布与表格是同一编辑状态的两种投影,共享 undo/redo(Rust editing 协议);持久编辑全部经 Rust editing 命令 + 独立 validator 复核;固定座位(学生丁001 → R1C1)不可移动;§7.2 结果能力全项(定位/单选多选批量/状态可见/非法操作可识别/键盘核心操作)。
✓
融合目标形态
工具栏:视图切换(画布 / 表格)+ 缩放 + 撤销/重做 + 保存。画布视图支持拖拽整块跟随与框选批量;表格视图同数据、同 undo。
localhost:8765/class-302/canvas
拖拽座位(整块跟随鼠标)到目标座位完成交换;空白处拖出选框批量选中;表格视图用于精确输入
就绪
试一下:① 拖动任意普通座位——整个座位块跟随鼠标,松开放到目标座位即交换;② 锁定座(紫)不可拖;③ 空白处框选多个后点「锁定选中」;④ 切到「表格」视图改一个学生,再切回画布看同步。
来自 A画布主视图:缩放/平移 + 拖拽整块跟随(drag-lift),空间心智最直观
来自 B框选批量保留:批量锁定/移动/操作,提升整块调整效率
来自 C表格视图保留:精确输入、批量属性编辑、无障碍(键盘)路径;同一 undo 栈
| 设计要点 | 说明 |
|---|---|
| 视图同步 | 画布/表格 = 同一 draft 的渲染投影(G-2);切换不产生新编辑状态;undo/redo 命令序列一致 |
| 拖拽跟随 | 拖动时座位克隆以 transform 跟随指针(性能:60 座级无压力);悬停目标座位高亮,松手执行 swap 命令 |
| 表格定位 | 辅助视图:UI 不便时(精确坐标、无障碍、批量属性)使用;不是主编辑方式 |
| schema/API 影响 | 无新 API;undo/redo 与现有 editing 协议一致 |
待验证(dogfood):
- 触控支持是否 v2 必须(§7.2,Canvas Decision Gate)
- 拖拽动效与误操作率(完成任务步骤数 / 误操作率指标)