-- ============================================================================= -- 一次性迁移:BOM 级备注落库 -- ----------------------------------------------------------------------------- -- 背景: -- 前端 BomManage.vue 一直有"备注"输入框(v-model="form.remark"),提交时也 -- 确实放进了 payload(BomManage.vue:1273),但后端 BomService.save_bom() 从 -- 未读取 data['remark'],父件级备注被**静默丢弃**——填了、保存、再打开必为空。 -- -- 根因是数据模型缺位:bom_table 是子件明细表(一行 = 一个子件),表里只有 -- 子件级的 remark 列,没有任何位置存放 BOM 级备注。 -- 连带 bug:读取侧 get_bom_detail() 用 first.BomTable.remark(第一个子件行的 -- 备注)冒充主表备注,所以查看时会显示某个子件的备注(如"白色")或空。 -- -- 方案: -- bom_table / bom_draft_table 各增加 bom_remark 列,沿用 parent_id、is_enabled -- 既有的冗余写法:同一 BOM 版本的每一行存同一份值,读取时取首行。 -- 与既有 remark(子件级)语义分离,互不干扰。 -- -- 存量数据: -- 无法回填 —— 历史上填过的备注从未入库,任何位置都找不到,只能从本迁移 -- 之后开始记录。这是本次修复的已知代价。 -- -- 执行方式: docker exec -i inventory_db psql -U test -d inventory_system < 本文件 -- 注意: 若后端启用 Redis 缓存(bom:tree:*),部署后需清缓存或重启后端, -- 避免 12h 内命中旧值。 -- ============================================================================= BEGIN; ALTER TABLE bom_table ADD COLUMN IF NOT EXISTS bom_remark text; ALTER TABLE bom_draft_table ADD COLUMN IF NOT EXISTS bom_remark text; COMMENT ON COLUMN bom_table.bom_remark IS 'BOM级备注(父件级,冗余存于每行,读取取首行)'; COMMENT ON COLUMN bom_draft_table.bom_remark IS 'BOM级备注(父件级,冗余存于每行,读取取首行)'; COMMIT;