feat(cargo-type): 优化货物类型导入模板下载及导入逻辑

- 将导入模板下载改为直接获取工程内置静态文件,取消本地生成Excel逻辑
- 下载模板含一级19类及全部二级示例,便于用户填写层级关系和编码规则
- 后端导入逻辑改为两遍法,先验证保存所有一级类型,再导入二级,确保导入顺序无影响
- 保持事务回滚、失败明细Excel生成及校验文案一致
- 提示模板文件缺失或下载失败的错误信息,提升用户体验
- 前端改动已生效,后端需重新编译部署以完成加固
This commit is contained in:
2026-07-28 16:13:13 +08:00
parent 72c6abf122
commit d48b18c99e
3 changed files with 16 additions and 67 deletions

View File

@@ -27,3 +27,8 @@
- 已新增单文件版:`/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 读),故不照搬标题行,只复用表头+数据行样式。
## 模板下载改静态资源 + 导入两遍法加固(本次)
- 模板下载:`cargo-type.vue``handleTemplate()` 不再用 exceljs 本地生成 2 行示例,改为 fetch 工程内置静态文件 `public/cargo-type-import-template.xlsx`(内容=已生成的标准"单文件一级在前"模板含一级19类+全部二级示例),下载名仍为 `货物类型导入模板.xlsx`。base 用 `import.meta.env.BASE_URL`(当前 `/`)拼路径,无需后端 export-template 接口、离线可用。
- 后端加固(`CargoTypeServiceImpl.importCargoType`):由单遍逐行改为两遍法——第一遍先 validate+save 全部一级,第二遍再解析父级并 save 全部二级;父级解析仍走 `findParentByCode` 查库(第一遍已入库,同事务可见)。目的:让"完整导入"不受 Excel 行顺序影响(即使某二级行排在所属一级之前也不会整批失败);事务边界(`@Transactional` + 任一失败 `setRollbackOnly` 整批回滚)与失败明细 Excel表头=CargoTypeExcel+导入失败原因,与前端 decorator 列宽 key 完全一致)保持不变。
- 注意:后端 Java 改动未在本机编译,需在 tms-erp-api-ws 重新编译部署生效;校验文案(请选择货物类型级别/货物类型编码格式不正确/二级编码前2位必须与上级货物类型编码一致/该货物类型编码已存在/该上级下已存在同名货物类型/货物类型名称不能超过50字符/备注不能超过200字保持不变以匹配前端 `CARGO_TYPE_FAIL_RULES`