Files
tms-erp-web/.workbuddy/memory/2026-07-31.md
赵忠林 c270258b7b feat(ui): 顶部工具栏隐藏并重设计欢迎页仪表盘
- website.js中新增配置项关闭顶部语言切换、主题切换、日志和设置按钮
- top组件根据配置动态隐藏语言切换和设置按钮,仅保留用户头像下拉
- 默认主题改为浅色theme-d2,需手动切换或清空旧主题存储
- 完全重写欢迎页,移除默认营销内容,设计为TMS-ERP业务仪表盘,使用纯SVG/CSS绘图
- 欢迎页包括用户问候、四个核心指标卡、运单趋势、货物类型分布、运输方式占比、预警提醒和快捷入口
- 快捷入口路径模拟真实路由,需与后端菜单一致
- 对车辆里程录入界面搜索栏做细节调整,添加更合理的搜索字段宽度
- user模块中默认用户头像改为jpg格式图片
- vite配置文件新增多项插件和生产环境下的压缩优化配置
2026-07-31 19:04:57 +08:00

84 lines
8.3 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-31 工作记录
## 货物类型(/base/cargo-type批量导入「全或无」改造
- 需求:批量导入时只要任一行报错,整批都不入库,并返回失败明细 Excel。用户在「事务 vs 校验」之间选了"全或无 + 推荐方案"。
- 结论(已落地):**全量预校验 + 单事务兜底**,而非纯事务或纯校验二选一。
- 后端仓库:`/Users/gxwebsoft/JAVA/tms-erp-api-ws`BladeX本仓库 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.js``setupPaginationEnhancer()`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` 会影响所有分页,符合"全站统一"诉求;如后续某页面需恢复导航按钮,需针对该页用更高优先级样式覆盖或单独处理。
## 全站搜索按钮文案统一
- **文件**: `src/lang/zh.js``src/lang/en.js`
- **改动**:
- `tagsView.search`: `搜索``查询`(中)/ `Search``Query`(英)
- `crud.filter.resetBtn`: `清空条件``重置`
- **影响范围**: 全站所有 Avue CRUD 搜索栏按钮自动生效(通过 i18n 全局配置)
- **排除**: 地图搜索、日志清空等非 CRUD 场景的按钮文案保持不变
## 全站操作栏按钮隐藏图标
- **文件**: `src/styles/element-ui.scss`
- **改动**: 新增全局 CSS 规则 `.avue-crud__menu .el-button--text i, .avue-crud__menu .el-button i { display: none !important }`
- **效果**: 全站所有 Avue CRUD 操作列(查看/编辑/删除等)按钮前的图标统一隐藏,仅保留文字
- **方案选择**: CSS 全局覆盖,无需逐个修改 option 配置文件
## 全站操作栏按钮紧凑间距
- **文件**: `src/styles/element-ui.scss`
- **改动**: 新增全局规则 `.avue-crud__menu .el-button { margin-left: 4px; margin-right: 0; padding: 0 4px }`
- **效果**: 全站 CRUD 操作列按钮统一为 4px 间距 + 4px 内边距,与 cargo-type 一致
## 全站操作列宽度统一为 160px
- **目标**: 参考 cargo-typemenuWidth: 160的紧凑效果全站统一操作列宽度
- **改动**: ① `src/main.js` 全局默认 `menuWidth` 由 220 改为 160② 批量将 src 下 72 处 option/vue 里显式 `menuWidth: 数字` 统一替换为 `menuWidth: 160`
- **影响范围**: 全站所有 Avue CRUD 操作列(含自定义 menu 插槽列menuWidth 仍控制该列宽度)
- **风险**: 原部分页面操作按钮较多(如 tenant/customer-archive 等曾配 380~420统一 160px 后若按钮数 > 3 可能出现换行/溢出;如某页溢出需单独放宽或精简按钮
## 全站操作列内容左对齐
- **文件**: `src/styles/element-ui.scss`
- **原因**: cargo-type 用自定义 `#menu` 模板默认左对齐;其他页面用 Avue 内置菜单viewBtn:true默认右对齐
- **改动**: 新增 `.avue-crud .el-table td .cell.avue-crud__menu { text-align: left }`
- **效果**: 全站操作列统一左对齐
## 顶部工具栏工具全部隐藏
- **文件**: `src/config/website.js` + `src/page/index/top/index.vue`
- **改动**: ① website.js `setting` 新增/关闭 `theme:false``debug:false``lang:false``settingBtn:false`(原 theme/debug 仍为 true② index.vue 给 `<top-lang>``v-if="setting.lang"``<top-setting>``v-if="setting.settingBtn"`
- **效果**: 顶部工具排仅保留用户头像+姓名下拉(含退出登录);语言切换/设置齿轮/日志/皮肤图标均隐藏
- **默认主题**: `src/store/modules/common.js` 第 21 行 `themeName` 默认改为 `theme-d2`(已登录用户若 localStorage 存过旧主题需手动切一次或清存储)
## 欢迎页(/wel/index重设计为 TMS-ERP 业务仪表盘
- **文件**: `src/views/wel/index.vue`(整文件重写,移除 Saber 默认营销内容)
- **设计**: 浅色 d2 主题风,纯 SVG/CSS 自绘图表(项目无 echarts零依赖
- **模块**: ① 问候横幅(用户名+日期+新建运单按钮) ② 4 张核心指标卡(今日运单/在途运输/待办事项/运力车辆,含环比) ③ 运单趋势(SVG柱状,近7日) ④ 货物类型分布(SVG环形donut) ⑤ 运输方式占比(横向条) ⑥ 预警提醒列表 ⑦ 快捷入口网格(跳真实路由)
- **数据**: 全 mockdata() 中每项标注对应后端接口(如 /blade-business/waybill/count、/trend、/cargoStat 等),后续替换真实接口即可
- **预览**: `npm run build` 通过dev server `http://localhost:2889/`
- **注意**: 快捷入口 path 依据 views 目录结构推断(/business/waybill-manage 等),需与后端菜单 path 一致才能跳转