Files
tms-erp-web/.workbuddy/memory/2026-07-31.md
赵忠林 9b7f8db96b refactor(pagination): 全站统一隐藏分页导航按钮
- cargo-type 页面原先通过局部方案隐藏首页/上一页/下一页/尾页按钮,现回退该方案
- 修改 src/utils/pagination.js,删除首页和尾页按钮全局增强器注入逻辑
- 优化 updatePaginationButtons,移除首页/尾页按钮状态更新代码
- 在 src/styles/element-ui.scss 添加全局样式,统一隐藏 el-pagination 组件的上一页和下一页按钮
- 保留跳转按钮功能,确保分页跳转操作可用
- 修改语言文件,将“收缩”文案优化为“收起”以提升用户体验
- 全站所有分页组件仅显示总数、每页大小、页码与跳转,符合统一规范要求
- 如需恢复个别页面导航按钮,需添加更高优先级样式覆盖或单独处理
2026-07-31 17:54:51 +08:00

4.6 KiB
Raw Blame History

2026-07-31 工作记录

货物类型(/base/cargo-type批量导入「全或无」改造

  • 需求:批量导入时只要任一行报错,整批都不入库,并返回失败明细 Excel。用户在「事务 vs 校验」之间选了"全或无 + 推荐方案"。
  • 结论(已落地):全量预校验 + 单事务兜底,而非纯事务或纯校验二选一。
  • 后端仓库:/Users/gxwebsoft/JAVA/tms-erp-api-wsBladeX本仓库 tms-erp-web-ws 是纯前端,无 Java
  • 改动文件:blade-service/blade-system/.../service/impl/CargoTypeServiceImpl.java(仅此一文件,未动 Controller/前端)。
  • 实现要点:
    • importCargoType 拆为两阶段:阶段一 validateImportAll(只读,不写库)→ 任一失败直接返回失败明细、整批不入库;阶段二 saveImportAll 全部通过后才在 @Transactional 内统一写库(兜底防半截入库)。
    • 补上原缺失的校验:文件内编码全局去重、一级名称去重、二级(同上级)名称去重;二级父级解析同时支持 DB 与"文件内一级映射"(解决"单文件一级在前"场景,二级引用同文件的一级)。
    • 原代码其实已是 @Transactional + setRollbackOnly,但"边校验边写库"且缺文件内去重/父子引用校验;本次重构成更干净的预校验优先。
  • 前端无需改动:src/views/base/cargo-type.vue + utils/import-excel.js 已支持失败明细 Excel 下载与 decorateCargoTypeFailDetail 装饰。
  • 验证:本环境无 maven无法编译已做静态核对imports/方法/字段/括号完整,无 TransactionAspectSupport 残留)。需在本地 mvn -pl blade-service/blade-system compile 确认。
  • 遗留小问题(非本次引入,可选优化):后端二级编码前缀报错文案为"货物类型编码前2位必须与上级货物类型编码一致",而前端 CARGO_TYPE_FAIL_RULES 匹配的是"二级编码前2位必须与上级货物类型编码一致",二者不完全一致,导致该错误前端不会追加规则说明(仍会显示原因)。可后续对齐文案。

cargo-type 分页隐藏「首页/上一页/下一页/尾页」

  • 根因:页面有两套分页——有数据时用 avue-crud 自带分页(默认 layout total, sizes, prev, pager, next, jumper,原生上一页/下一页来自这里);无数据时用共享组件 <empty-pagination>layout 写死同样带 prev/next。「首页/尾页」按钮不是 Avue/EP 原生的,而是全局增强器 src/utils/pagination.jssetupPaginationEnhancer()main.js 第 98 行全局启用)扫描所有 .el-pagination,在 .btn-prev 前插「首页」、.btn-next 后插「尾页」。
  • 关键机制:增强器只在存在 .btn-prev/.btn-next 时才注入首页/尾页。因此去掉分页 layout 里的 prev/next首页/尾页就不会被注入。
  • 改动(仅 src/views/base/cargo-type.vue,未碰共享组件):① page 数据加 layout: 'total, sizes, pager, jumper' 处理有数据状态;② 新增 scoped :deep(.avue-crud__pagination) 规则隐藏 .btn-prev/.btn-next/.erp-pagination-first/.erp-pagination-last,覆盖无数据时的 empty-pagination 状态。
  • 注意:empty-pagination 被 16+ 页面共用,本次未改它的默认 layout避免影响其它页面。如需其它页面也隐藏应给该组件加 layout prop 而非改默认值。

全站分页统一隐藏「首页/上一页/下一页/尾页」(接上一条)

  • 用户要求全站统一。逐页改不现实empty-pagination 被 16+ 页共用,还有大量 avue-crud 自带分页),改为集中两处全局改动
    1. src/utils/pagination.js:删除全局增强器对「首页/尾页」按钮的注入(保留「跳转」);同步精简 updatePaginationButtons(不再处理 first/last disabled
    2. src/styles/element-ui.scss:新增全局规则 .el-pagination { .btn-prev, .btn-next { display: none !important } },统一隐藏原生「上一页/下一页」。
  • 因此回退了 cargo-type.vue 之前的两处页面级改动page.layout 与 scoped 隐藏样式避免与全局方案两套机制并存cargo-type 现由全局方案统一接管。
  • 效果:全站所有 el-pagination含 avue-crud 自带分页与 empty-pagination均只保留「总条数/每页条数/页码/跳转」,首页/上一页/下一页/尾页全部隐藏;「跳转」按钮保留。
  • 风险点:全局 display:none !important 会影响所有分页,符合"全站统一"诉求;如后续某页面需恢复导航按钮,需针对该页用更高优先级样式覆盖或单独处理。