[ { "step": "打开 demo: 字典+图谱真实 API 加载(4 位联系人)", "ok": true, "note": "共 4 位联系人" }, { "step": "默认列表视图: 4 行", "ok": true, "note": "visible=True rows=4" }, { "step": "切图谱: company 节点唯一且固定布局位", "ok": true, "note": "company=1 pos={\"x\":1080,\"y\":184}" }, { "step": "等级归行: 董事长(10)在市场经理(6)上方,经理在专员(3)上方", "ok": true, "note": "" }, { "step": "未设置等级栏: 其他职务卡停右栏", "ok": true, "note": "zone=1 未设置等级拖入左侧等级格子完成定级" }, { "step": "等级 chip 数 = 3(4 卡,其他职务未设)", "ok": true, "note": "3" }, { "step": "切回列表视图", "ok": true, "note": "" }, { "step": "进入编辑: 按钮→完成绘制+变橙+graphEditing", "ok": true, "note": "完成绘制 editing=True orange=True" }, { "step": "拖卡位移: 行内 x 位移+等级保持 3", "ok": true, "note": "x 950->1240.8474576271187 lvl=3" }, { "step": "拖线: dot→目标卡 pending(经理>专员)", "ok": true, "note": "pair=753324225237876736 svg=1" }, { "step": "保存: toast(版本)+DB edge 落库(经理>专员)", "ok": true, "note": "保存成功(版本 2),已记录关系变更日志(见右侧「日志」面板 db=[(753324225107853312, 753324225237876736)]" }, { "step": "重进: 手动边持久(committed=1)", "ok": true, "note": "committed=1" }, { "step": "× 删除手动边→保存: DB 删净", "ok": true, "note": "pdel=1 db=0" }, { "step": "重进: 手动边已删净(0)", "ok": true, "note": "committed=0" }, { "step": "重置确认弹窗: 确定→pending 清零", "ok": true, "note": "title=重置 pend=0" }, { "step": "未保存三选: 继续编辑保持态/放弃修改退出+切列表", "ok": true, "note": "labels=['继续编辑', '放弃修改', '保存修改'] keep=True dropped=True toast=已放弃本次修改,恢复到进入编辑时的状态" }, { "step": "完成绘制退出: 保存修改→边落库+退编辑", "ok": true, "note": "toast=保存成功(版本 4),已记录关系变更日志(见右侧 db=[(753324225107853312, 753324225237876736)]" }, { "step": "保存修改路径: 重进边持久", "ok": true, "note": "" }, { "step": "悬停气泡: 显示+姓名+字段", "ok": true, "note": "display=block e2c-cgd184130经 · 市场经理人脉关系情况--是否内线否礼品备注--" }, { "step": "移出隐藏气泡", "ok": true, "note": "display=none" }, { "step": "进入页内编辑: 按钮→退出编辑", "ok": true, "note": "退出编辑" }, { "step": "改姓名: dirty 行标记+撤销链接", "ok": true, "note": "dirty=1 undo=1" }, { "step": "撤销修改: 姓名恢复+toast", "ok": true, "note": "e2c-cgd184130专 | 已撤销该行修改" }, { "step": "保存全部: toast+DB 姓名更新(脱敏电话原样回传=不改)", "ok": true, "note": "保存全部成功 db=e2c-cgd184130专员乙" }, { "step": "quickAdd 前端查重: 重复行拦截+确认知晓提示", "ok": true, "note": "提交失败:1 行有误(已保留全部内容并定位首错行) | hint=疑似重复:手机号已存在(138****1001),请勾选「确认知悉」" }, { "step": "quickAdd 部分成功: 2 成 1 败(服务端硬拒重复,失败行保留)", "ok": true, "note": "2 行成功,1 行失败(失败行保留待改,可重提) | 手机号已被该客户内联系人使用:13800001001" }, { "step": "quickAdd 落库: 2 新联系人在库", "ok": true, "note": "db=2" }, { "step": "脱敏点击明文: 明文渲染+DB reveal_log 埋点", "ok": true, "note": "plain=13800001002 logs=1" }, { "step": "导入模板下载(xlsx)", "ok": true, "note": "联系人导入模板-V1.xlsx 3693B" }, { "step": "勾选全选: 导出按钮解锁", "ok": true, "note": "" }, { "step": "批量导出下载(联系人导出.xlsx)", "ok": true, "note": "联系人导出.xlsx 4075B" }, { "step": "预检计数头: 共 2 行/新增 1/失败 1", "ok": true, "note": "预检完成(任务 753324309090402304 待确认):共 2 行,预计新增 1、更新 0、失败 1、疑似重复 0(新增或更新 / " }, { "step": "预检明细 2 行含 FAIL", "ok": true, "note": "rows=2" }, { "step": "确认执行→轮询完成: 已完成 新增 1", "ok": true, "note": "已完成:新增 1、更新 0、未变化 0、失败 1、疑似重复 0" }, { "step": "失败明细 1 行(手机号必填)", "ok": true, "note": "rows=1 2e2c-cgd184130导入乙--手机号必填(导入查重键)" }, { "step": "DB 执行面: 好行入库坏行未入", "ok": true, "note": "good=1 bad=0" }, { "step": "导入后联系人计数 = 7(4+2qa+1导入)", "ok": true, "note": "共 7 位联系人" }, { "step": "console error = 0", "ok": true, "note": "" }, { "step": "page error = 0", "ok": true, "note": "" }, { "step": "网络层零 PUT/DELETE", "ok": true, "note": "" } ]