zzw
昨天 1332cc511936d7dbe804921bc733c83d5e4d1400
HANDOFF.md
@@ -726,3 +726,103 @@
- 历史演示派工单可能保留旧 `T_CONTRACTOR` 名称,非管理员 cj 用户可能看不到这些历史单;`admin` 不受单位过滤影响。
- `.codex-run`、Office 锁文件 `requirement\~$原始需求.docx` 和 `emergency-repair-web/public/新建 文本文档.txt` 属本地联调或临时文件,不应提交。
- 本轮代码已提交并推送公司 Git 仓库 `main` 分支,提交 `757dcb3`;交接文件回填提交记录。后续启动、构建和排错命令沿用第 16 节。
## 18. 收尾快照(2026-10-06 周一,需求 20 菜单权限管理收尾)
**本轮完成内容**
- 需求 20:菜单权限管理取消租户权限和角色权限的双重授权,改为单步设置角色权限。当前用户本身没有租户归属,因此不再设置租户权限。
- 权限树继续展示菜单节点和按钮节点,不按 `menuType` 过滤;切换角色后,已保存权限复选框正常反显。
- 菜单权限接口只保留 `roleId` / `roleMenuIds`,删除租户菜单授权及 `/api/system/tenants`。
- 修复雪花 ID 经浏览器 JSON 解析后精度丢失的问题:后端返回字符串 ID,前端选中态按字符串处理。
**主要文件**
- 后端:`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`。
**验证结果**
- 后端 `mvn -B -DskipTests compile` 通过;前端 `npm run build` 通过。
- 接口:`GET /api/system/menu-permissions?roleId=2106221661022490625` 返回字符串型 `roleMenuIds` 共 14 条。
- 浏览器:`node .codex-run/verify-menu-permission.js` 输出 `hasTenantPanel: false`、`buttonNodeCount: 76`、`checkedMatchesSaved: true`、`hasError: false`;截图 `.codex-run/menu-permission-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-menu-permission-fixed.out.log`、`.codex-run/backend-20261006-menu-permission-fixed.err.log`。
**接手注意**
- 不要提交 `.codex-run`、Office 锁文件或 `emergency-repair-web/public/新建 文本文档.txt`。
- 本轮代码与交接记录一并提交并推送公司 Git 仓库 `main` 分支。
## 19. 收尾快照(2026-10-06 周一,需求 21-22 菜单权限入口与错误日志)
**本轮完成内容**
- 需求 21:移除独立“菜单权限管理”菜单,在角色管理操作列新增“权限设置”按钮,并复用菜单/按钮权限树弹窗;旧 `/system/menu-permissions` 路由和页面已删除。
- 需求 22:系统管理新增“系统配置 / 权限配置 / 日志管理”三个二级目录;组织机构、承修单位、产品结构树、设备基础库、工程专业、T队专业、三员控制归入系统配置,用户管理、角色管理、菜单管理归入权限配置,登录日志、操作日志、错误日志归入日志管理。
- 错误日志为新增功能:`GlobalExceptionHandler` 捕获未处理的非业务异常并异步写入 `LX.T_SYS_ERROR_LOG`;业务校验异常不记录。列表支持模块、异常类型、时间筛选,详情展示完整堆栈。
- 新库初始化和旧库迁移均会删除旧菜单并补齐二级目录的父子菜单关系;权限树继续保留菜单节点和按钮节点,角色切换后复选框可反显。
**主要文件**
- 后端:`emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysErrorLog.java`、`.../mapper/SysErrorLogMapper.java`、`.../log/ErrorLogRecorder.java`、`.../common/GlobalExceptionHandler.java`、`.../bootstrap/DataInitializer.java`、`.../bootstrap/DatabaseBootstrap.java`、`.../system/controller/SystemController.java`、`.../system/service/SystemService.java`、`.../system/service/ButtonPermissionCatalog.java`。
- 前端:`emergency-repair-web/src/views/system/RoleManage.vue`、`RolePermissionDialog.vue`、`ErrorLogManage.vue`、`emergency-repair-web/src/router/index.js`、`MenuManage.vue`;`MenuPermission.vue` 已删除。
**验证结果**
- 后端 `mvn -B -DskipTests clean package` 通过;前端 `npm run build` 通过,仅有既有包体积告警。
- `node .codex-run/verify-req21-22.js` 通过:三个二级目录和错误日志菜单正常显示,旧菜单不存在,角色管理“权限设置”弹窗按钮节点数为 78 且反显正常。
- 人为访问非法错误日志详情 ID 后,记录自动落库并可在错误日志页面查看;验证用临时记录已从数据库清理。
- 截图:`.codex-run/role-permission-dialog-verified.png`、`.codex-run/error-log-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-req21-22.out.log`、`.codex-run/backend-20261006-req21-22.err.log`。
**接手注意**
- 错误日志当前覆盖进入 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` 分支。