feat(web3): 编辑场景自动从 DB 同步字段注释/类型
背景:
cn / type 故意不持久化(plan §4),编辑时按 source_table 重新从数据源拉。
但用户每次都得手动点「测试连接」走 loadColumns,体验差。
改动(只动 web3/src/components/TaskModal.vue):
1. 新增 refreshColumnsForEdit():
- 用存储的 conn_json(含匹配的预设密码或后端返回的密码)+ source_table
直接调 listColumns API
- 按 field_key 索引 merge 进现有 fieldList(不动 stored rules,只覆盖 cn/type/isNullable)
- DB 中已不存在的字段 → 保留 stored 状态 + 顶部 warning
- DB 中新出现的字段(无 stored rules)→ 不主动加,避免污染用户视角
- API 失败(密码空/DB 不通/表被删)→ 静默退化,不弹错误
2. form.password 回填优先级:task 自带 > 预设 > 用户手输
(旧版只靠预设匹配回填,手动建的任务没匹配预设就拿不到密码)
3. 触发时机:编辑场景打开弹窗后,props.task.field_list 异步到位时
(不能挂 open watch:父组件 openEdit 是「同步 set row + 异步 getTask」
两步,同步阶段 field_list 还是 [],refreshColumnsForEdit 会 no-op)
4. 字段表头部「↻ 重新同步字段」按钮:DB 中途变更后手动刷新
v-if=props.task && form.table && fieldList.length > 0
5. preset 加载用 props.task.db_type(不再用 form.dbType 默认 'MySQL'):
编辑 Oracle 任务时,open watch 同步阶段 preset 匹配拿的是 MySQL 预设,
永远匹配不上;watch(form.dbType) 异步重载又来不及。
改为先用 targetDbType=props.task?.db_type||form.dbType 加载。
踩坑:见 work-logs/2026-08-21.md(同步/异步时序类 + 密码可见性)。
Showing
Please register or sign in to comment