D:\projectJava\lqxmainf17c76c fix: load only active report datarequirement/改进20261003.txtmain 分支,提交 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;已改为懒加载 |
页面文件:
emergency-repair-web/src/views/system/UserManage.vue功能:
append:保留原角色,追加勾选角色。replace:使用勾选角色覆盖原角色。replace 且未选择角色时,会清空所选用户的全部角色。相关接口:
GET /api/system/usersGET /api/system/users/{userId}/rolesPUT /api/system/users/{userId}/rolesPUT /api/system/users/roles/batch页面文件:
emergency-repair-web/src/views/system/RoleManage.vue功能:
相关接口:
GET /api/system/roles/{roleId}/usersPUT /api/system/roles/{roleId}/users服务实现:
SystemService.roleUsers(...)SystemService.saveRoleUsers(...)按钮权限:
system:roles:assign实现位置:
emergency-repair-server/src/main/java/com/emergencyrepair/auth/AuthController.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysLoginLog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysLoginLogMapper.javaemergency-repair-web/src/views/system/LoginLogManage.vue记录内容:
接口:
GET /api/system/login-logs实现位置:
emergency-repair-server/src/main/java/com/emergencyrepair/system/log/OperationLogInterceptor.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysOperationLog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysOperationLogMapper.javaemergency-repair-web/src/views/system/OperationLogManage.vue记录规则:
/api/** 下的 POST、PUT、DELETE 请求。X-Username;如果调用方没有传该请求头,会回退记录为 admin。手机端或第三方调用时需要注意补齐该请求头。接口:
GET /api/system/operation-logs由 DatabaseBootstrap 创建:
LX.T_SYS_LOGIN_LOGLX.T_SYS_OPERATION_LOG索引:
IX_T_SYS_LOGIN_LOG_TIMEIX_T_SYS_OPERATION_LOG_TIMEIX_T_SYS_ROLE_USER_USER页面文件:
emergency-repair-web/src/views/system/MenuManage.vueemergency-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/buttonsPOST /api/system/menu/buttonsGET /api/system/menu-permissionsPOST /api/system/menu-permissions实体文件:
emergency-repair-server/src/main/java/com/emergencyrepair/business/entity/ProductNode.java映射表:
LX.ZT_BOAT_TREE
物理表:
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 | 原始值大写 |
2026-10-03 DM8 实测:
INFO_ID:12972INFO_ID:2 个equipment:12798system1:161side:9model:2ttt、sss、rrrr,各 1 个示例根节点:
INFO_ID=1280000000000006486型号s44444LAYER=model由于 12972 个节点一次性加载和渲染会导致浏览器卡死,产品树已经改为按展开层级懒加载。
新增接口:
GET /api/system/tree/product/rootsGET /api/system/tree/product/children?parentId={id}GET /api/system/tree/product/side-roots?xNo={xNo}GET /api/system/tree/product/x-numbersGET /api/system/tree/product/selected?ids={id1,id2}前端使用位置:
TreeManage.vue:产品树管理ProductTreePicker.vue:故障上报和故障编辑中的设备选择FaultReport.vueFaultEditDialog.vueXcbReview.vue处理结果:
ISDELETE=1。用户已说明:实际结构并非严格按 model -> side -> system1 -> system2 -> equipment 排列,可能缺少 system2,且 system2 下也可能挂非 equipment 类型节点。
目前实现仍有以下约束:
LAYER 目前统一映射为第 6 级。CSICZB_ZB.ZT_BOAT_TREE 的增删改权限。DatabaseBootstrap 中仍保留旧 LX.T_PRODUCT_TREE 建表定义,但 ProductNode 已不再使用旧表,DataInitializer 也已停止初始化产品树演示数据。C:\Program Files\Java\jdk1.8.0_172D:\solidDir\apache-maven-3.6.1\bin\mvn.cmdC:\Program Files\nodejs\npm.cmd80918082127.0.0.1:5236SYSDBA / SYSDBAadmin / admin 或 admin / admin123$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 路径:
D:\projectJava\lqx\emergency-repair-server\target\emergency-repair-server-1.0.0-SNAPSHOT.jar
启动示例:
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
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。启动开发服务:
Set-Location 'D:\projectJava\lqx\emergency-repair-web'
& 'C:\Program Files\nodejs\npm.cmd' run serve
前端代理配置:
/api 代理到 http://127.0.0.1:8091http://localhost:8082mvn -B -DskipTests clean package 通过。npm run build 通过。角色管理:
用户管理:
产品树:
验证截图和脚本:
.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.js2026-10-04 12:28 重新构建并启动后,当前运行状态:8082 前端开发服务监听中,8091 后端监听中。启动日志位于 .codex-run/backend.out.log 和 .codex-run/backend.err.log。
2026-10-03 最后验证时曾运行:
809180829222重新联调时按第六节命令启动后端和前端。
后端:
emergency-repair-server/src/main/java/com/emergencyrepair/auth/AuthController.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DatabaseBootstrap.javaemergency-repair-server/src/main/java/com/emergencyrepair/business/dto/Requests.javaemergency-repair-server/src/main/java/com/emergencyrepair/business/entity/ProductNode.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/ButtonPermissionCatalog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/log/OperationLogInterceptor.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysLoginLog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysOperationLog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysLoginLogMapper.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysOperationLogMapper.java前端:
emergency-repair-web/public/logo.pngemergency-repair-web/src/components/RepairLogo.vueemergency-repair-web/src/components/ProductTreePicker.vueemergency-repair-web/src/layout/AppLayout.vueemergency-repair-web/src/router/index.jsemergency-repair-web/src/views/system/UserManage.vueemergency-repair-web/src/views/system/RoleManage.vueemergency-repair-web/src/views/system/MenuManage.vueemergency-repair-web/src/views/system/MenuPermission.vueemergency-repair-web/src/views/system/TreeManage.vueemergency-repair-web/src/views/system/LoginLogManage.vueemergency-repair-web/src/views/system/OperationLogManage.vueemergency-repair-web/src/views/fault/FaultReport.vueemergency-repair-web/src/views/fault/FaultEditDialog.vueemergency-repair-web/src/views/fault/XcbReview.vuegit status,不要回退当前未提交修改。8091 和 8082 可访问。LAYER 的展示和编辑规则。X-Username,避免全部回退为 admin。ISDELETE 软删除的约定。| 序号 | 需求 | 状态 | 实现与验证 |
|---|---|---|---|
| 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。| 序号 | 需求 | 状态 | 实现与验证 |
|---|---|---|---|
| 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 部门 |
后端:
emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.javaemergency-repair-server/src/main/java/com/emergencyrepair/business/service/BusinessService.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.java前端:
emergency-repair-web/src/views/system/OrganizationManage.vueemergency-repair-web/src/views/system/ContractorManage.vueemergency-repair-web/src/views/completion/CompletionReport.vueemergency-repair-web/src/views/system/RoleManage.vueemergency-repair-web/src/router/index.jsmvn -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 数据已清理。http://localhost:8082;后端 http://127.0.0.1:8091;DM8 127.0.0.1:5236;Edge 调试端口 9222。admin / admin123;数据库 SYSDBA/SYSDBA,业务 schema LX。DEPT_NAME,不是 DEPT_ID;若出现同名部门,应改为 ID 精确匹配。T_CONTRACTOR 名称,非管理员 cj 用户可能看不到;admin 不受单位过滤影响。.codex-run、Office 锁文件以及 emergency-repair-web/public/新建 文本文档.txt 是本地联调或临时文件,不应提交。| 序号 | 需求 | 状态 | 实现与验证 |
|---|---|---|---|
| 20 | 菜单权限管理取消租户权限,仅保留角色权限;权限复选框反显 | 已完成 | 权限树保留菜单和按钮节点;角色切换后正常反显,接口仅处理 roleId / roleMenuIds |
后端:
emergency-repair-server/src/main/java/com/emergencyrepair/business/dto/Requests.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java前端:
emergency-repair-web/src/views/system/MenuPermission.vuemvn -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。main 分支。.codex-run、Office 锁文件及 emergency-repair-web/public/新建 文本文档.txt 仍为本地临时文件,不应提交。| 序号 | 需求 | 状态 | 实现与验证 |
|---|---|---|---|
| 21 | 菜单权限管理改为角色管理的“权限设置”入口 | 已完成 | 删除独立菜单、路由和页面;角色列表新增“权限设置”,弹窗保留菜单及按钮节点并正常反显 |
| 22 | 系统管理新增二级菜单组,新增错误日志 | 已完成 | 新增“系统配置 / 权限配置 / 日志管理”目录并迁移菜单;错误日志记录非业务异常,支持筛选、分页和堆栈详情 |
后端:
emergency-repair-server/src/main/java/com/emergencyrepair/system/entity/SysErrorLog.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/mapper/SysErrorLogMapper.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/log/ErrorLogRecorder.javaemergency-repair-server/src/main/java/com/emergencyrepair/common/GlobalExceptionHandler.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DatabaseBootstrap.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/controller/SystemController.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/ButtonPermissionCatalog.java前端:
emergency-repair-web/src/views/system/RoleManage.vueemergency-repair-web/src/views/system/RolePermissionDialog.vueemergency-repair-web/src/views/system/ErrorLogManage.vueemergency-repair-web/src/views/system/MenuManage.vueemergency-repair-web/src/router/index.jsemergency-repair-web/src/views/system/MenuPermission.vuemvn -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。main 分支。.codex-run、Office 锁文件及 emergency-repair-web/public/新建 文本文档.txt 仍为本地临时文件,不应提交。| 序号 | 需求 | 状态 | 实现与验证 |
|---|---|---|---|
| 23 | 系统名称、版本改为关键词配置,版本红色显示 | 已完成 | codename 为 rk_SystemName、rk_SystemVer;登录页、页头、Logo 和浏览器标题统一读取配置,页头版本为红色 |
| 24 | 完工信息查阅,多故障及多条完工明细展示 | 已完成 | 增加 /completion/query 和 GET /api/work-orders/completion/query;按故障汇总,同一故障的多张派工单展开为多行,故障信息列使用 rowspan 纵向合并,处理情况和器材支持多条 |
| 25 | 菜单管理编辑时可修改父节点 | 已完成 | 上级菜单改为级联选择器,排除自身和全部下级;后端增加父节点、自引用和循环层级校验 |
后端:
emergency-repair-server/src/main/java/com/emergencyrepair/business/dto/CompletionFaultQueryItem.java(新增)emergency-repair-server/src/main/java/com/emergencyrepair/business/controller/WorkOrderController.javaemergency-repair-server/src/main/java/com/emergencyrepair/business/service/BusinessService.javaemergency-repair-server/src/main/java/com/emergencyrepair/bootstrap/DataInitializer.javaemergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.javaemergency-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.vueemergency-repair-web/src/components/AppHeader.vue、Login.vue、RepairLogo.vue、layout/AppLayout.vue、router/index.js、utils/sensitive.js、main.jsemergency-repair-web/public/sensitive-words.json、public/index.htmlrequirement/敏感词字典.jsonmvn -B -DskipTests compile 通过;前端 npm run build 通过,仅有既有包体积告警。node .codex-run/verify-req23-25.js 通过:系统名称、版本和红色样式正常;完工查阅正常;菜单编辑父节点“故障管理”可编辑。rowspan=2;两张单的明细均正常;截图 .codex-run/completion-query-merge-verified.png。临时数据已清理。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 完工填报记录的派工单,并且接口未分页。main 分支。.codex-run、Office 锁文件及 emergency-repair-web/public/新建 文本文档.txt 仍为本地临时文件,不应提交。