Files
tms-erp-web/.workbuddy/memory/2026-07-27.md
赵忠林 e76cf70a20 feat(cargo-type): 优化货物类型导入失败明细的错误标记和提示
- 新增导入失败明细的加工函数,给违规字段自动标红并丰富错误提示信息
- 在导入弹窗调用中增加失败明细装饰器处理,提升用户体验
- 将货物类型组件option配置提取为单独模块,简化代码逻辑
- 调整货物类型表单禁用逻辑,避免非新增时的错误操作
- 移除原有表单校验函数,相关验证由导入失败明细装饰器替代
- 引入exceljs依赖以支持导入失败Excel文件的读取和修改
- 修复导入失败明细导出时的文件命名和内容加工问题
- 优化代码结构,提升维护性和可读性
2026-07-27 23:58:29 +08:00

47 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-07-27 工作日志
## 开发环境启动与登录排查
- 终止了遗留的 2888 端口 dev server 进程,清理端口占用。
-`.env.development``VITE_APP_API``http://172.16.203.228:8000/api` 改为 `/api`,让前端请求走 Vite 代理。
-`vite.config.mjs``/api` 代理 target 从 `http://localhost` 改为 `http://172.16.203.228:8000`,并去掉 `rewrite`(后端接口本身就在 `/api` 前缀下,不能去掉)。
- 修复后发现登录无响应的根因:后端 CORS 返回 `Access-Control-Allow-Origin: *`,与 axios `withCredentials: true` 冲突,浏览器拦截所有跨域请求;走 Vite 代理后同源CORS 问题消失。
- 启动 dev server 于 `http://localhost:2888`
- 使用 agent-browser系统 Chrome打开登录页填入账号 `admin` / 密码 `admin`,成功触发行为验证码弹窗。
- 行为验证码(滑块/拼图)需人工在浏览器窗口完成。
## 货物类型导入模板模拟数据
- 模板:`/Users/gxwebsoft/Downloads/货物类型导入模板.xlsx`,单 Sheet「货物类型导入模板」表头 6 列:类型(必填)、上级货物类型、上级货物类型编码、货物类型(必填)、货物类型编码(必填)、备注。一级类型上级字段留空。
-`/Users/gxwebsoft/Downloads/货物类型导入模板_模拟数据.xlsx` 生成 5 条模拟数据2 条一级 + 3 条二级,演示层级)。原模板保持不变。
## 货物类型模块(/base/cargo-type按需求完善
- 需求:新增默认二级;类型/上级/编码在编辑查看禁编辑;一级隐藏上级字段、二级显示;同上级名称唯一 + 编码全局唯一交后端;提交失败展示后端提示。
- 抽出 `src/option/base/cargo-type.js`,导出工厂 `getCargoTypeOption(ctx)`,依赖组件的校验/change 通过 `ctx` 闭包访问(`ctx.form``ctx.handleTypeLevelChange` 等),避免 Option API 写死 this。
- `cargo-type.vue` 改动import 该 option新增默认 `typeLevel:2``beforeOpen` 设置 `dialogType`add/edit/view上级下拉框 `:disabled="dialogType!=='add' || typeLevel!==2"`;列配置加 `editDisabled:true`(类型/编码/上级编码控制编辑禁用view 模式 Avue 自动禁用其余字段。
- 提交失败处理axios 拦截器已对非 200 弹 `ElMessage`(后端 msg故 rowSave/rowUpdate 的 error 仅 `loading()`,不再 console/重复 toast。
- 导入失败明细下载已合规:`src/utils/import-excel.js``handleImportExcel` 已实现 content-type 区分 JSON/Excel、失败下载 `货物类型导入失败明细时间.xlsx`、错误提示businessName='货物类型'。
- 注意:导入/下载模板由后端 `/blade-system/cargo-type/import-cargo-type``/export-template` 控制,前端模板列名由后端决定,需后端保证与需求卡字段一致。
## 货物类型批量导入失败排查19:12
- 失败明细 `货物类型导入失败明细2026-07-27 19_12_24.xlsx`5 条全部「请选择货物类型级别」。
- 根因(数据问题,非前端代码):模拟数据「类型」列误填为业务分类 `普通货物/冷链货物`,但需求卡 REQ-CARGO-007/008 规定「类型」是**货物类型级别**,仅允许填 `一级货物类型`/`二级货物类型`;且编码误用字母(`GOODS-ELEC-001`),违反 REQ-CARGO-006「一级 2 位数字、二级 4 位数字」。
- 已重造 `货物类型导入模板_模拟数据.xlsx`:类型改为一级/二级编码改为纯数字01/02 一级0101/0102/0201 二级继承父级前 2 位)。
- 风险:二级行依赖一级行已存在,若后端按 DB 校验而非按文件顺序处理,二级行可能报「请选择上级货物类型」,建议先导入 2 条一级、再导入 3 条二级。
## 货物类型导入失败复查23:27
- 第二版失败明细 `货物类型导入失败明细2026-07-27 19_17_21.xlsx`:类型已正确,但一级报「货物类型编码格式不正确」、二级报「请选择上级货物类型」。
- 根因:编码列被存成**数字(int)**,前导零丢失('01'→1、'0101'→101一级编码非 2 位、二级非 4 位;一级失败未入库 → 二级找不到上级。
- 修复:写入时强制 C/E 列 `number_format='@'`(文本)保留前导零;编码 '01'/'02'、'0101'/'0102'/'0201'。
- 为消除级联风险拆成两个文件货物类型导入_一级.xlsx(2条)、货物类型导入_二级.xlsx(3条),先导入一级再导入二级确保成功。
## 货物类型导入第三次复查23:30
- 第三版失败明细一级导入也失败报「该货物类型编码已存在」01/02 已被占用。根因01/02 极可能是用户此前测试新增功能时手动建的,导入撞车;失败导入不写库,说明编码 pre-exist。
- 同期发现 2888 dev server 进程退出lsof 无监听),导致 Vite 代理对 localhost:2888 全返回 502含根路径。已重启 `pnpm dev`(端口 2888proxy target 172.16.203.228:8000代理恢复 200。后端直连一直正常。
- 改用新编码重造:一级 11/12电子产品/生鲜食品),二级 1101/1102父11、1201父12文本格式保留前导零。三份文件一级/二级/合并)已更新。
- 结论:导入功能本身 OK问题一直是造数类型值、编码格式、编码冲突+ dev server 偶发退出。建议导入前确认 dev server 在跑。