← 决策总览 / D8 · 导入确认流程(融合方案) 8 / 8 · D8 已决策 → 确认融合形态
PD-D8-IMPORT · 计划 §7.1 项 8 / §7.5

导入确认 — 融合方案:步骤条骨架 + 映射/预览同屏(班级上下文内面板)

真实任务不变:教师导入更新后的名单 CSV(20 行、2 行学号重复、1 列表头改名):看清变化、处理冲突、原子生效、可回滚。步骤条保留事务心智模型(上传 → 映射预览 → 确认),映射编辑与冲突处理同屏即时更新(单页信息密度);不采用行级内联(C)——新增学生场景低频,内联弱化导入概念。

不可违反约束(§7.5,与 UX 无关、已冻结):parse 与 apply 分离;映射/迁移/验证在 apply 前可预览;apply 原子化;任一步失败不得留下半应用状态;可安全回滚到导入前状态;导入产生的 schema/data 变换可审计。呈现形态与 D1 一致——班级上下文内的引导面板,非独立全屏向导。
融合目标形态
步骤条(上传 ✓ → 映射预览 → 确认)+ 映射与冲突同屏可改 + 预览即时更新 + 原子确认栏(含回滚说明)。
localhost:8765/class-302/students/import
班级上下文内面板(与 D1 导航一致)
上传文件 2映射与预览 3确认应用
students-v2.csv 20 行 · 18 新增 · 2 冲突 · 已应用映射 6 列
字段映射 CSV 表头 → 学生字段(点击下拉修改,预览即时更新)
student_id
name
gender
height_cm
score
score?
预览 20 行 · 红色 = 冲突 · 修改映射后即时更新
学号姓名性别身高成绩状态
STU011学生下01114661.3学号重复
STU012学生丌01216777.7新增
STU013学生不01314775.4新增
STU014学生与01417396.2新增
STU015学生丏01516472.0新增
STU016学生丐01613879.6缺身高
2 项冲突需处理 确认后原子应用 · 任一步失败自动回滚到导入前状态 · 操作可审计(§7.5)
步骤条 = 事务心智模型(A);同屏映射 + 冲突 + 预览 = 信息密度(B);呈现为班级上下文内面板 = 与 D1 导航一致。不采用 C(行级内联弱化导入,且新增学生场景低频)。
来自 A步骤条保留 parse/apply 分离的事务心智模型,一次只聚焦一类问题
来自 B映射编辑与冲突处理同屏、预览即时更新——减少往返
与 D1 一致班级上下文内引导面板,非独立全屏向导;C(行级内联)明确不采用
设计要点说明
事务语义parse/apply 分离、apply 前预览、原子化、失败无半应用、可回滚、可审计——全部由 Rust application 层保证(§7.5),UI 只决定呈现与操作顺序
映射同屏CSV 表头 → 学生字段下拉;修改后预览即时更新;未映射列黄色警示
冲突处理预览内红色标记(学号重复/缺字段);冲突处理在确认前完成,确认 = 一次原子事务
schema/API 影响无新 API;事务语义维持 Rust application 层现状

待验证(dogfood):

  • 大文件(200 行)在单页预览的滚动体验
  • 冲突处理的具体交互(覆盖/跳过/合并的选择呈现)