# 临抢修管理系统交接文件(2026.10.3) ## 基本信息 - 仓库目录:`D:\projectJava\lqx` - Git 分支:`main` - 基线提交:`f17c76c fix: load only active report data` - 原始需求文件:`requirement/改进20261003.txt` - 交接整理时间:2026-10-04 - 本轮工作日期:2026-10-03 - 提交状态:需求 11、12、17-19 已完成并完成浏览器、接口及端到端联调,本轮代码已提交并推送 `main` 分支,提交 `757dcb3`;交接文件回填提交记录。 - 注意事项:`requirement/改进20261003.txt` 是用户原始需求记录,本次未修改。 > 2026-10-04 更新:需求 11、12、17-19 已完成并完成浏览器、接口及端到端联调;本轮代码已提交并推送 `main` 分支,提交 `757dcb3`。`DEPT_NAME` 匹配等剩余风险见第十一节。 ## 一、需求完成情况 | 序号 | 需求 | 状态 | 主要实现 | | --- | --- | --- | --- | | 1 | logo 使用 `public/logo.png` | 已完成 | `RepairLogo.vue` 读取 `${BASE_URL}logo.png`,文件位于 `emergency-repair-web/public/logo.png` | | 2 | 用户管理,左右结构,左侧用户表格、右侧角色复选及反显 | 已完成 | 新增 `UserManage.vue`;支持用户名、账户名、部门、角色过滤;支持一人多角色 | | 3 | 登录日志、操作日志 | 已完成 | 新增登录日志和操作日志页面、实体、Mapper;操作日志记录新增、修改、删除请求 | | 4 | 菜单管理增加按钮类型,按钮只能挂在菜单下级 | 已完成 | `MenuManage.vue`、`ButtonPermissionCatalog.java`;页面按钮可自动获取并同步为 `MENU_TYPE=2` | | 5 | 代码中的“装备”改成“设备” | 已完成 | 前端、后端源码检查无“装备”匹配;初始化菜单也有替换逻辑 | | 6 | 多文档标签横向滚动时高度不足、文字显示不全 | 已完成 | `AppLayout.vue` 调整多文档标签栏、滚动条和标签高度 | | 7 | 放开权限,其他用户也可以登录 | 已完成 | `AuthController` 查询外部用户表,不再只允许 admin;其他有效用户可登录 | | 8 | 菜单权限管理父子节点复选联动 | 已完成 | `MenuPermission.vue` 使用 Element UI 默认级联复选逻辑,并在保存时包含半选父节点 | | 9 | 用户管理批量设置角色;角色管理增加角色用户设置 | 已完成 | 用户管理支持“追加角色”和“覆盖角色”;角色管理支持“用户设置”和角色用户反显 | | 10 | 产品结构树改为同义词表 `ZT_BOAT_TREE` | 已完成,仍有待确认事项 | 已映射 `LABEL`、`INFO_ID`、`CONNECT_ID`、`CONNECT_GROUP`、`LAYER`;已改为懒加载 | ## 二、用户与角色授权 ### 2.1 用户管理 页面文件: - `emergency-repair-web/src/views/system/UserManage.vue` 功能: - 左侧用户表格显示: - 用户名 - 账户名 - 所属部门 - 角色权限 - 手机号 - 状态 - 支持按用户名、账户名、部门、角色过滤。 - 选择左侧用户后,右侧复选显示该用户拥有的角色。 - 一个用户可以同时拥有多个角色。 - 支持多选用户后“批量设置角色”: - `append`:保留原角色,追加勾选角色。 - `replace`:使用勾选角色覆盖原角色。 - `replace` 且未选择角色时,会清空所选用户的全部角色。 相关接口: - `GET /api/system/users` - `GET /api/system/users/{userId}/roles` - `PUT /api/system/users/{userId}/roles` - `PUT /api/system/users/roles/batch` ### 2.2 角色管理 页面文件: - `emergency-repair-web/src/views/system/RoleManage.vue` 功能: - 每行角色增加“用户设置”。 - 弹窗中可过滤用户,复选并反显当前角色所属用户。 - 保存角色用户关系时只替换该角色的用户关系,不删除这些用户拥有的其他角色。 相关接口: - `GET /api/system/roles/{roleId}/users` - `PUT /api/system/roles/{roleId}/users` 服务实现: - `SystemService.roleUsers(...)` - `SystemService.saveRoleUsers(...)` 按钮权限: - `system:roles:assign` ## 三、日志功能 ### 3.1 登录日志 实现位置: - `emergency-repair-server/src/main/java/com/emergencyrepair/auth/AuthController.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysLoginLog.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysLoginLogMapper.java` - `emergency-repair-web/src/views/system/LoginLogManage.vue` 记录内容: - 用户 ID - 账户名 - 用户名 - 部门 - 登录 IP - 登录状态 - 登录结果说明 - 登录时间 接口: - `GET /api/system/login-logs` ### 3.2 操作日志 实现位置: - `emergency-repair-server/src/main/java/com/emergencyrepair/system/log/OperationLogInterceptor.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysOperationLog.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysOperationLogMapper.java` - `emergency-repair-web/src/views/system/OperationLogManage.vue` 记录规则: - 拦截 `/api/**` 下的 `POST`、`PUT`、`DELETE` 请求。 - 登录接口排除,由登录日志负责。 - 记录模块、操作类型、目标类型、目标 ID、请求方式、请求 URI、成功/失败、操作人和时间。 - 业务请求失败时,日志写入异常不会影响原业务请求。 - 当前操作日志用户取请求头 `X-Username`;如果调用方没有传该请求头,会回退记录为 `admin`。手机端或第三方调用时需要注意补齐该请求头。 接口: - `GET /api/system/operation-logs` ### 3.3 日志表 由 `DatabaseBootstrap` 创建: - `LX.T_SYS_LOGIN_LOG` - `LX.T_SYS_OPERATION_LOG` 索引: - `IX_T_SYS_LOGIN_LOG_TIME` - `IX_T_SYS_OPERATION_LOG_TIME` - `IX_T_SYS_ROLE_USER_USER` ## 四、菜单与按钮权限 页面文件: - `emergency-repair-web/src/views/system/MenuManage.vue` - `emergency-repair-web/src/views/system/MenuPermission.vue` 按钮目录: - `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/ButtonPermissionCatalog.java` 规则: - 菜单类型: - `0`:目录 - `1`:菜单 - `2`:按钮 - 按钮只能挂在菜单类型 `1` 的下级。 - 菜单页面点击“页面按钮”后,后端从按钮目录自动列出该页面可配置按钮。 - 勾选并保存后,自动生成按钮类型菜单。 - 按钮类型菜单可继续在菜单权限管理中授权给角色。 - 菜单权限树使用父子节点联动,保存时同时收集已选中节点和半选父节点。 相关接口: - `GET /api/system/menu/buttons` - `POST /api/system/menu/buttons` - `GET /api/system/menu-permissions` - `POST /api/system/menu-permissions` ## 五、产品结构树 ### 5.1 数据源 实体文件: - `emergency-repair-server/src/main/java/com/emergencyrepair/business/entity/ProductNode.java` 映射表: ```text LX.ZT_BOAT_TREE ``` 物理表: ```text CSICZB_ZB.ZT_BOAT_TREE ``` 已确认 `CSICZB` 和 `LX` 下均有同义词。 字段映射: | 外部表字段 | Java 字段 | 说明 | | --- | --- | --- | | `INFO_ID` | `id` | 业务节点主键 | | `CONNECT_ID` | `parentId` | 父节点 ID | | `CONNECT_GROUP` | `connectGroup` | 祖辈路径 | | `LABEL` | `name` | 设备名称 | | `LAYER` | `layer` | 节点类型 | | `SORT` | `sortNo` | 排序 | | `ISDELETE` | `isDelete` | 删除标记 | | `ID` | `recordId` | 物理关系行 ID | 已知层级兼容映射: | `LAYER` | 前端层级 | 前端类型 | | --- | --- | --- | | `model` | 1 | `MODEL` | | `side` | 2 | `X_NO` | | `system1` | 3 | `SYSTEM1` | | `system2` | 4 | `SYSTEM2` | | `equipment` | 5 | `DEVICE` | | 其他值 | 6 | 原始值大写 | ### 5.2 实际数据情况 2026-10-03 DM8 实测: - 物理行数:12974 - 去重后 `INFO_ID`:12972 - 重复 `INFO_ID`:2 个 - 根节点:2 个 - `equipment`:12798 - `system1`:161 - `side`:9 - `model`:2 - 未知层级:`ttt`、`sss`、`rrrr`,各 1 个 示例根节点: - `INFO_ID=1280000000000006486` - 名称:`型号s44444` - `LAYER=model` ### 5.3 懒加载改造 由于 12972 个节点一次性加载和渲染会导致浏览器卡死,产品树已经改为按展开层级懒加载。 新增接口: - `GET /api/system/tree/product/roots` - `GET /api/system/tree/product/children?parentId={id}` - `GET /api/system/tree/product/side-roots?xNo={xNo}` - `GET /api/system/tree/product/x-numbers` - `GET /api/system/tree/product/selected?ids={id1,id2}` 前端使用位置: - `TreeManage.vue`:产品树管理 - `ProductTreePicker.vue`:故障上报和故障编辑中的设备选择 - `FaultReport.vue` - `FaultEditDialog.vue` - `XcbReview.vue` 处理结果: - 产品树管理首屏只返回 2 个根节点。 - 展开根节点时只请求直接子节点。 - 故障页面 X 号不再遍历完整树,直接请求 X 号列表。 - 编辑故障时通过“已选设备”接口反显设备名称和路径。 - 产品树管理隐藏了外部表不存在的“编码”字段。 - 产品节点删除采用软删除,设置 `ISDELETE=1`。 ### 5.4 产品树待确认事项 用户已说明:实际结构并非严格按 `model -> side -> system1 -> system2 -> equipment` 排列,可能缺少 `system2`,且 `system2` 下也可能挂非 `equipment` 类型节点。 目前实现仍有以下约束: - 未知 `LAYER` 目前统一映射为第 6 级。 - 前端当前最大编辑层级固定为 5,第 6 级节点通常只能查看,点击“新增下级”的条件不满足。 - 需要用户后续确认未知层级是只读展示、归入“其他”,还是允许继续配置下级。 - 产品树写入的是外部表同义词,正式环境需确认数据库账号对 `CSICZB_ZB.ZT_BOAT_TREE` 的增删改权限。 - `DatabaseBootstrap` 中仍保留旧 `LX.T_PRODUCT_TREE` 建表定义,但 `ProductNode` 已不再使用旧表,`DataInitializer` 也已停止初始化产品树演示数据。 ## 六、构建与运行 ### 6.1 环境 - Java:`C:\Program Files\Java\jdk1.8.0_172` - Maven:`D:\solidDir\apache-maven-3.6.1\bin\mvn.cmd` - Node/npm:`C:\Program Files\nodejs\npm.cmd` - 后端端口:`8091` - 前端端口:`8082` - DM8:`127.0.0.1:5236` - DM8 数据库账号:`SYSDBA / SYSDBA` - 登录示例:`admin / admin` 或 `admin / admin123` ### 6.2 后端构建 ```powershell $env:JAVA_HOME='C:\Program Files\Java\jdk1.8.0_172' Set-Location 'D:\projectJava\lqx\emergency-repair-server' & 'D:\solidDir\apache-maven-3.6.1\bin\mvn.cmd' -B -DskipTests clean package ``` 构建结果:成功。 JAR 路径: ```text D:\projectJava\lqx\emergency-repair-server\target\emergency-repair-server-1.0.0-SNAPSHOT.jar ``` 启动示例: ```powershell Start-Process ` -FilePath 'C:\Program Files\Java\jdk1.8.0_172\bin\java.exe' ` -ArgumentList '-jar','D:\projectJava\lqx\emergency-repair-server\target\emergency-repair-server-1.0.0-SNAPSHOT.jar' ` -WorkingDirectory 'D:\projectJava\lqx\emergency-repair-server' ` -WindowStyle Hidden ` -PassThru ``` ### 6.3 前端构建 ```powershell Set-Location 'D:\projectJava\lqx\emergency-repair-web' & 'C:\Program Files\nodejs\npm.cmd' run build ``` 构建结果:成功。 构建告警: - `chunk-5be386f4` 约 1.01 MiB。 - `chunk-vendors` 约 946 KiB。 - 属于包体积告警,不阻塞运行。 启动开发服务: ```powershell Set-Location 'D:\projectJava\lqx\emergency-repair-web' & 'C:\Program Files\nodejs\npm.cmd' run serve ``` 前端代理配置: - `/api` 代理到 `http://127.0.0.1:8091` - 前端地址:`http://localhost:8082` ## 七、已完成验证 ### 7.1 编译验证 - 后端:`mvn -B -DskipTests clean package` 通过。 - 前端:`npm run build` 通过。 ### 7.2 浏览器验证 角色管理: - “用户设置”按钮存在。 - 弹窗反显 44 个用户。 - 首个角色选中 6 人。 用户管理: - “批量设置角色”按钮存在。 - 角色授权面板存在。 - 表格返回 20 行。 产品树: - 首屏 2 个根节点。 - 展开第一个根节点后显示 5 个直接子节点。 - X 号数量 9 个。 - 已选设备接口能返回名称和完整路径。 - 产品树管理和故障选择设备弹窗均可正常加载,未出现整树渲染卡死。 验证截图和脚本: - `.codex-run/role-users-verified.png` - `.codex-run/user-manage-verified.png` - `.codex-run/product-tree-verified.png` - `.codex-run/product-tree-lazy-verified.png` - `.codex-run/verify-ui.js` - `.codex-run/verify-lazy-tree.js` - `.codex-run/verify-picker.js` ### 7.3 交接时进程状态 2026-10-04 12:28 重新构建并启动后,当前运行状态:`8082` 前端开发服务监听中,`8091` 后端监听中。启动日志位于 `.codex-run/backend.out.log` 和 `.codex-run/backend.err.log`。 2026-10-03 最后验证时曾运行: - 后端端口:`8091` - 前端端口:`8082` - Edge 调试端口:`9222` 重新联调时按第六节命令启动后端和前端。 ## 八、主要变更文件 后端: - `emergency-repair-server/src/main/java/com/emergencyrepair/auth/AuthController.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DatabaseBootstrap.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/business/dto/Requests.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/business/entity/ProductNode.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.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-server/src/main/java/com/emergencyrepair/system/log/OperationLogInterceptor.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysLoginLog.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysOperationLog.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysLoginLogMapper.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysOperationLogMapper.java` 前端: - `emergency-repair-web/public/logo.png` - `emergency-repair-web/src/components/RepairLogo.vue` - `emergency-repair-web/src/components/ProductTreePicker.vue` - `emergency-repair-web/src/layout/AppLayout.vue` - `emergency-repair-web/src/router/index.js` - `emergency-repair-web/src/views/system/UserManage.vue` - `emergency-repair-web/src/views/system/RoleManage.vue` - `emergency-repair-web/src/views/system/MenuManage.vue` - `emergency-repair-web/src/views/system/MenuPermission.vue` - `emergency-repair-web/src/views/system/TreeManage.vue` - `emergency-repair-web/src/views/system/LoginLogManage.vue` - `emergency-repair-web/src/views/system/OperationLogManage.vue` - `emergency-repair-web/src/views/fault/FaultReport.vue` - `emergency-repair-web/src/views/fault/FaultEditDialog.vue` - `emergency-repair-web/src/views/fault/XcbReview.vue` ## 九、接手建议 1. 先确认 `git status`,不要回退当前未提交修改。 2. 先启动后端,再启动前端,确认 `8091` 和 `8082` 可访问。 3. 产品树后续优先确认未知 `LAYER` 的展示和编辑规则。 4. 正式联调时检查操作日志是否能拿到真实 `X-Username`,避免全部回退为 `admin`。 5. 如果要把产品树写入外部同义词表,先确认数据库账号权限和外部系统对 `ISDELETE` 软删除的约定。 ## 十、2026-10-04 补充需求(13-16) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 13 | 敏感词 codename 增加 `rk_` 前缀 | 已完成 | `public/sensitive-words.json`、`requirement/敏感词字典.json` 已更新;菜单及页面旧文案已迁移为 `rk_`;前端保留无前缀别名兼容 | | 14 | 故障编号前缀后台可配置 | 已完成 | `application.yml` 新增 `fault-code.prefix`,默认 `固定前缀-`;实测编号 `固定前缀-001/A-261004-001` | | 15 | 所有表自动记录创建人、修改人 | 已完成 | 新增 `BaseAuditEntity`、`CurrentUserInterceptor`、`AuditMetaObjectHandler`;实测创建写入 `codex-create-user`,修改写入 `codex-update-user` | | 16 | 所有表逻辑删除并自动过滤 | 已完成 | 自建表新增 `DEL_FLAG`,实体继承 `@TableLogic`;报表 SQL 已增加过滤;实测逻辑删除后列表查询返回 0 条 | 补充说明: - 产品结构树外部同义词表 `LX.ZT_BOAT_TREE` 沿用自己的 `ISDELETE`,不额外增加 `UPDATE_BY`、`DEL_FLAG`。 - 故障编号序号查询会包含逻辑删除记录,避免唯一索引冲突。 - 操作日志新增、修改、删除均已实测落库。 ## 十一、2026-10-04 联调收尾(11、12、17-19) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 11 | 完工情况处理改为“完工”时不跳转完工信息填报 | 已完成 | 完工处理只更新派工单状态;完工处理与完工填报由不同用户分别操作 | | 12 | 完工信息填报只显示已完工、本单位、未填报派工单,并显示工程/项目名称 | 已完成 | 选择列表按“完工状态 + 登录用户所属单位 + 尚未填报”限制,并显示工程名称 | | 17 | 角色管理用户设置增加“全部 / 已设置”切换 | 已完成 | `RoleManage.vue` 增加范围过滤,已设置和全部列表可切换 | | 18 | 增加组织机构(部门树表)功能 | 已完成 | 菜单 `/system/organization`,页面 `OrganizationManage.vue`,数据来自 `CSICZB_ZB.SYS_DEPT`,接口 `/api/system/depts`;当前 34 个部门 | | 19 | 承修单位改为查询部门表中 `DEPT_TYPE='cj'` 的记录 | 已完成 | `SystemService.listContractors()` 查询 cj 部门,部门 ID/名称用于审核和派单;承修单位页只读;当前 7 个 cj 部门 | ### 11.1 主要变更文件 后端: - `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.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-web/src/views/system/OrganizationManage.vue` - `emergency-repair-web/src/views/system/ContractorManage.vue` - `emergency-repair-web/src/views/completion/CompletionReport.vue` - `emergency-repair-web/src/views/system/RoleManage.vue` - `emergency-repair-web/src/router/index.js` ### 11.2 验证结果 - 后端 `mvn -B -DskipTests clean package` 通过;前端 `npm run build` 通过。 - `node .codex-run/verify-items-11-12-17.js`、`node .codex-run/verify-items-18-19.js` 通过。 - 截图:`.codex-run/organization-verified.png`、`.codex-run/contractor-readonly-verified.png`、`.codex-run/completion-report-verified.png`、`.codex-run/role-scope-verified.png`。 - 端到端临时故障 `固定前缀-088/A-261004-001` 已跑通上报、XCB审核分配“厂家1/厂家2”、CMB/JCC三级审批和派单;生成两张派工单,承修单位为 cj 部门 ID/名称。 - 完工填报可见性:`cjyh1-1` 仅见厂家1派工单,`cjyh2-1` 仅见厂家2派工单,`admin` 见两张;临时 `T_FAULT`、`T_WORK_ORDER` 数据已清理。 ### 11.3 当前服务 - 前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge 调试端口 `9222`。 - 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。 ### 11.4 接手注意 - 非管理员完工填报的单位匹配目前按 `DEPT_NAME`,不是 `DEPT_ID`;若出现同名部门,应改为 ID 精确匹配。 - 历史演示派工单可能仍保存旧 `T_CONTRACTOR` 名称,非管理员 cj 用户可能看不到;`admin` 不受单位过滤影响。 - `.codex-run`、Office 锁文件以及 `emergency-repair-web/public/新建 文本文档.txt` 是本地联调或临时文件,不应提交。 ## 十二、2026-10-06 联调收尾(需求 20) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 20 | 菜单权限管理取消租户权限,仅保留角色权限;权限复选框反显 | 已完成 | 权限树保留菜单和按钮节点;角色切换后正常反显,接口仅处理 `roleId` / `roleMenuIds` | ### 12.1 主要变更文件 后端: - `emergency-repair-server/src/main/java/com/emergencyrepair/business/dto/Requests.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java` 前端: - `emergency-repair-web/src/views/system/MenuPermission.vue` ### 12.2 验证结果 - 后端 `mvn -B -DskipTests compile` 通过;前端 `npm run build` 通过。 - `GET /api/system/menu-permissions?roleId=2106221661022490625` 返回字符串型 `roleMenuIds` 共 14 条,避免浏览器解析雪花 ID 时丢失精度。 - `node .codex-run/verify-menu-permission.js` 输出 `hasTenantPanel: false`、`buttonNodeCount: 76`、`checkedMatchesSaved: true`、`hasError: false`。 - 页面保留按钮节点,角色切换后权限树复选框反显正常;截图 `.codex-run/menu-permission-verified.png`。 ### 12.3 接手注意 - 本轮代码与交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。 ## 十三、2026-10-06 联调收尾(需求 21-22) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 21 | 菜单权限管理改为角色管理的“权限设置”入口 | 已完成 | 删除独立菜单、路由和页面;角色列表新增“权限设置”,弹窗保留菜单及按钮节点并正常反显 | | 22 | 系统管理新增二级菜单组,新增错误日志 | 已完成 | 新增“系统配置 / 权限配置 / 日志管理”目录并迁移菜单;错误日志记录非业务异常,支持筛选、分页和堆栈详情 | ### 13.1 主要变更文件 后端: - `emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysErrorLog.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysErrorLogMapper.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/log/ErrorLogRecorder.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/common/GlobalExceptionHandler.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DatabaseBootstrap.java` - `emergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.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/system/RoleManage.vue` - `emergency-repair-web/src/views/system/RolePermissionDialog.vue` - `emergency-repair-web/src/views/system/ErrorLogManage.vue` - `emergency-repair-web/src/views/system/MenuManage.vue` - `emergency-repair-web/src/router/index.js` - 删除 `emergency-repair-web/src/views/system/MenuPermission.vue` ### 13.2 验证结果 - 后端 `mvn -B -DskipTests clean package` 通过;前端 `npm run build` 通过,仅有既有包体积告警。 - `node .codex-run/verify-req21-22.js` 通过:二级目录和错误日志菜单显示正常,旧“菜单权限管理”不存在;角色权限弹窗按钮节点数 78,权限反显正常。 - 错误日志列表、异常类型筛选和堆栈详情页面验证通过;人为触发非法接口参数后成功落库,临时验证记录已清理。 - 截图:`.codex-run/role-permission-dialog-verified.png`、`.codex-run/error-log-verified.png`。 ### 13.3 接手注意 - 错误日志目前覆盖进入 Spring MVC 全局异常处理的异常;启动阶段异常、异步线程异常若绕过该处理器,暂不会自动记录。 - 本轮代码与交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。 ## 十四、2026-10-06 联调收尾(需求 23-25) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 23 | 系统名称、版本改为关键词配置,版本红色显示 | 已完成 | codename 为 `rk_SystemName`、`rk_SystemVer`;登录页、页头、Logo 和浏览器标题统一读取配置,页头版本为红色 | | 24 | 完工信息查阅,多故障及多条完工明细展示 | 已完成 | 增加 `/completion/query` 和 `GET /api/work-orders/completion/query`;按故障汇总,同一故障的多张派工单展开为多行,故障信息列使用 `rowspan` 纵向合并,处理情况和器材支持多条 | | 25 | 菜单管理编辑时可修改父节点 | 已完成 | 上级菜单改为级联选择器,排除自身和全部下级;后端增加父节点、自引用和循环层级校验 | ### 14.1 主要变更文件 后端: - `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` ### 14.2 完工信息查阅口径 - 结果按故障汇总,不按派工单汇总。 - 一个故障有多张已填报完工信息的派工单时,表格展开为多行;序号、故障编号、rk_X号、设备名称、工程名称及损坏情况、上报单位、上报日期这 7 列共用故障行,使用单元格纵向合并。 - 派工单编号、承修单位、完工状态、工程编号、开工/完工、承修人、完工处理情况、更换器材、修后质量、原因分析、提交时间按派工单展示。 - 查询支持关键词、承修单位、完工状态和完工日期;关键词同时匹配故障、派工单、工程编号、承修人、处理情况和器材。 ### 14.3 验证结果 - 后端 `mvn -B -DskipTests compile` 通过;前端 `npm run build` 通过,仅有既有包体积告警。 - `node .codex-run/verify-req23-25.js` 通过:系统名称、版本和红色样式正常;完工查阅正常;菜单编辑父节点“故障管理”可编辑。 - 临时构造同一故障两张派工单、两条完工记录,接口返回 1 个故障节点和 2 张派工单,各带处理情况和器材明细。 - 浏览器显示 2 张派工单行,故障编号只出现 1 次,7 个故障信息列均为 `rowspan=2`;两张单的明细均正常;截图 `.codex-run/completion-query-merge-verified.png`。临时数据已清理。 - 菜单级联父节点接口实测可正常移动子菜单;选择自身或下级时被后端拒绝,临时菜单已清理。 ### 14.4 当前服务与接手注意 - 前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge 调试端口 `9222`。 - 登录 `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。 - 完工查阅当前只展示已有 `T_COMPLETION_INFO` 完工填报记录的派工单,并且接口未分页。 - 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。 ## 十五、2026-10-06 联调收尾(需求 21 权限设置范围切换) | 序号 | 需求补充 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 21 | 权限设置增加“全部 / 已设置”切换 | 已完成 | `RolePermissionDialog.vue` 增加范围切换;“全部”显示完整菜单及按钮树并可全选,“已设置”仅显示当前角色已授权节点和父级路径,切换时保留未保存勾选,重新打开默认“全部” | ### 15.1 主要变更文件 - `emergency-repair-web/src/views/system/RolePermissionDialog.vue` - `requirement/改进20261003.txt`(补充需求 21 的范围切换口径) ### 15.2 验证结果 - 前端 `npm run build` 通过,仅有既有包体积告警。 - `node .codex-run/verify-req21-22.js` 通过:左侧无“菜单权限管理”,角色管理存在“权限设置”。 - 全部视图显示 119 个复选框、13 个已勾选、1 个半选;已设置视图显示 14 个节点,均为当前已设置节点或父级路径;切回全部后勾选状态恢复,无网络异常。 - 截图:`.codex-run/role-permission-assigned-scope.png`。 ### 15.3 接手注意 - 当前运行:前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。登录 `admin / admin123`。 - 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。 ## 十六、2026-10-06 联调收尾(需求 26 日志日期范围分隔符) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 26 | 日志管理的日期组件两个日期中间的“至”显示不完整 | 已完成 | 登录日志、操作日志、错误日志的 `.el-range-separator` 固定为 `18px` 并居中,三个页面实际宽度、`clientWidth`、`scrollWidth` 均为 `18px` | ### 16.1 主要变更文件 - `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) ### 16.2 验证结果 - 前端 `npm run build` 通过,仅有既有包体积告警。 - `node .codex-run/verify-req26.js` 通过:三个日志页面均显示“至”,无裁切,无网络异常。 - 截图:`.codex-run/login-log-date-separator.png`、`.codex-run/operation-log-date-separator.png`、`.codex-run/error-log-date-separator.png`。 ### 16.3 接手注意 - 当前运行:前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。登录 `admin / admin123`。 - 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。 ## 十七、2026-10-06 联调收尾(需求 27 设备选择范围) | 序号 | 需求 | 状态 | 实现与验证 | | --- | --- | --- | --- | | 27 | 新增故障选择 `rk_X号` 后,设备选择器应只显示所选 `side` 节点的下级 | 已完成 | 后端只返回所选 `side` 节点作为根;前端自动展开该根节点并继续懒加载下级,接口与浏览器验证通过 | ### 17.1 主要变更文件 - `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java` - `emergency-repair-web/src/components/ProductTreePicker.vue` - `requirement/改进20261003.txt`(补充需求 27) ### 17.2 验证结果 - 后端 `mvn -B -DskipTests compile`、`mvn -B -DskipTests package` 通过;前端 `npm run build` 通过,仅有既有包体积告警。 - `GET /api/system/tree/product/side-roots?xNo=203` 只返回对应的 `side` 根节点;`201 / 203 / 301 / 测试T` 均分别验证通过。 - `node .codex-run/verify-req27.js` 通过:根节点文本仅为 `203`,自动展开 1 个根节点,显示下级系统节点,无网络异常。 - 请求链路确认:`side-roots?xNo=203` 后请求 `children?parentId=1280000000000009729`。截图:`.codex-run/req27-side-tree.png`。 ### 17.3 接手注意 - 当前运行:前端 `http://localhost:8082`,PID `138164`;后端 `http://127.0.0.1:8091`,PID `148268`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。登录 `admin / admin123`。 - 需求 26 已提交并推送,提交 `f651ad5`;需求 27 已提交并推送,提交 `f9114ff`(`fix: limit equipment picker to selected X number`)。 - 本轮代码、需求文件和交接记录一并提交并推送公司 Git 仓库 `main` 分支。 - `.codex-run`、Office 锁文件及 `emergency-repair-web/public/新建 文本文档.txt` 仍为本地临时文件,不应提交。