你说得对,逻辑确实有问题——首次创建时系统怎么会预先知道你 input 里有 question、output 里有 answer 这些子字段?这些恰恰是用户要通过"分类"来定义出来的。我来把交互改对。
你说的完全对——首次创建时,三个分类应该是空桶,子字段是用户在分类的过程中长出来的。我重新调整一下交互模型:
现在重写 Step3:左侧每张原始列卡片加"分到哪类"的下拉,右侧分类初始为空,并区分两种场景下的视觉重心。
现在更新 page.tsx:根据场景选择初始 fields,并把新的 autoSuggest 函数接进来。
现在 Step1 里也有引用旧概念可能需要核对。再检查 step-1-basic 是否还在描述 input/output 子字段。
Step 1 没问题。现在最后再检查 Step4 是否引用了过时数据:
干净了。改动总结:
fields 初始就是 []。用户在左侧每张原始列卡片上点"分到..."下拉,选了一个分类后,右侧才长出一个对应的子字段,key 默认是列名标准化(中文列回退到 field_n),可手动改。再点列卡片上的 ✕ 即可取消该分类(连同字段一起移除)。DEFAULT_FIELDS(input.question / input.context / output.answer / reference_output.answer),系统通过 autoSuggestForExistingFields 按列名相似度给每个已有字段挑列;左侧列卡片上不再出现"分到..."下拉(避免改动字段结构),主操作改在右侧"为字段挑列"。如果某个字段没匹配到列,对应行会用边框高亮并显示"新文件中未自动匹配到对应列,请手动选择"。好问题,三个都是缺失的环节。先把答案说清楚,再把对应界面补上:
1. 手动添加行(单条数据新增)
2. 手动添加列(编辑字段结构 / 加子字段)
3. 未映射列的去向
下面把详情页 + 这两个对话框 + Step 3 的提示加强补上。
我先在 Step 3 加强未映射列的警示,再补一个详情页路由展示「单条新增」「字段结构管理」两个对话框。
先在 Step3 状态栏加一行未分类列的明确警示。
现在创建详情页 + 两个对话框。先看下可用的 dialog/sheet/dropdown 组件。
现在创建三个新文件:详情页、新增数据抽屉、字段结构管理对话框。
现在创建 AddRowSheet(单条新增)。
现在创建字段结构管理对话框。
现在创建详情视图,把两个对话框整合进去。
最后更新 page.tsx,加上"详情管理"模式切换,把详情视图接进来。
快速核对几个 ui 组件的导出名是否一致。
所有导出名都对得上。给你做了三件事:
1. Step 3 加强了未映射列警示:状态栏下方现在多了一条加深底色的横幅,明确写着"剩余 N 列未分类,导入后将被丢弃。数据库只存储 input/output/reference_output 三类下的字段,未分类的列不会入库"——彻底消除"是不是只影响展示"的疑虑。
2. 新增"详情管理"模式(顶部"场景"切换器加了第三个按钮):进入后是一张表格视图,列由当前字段结构决定,每行一条 DataItem,右上角有三个主要按钮:
AddRowSheet,按当前字段结构分 input/output/reference_output 三组渲染表单(textarea/number/switch/json 按 type 渲染),用户对着字段填值,无需映射,保存直接以标准 JSON 入库ManageFieldsDialog3. 字段结构管理对话框 实现了"手动添加列":三类下分别可"+ 添加字段",每行可改字段名、类型、是否必填、说明;删除字段会弹出二次确认,明确提示"已有 N 条数据中此字段的内容会被清除,且无法恢复";顶部有一条说明强调"字段名仅用于前端展示与外部引用,已有数据通过内部 ID 关联,重命名不会丢失数据"——对应你说的"修改字段不影响后端存储"。
向导第 4 步点"创建评估集 / 完成导入"现在会真的把当前 fields 保存为详情页的默认结构,并跳转到详情页,整个链路连起来了。