zzw
3 小时以前 5643f9caa25e78810e05073468c846411a373d04
HANDOFF.md
@@ -781,3 +781,160 @@
- 错误日志当前覆盖进入 Spring MVC 全局异常处理的异常;启动阶段异常、异步线程中未进入该处理器的异常暂不会自动落库。
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码与交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 20. 收尾快照(2026-10-06 周一,需求 23-25 系统配置、完工查阅与菜单父节点)
**本轮完成内容**
- 需求 23:系统名称和版本改为关键词配置,codename 分别为 `rk_SystemName`、`rk_SystemVer`。登录页、页头、Logo 替代文本和浏览器标题使用配置值;页头版本使用红色显示。
- 需求 24:新增“完工信息查阅”功能,菜单 `/completion/query`,接口 `GET /api/work-orders/completion/query`。查询结果按故障汇总,一个故障展开多张派工单;故障编号、rk_X号、设备、工程名称及损坏情况、上报单位、上报日期、序号这 7 列使用单元格纵向合并。每张派工单的完工处理情况和更换器材支持多条明细。
- 需求 24 的查询条件包括关键词、承修单位、完工状态和完工日期。关键词匹配故障、派工单、工程编号、承修人和明细内容。
- 需求 25:菜单管理编辑时,“上级菜单”改为可编辑级联选择器;编辑时排除当前菜单及其全部下级,按钮类型只能选择菜单类型父节点。
- 需求 25 后端同步增加父节点存在性、自引用和循环层级校验,避免通过接口构造循环菜单树。
**主要文件**
后端:
- `emergency-repair-server/src/main/java/com/emergencyrepair/business/dto/CompletionFaultQueryItem.java`(新增)
- `emergency-repair-server/src/main/java/com/emergencyrepair/business/controller/WorkOrderController.java`
- `emergency-repair-server/src/main/java/com/emergencyrepair/business/service/BusinessService.java`
- `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java`
- `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java`
- `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/ButtonPermissionCatalog.java`
前端:
- `emergency-repair-web/src/views/completion/CompletionQuery.vue`(新增)
- `emergency-repair-web/src/views/system/MenuManage.vue`
- `emergency-repair-web/src/components/AppHeader.vue`、`Login.vue`、`RepairLogo.vue`、`layout/AppLayout.vue`、`router/index.js`、`utils/sensitive.js`、`main.js`
- `emergency-repair-web/public/sensitive-words.json`、`public/index.html`
- `requirement/敏感词字典.json`
**验证结果**
- 后端 `mvn -B -DskipTests compile` 通过;前端 `npm run build` 通过,仅有既有包体积告警。
- `node .codex-run/verify-req23-25.js`:页面标题和页头使用“临抢修管理系统 / 网络版”,版本颜色为 `rgb(255, 107, 107)`;完工查阅显示故障 `GZ-2026-012`、处理情况和器材;菜单编辑父节点显示“故障管理”且可编辑。
- 接口实测:临时同一故障插入两张派工单和两条完工记录后,`GET /api/work-orders/completion/query?keyword=ZZ-MERGE-TEST-20261006` 返回 1 个故障、2 张派工单,每条各 1 条处理情况和 1 条器材。
- 浏览器合并实测:页面生成 2 张派工单行,故障编号单元格只出现 1 次,7 个故障信息列均有 `rowspan=2`,两张单各自的处理情况和器材均正常显示,无网络异常;截图 `.codex-run/completion-query-merge-verified.png`。临时数据库记录已清理。
- 菜单父节点接口实测:临时创建父子菜单成功;把父菜单移动到其子菜单下返回“上级菜单不能选择当前菜单的下级”;把子菜单移动到其他父节点成功;临时菜单已清理。
**当前运行状态(2026-10-06)**
- 前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。
- 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。
- 后端日志:`.codex-run/backend-20261006-req23-25-v2.out.log`、`.codex-run/backend-20261006-req23-25-v2.err.log`。
**接手注意**
- 完工信息查阅当前只汇总已经存在完工填报记录 `T_COMPLETION_INFO` 的派工单;仅完工处理但未填报完工信息的派工单不会出现在查阅结果中。
- 完工查阅接口当前一次返回全部匹配结果,没有分页;数据量进一步增大时建议增加分页或导出策略。
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 21. 收尾快照(2026-10-06 周一,需求 21 权限设置范围切换)
**本轮完成内容**
- 角色管理“权限设置”弹窗增加“全部 / 已设置”切换,交互方式与“用户设置”保持一致。
- “全部”显示完整菜单及按钮权限树,保留“全选”和原有权限反显。
- “已设置”仅显示当前角色已授权节点及其父级路径;没有已设置权限时显示空状态提示。
- 切换范围时会保留当前尚未保存的勾选状态,切回“全部”后恢复完整树及当前选中权限。
- 弹窗每次重新打开默认回到“全部”。
**主要文件**
- `emergency-repair-web/src/views/system/RolePermissionDialog.vue`
- `requirement/改进20261003.txt`(补充需求 21 的范围切换口径)
**验证结果**
- 前端 `npm run build` 通过,仅有既有包体积告警。
- `node .codex-run/verify-req21-22.js` 通过:左侧无“菜单权限管理”,角色管理存在“权限设置”。
- 全部视图显示 119 个复选框、13 个已勾选、1 个半选;已设置视图显示 14 个节点,均为当前已设置节点或父级路径;切回全部后勾选状态恢复,无网络异常。
- 截图:`.codex-run/role-permission-assigned-scope.png`。
**当前运行状态(2026-10-06)**
- 前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。
- 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。
**接手注意**
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 22. 收尾快照(2026-10-06 周一,需求 26 日志日期范围分隔符)
**本轮完成内容**
- 修复登录日志、操作日志、错误日志三个页面日期范围组件中间“至”显示不完整的问题。
- 三个页面的 `.el-range-separator` 固定为 `18px` 并居中显示,避免 Element UI 默认百分比宽度在 260px 日期控件中被压缩裁切。
**主要文件**
- `emergency-repair-web/src/views/system/LoginLogManage.vue`
- `emergency-repair-web/src/views/system/OperationLogManage.vue`
- `emergency-repair-web/src/views/system/ErrorLogManage.vue`
- `requirement/改进20261003.txt`(补充需求 26)
**验证结果**
- 前端 `npm run build` 通过,仅有既有包体积告警。
- `node .codex-run/verify-req26.js` 通过:三个日志页面均找到“至”,实际宽度、`clientWidth` 和 `scrollWidth` 均为 `18px`,计算样式为 `flex-basis: 18px`、`min-width: 18px`、居中,无网络异常。
- 截图:`.codex-run/login-log-date-separator.png`、`.codex-run/operation-log-date-separator.png`、`.codex-run/error-log-date-separator.png`。
**当前运行状态(2026-10-06)**
- 前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。
- 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。
**接手注意**
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 23. 收尾快照(2026-10-06 周一,需求 27 设备选择范围)
**本轮完成内容**
- 新增故障选择 `rk_X号`(产品结构树 `side` 类型节点)后,设备选择器只以所选节点为根展示其下级,不再同时返回型号根节点和整棵产品结构树。
- 设备选择器打开锁定范围时自动展开返回的 `side` 根节点,首屏直接显示第一层系统节点,后续继续按原逻辑懒加载。
- `xNo` 为空时仍返回完整产品结构树,不影响产品结构树管理和不按 `rk_X号` 筛选的设备选择场景。
**主要文件**
- `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java`
- `emergency-repair-web/src/components/ProductTreePicker.vue`
- `requirement/改进20261003.txt`(补充需求 27)
**验证结果**
- 后端 `mvn -B -DskipTests compile`、`mvn -B -DskipTests package` 通过;前端 `npm run build` 通过,仅有既有包体积告警。
- `GET /api/system/tree/product/side-roots?xNo=203` 修复后只返回 1 个根节点:`id=1280000000000009729`、`name=203`、`layer=side`、`level=2`;`201 / 203 / 301 / 测试T` 分别只返回对应节点。
- `node .codex-run/verify-req27.js` 通过:根节点文本仅为 `203`,自动展开 1 个根节点,首屏显示其下级系统节点,无网络异常。
- 请求链路确认:`/api/system/tree/product/side-roots?xNo=203` 后继续请求 `/api/system/tree/product/children?parentId=1280000000000009729`。截图:`.codex-run/req27-side-tree.png`。
**当前运行状态(2026-10-06)**
- 前端 `http://localhost:8082`,PID `138164`;后端 `http://127.0.0.1:8091`,PID `148268`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。
- 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。
- 后端日志:`.codex-run/backend-20261006-req27.out.log`、`.codex-run/backend-20261006-req27.err.log`。
**接手注意**
- 需求 26 已提交并推送,提交 `f651ad5`(`fix: show full date range separator in log filters`)。需求 27 已提交并推送,提交 `f9114ff`(`fix: limit equipment picker to selected X number`)。
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 24. 收尾快照(2026-10-06 周一,菜单名称被启动初始化覆盖)
**问题与修复**
- 手工把系统配置下的“产品结构树管理”改为“产品结构树”后,后端重启会恢复“管理”二字。
- 原因是 `DataInitializer.ensureMenu()` 每次启动都会拿代码中的默认名称覆盖已存在菜单。
- 已改为只在新建菜单时使用默认名称;已存在菜单只修复父节点、排序、类型和可见性,名称由菜单管理页面维护。
- 新建数据库的默认菜单名称同步改为“产品结构树”。
**主要文件**
- `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java`
**验证结果**
- 后端 `mvn -B -DskipTests compile`、`mvn -B -DskipTests package` 通过。
- 将数据库菜单 `id=2101493905517301763`、`url=/system/product-tree` 的名称改为“产品结构树”后,使用新 jar 重启后端,接口再次查询仍为“产品结构树”。
- 新后端 PID `151580`,监听 `8091`;日志:`.codex-run/backend-20261006-menu-name.out.log`、`.codex-run/backend-20261006-menu-name.err.log`。
## 25. 收尾快照(2026-10-07 周三,清空故障及完工业务数据)
**本次操作**
- 清空 `LX.T_FAULT`、`LX.T_WORK_ORDER`、`LX.T_COMPLETION_INFO`、`LX.T_ACCEPTANCE` 四张业务表。
- 清空前数量:故障 `23`、派工单 `8`、完工信息 `6`、验收 `6`;清空后均为 `0`。
- 同步关闭启动演示业务数据回填:新增配置 `app.seed-demo-data=false`,避免 `T_FAULT` 为空时后端重启又自动生成 16 条演示故障及完工数据。
**主要文件**
- `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java`
- `emergency-repair-server/src/main/resources/application.yml`
**验证结果**
- 后端 `mvn -B -DskipTests clean package` 通过。
- 使用新 jar 重启后再次查询,四张业务表仍均为 `0` 行;登录接口 `200`,前端首页 `200`。
- 当前后端 PID `21528`,监听 `8091`;日志:`.codex-run/backend-20261007-cleared.out.log`、`.codex-run/backend-20261007-cleared.err.log`。
- 如需重新灌入演示业务数据,将 `app.seed-demo-data` 临时设为 `true` 后重启。