- 详细说明后端导入流程,importCargoType逐行构建、校验和保存,事务控制保证全批成功或全批回滚 - 解析二级父级时通过数据库查询确保事务内可见,支持单文件一次性成功导入 - 新增单文件版导入模板,一级在前二级在后,总计135条数据 - 统一三个导入文件表头样式,设置灰底黑色加粗居中、细边框和行高30 - 调整数据区边框、编码列文本格式及列宽,兼顾后端解析要求 - 借鉴原始蓝色主题模板样式美化导入文件,提升视觉效果和一致性
5.8 KiB
5.8 KiB
2026-07-28 工作日志
货物类型导入模板美化
- 文件:
src/views/base/cargo-type.vue的handleTemplate() - 改动(第一次):表头行加主色底色
#409EFF+ 白色加粗字体 + 居中对齐 + 细边框;行高 42。 - 改动(调整后):按用户反馈,表头底色改为统一灰色
#D9D9D9+ 黑色加粗字体,行高降为 30。 - 导入失败明细
decorateCargoTypeFailDetail调整:仅「导入失败原因」列字体红色;错误按A./B./C.编号,分号(;)隔开,并去掉后端重复的「第N行:」前缀;最终格式示例第2行:A.该货物类型编码已存在,请更换唯一编码。 - 验证:Node + exceljs 4.4.0 跑通生成逻辑,确认表头 fill/font/alignment/height、失败原因编号格式与红色字体均正确。
货物类型导入失败明细 - 备注超长与标红强化
- 确认需求:除「导入失败原因」列外,其他列一律不标红;已增加 decorator 清除所有非失败原因列红色字体(含类型列,不论对错)。
- 失败原因按 A./B./C. 编号、分号(;)隔开;并优化:错误文本已包含规则说明时不重复拼接(避免「备注不能超过200字,备注不能超过200字」)。
- 新增兜底:失败明细行若「备注」列文本长度 > 200 且失败原因未含备注错误,自动追加一条「备注不能超过200字」编号项(Node 验证通过)。
- 后端根因(已读 /Users/gxwebsoft/JAVA/tms-erp-api-ws/blade-service/blade-system/.../CargoTypeServiceImpl.java):validate() 用 throw 实现,一行多个错误时只抛第一个,备注超长校验(第238行)可能被前置的编码/名称/上级错误挡住,导致失败明细不显示备注原因。彻底方案需后端改收集式校验(列出全部错误),待用户确认是否改 Java。
- 最终确认(样式):decorator 仅操作 G 列「导入失败原因」——黑色字体(argb
FF000000)、无背景填充(fill→none);其余列单元格样式/内容不修改。 - 列宽修复(关键 bug):失败明细列宽之前全部失效,根因是
CARGO_TYPE_FAIL_COL_WIDTH的 key 用了「类型/上级货物类型」等简写,而后端CargoTypeImportFailureExcel表头带*与括号说明(如*类型、上级货物类型(如为一级则不需填写)),key 对不上导致走默认 18。已把 key 改为与后端表头完全一致,并恢复「给所有列设宽」逻辑。最终宽度:*类型16 /上级货物类型(…)22 /上级货物类型编码(…)26 /*货物类型18 /*货物类型编码18 /备注24 /导入失败原因70。Node 验证通过。 - 事务性导入(后端改动):
CargoTypeServiceImpl.importCargoType加@Transactional(rollbackFor=Exception.class),逐条 validate+save 后若有任一失败则TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()回滚整批,实现"全部正确才入库,任一错误则一条都不存"。需重新编译部署 tms-erp-api-ws 后端生效。
国标 GB-T 42820-2023 数据 → cargo-type 导入(分析+转换)
- 源文件:
/Users/gxwebsoft/Downloads/副本货物类型导入模板_模拟数据(1).xlsx,单 Sheet,A1 是标题,真实表头在第 2 行。 - 源列:一级编码(A,2位)、一级类型(B)、二级编码(C,仅序号)、二级类型(D)、完整国标编码(E,4位)、一级类型/编码(F)、(G空)、(H标注不可靠)。
- 关键规则:二级真实编码 = E 列后 2 位,必须忽略 C 列序号;E 前 2 位 = A。116 行全为二级明细,唯一一级 19 个(01-99)。无重码、名称≤14字、无备注。
- 映射:系统 6 列模板(
*类型/上级货物类型(…)/上级货物类型编码(…)/*货物类型/*货物类型编码/备注)。一级行=类型一级、上级空、名称=B、编码=A;二级行=类型二级、上级名称=B、上级编码=A、名称=D、编码=E。 - 已生成预览/导入文件(按系统模板表头,编码列设文本格式):
/Users/gxwebsoft/VUE/tms-erp-web-ws/import-cargo-type/货物类型导入_一级.xlsx(19 条)、货物类型导入_二级.xlsx(116 条)。 - 用户确认:一级+二级都导、手动页面上传、测试/空环境直接导。导入动作由用户在系统"货物类型-批量导入"完成(两阶段:先一级后二级)。
- 后端导入机制补充(读 CargoTypeServiceImpl.importCargoType):逐行 build→validate→save,挂 @Transactional;二级父级解析走
findParentByCode查库。因同事务同连接,前面已 save 的一级对后续二级查询可见 → 单文件(一级行严格在前、二级在后)也能一次性成功。但整法"全有或全无":任一失败行触发 setRollbackOnly 回滚整批。分两文件主要规避"顺序依赖+全批回滚"两风险。 - 已新增单文件版:
/Users/gxwebsoft/VUE/tms-erp-web-ws/import-cargo-type/货物类型导入_单文件(一级在前).xlsx(一级19条在前+二级116条在后,共135数据行)。 - 美化:对 import-cargo-type 下 3 个 xlsx 表头统一加样式(灰底 #D9D9D9 + 黑色加粗居中 + 细边框 #D0D7E2 + 行高30),数据区细边框、编码列文本格式、列宽适配长表头;表头文字保持不变以兼容后端解析。
- 重新美化(按原始模板蓝色主题):提取 Downloads/副本货物类型导入模板_模拟数据(1).xlsx 样式(表头 #0070C0 蓝底白字微软雅黑11居中、数据行 #EBF1F8 浅蓝黑字微软雅黑10、边框 #D9D9D9 细线、表头行高24→因我表头更长设为30、数据行高19),应用到 3 个导入文件。注意:原始第1行是标题"GB-T 42820-2023…",但导入文件必须表头在 row1(后端按 row1 读),故不照搬标题行,只复用表头+数据行样式。