# 当前开发任务 ## 隐患审核积分档位按厂区查询(2026-10-08) ### 1. 问题 - 审核页“积分档位”下拉为空,且显示裸规则ID(如 `2108048530124234754`)。 - 根因:`rulesByLevel` 未按隐患所属厂区查询;超级管理员没有厂区上下文 → 返回空 `children`,`el-select` 无匹配项时退化为显示绑定值(规则ID)。而 `trialCalculate` 带了 `deptId = report.factoryDeptId` 所以能命中规则。 ### 2. 实施 - `src/api/points/rule.js`:`getRulesByLevel(params)` 改为接收参数对象,支持传入 `deptId`。 - `src/views/hazard/audit/components/AuditActionForm.vue`:调用 `rulesByLevel` 时补传 `deptId = report.factoryDeptId`(与 `trialCalculate` 口径一致);新增 `applyTierFallback()`,当档位列表为空但详情已有 `finalFlowLevelId` 时,用详情档位兜底成一个 option,避免显示裸 ID。 ### 3. 完成结果 - 完成内容:档位下拉按隐患所属厂区查询;列表为空时用详情档位兜底展示;`trialCalculate` 取 `data.calculatedPoints` 的既有逻辑不变。 - 实际使用接口:`GET /business/points/rule/rulesByLevel`(新增 `deptId` 参数)、`GET /business/points/rule/trialCalculate`。 - 依赖:后端已为 `rulesByLevel` 增加 `deptId`(客户确认线上已更新)。 - 验证:无诊断错误,`npm run build:prod` 通过,仅有既有资源体积 warning。 ## 左侧菜单隐藏“隐患审核”(2026-10-08) ### 1. 用户目标 - 在左侧菜单隐藏“隐患治理 → 隐患审核”;页面本身仍通过台账“去审核”等入口携带参数进入。 ### 2. 实施与结果 - 菜单由后端菜单接口下发,前端在 `src/store/modules/permission.js` 的 `GenerateRoutes` 中,对“仅用于侧栏展示”的路由副本调用新增的 `filterHiddenSidebarRoutes()`,按组件路径 `hazard/audit/index`(或标题“隐患审核”)剔除。 - 未改动 `rewriteRoutes` 的路由注册,`/hazard/audit` 及基础路由 `/hazard/audit/detail` 仍可跳转,台账“去审核”不受影响。 - 验证:无诊断错误,`npm run build:prod` 通过,仅有既有资源体积 warning。 ## 隐患流程配置新增“流程类型”字段并列表展示(2026-10-08) ### 1. 用户目标 - 在新增/修改弹窗中新增“流程类型”字段 `bizType`,下拉选项来自字典 `flow_biz_type`,提交时取字典项键值。 - 列表新增“流程类型”列,用 Tag 展示;旧数据无该字段或为空时显示 `-`。 ### 2. 接口字段 - `api.json` 中 `隐患流程模板配置` 请求体字段为 `bizType`(report-上报/appeal-申诉/rectify-整改/verify-验收,不传默认 report),非下划线 `biz_type`。 - 提交接口 `POST /flowable/hazardFlowConfig`、`PUT /flowable/hazardFlowConfig`;列表/详情返回含 `bizType`。 ### 3. 完成结果 - 弹窗新增“流程类型”下拉(字典 `flow_biz_type`,值取字典项 `value`),组件注册 `dicts: ['flow_biz_type']`;`createEmptyForm`/`normalizeForm`/`formRules`/`buildPayload` 均已纳入 `bizType`。 - 列表在“厂区名称”后新增“流程类型”列,Tag 展示;`bizTypeLabel(row)` 用字典 `flow_biz_type` 反查 label,字段为空时返回空串由模板显示 `-`。 - 验证结果:无诊断错误,`npm run build:prod` 通过,仅有既有资源体积 warning。 ## 隐患台账非管理员单位筛选改用 myFactory 并归位 /system/dept 封装(2026-10-08) ### 1. 用户目标 - 修复非管理员进入隐患台账时右上角弹窗提示“当前操作没有权限”。 - 非管理员只看本厂区,不再查询部门树;改用 `/system/dept/myFactory` 直接取当前用户所属厂区并填入单位筛选。 - 顺带把 `/system/dept/factoryList`、`/system/dept/myFactory` 的封装从业务文件归位到 `src/api/system/dept.js`,消除重复定义。 ### 2. 原因 - `src/views/hazard/ledger/index.vue` 的 `getUnits()` 调用 `deptTreeSelect()`(`GET /system/user/deptTree`),该接口属用户管理权限(`system:user:list`),非管理员无权访问;且该路径不在最新 `api.json` 中。 - 后端返回 `code=403 / msg="当前操作没有权限"`,请求拦截器在 `code !== 200` 分支用 `Notification.error` 展示,即右上角弹窗。 ### 3. 接口计划 | 页面动作 | 接口名称 | 方法 | 前端请求路径 | 确认状态 | | --- | --- | --- | --- | --- | | 管理员单位下拉 | 获取所有厂区级部门列表 | GET | `/system/dept/factoryList` | 已确认 | | 非管理员单位 | 获取当前用户所属厂区部门 | GET | `/system/dept/myFactory` | 已确认 | | 台账分页 | 隐患流程待办/已办列表 | GET | `/flowable/hazard/todoList` | 不变 | | ~~单位来源(旧)~~ | ~~用户部门树~~ | GET | ~~`/system/user/deptTree`~~ | 移除,非管理员无权限且不在 api.json | ### 4. 实施步骤 1. 在 `src/api/system/dept.js` 新增 `listFactoryDepartments()`、`getMyFactoryDepartment()`。 2. 从 `src/api/flowable/hazardConfig.js`、`src/api/points/rule.js` 删除重复定义。 3. 更新 `flowable/hazardConfig/index.vue`、`points/management/index.vue` 的 import 指向 `@/api/system/dept`。 4. 台账页 `getUnits()` 按角色分流:管理员用 `factoryList`,非管理员用 `myFactory`;非管理员隐藏“单位”筛选项,仅静默按本厂区过滤。 5. `created` 改为先取厂区再 `getList()`,保证非管理员首屏查询带上 `unitId`。 ### 5. 完成结果 - 实际完成:台账页非管理员不再请求 `/system/user/deptTree`,单位筛选项直接隐藏并静默按 `myFactory` 本厂区过滤;管理员使用 `factoryList`;两个 dept 封装已归位去重。 - 实际使用接口:`GET /system/dept/myFactory`(非管理员)、`GET /system/dept/factoryList`(管理员);台账列表仍为 `GET /flowable/hazard/todoList`。 - 验证结果:相关文件无诊断错误,`npm run build:prod` 通过,仅有项目既有资源体积 warning。 - 待联调确认:后端 `todoList` 是否接受并按 `unitId` 过滤非管理员数据。 ## 隐患台账切换待办接口并自动补齐审批 taskId(2026-09-19) ### 1. 用户目标 - 隐患台账列表改用后端提供的 `/flowable/hazard/todoList`。 - “去审核”不再要求或传 `taskId`,只传隐患 `id`。 - 审核页加载详情后,通过 `flowInstanceId` 调 `getProcessDetail` 自动补齐当前审批任务的 `taskId`。 ### 2. 已实施 - `src/api/hazard/ledger.js` 的 `listHazardLedger` 由 `/business/hazard/getListByPage` 改为 `/flowable/hazard/todoList`。 - `src/views/hazard/ledger/index.vue` 的 `goAudit` 只携带 `id`。 - `src/api/hazard/audit.js` 新增 `getHazardProcessDetail(flowInstanceId)`,路径 `/flowable/busiInfo/getProcessDetail`。 - `src/views/hazard/audit/index.vue` 在详情加载后按 `canApprove` 和 `flowInstanceId` 调流程详情,补齐 `taskId`;缺失时仅禁用审批动作,不阻断详情展示。 - 台账跳转补充 `canApprove/flowInstanceId`;Web 审核页上传附件改为 `/business/hazard/uploadAttachment` 的 `multipart/form-data` 请求;App 上传同步改为 multipart,字段名使用 `files`。 ### 3. 待联调确认 - `getProcessDetail` 真实响应结构(数组或 `list/rows/records/tasks/taskList/flowList/data`)及“当前任务”筛选规则。 - `complete` 是否需要除 `taskId/instanceId/comment/result` 外的 `taskName/userId/userName/variables/candidateUsers` 等 `TaskVo` 字段。 ## 积分规则支持厂区管理员管理并增加厂区列(2026-09-18) ### 1. 用户目标 - 厂区管理员可以管理自己厂区的积分规则,包括新增、启用/停用和删除;超级管理员继续按现有方式筛选厂区并在新增时选择厂区。 - 积分规则列表增加“厂区”列,依次使用 `deptName`、`deptId` 展示,无厂区信息时显示“全局规则”。 - 新建积分规则时“规则名称”改为必填,并继续通过现有 `ruleName` 字段提交。 - 不增加积分规则编辑能力,不改动其余积分管理 Tab、分页和现有前端排序逻辑。 ### 2. 当前代码状态 - 页面 `src/views/points/management/index.vue` 仅向超级管理员显示“新建”,新增弹窗只使用 `factoryList`,厂区管理员无法选择或展示所属厂区。 - `src/api/points/rule.js` 已封装规则列表、新增、详情、启停、删除和全部厂区接口,尚未封装当前用户所属厂区接口。 - 启停和删除按钮已向页面用户开放,后端接口按登录用户校验规则归属;页面无需增加前端归属判断。 - 工作区已有 API 文档、开发文档、隐患台账和登录页等用户改动;本任务只增量修改积分规则页面、对应 API 和指定交接文档,不回退或格式化无关文件。 ### 3. 接口计划 | 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 | | --- | --- | --- | --- | --- | --- | --- | | 规则分页 | 分页查询积分规则列表 | GET | `/business/points/rule/list` | `pageNum/pageSize/hazardLevel/enabled`;仅超级管理员可传 `deptId` | `data.list/rows`、`data.total/totalCount`,规则含 `deptId/deptName` | 已确认;二级管理员由后端自动过滤本厂区 | | 全部厂区 | 获取所有厂区级部门列表 | GET | `/system/dept/factoryList` | 无 | 厂区数组,字段 `deptId/deptName` | 已确认;仅超级管理员调用 | | 当前厂区 | 获取当前用户所属厂区部门 | GET | `/system/dept/myFactory` | 无 | `data` 为含 `deptId/deptName` 的部门对象 | 已确认;厂区管理员展示新增所属厂区 | | 新增规则 | 新增积分规则 | POST | `/business/points/rule/add` | 规则字段;超级管理员附带 `deptId/deptName`,厂区管理员不发送厂区字段 | 通用响应 | 已确认;厂区管理员由后端自动填充厂区 | | 启停规则 | 启用/禁用积分规则 | POST | `/business/points/rule/toggleEnabled` | query:`id/enabled` | 通用响应 | 已确认;后端校验本厂区归属 | | 删除规则 | 删除积分规则 | GET | `/business/points/rule/deleteById` | query:`id` | 通用响应 | 已确认;后端校验本厂区归属 | ### 4. 页面字段映射 | UI 文案 | 前端字段 | 接口字段 | 展示/编辑规则 | 字典或枚举 | | --- | --- | --- | --- | --- | | 厂区 | `deptName/deptId` | `deptName/deptId` | 列表优先名称、其次 ID、均无则“全局规则”;超管新增可选,厂区管理员显示当前厂区并禁用 | 无 | | 隐患等级 | `hazardLevel` | `hazardLevel` | 保持原下拉、Tag 和排序 | `general/major/critical` | | 档位 | `hazardCategory` | `hazardCategory` | 保持原字母生成、校验和排序 | A-Z、AA… | | 积分/状态 | `points/enabled` | `points/enabled` | 保持原整数输入与启停 Switch | `enabled` 为 0/1 | | 规则名称 | `ruleName` | `ruleName` | 新建必填,去除首尾空格后提交 | 无 | ### 5. 实施步骤 1. 在积分规则 API 中增加 `getMyFactoryDepartment()`,复用现有请求封装约定。 2. 页面统一开放新增入口;按角色加载全部厂区或当前厂区,并在厂区管理员新增弹窗中回填、禁用所属厂区。 3. 非超级管理员列表请求删除 `deptId`,新增 payload 不包含 `deptId/deptName`;当前厂区未成功加载时阻止提交。 4. 表格增加厂区列,保留其余 Tab、分页、排序、详情、启停和删除逻辑。 5. 完成定向静态检查、生产构建和 `git diff --check`,更新状态、日志和页面接口映射。 ### 6. 风险与待确认 - 厂区管理员的真实菜单授权和后端数据权限需要使用实际账号联调;本任务只按已确认接口契约接入,不声称完成真实账号验证。 - 列表响应可能只返回 `deptId`;页面按要求回退展示 ID。两者都不存在时按全局规则展示,不据此前端推断权限。 - 当前厂区接口失败时页面会保留明确错误提示并禁止厂区管理员提交新增,避免发出归属不明确的请求。 ### 7. 验收方式 - [x] 超级管理员保留厂区筛选、全部厂区加载和新增时选择厂区的现有行为。 - [x] 厂区管理员可以打开新增弹窗,看到禁用的所属厂区;新增请求不发送 `deptId/deptName`,所属厂区加载失败时不能提交。 - [x] 厂区管理员列表查询不发送 `deptId`,启停和删除继续调用原接口。 - [x] 列表新增厂区列,名称、ID 和全局规则三种展示兜底正确。 - [x] 不出现编辑入口或更新接口,其余 Tab、分页和排序逻辑不变。 - [x] 新建表单未填写规则名称时不能提交,并显示必填提示。 - [x] 定向静态检查、生产构建和 `git diff --check` 完成。 - [x] `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md` 和 `page-api-map.md` 已更新。 ### 8. 完成结果 - 实际完成:新增入口已对厂区管理员开放;按角色加载全部厂区或当前厂区,厂区管理员的新增厂区只读且加载失败时无法提交;列表增加厂区列;规则名称改为必填。未增加规则编辑能力。 - 实际使用接口:新增接入 `GET /system/dept/myFactory`;继续使用规则列表、新增、详情、启停、删除和超级管理员 `factoryList` 接口。厂区管理员列表与新增请求均不发送厂区字段。 - 验证结果:API 文件定向 ESLint 通过,生产构建和 `git diff --check` 通过;构建仅有项目既有 warning。积分页面整文件 ESLint 仍报告既有压缩模板及双引号/分号等格式问题,本次未做无关格式化。 - 遗留事项:尚未使用真实超级管理员和厂区管理员账号完成端到端联调,需要测试环境核对菜单权限、后端数据过滤和归属校验。 ## 隐患台账状态与附件展示调整(2026-09-15) ### 1. 目标与范围 - 列表状态改为后端字典实际值:`draft`=待提交、`reviewing`=审核中、`rectifying`=整改中、`approved`=已通过、`rejected`=已驳回。 - 仅审核中记录显示“去审核”,筛选项、状态 Tag、当前页统计、详情状态和底部说明同步使用上述五态文案。 - 暂时注释主列表“平台同步”列;同步相关字段、方法和重试入口保留,后续可直接恢复。 - 详情附件改为三列图片九宫格,点击缩略图使用 Element UI 图片查看器预览同组大图;非图片附件保留文件块和打开入口。 ### 2. 接口与字段 - 不新增或修改接口,继续使用 `GET /business/hazard/getListByPage`、`GET /business/hazard/info/{id}` 和 `GET /business/hazard/attachment/{reportId}`。 - 附件地址优先读取 `fileUrl`,其次 `filePath`;完整 HTTP(S) 地址直接使用,相对路径拼接 `MyConfig.BASE_API`。 - 图片判断兼容 `attachmentType=IMAGE`、`fileType=image/*` 和常见图片扩展名;无法识别为图片的附件不进入大图预览列表。 ### 3. 验收 - [x] 五个状态筛选、Tag、统计和详情文案一致,只有审核中显示“去审核”。 - [x] 平台同步列不显示,相关代码仍可恢复。 - [x] 图片附件按三列展示,点击可从当前图片开始预览并切换同组图片;非图片附件仍可打开。 - [x] 单文件 ESLint、开发热编译、生产构建和 `git diff --check` 通过。 ### 4. 完成结果 - 已将状态统一为待提交、审核中、整改中、已通过、已驳回;兼容识别历史数字状态和旧名称,但页面展示及审核按钮均按新状态执行。 - 已注释主表平台同步列,保留同步字段、方法和重试逻辑;详情流程字段暂不受影响。 - 详情附件已按图片三列九宫格展示,使用 Element UI `el-image` 大图预览并支持同组切换;非图片附件保留可打开文件块。 - 单文件 ESLint、Vue 模板编译、生产构建和 `git diff --check` 通过;构建仅有项目既有资源体积 warning。 ## 隐患台账新版 Table UI 改造(2026-09-15) ### 1. 目标与范围 - 将 `src/views/hazard/ledger/index.vue` 的主列表由独立筛选栏和 `el-card` 改为统一的 `` 结构。 - 筛选条件放入 filters,当前筛选/本页状态统计放入 actions;表格、分页和状态说明分别进入主内容及 footer。 - 主表增加 Element UI 原生 `border` 以支持列宽拖拽,由 `modern-table` 模式隐藏外框和竖向分隔线;移除旧式斑马纹。 - 保留列表字段、状态 Tag、详情、审核入口、同步重试、分页、空态、接口和所有业务判断。 ### 2. 接口与风险 - 本次不新增或修改接口,继续使用隐患台账列表、详情、附件、同步重试及部门树接口。 - 仅调整主列表模板结构和局部样式;详情弹窗不纳入新版 Table 改造。 - 统计摘要仍基于当前页 `ledgerList` 计算,“当前筛选”继续显示后端分页总数。 ### 3. 验收 - [x] 筛选区、统计区、无竖线 Card Table、分页与已改造列表视觉一致。 - [x] 主表支持拖拽表头列宽,固定操作列、溢出提示和空态正常。 - [x] 查询、重置、分页、详情、审核和同步重试行为不变。 - [x] 定向静态检查、开发热编译、生产构建及 `git diff --check` 完成。 ### 4. 完成结果 - 隐患台账主列表已接入 ``,筛选、当前页统计、表格、分页和状态说明按新版列表结构归位。 - 主表已增加 `border` 并移除 `stripe`:保留新版无竖线视觉,同时恢复 Element UI 表头列宽拖拽;操作按钮也已统一为新版按钮样式。 - 列表、详情、附件、审核、同步重试、部门树和分页接口均未修改;单文件 ESLint、开发热编译、生产构建和 `git diff --check` 通过,构建仅有项目既有资源体积 warning。 ## Token 过期回跳、角色更多操作与 Table 列拖拽修复(2026-09-15) ### 0. Table 模式参数补充(用户追加,2026-09-15) - 为 `DataListPanel` 增加显式布尔参数 `modern-table`,默认值为 `false`。 - 只有传入 `modern-table` 时,组件才应用当前新版 Table 的无外框、无竖向分隔线样式;未传参数时不覆盖 Element UI 原有竖线样式。 - 16 个已完成新版 UI 改造的列表显式传入 `modern-table`,并保留各自 `el-table` 的 `border` 属性以启用列宽拖拽。 - 本次只收紧样式作用范围,不修改接口、字段、权限或列表交互。 - 验收:新版列表外观不变且可以拖拽;旧页面和未传参数的 `DataListPanel` 表格不会被新版无竖线样式影响;公共组件静态检查和生产构建通过。 - 完成结果:`DataListPanel` 已新增默认关闭的 `modernTable` 布尔属性,只有 `` 才生成新版 Table 修饰类并应用无竖线样式;16 个新版页面均已显式传参且主表保留 `border`。结构扫描、开发热编译、公共组件定向 ESLint、生产构建和 `git diff --check` 均通过。 ### 0.1 系统监控旧表格竖线补充(用户追加,2026-09-15) - 系统监控下仍使用旧 Table 的在线用户、定时任务、调度日志和缓存列表没有传 Element UI 原生 `border`,因此既不显示原竖线,也不能拖拽列宽。 - 为上述 4 个页面的 5 张表显式增加 `border`,恢复旧式表格竖线和列宽拖拽;不传 `modern-table`,不套用新版无竖线样式。 - 操作日志、登录日志继续使用新版模式;数据监控为 iframe,服务监控和缓存监控为非 Element UI 列表,本次不修改。 - 本次不涉及接口、字段和业务事件;验收以定向检查、开发热编译和生产构建为准。 - 完成结果:在线用户、定时任务、调度日志以及缓存列表的缓存名称/缓存键名两张表均已增加 `border`,恢复旧式竖向分隔线和列宽拖拽;开发热编译、生产构建和 `git diff --check` 通过。定向 ESLint 仅报告四个旧页面原有的 223 个错误、68 个警告,本次未批量格式化。 ### 1. 目标与范围 - 修复 Token 过期或主动退出后,登录成功恢复到已废弃 `/index` 并进入 404 的问题。 - 恢复角色管理行末清晰可见的“更多操作”省略号下拉入口,保留“数据权限、分配用户”原权限和处理逻辑。 - 为此前改造的 16 个 `DataListPanel` Card 主列表恢复表头拖拽调整列宽能力,保持当前无竖向分隔线的 UI。 - 不修改登录、角色或列表接口,不调整后端权限字符和业务字段。 ### 2. 原因与方案 - Token/退出:`src/utils/request.js` 和导航栏退出仍硬跳 `/index`,但该路由已经被移除;无 Token 守卫将其保存为 `redirect=/index`,登录页随后恢复该地址并命中 404。过期场景改用前端登出清理状态后直达 `/login`,主动退出同样直达登录页;登录提交对历史 `/index`、`/404`、`/login` 回跳参数增加兜底。 - 角色更多操作:数据权限和分配用户代码仍存在,但入口采用占宽较大的文本按钮,容易在固定操作列内被裁切或忽略。改为截图所示的省略号图标按钮,并提供“更多操作”Tooltip,点击展开原菜单。 - 列拖拽:Element UI 2.15 的表头拖拽同时要求列 `resizable` 和表格 `border=true`;列默认可调整,但新版 Card Table 未传 `border`,因此拖拽未生效。为 Card 主表格补 `border`,由 `DataListPanel` 既有样式继续隐藏外框和竖线。 ### 3. 接口与风险 - 本次无新增或变更接口;Token 过期不再调用已失效 Token 的后端退出接口,主动退出仍调用现有退出接口。 - `FedLogOut` 需同步清空 Token、角色和权限,避免同页残留权限状态。 - 只为 `DataListPanel` 的主列表开启拖拽,不改变弹窗子表、树表及未改造页面。 ### 4. 验收 - [x] Token 过期确认重新登录后不再生成 `/index` 回跳参数,登录成功默认进入 `/hazard/ledger`。 - [x] 历史 `/login?redirect=/index` 登录后也不会进入 404;主动退出后同样直达登录页。 - [x] 非超级管理员角色行显示省略号更多按钮,可展开数据权限和分配用户。 - [x] 16 个 Card 主列表具备拖拽表头列边界的条件,视觉仍由现有样式保持无竖向分隔线。 - [x] 定向静态检查、开发编译和生产构建完成,既有 warning 与历史 lint 问题已记录。 ### 5. 完成结果 - 过期会话改用 `FedLogOut` 清理前端状态并 `replace('/login')`,避免用失效 Token 再请求退出接口;`FedLogOut` 现同步清空 Token、角色和权限。 - 主动退出和获取用户信息失败也不再跳已废弃的 `/index`;登录页过滤 `/index`、`/404`、`/login` 三类无效回跳地址并回落到 `/hazard/ledger`。 - 角色列表保留原操作权限与 `roleId !== 1` 保护规则,将更多入口改为 32px 省略号图标按钮,增加 Tooltip 并使用点击展开。 - 用户、角色、菜单、部门、岗位、字典、参数、公告、操作日志、登录日志、流程监听、流程定义、表单配置、流程表达式、积分规则、隐患流程配置共 16 个 Card 主列表已添加 `border` 行为属性;`DataListPanel` 现有 CSS 继续移除可见外框和竖线。 - 验证结果:`src/permission.js` 定向 ESLint 通过,开发环境与生产构建成功,`git diff --check` 通过;生产构建仅有既有 Browserslist、Webpack 弃用和资源体积 warning。登录、角色及请求等历史文件整体 ESLint 仍有原有格式问题,本次未批量改写。 - 联调边界:尚未用后端真实过期 Token 和具体角色权限账号完成端到端操作,需要测试环境回归确认。 ## 登录框响应式居中修复(2026-09-14) ### 1. 目标与范围 - 修复登录页在拖拽浏览器宽高时登录框偏移、窄窗口左侧被裁切的问题。 - 保留现有登录背景、平台装饰图、表单视觉、验证码、记住密码、登录逻辑和用户已修改的页面文案。 - 仅调整 `src/views/login.vue` 的布局样式,不修改接口、路由和鉴权行为。 ### 2. 原因与方案 - 原因:`.loginBox` 固定为 `1920×1080`,同时使用绝对定位和固定负边距;登录框的 `left: 50%` 以固定画布而不是浏览器视口为基准,因此视口变化时持续偏移。 - 方案:外层页面和装饰层使用当前视口尺寸,背景采用 `cover center`;装饰层使用 Flex 水平/垂直居中登录框,移除固定画布、负边距、`top/left/transform`。 - 响应式:登录框宽度保留 550px 上限,窄屏保留 16px 安全边距;低高度窗口允许滚动,避免验证码开启后内容被裁切。 ### 3. 验收 - [x] 登录框改为按视口 Flex 水平、垂直居中,浏览器宽高变化时不再依赖固定坐标。 - [x] 窄屏时登录框不超出左右边界,低高度时可以滚动访问完整表单。 - [x] 背景和装饰图使用 `cover` 保持比例,登录功能与用户现有文案不变。 - [x] 开发环境热编译和生产构建通过;定向 ESLint 仅报告该文件原有模板/脚本格式问题。 ### 4. 完成结果 - 移除 `.loginBox` 的固定 `1920×1080` 画布、绝对定位和负边距,改为占满视口并使用 Flex 居中 `.loginDiv`。 - 登录框保留 550px 桌面宽度并增加 `max-width: 100%`;页面增加安全边距和低高度滚动,验证码图片随可用宽度伸缩。 - 保留现有背景、平台装饰图、验证码、记住密码、登录接口和“积分管理系统”文案,未修改模板和业务脚本。 - 验证结果:开发服务热编译成功,生产构建成功;构建仅有既有 Browserslist、Webpack 弃用和资源体积 warning。定向 ESLint 的 38 个错误、12 个警告均位于本次未修改的模板和脚本区域。 ## 隐患流程配置页面(2026-09-14) ### 1. 用户目标与边界 - 开发 `src/views/flowable/hazardConfig/index.vue`,实现厂区与隐患等级对应 Flowable 流程模板的分页配置管理。 - 页面沿用当前最新 `DataListPanel` Card 列表样式,包含厂区、隐患等级、状态筛选,新增、修改、删除和分页;列表状态仅使用 Tag 展示。 - 不开发隐患上报页面;`myFactoryConfigs` 仅保留在接口封装中供后续上报页面使用。 ### 2. 当前代码状态 - 页面当前只有空的 `app-container`,同级 `components/` 为空,尚无隐患流程配置 API 封装。 - 超级管理员继续使用角色标识 `admin` 判断;二级管理员由后端按登录用户自动限制为所属厂区。 - 工作区已有用户文档及其他页面改动,本次只增量修改当前页面、对应 API 和交接文档。 ### 3. 接口计划 | 页面动作 | 方法 | 前端请求路径 | 请求字段 | 确认状态 | | --- | --- | --- | --- | --- | | 分页查询 | GET | `/flowable/hazardFlowConfig/list` | `pageNum`、`pageSize`、`deptId`、`hazardLevel`、`status` | 已确认;响应为 `data.list` 和字符串 `data.total` | | 详情回填 | GET | `/flowable/hazardFlowConfig/{id}` | path:`id` | 已确认 | | 新增 | POST | `/flowable/hazardFlowConfig` | `deptId/deptName`(仅超管)、`hazardLevel/hazardLevelName`、`flowKey`、`flowName`、`status` | 已确认 | | 修改/启停 | PUT | `/flowable/hazardFlowConfig` | 完整配置对象;编辑时厂区和隐患等级不可修改 | 用户确认启停暂走修改接口 | | 删除 | DELETE | `/flowable/hazardFlowConfig/{id}` | path:`id` | 用户确认按现接口执行 | | 全部厂区 | GET | `/system/dept/factoryList` | 无 | 超级管理员使用 | | 当前厂区 | GET | `/system/dept/myFactory` | 无 | 二级管理员回填展示 | ### 4. 字段与权限规则 - 隐患等级:`general`=一般隐患、`major`=较大隐患、`critical`=重大隐患;状态:`1`=正常、`0`=停用。 - 超级管理员厂区筛选和新增厂区可选;二级管理员展示当前厂区但控件禁用。 - 二级管理员的列表、新增请求不主动传 `deptId/deptName`,由后端按所属厂区过滤或自动填充;编辑请求保留详情中的不可变厂区字段。 - 列表真实数据已确认返回 `status`,状态筛选按用户确认继续发送 `status`。 ### 5. 风险与验收 - 分页响应已确认使用 `data.list` 和 `data.total`;`total` 为字符串,前端转换为数字后传给分页组件。 - `PUT` 是否完整支持重新启用由联调确认;当前按用户决定使用修改接口切换 `status`。 - 验收:最新 Card Table 样式、筛选/重置、分页、空态和错误态完整;新增/编辑校验正确;二级管理员厂区可见但不可改;危险删除有二次确认;静态检查和生产构建通过。 ### 6. 完成结果 - 实际完成:页面已使用 `DataListPanel` 实现厂区/等级/状态筛选、批量选择、Card Table、分页、新增、详情回填修改和删除确认;状态以绿色“正常”和灰色“停用”Tag 展示,编辑弹窗可修改状态。 - 角色处理:超级管理员加载全部厂区并可选择;二级管理员调用 `myFactory` 回填禁用厂区控件,列表和新增请求不主动传厂区字段,由后端按登录用户处理。 - 实际接口:新增 `@/api/flowable/hazardConfig`,接入配置列表、详情、新增、修改、删除、当前厂区模板、全部厂区和当前用户厂区接口;当前页面直接使用其中列表、详情、新增、修改、删除及两个厂区接口。 - 实际约定:状态筛选发送 `status`;启停通过编辑弹窗调用 `PUT` 修改 `status`;删除逐条调用现有 `DELETE`;分页固定解析 `data.list` 和 `data.total`。 - 验证结果:新增 API 和页面定向 ESLint 通过,生产构建成功;仅有项目既有 dotenv、Browserslist、Webpack 弃用和资源体积 warning。 - 遗留事项:继续联调确认修改状态和删除行为。 ## 流程管理四个列表页 Card UI 统一(2026-09-12) ### 1. 用户目标与边界 - 将流程管理菜单下“流程监听、流程定义、表单配置、流程表达式”的主列表统一为用户/角色管理已采用的 `DataListPanel` Card 风格。 - 只调整主列表的筛选区、批量操作区、表格容器、行内按钮和分页视觉;不改变接口、查询参数、字段、权限指令、事件、弹窗和业务逻辑。 - 不增加左侧树、统计区或其他模块;流程定义页的流程设计说明、流程图、主表单配置及弹窗内部表格保持原样。 ### 2. 页面与现有能力 | 页面 | 文件 | 必须保留的主列表能力 | | --- | --- | --- | | 流程监听 | `src/views/system/listener/index.vue` | 名称/监听类型筛选、多选、分页、增删改、导出、字典展示 | | 流程定义 | `src/views/flowable/definition/index.vue` | 名称/部署时间筛选、多选、分页、新增、删除、设计、配置主表单、挂起/激活 | | 表单配置 | `src/views/flowable/task/form/index.vue` | 表单名称筛选、多选、分页、增删改、导出、详情 | | 流程表达式 | `src/views/system/expression/index.vue` | 名称/状态筛选、多选、分页、增删改、导出 | ### 3. 接口与字段 - 本次不新增或修改 API 封装,四页继续调用现有 `@/api/system/listener`、`@/api/flowable/definition`、`@/api/flowable/form`、`@/api/system/expression`。 - 保留现有列表字段、响应解析、字典和所有权限字符;`DataListPanel` 只负责 UI 容器和通用样式。 ### 4. 风险与验收 - 只包装主列表,不能误改流程定义页“挂载表单”弹窗中的子表格及分页。 - 原 `right-toolbar` 的搜索显隐和刷新事件必须保留;多选禁用状态、固定操作列和分页双向绑定保持不变。 - 验收:四页主列表使用统一 Card、紧凑筛选、主次按钮、无竖向单元格线和 Card 内分页;原功能与弹窗无变化;`git diff --check` 和生产构建通过。 ### 5. 完成结果 - 实际完成:流程监听、流程定义、表单配置、流程表达式四页主列表均已复用共享 `DataListPanel`,统一为紧凑筛选、批量操作、白色 Card、无竖向单元格线表格和 Card 内分页。 - 按钮视觉:新增/修改使用蓝色主按钮,删除使用红色危险按钮,导出及普通行内操作使用白色次按钮;原权限指令、禁用条件和点击事件均保留。 - 特殊页面边界:流程定义的“流程设计说明”保留在主列表 Card 头部;流程图、上传、主表单配置等弹窗及挂载表单弹窗内部表格/分页未修改。 - 实际接口:继续使用原 `@/api/system/listener`、`@/api/flowable/definition`、`@/api/flowable/form`、`@/api/system/expression`,无请求、参数或字段变化。 - 验证结果:开发服务四页热编译成功,`git diff --check` 通过,生产构建成功;仅有既有 Browserslist、Webpack 弃用和资源体积 warning。定向 ESLint 显示四个历史页面已有大量脚本/模板格式问题,本次按 UI 边界未做整文件自动重写。 ## 积分管理列表 UI 统一(2026-09-12) ### 1. 用户目标与边界 - 将“积分管理 → 积分规则”列表继续调整为当前系统管理页统一采用的 Card 列表风格。 - “同一隐患等级支持 A/B/C…”放在“积分规则配置 · 多档位”标题下;底部版本说明放在两个暂未接接口按钮下方。 - 按确认稿展示“保存为新版本 V4”蓝色主按钮和“历史月份试算”白色次按钮。 - 用户已确认部门管理完成,本次不再调整部门页面。 - 仅调整积分规则列表模板与局部样式,不改变接口、参数、字段、权限、弹窗及业务事件。 ### 2. 当前代码状态 - 积分页已接入规则分页、厂区筛选、新增、详情、启停和删除接口,当前列表已开始复用 `DataListPanel`;仍需完成标题说明、底部按钮与说明的最终布局和按钮配色。 - 部门页已复用 `DataListPanel` 并完成列宽修正,用户已验收为 OK。 - 工作区存在大量用户已有改动,本次只在上述页面和交接文档上增量修改,不覆盖或回退其他改动。 ### 3. 接口与字段映射 - 积分管理继续使用 `/business/points/rule/list`、`/system/dept/factoryList`、`/business/points/rule/toggleEnabled`、`/business/points/rule/deleteById`、`/business/points/rule/info`、`/business/points/rule/add`。 - 积分表格继续展示 `hazardLevel`、`hazardCategory`、`points`、`enabled`;详情和新增字段保持原映射。 ### 4. 风险与验收 - 积分页底部两个未接接口按钮必须保留现有提示,不伪造成功结果。 - 验收:积分列表与系统列表视觉一致;两段说明文字位置正确;底部按钮文案、主次配色与确认稿一致;定向 ESLint、`git diff --check` 和生产构建通过。 ### 5. 完成结果 - 实际完成:积分规则页继续复用共享 `DataListPanel`,筛选、操作、无竖向单元格线表格和分页保持与用户/角色管理列表一致。 - 文案布局:“同一隐患等级支持 A/B/C…”已移动到“积分规则配置 · 多档位”标题下;档位标准说明已放到版本按钮下方。 - 按钮样式:底部展示“保存为新版本 V4”蓝色主按钮和“历史月份试算”白色次按钮,仍沿用原 `showPendingAction` 提示,不调用接口。 - 功能边界:页面的 API、请求参数、排序、权限、新增、详情、启停、删除和分页逻辑均未改动;部门管理按用户确认不再调整。 - 验证结果:`git diff --check` 通过,生产构建成功;仅有项目既有 Browserslist、Webpack 弃用和资源体积 warning。定向 ESLint 仍报告积分页面此前已有的整文件格式问题,本次未扩大范围自动重写脚本。 ## 系统管理八个列表页 Card UI 批量替换(2026-09-10) ### 1. 用户目标与边界 - 将菜单管理、部门管理、岗位管理、字典管理、参数管理、通知公告、操作日志、登录日志的列表 UI,统一为用户/角色管理已采用的 Card 列表风格。 - 只调整筛选、工具栏、表格、行内按钮与分页的视觉结构,不改变接口、查询参数、字段、权限指令、事件、弹窗或业务逻辑。 - 严格维持各页面当前结构:菜单/部门继续为树形表格且无分页;日志页面继续保留排序、清空、解锁、详情等原有能力;不新增左侧树或其他模块。 ### 2. 页面与现有能力 | 页面 | 文件 | 必须保留的列表能力 | | --- | --- | --- | | 菜单管理 | `src/views/system/menu/index.vue` | 树形列表、展开/折叠、行内新增/修改/删除 | | 部门管理 | `src/views/system/dept/index.vue` | 树形列表、展开/折叠、行内新增/修改/删除 | | 岗位管理 | `src/views/system/post/index.vue` | 多选、分页、增删改、导出 | | 字典管理 | `src/views/system/dict/index.vue` | 多选、分页、字典数据入口、增删改、导出、刷新缓存 | | 参数管理 | `src/views/system/config/index.vue` | 多选、分页、增删改、导出、刷新缓存 | | 通知公告 | `src/views/system/notice/index.vue` | 多选、分页、增删改 | | 操作日志 | `src/views/monitor/operlog/index.vue` | 多选、排序、分页、删除、清空、导出、详情 | | 登录日志 | `src/views/monitor/logininfor/index.vue` | 多选、排序、分页、删除、清空、解锁、导出 | ### 3. 接口计划与映射 - 本次不新增或修改任何接口封装,各页面继续调用当前 API 文件和请求参数。 - `DataListPanel` 只承载 `filters`、`actions`、默认表格和 `footer` 插槽,不介入数据加载、状态或交互逻辑。 - 公共样式新增通用类:`data-list-filter-form`、`data-list-actions`、`data-list-table`、`data-list-operation-column`,供本批及后续列表页面复用。 ### 4. 风险与验收 - 树形表格的 `row-key`、`tree-props`、`refreshTable` 和展开状态不可改动。 - 日志表格的 `ref`、默认排序和 `sort-change` 不可改动。 - 验收:8 页使用统一 Card、紧凑筛选、按钮配色、无竖向单元格线及 Card 分页;所有原字段、按钮、权限和事件保持;生产构建通过。 ### 5. 完成结果 - 实际完成:8 个列表页面均已使用共享 `DataListPanel`;菜单/部门保留树形无分页结构,其余页面分页进入 Card footer,表格及按钮视觉与用户/角色管理统一。 - 实际使用接口:完全沿用 `@/api/system/menu`、`dept`、`post`、`dict/type`、`config`、`notice` 和 `@/api/monitor/operlog`、`logininfor` 的现有封装,无请求或字段变化。 - 功能边界核对:8 个页面的 `script`、API 导入、权限指令、字段和业务方法未改;只修改模板展示与公共组件样式。 - 验证结果:公共组件定向 ESLint 通过,`git diff --check` 通过,`npm run build:prod` 成功;仅有既有 Browserslist、Webpack 弃用和资源体积 warning。 - 遗留事项:需用户在浏览器结合真实权限和数据逐页确认视觉,功能联调状态仍以原页面现状为准。 - 部门管理补充修正:实际验收发现所有表格列都使用固定 `width`,列宽合计小于 Card 可用宽度,导致右侧留白;保留“部门名称”固定 260px,改由“创建时间”使用 `min-width` 弹性列吸收剩余空间,避免部门列被拉伸。 ## 角色管理 Card 列表 UI 替换(2026-09-10) ### 1. 用户目标与边界 - 将“系统管理 → 角色管理”的列表视觉调整为与用户管理列表一致的 Card 列表风格。 - 仅调整列表筛选区、批量操作区、表格容器、行内按钮、状态控件和分页的展示样式。 - 保留角色管理现有列表字段、筛选、分页、状态切换、增删改、导出、数据权限和分配用户等功能及弹窗;不增删模块,不增加用户管理的左侧部门树布局。 ### 2. 当前代码状态 - 页面:`src/views/system/role/index.vue`,当前为若依默认整页表格布局。 - 公共组件:`src/components/DataListPanel/index.vue` 已用于用户管理,可通过筛选、操作、列表、分页插槽复用。 - 接口与权限:沿用现有 `src/api/system/role.js`、`listRole`、`getRole`、`addRole`、`updateRole`、`delRole`、`changeRoleStatus`、`dataScope`、`deptTreeSelect` 及原权限字符,不新增请求。 ### 3. 页面字段映射 | 列表区域 | 现有字段/行为 | UI 调整 | | --- | --- | --- | | 筛选 | `roleName`、`roleKey`、`status`、`dateRange` | 无标签紧凑输入框、选择框、日期范围,复用搜索/重置事件 | | 批量操作 | 新增、修改、删除、导出、`right-toolbar` | 蓝/红/白按钮配色和间距统一,权限指令不变 | | 列表 | `roleId`、`roleName`、`roleKey`、`roleSort`、`status`、`createTime` | 白色 Card、仅横向分隔线、紧凑字号与行高 | | 行内操作 | 修改、删除、更多(数据权限/分配用户) | 白底/红色/蓝色按钮,command 保持不变 | | 分页 | `total`、`queryParams.pageNum/pageSize` | Card 底部分页,事件和参数不变 | ### 4. 风险与验收方式 - 角色状态继续使用原 `el-switch` 双向绑定,确保 `handleStatusChange` 的确认、请求和回滚逻辑不变。 - 不修改角色弹窗及其树形权限配置,避免扩大本次 UI 范围。 - 验收:列表视觉与用户管理统一;原有筛选、分页、状态、增删改、导出、更多操作仍可用;`git diff --check` 和生产构建通过。 ### 5. 完成结果 - 实际完成:角色管理列表使用共享 `DataListPanel`,完成筛选、批量操作、Card 表格、状态开关、行内按钮和分页的统一视觉;保持全宽列表,不增加左侧树或其他模块。 - 实际使用接口:沿用 `listRole`、`getRole`、`addRole`、`updateRole`、`delRole`、`changeRoleStatus`、`dataScope`、`deptTreeSelect` 和原导出请求,无接口变更。 - 验证结果:`git diff --check` 通过;生产构建成功,仅有项目既有 Browserslist、Webpack 弃用和资源体积 warning。定向 ESLint 检出角色页面历史脚本格式问题,未在本次 UI 范围内批量格式化。 - 后续:其他菜单列表可继续复用 `DataListPanel`,按页面实际功能逐一替换列表 UI。 ## 用户管理 Card 列表试点(2026-09-09) ### 1. 用户目标 - 先将“系统管理 → 用户管理”改造成截图所示的紧凑型后台列表。 - 查询条件与批量按钮位于列表 Card 上方,表格由白色 Card 包裹。 - 表格取消竖向单元格线,只保留浅色横向分隔线;按钮改为蓝色主操作、红色危险操作、白底次要操作。 - 抽取通用列表面板组件,后续角色、菜单、字典等列表页面可以复用并逐步替换。 ### 2. 当前代码状态 - 用户管理当前使用左侧部门树 + 右侧查询表单/工具栏/表格的 RuoYi 默认布局。 - 用户列表仍使用现有 `listUser/getUser/addUser/updateUser/delUser/changeUserStatus` 等接口和权限字符。 - 工作区存在前序 UI、积分管理、API 文档等改动;本次不覆盖或回退。 ### 3. 接口计划 本次不新增、不修改接口。用户列表、增删改、状态、导入导出和部门树接口全部沿用现有封装。 ### 4. 页面映射 | 截图区域 | 用户管理实现 | | --- | --- | | 左侧筛选 | 部门名称搜索、部门树节点筛选 | | 顶部筛选 | 用户账号、手机号、状态、创建时间、岗位 | | 左侧按钮 | 搜索、重置 | | 右侧按钮 | 新增、修改、删除、导入、导出、刷新、显隐列 | | Card 列表 | 用户编号、账号、昵称、部门、岗位、手机号、状态、创建时间、操作 | | 行内操作 | 修改(白底)、删除(红色)、更多(蓝色) | ### 5. 实施步骤 1. 新增跨业务 `DataListPanel`,用筛选区、操作区、列表区、分页区插槽承载不同页面内容。 2. 用户管理保留左侧部门树布局,右侧使用通用列表面板;部门树节点继续使用 `deptId` 筛选。 3. 统一用户管理表格、状态标签/开关和按钮风格,保持原业务事件和权限控制。 4. 进行静态检查和生产构建,更新交接文档。 ### 6. 风险与边界 - 本次只以用户管理为试点,不立即批量改动所有历史列表页。 - 公共组件不封装具体表格列和接口,避免不同模块被固定字段限制。 - 左侧部门树属于用户管理必要功能,需要保留搜索、节点点击筛选和重置联动。 ### 7. 验收方式 - [x] 用户管理布局与截图方向一致,列表使用 Card 且无竖向单元格线。 - [x] 搜索、重置、部门筛选、岗位筛选、分页、增删改、导入导出、状态切换及更多操作保持原事件和接口逻辑。 - [x] `DataListPanel` 可被其他列表页直接复用。 - [x] 生产构建通过并更新任务、状态、日志。 ### 8. 完成结果 - 实际完成:新增通用 `DataListPanel` 插槽组件;用户管理保留左侧部门树,右侧改为顶部筛选/操作区和 Card 表格;表格只保留横向分隔;批量和行内按钮按蓝/红/白三类统一。 - 实际使用接口:沿用 `/system/user/list`、用户增删改/状态/导入导出以及 `/system/user/deptTree`,没有新增或修改请求封装。 - 验证结果:公共组件定向 ESLint 通过;`git diff --check` 通过;`npm run build:prod` 成功,仅有既有 Browserslist、Webpack 弃用及资源体积 warning。 - 补充调整:根据用户反馈恢复左侧部门树,顶部不再重复展示部门下拉;点击节点和重置仍沿用原筛选行为。 - 遗留事项:需要用户浏览器确认本试点视觉;确认后可以按同一组件批量迁移其他系统管理列表页。 ## 管理后台原型视觉统一(2026-09-09) ### 1. 用户目标 - 以 `最终交付/原型_管理后台_高保真_V0.10_浅色.html` 为视觉基准,改造现有 `zhongyou_web`,不新建项目。 - 第一阶段统一管理后台基础壳层和 Element UI 组件密度,包括侧栏、Logo、Header、内容背景、Card、表格、表单、按钮、标签、弹窗和分页。 - 保留现有登录、动态菜单、路由、权限、接口封装和业务功能。 ### 2. 当前代码状态 - 当前为 Vue 2 + Element UI + RuoYi 左侧菜单布局,侧栏宽 200px、Header 高 50px。 - `App.vue` 使用固定 1920×1080 的 `ScaleBox` 包裹整个后台;原型采用正常流式后台布局。 - `.app-container` 当前使用 15px 白色边框模拟页面间距,Element UI 表格和菜单密度明显大于原型。 - 工作区已有接口文档、积分管理、默认首页等用户改动;本次只在共享布局、样式和开发文档上增量修改,不覆盖或回退已有工作。 ### 3. 接口计划 本次为纯 UI 改造,不新增、不修改接口,不调整 Token、权限和动态菜单逻辑。 ### 4. 原型视觉映射 | UI 模块 | 原型标准 | 当前项目 | 第一阶段处理 | | --- | --- | --- | --- | | 页面背景 | `#F0F2F5` | `.app-container` 外框 `#edf2f8` | 统一为 `#F0F2F5` | | 侧栏 | 212px、白底、浅分割线 | 200px、明显阴影 | 改为 212px,移除重阴影 | | Header | 52px | 50px | 改为 52px并同步主内容偏移 | | 一级/二级菜单 | 约 40px/34px,13px/12px | Element UI 默认约 56px、14px | 降低行高、字号和缩进 | | 内容留白 | 16px 20px 40px | 15px padding + 15px border | 改为流式内容间距 | | Card | 8px 圆角、浅边框 | Element UI 默认样式 | 统一 Header、Body、圆角和边框 | | 表格 | 12px、表头/行约 36px | 13/14px、表头 40px、行约 48px | 统一为紧凑密度 | | 表单/按钮/标签 | 12px、6px 圆角 | Element UI 中等尺寸 | 统一视觉,不改组件行为 | ### 5. 实施步骤 1. 建立原型主题色、字号、圆角和间距变量,调整基础页面背景与字体。 2. 改造侧栏、Logo、Header 和主内容偏移,去除固定 1920×1080 的全局缩放容器。 3. 在独立共享样式文件中覆盖 Element UI 的 Card、Table、Form、Button、Tag、Dialog、Pagination 等视觉规范。 4. 检查积分管理和隐患台账等已开发页面,修复与新全局样式冲突的局部规则。 5. 执行 ESLint/生产构建,并更新状态和开发日志。 ### 6. 风险与边界 - 全局组件密度调整会影响历史页面;优先使用稳定的 Element UI 类名,不改 DOM 和业务交互。 - 原型没有 TagsView;项目默认已关闭,保留已有可选功能并提供兼容高度。 - 深色侧栏作为历史可选配置保留基本可用性,验收以默认浅色主题为准。 - 第一阶段完成整体统一,不承诺所有历史业务页面一次达到像素级一致;局部复杂页面将在第二阶段逐页校准。 ### 7. 验收方式 - [x] 默认浅色布局的侧栏、Header、背景、字号、间距与原型基准一致。 - [x] 表格、表单、按钮、Card、标签、弹窗和分页形成统一样式。 - [x] 登录、动态菜单、折叠、移动端、路由和业务接口行为不变。 - [x] 积分管理、隐患台账页面已适配新的全局高度和配色。 - [x] `git diff --check` 和生产构建通过;定向 ESLint 仍报告相关历史文件原有格式问题。 - [x] 更新 `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md` 和本任务完成结果。 ### 8. 完成结果 - 实际完成:后台由固定画布缩放改为流式布局;侧栏、Header、内容容器及常用 Element UI 组件已按原型建立统一视觉基准;旧本地布局配置通过版本标识迁移到新默认值。 - 实际使用接口:无,本次未修改接口、鉴权、权限和动态菜单逻辑。 - 验证结果:`git diff --check` 通过;`npm run build:prod` 成功,仅有既有 Browserslist、Webpack 弃用和资源体积 warning。 - 静态检查说明:定向 ESLint 检出相关历史文件已有的双引号、分号、未使用组件、`MyConfig` 全局变量等问题;未在本次 UI 任务中扩大范围批量格式化。 - 遗留事项:需在浏览器结合客户常用分辨率进行视觉验收;复杂历史页面按实际截图进入第二阶段逐页校准。 ## 默认登录首页(2026-09-09) ### 1. 用户目标 - 用户正常登录且没有指定回跳地址时,默认进入隐患台账 `/hazard/ledger`。 - 直接访问根路径 `/`,或已登录用户再次访问登录页时,同样进入隐患台账。 - 保留登录链接中的 `redirect` 参数,避免用户访问具体受保护页面后登录却丢失原目标。 ### 2. 当前状态与实施范围 - `src/views/login.vue` 当前登录成功后硬编码跳转 `/questionModule/index`。 - `src/router/index.js` 存在两个根路由重定向,分别指向 `/system/user` 和 `/index`。 - 本次统一上述默认入口为 `/hazard/ledger`。 - 实测首次登录进入 404:`/hazard/ledger` 当前完全依赖后端菜单动态注册,默认跳转发生时该路径可能尚未存在,或当前账号菜单响应未包含该路径。 - 将 `/hazard/ledger` 增加为隐藏的基础路由,保证默认首页在动态菜单加载前即可解析;后端菜单仍负责侧栏展示,接口仍由后端鉴权和数据权限控制。 - 不涉及接口和字段调整。 ### 3. 验收方式 - [x] 无 `redirect` 参数登录后进入 `/hazard/ledger`。 - [x] 有合法 `redirect` 参数时返回原目标页面。 - [x] 访问 `/` 时重定向到 `/hazard/ledger`。 - [x] 本次修改行符合 ESLint 规则,生产构建通过;涉及文件存在与本次无关的历史 ESLint 问题。 完成结果:登录成功默认跳转、根路由和已登录后访问登录页的回退入口均统一为 `/hazard/ledger`;实测 404 后补充隐藏基础路由,消除首次进入时对动态菜单注册时序和菜单返回内容的依赖。 ## 积分管理页面(2026-09-08,开发前梳理) ### 1. 用户目标 - 页面位置:`src/views/points/management/index.vue`。 - 进入后展示积分管理 Tab:积分规则、申诉处理、手动调整、流水冲正;默认展示“积分规则”,其余 Tab 暂不可切换。 - 积分规则 Tab 展示规则配置卡片、厂区筛选(仅超级管理员)、分页列表、详情弹窗、启用/停用和删除操作;新增规则弹窗仅超级管理员可见。 - 卡片底部展示“保存为新版本”和“V4历史月份试算”按钮,暂不接接口,仅展示指定说明文本。 - UI 以现有 Element UI 组件和实际需求为准,不照搬原型稿。 - 本次暂不实现申诉处理、手动调整、流水冲正的可用交互,仅保留不可切换 Tab。 ### 2. 接口计划(待编码) | 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 | | --- | --- | --- | --- | --- | --- | --- | | 规则分页 | 分页查询积分规则列表 | GET | `/business/points/rule/list` | `pageNum`、`pageSize`;超级管理员可传 `deptId` | `data` 分页对象,列表字段待真实响应核对 | API 已确认,响应结构待联调 | | 厂区筛选项 | 获取所有厂区级部门列表 | GET | `/system/dept/factoryList` | 无 | `data` 全部厂区部门数组,字段至少 `deptId/deptName` | API 已确认,仅超级管理员调用,选择项全部展开 | | 当前厂区 | 获取当前用户所属厂区部门 | GET | `/system/dept/myFactory` | 无 | `data` 厂区部门对象 | API 已确认,非超级管理员是否需要前端调用待定 | | 启用/停用 | 启用/禁用积分规则 | POST | `/business/points/rule/toggleEnabled` | query:`id`、`enabled`(0/1) | 通用对象响应 | API 已确认 | | 删除 | 删除积分规则 | GET | `/business/points/rule/deleteById` | query:`id` | 通用对象响应 | API 已确认,需二次确认 | | 详情 | 获取积分规则详情 | GET | `/business/points/rule/info` | query:`id` | `data` 规则对象 | API 已确认 | | 新增 | 新增积分规则 | POST | `/business/points/rule/add` | JSON 规则对象;必须选择厂区并传 `deptId`;不传 `createTime/updateTime/id`;`priority` 可输入或由前端自增 | 通用对象响应 | API 已确认 | ### 3. 页面字段映射(已确认) | UI 文案 | 候选接口字段 | 当前处理 | | --- | --- | --- | | 隐患等级 | `hazardLevel` | 固定编码:`general`=一般隐患、`major`=较大隐患、`critical`=重大隐患;新增使用下拉选择 | | 档位 | `hazardCategory` | 使用字母档位 A、B、C…;前端可按当前等级已有档位生成下一个字母,用户可修改 | | 积分 | `points` | 必填整数 | | 启用 | `enabled` | 0/1 映射 Switch;新增默认 1 | | 优先级 | `priority` | 新增时前端按当前规则列表计算最大值 + 1;用户可修改 | | 厂区 | `deptId`、`deptName` | 新建规则必须选择;超级管理员可选择全部 `factoryList` 数据;页面暂不提供新建全局规则入口 | ### 4. 风险与待确认 - “档位”映射为 `hazardCategory`,不新增独立字段;同一隐患等级下按档位字母排序。 - 新增规则必填:`hazardLevel`、`hazardCategory`(档位)、`points`;`enabled` 默认 1;`ruleCode`、`ruleName` 非必填。 - 超级管理员角色标识确定使用 `admin`;登录用户信息中的 `admin: true` 和角色 `roleKey=admin` 均可作为判断依据,页面统一复用项目权限工具。 - 超级管理员新建时必须选择厂区并传对应 `deptId`。厂区列表使用 `factoryList` 返回的全部数据并展开,不截断为当前部门;页面暂不提供新建全局规则入口。 - 接口路径封装注意:运行时 `BASE_API` 已包含一层 `/gd_dataserver`,`src/api` 只写 `/business/...`、`/system/...`,禁止写成重复的 `/gd_dataserver/gd_dataserver/...`。 - `/list` 的分页响应虽说明为 `data` 中的 PageInfo,但总数字段(如 `total`)和列表字段名称需用真实响应核对。 - 详情弹窗展示规则对象中的主要业务字段和审计字段(厂区、等级、档位、积分、启用、优先级、规则编码、规则名称、备注、创建/更新时间)。 ### 5. 排序与档位生成规则 - 列表展示顺序:隐患等级顺序固定为 `general`(一般隐患)→ `major`(较大隐患)→ `critical`(重大隐患);每个等级内按 `hazardCategory` 的字母自然升序(A、B、C…),同档位再按 `priority` 降序,最后按 `id` 稳定排序。 - 由于 `/list` 是分页接口,优先将排序参数交给后端(若接口不支持,则前端对当前页排序,并在文档中保留分页排序限制);实现时会避免把三种等级混成按返回顺序展示。 - 新增弹窗选择隐患等级后,读取当前已加载规则中该等级的档位,计算最大字母后生成下一档;首次默认为 A。用户可以直接修改档位。 - 字母生成支持 A-Z;超过 Z 时按 AA、AB…继续递增,输入统一转为大写并校验格式。 ### 6. 验收方式(开发后) - [x] 默认仅积分规则 Tab 可用,其余 Tab 不可切换。 - [x] 超级管理员显示厂区筛选和新增按钮;其他管理员隐藏两者且列表仅显示本厂区数据。 - [x] 规则列表完成加载、筛选、分页、空态、错误态、Switch 切换、删除确认、详情弹窗。 - [x] 新增请求不发送 `createTime/updateTime/id`,`ruleCode/ruleName` 可为空。 - [x] 静态检查通过,生产构建通过,并更新状态、日志和页面接口映射。 状态:积分管理积分规则页面已完成,生产构建已验证(2026-09-08);申诉处理、手动调整、流水冲正暂禁用 ## 隐患台账页面任务(2026-09-04) ### 1. 用户目标 - 还原原型中的隐患台账筛选栏、汇总统计、9 列列表和行操作。 - 列表必须分页;详情优先使用宽屏弹窗完整展示,待审核记录进入隐患审核页面。 - 重试同步调用后端接口并提示结果;当前 `api.json` 未提供该接口,代码保留明确的待后端确认封装,不伪造成功。 ### 2. 接口计划 | 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 | | --- | --- | --- | --- | --- | --- | --- | | 台账分页 | 隐患信息分页查询 | GET | `/business/hazard/getListByPage` | `pageNum`、`pageSize`、`status`、`unitId` 等实体字段 | `data.list/total`(兼容 `rows/total`) | 已确认 | | 查看详情 | 查隐患详情 | GET | `/business/hazard/info/{id}` | 路径 `id` | 隐患信息实体 | 已确认 | | 查看附件 | 按隐患 ID 查附件 | GET | `/business/hazard/attachment/{reportId}` | 路径 `reportId` | 附件数组 | 已确认 | | 导出 | 导出隐患列表 Excel | POST | `/business/hazard/export` | 当前筛选条件 | Blob | 已确认,入口暂时隐藏 | | 去审核 | 隐患流程详情 | GET | `/flowable/hazard/detail/{id}` | 由审核页加载 | 隐患详情 | 已确认,跳转携带 `id/taskId` | | 重试同步 | 未在 API 文档提供 | 未知 | 待后端确认 | 隐患 `id` | 未知 | 阻塞,不虚构 URL | ### 3. 页面字段映射 | UI 文案 | 前端字段 | 展示规则 | | --- | --- | --- | | 隐患编号/名称 | `reportNo`/`hazardName` | 表格主字段,名称超长省略 | | 分级 | `hazardLevelName` 或 `hazardLevel` | `el-tag` | | 状态 | `statusName` 或 `status` | `el-tag`,筛选四态:待审核/整改中/已闭环/已驳回 | | 积分发放 | `pointsStatusName`、`pointsAwarded` | `el-tag`,后端值优先 | | 平台同步 | `pushStatusName` 或 `pushStatus` | 失败显示重试入口 | | 上报人/时间 | `reporterName`、`createTime` | 原型 9 列 | | 详情 | 隐患实体全部字段及附件 | 宽屏 `el-dialog` 分组展示 | ### 4. 验收方式 - [x] 筛选、重置、分页、空态、错误态和加载态已实现。 - [x] 表格 9 列和原型操作按钮已实现,所有状态使用 Element UI `el-tag`。 - [x] 待审核记录跳转 `/hazard/audit/detail?id=...&taskId=...`;无任务号时给出提示。 - [x] 详情弹窗加载详情及附件;导出封装保留,入口暂时隐藏。 - [x] 重试同步接口缺失时明确提示,不显示虚假成功。 ### 5. 完成结果 - 实际完成:隐患台账筛选、统计、分页表格、详情弹窗、附件展示和审核入口;导出按钮暂时移除。 - 实际使用接口:`getListByPage`、`info/{id}`、`attachment/{reportId}`、系统部门树接口。 - 验证结果:`git diff --check` 通过;使用项目 Node 22 执行 `npm run build:prod` 成功,仅有既有 Browserslist 和资源体积 warning。 - 遗留事项:后端需提供同步重试接口路径、请求字段和响应结构后,替换 `retryHazardSync` 占位封装。 - [x] 构建通过并更新状态、日志和接口映射。 本次先完成原型、页面字段、接口和入口关系梳理,尚未修改 Vue 业务代码。 ## 隐患审核页面分析结论(2026-09-03) ### 1. 原型 UI 结构 - `隐患治理 → 隐患审核` 原型只有用户截图所示的“审核详情工作区”,没有待办/已办列表 UI;因此本页面按带隐患 `id` 的详情处理页实现,不自行增加列表。 - 原型另有 `流程管理 → 隐患审批` 页面,那里才有待办/已办列表、筛选和办理入口;该页面不是当前 `src/views/hazard/audit/index.vue`,后续是否合并由用户另行决定。 - 详情工作区采用三列布局: - 左列“上报内容”:附件缩略图(最多 8 张)、基础信息、隐患信息、隐患描述、GPS/上报时间。 - 中列“审核动作·平台字段补录”:基本信息(可编辑/自动带入)、整改信息、选填信息、附件补充、审核意见和三个操作按钮。 - 右列“流转与同步”:员工提交时间、平台同步状态、相似隐患提示、预计积分及通过后的联动说明。 - 建议 Vue 结构:页面 `index.vue` 负责列表/详情状态和接口;详情拆为 `components/HazardReportPanel.vue`、`components/AuditActionForm.vue`、`components/FlowSyncPanel.vue`,驳回、等级切换、附件预览/上传使用 `el-dialog` 或独立组件。 - 使用 Element UI:`el-form`、`el-tabs`(待办/已办)、`el-table`、`el-pagination`、`el-descriptions`、`el-upload`、`el-image`、`el-dialog`、`el-radio-group`、`el-select`、`el-date-picker`。 ### 2. 页面字段清单与接口映射 #### 左侧上报内容(详情只读) | 原型字段 | 接口字段 | 来源/备注 | | --- | --- | --- | | 隐患编号 | `reportNo` | 详情或列表 | | 隐患名称 | `hazardName` | 详情 | | 检查人/上报人 | `reporterName`、`reporterId`、`reporterUsername` | 原型“检查人”实际需确认是否等同上报人 | | 单位 | `unitId`、`unitName` | 详情 | | 所属部门/厂区 | `departmentId`、`departmentName`、`factoryDeptId`、`factoryDeptName` | 详情 | | 风险分析对象 | `riskTarget` | 纯字符串,无选项接口 | | 风险分析单元 | `riskUnit` | 纯字符串,无选项接口 | | 发现日期/时间 | `discoverTime` | 详情 | | 隐患状态 | `status`、`statusName` | 详情/列表 | | 隐患分类 | `hazardCategory`、`hazardCategoryId`、`hazardCategoryName` | 详情 | | 管理级别/流程等级 | `hazardLevel`、`hazardLevelId`、`hazardLevelName`、`currentFlowLevel` | 等级编码 general/major/critical 已在流程接口说明 | | 资金来源 | `fundsSource`、`fundsSourceId`、`fundsSourceName` | 原型标为非必填 | | 隐患来源 | `sourceType`、`sourceTypeId`、`sourceTypeName`、`hazardSourceDetail` | 原型“日常检查/随手拍”需字典确认 | | 治理类型 | `governanceType`、`governanceTypeId`、`governanceTypeName` | 原型“限期整改/立即整改”需字典确认 | | 隐患类型 | `hazardType`、`hazardTypeId`、`hazardTypeName` | 原型“电气”需字典确认 | | 限定完成时间 | `limitedCompleteTime` | 详情 | | 整改负责人 | `chargePersonId`、`chargePersonName`、`chargePersonUsername` | 详情 | | 专业 | `major`、`majorId`、`majorName` | 详情;原型出现“电气/配电系统”,后半部分无独立字段 | | 隐患描述 | `description` | 详情 | | 原因分析 | `causeAnalysis` | 详情 | | 防范措施 | `preventiveMeasures` | 详情 | | 整改方案 | `rectificationPlan` | 接口有字段,原型详情未单独展示,不能遗漏 | | 备注 | `remark` | 接口有字段,原型详情未单独展示,不能遗漏 | | 实际完成时间 | `actualCompleteTime` | 接口有字段,整改闭环阶段使用 | | 审核信息 | `auditRemark`、`auditTime`、`auditUserId`、`auditUserNameName`、`auditUserUsername` | 详情/流程历史 | | 积分 | `pointsAwarded`、`pointsStatus`、`pointsStatusId`、`pointsStatusName` | 预计积分不可由前端固定写死 | | 平台推送 | `pushStatus`、`pushStatusId`、`pushStatusName`、`pushTime`、`pushResponse`、`thirdPartyId` | 右列同步信息 | | 流程状态 | `flowInstanceId`、`flowStatus`、`deployId`、`canApprove`、`isInitiator` | 详情;流程节点/历史是否随详情返回需确认 | | 创建/更新时间 | `createBy`、`createTime`、`updateBy`、`updateTime` | 详情/审计 | 附件字段来自附件接口:`id`、`reportId`、`fileName`、`filePath`、`fileUrl`(列表接口文档使用该名称)、`fileType`、`fileSize`、`attachmentType`、`suffix`、`sortOrder`、`remark`、`uploadUserId`、`createTime`、`updateTime`、`createBy`、`updateBy`。`filePath` 与 `fileUrl` 的实际可访问字段需联调确认。 #### 待办/已办列表归属 - 当前隐患审核详情页不实现列表。 - `GET /flowable/hazard/todoList` 对应原型中的 `流程管理 → 隐患审批` 待办/已办列表,待开发该页面时再确认筛选参数和分页响应结构。 ### 3. 下拉/选择项来源分析 | UI 选择项 | 已有字段/API | 当前结论 | | --- | --- | --- | | 单位 | `unitId/unitName`;前端已有 `/system/dept/treeselect`、`/system/getOrgUsers` 封装 | 没有“单位”专用接口;部门树是否等同单位树需后端确认,不可直接当作单位字典 | | 部门/厂区 | `departmentId/name`、`factoryDeptId/name`;已有 `deptTreeSelect()` | 可以读取现有部门树,但厂区层级和筛选权限需确认 | | 整改负责人/检查人 | `chargePerson*`、`reporter*`;已有 `getOrgUsers()`、`getUsersByDeptId()` | 可使用组织架构树/部门人员接口;详情回填优先使用接口返回对象,不主动覆盖 | | 隐患等级 | `hazardLevel*`、`currentFlowLevel`;`myFactoryConfigs` 返回当前厂区流程等级配置 | 等级编码已确认 general/major/critical;若用于切换,选项可来自已配置流程,但需确认是否允许选择未配置等级 | | 专业 | `major*` | 未发现专用 API 或确定字典编码;可调用通用 `/system/dict/data/type/{dictType}`,但 `dictType` 未提供,待后端确认 | | 隐患分类 | `hazardCategory*` | 同上,缺少字典类型/接口说明 | | 隐患来源 | `sourceType*`、`hazardSourceDetail` | 同上,缺少字典类型/接口说明 | | 隐患类型 | `hazardType*` | 同上,缺少字典类型/接口说明 | | 治理类型 | `governanceType*` | 同上,缺少字典类型/接口说明 | | 资金来源 | `fundsSource*` | 同上,缺少字典类型/接口说明 | | 状态 | `status/statusName` | 列表/详情直接展示后端名称;状态编码枚举在资料中不统一,不能前端硬编码筛选值 | | 驳回理由 | 无独立字段/API | 原型四个选项(照片不清晰、重复上报、非安全隐患、信息不全)只能暂存为 UI 选项,并拼入 `comment`;需确认后端是否有固定编码 | 当前 `api.json` 明确提供的组织接口只有 `GET /system/getOrgUsers`、`GET /system/getTokenUser`;项目代码另有若依式部门树和字典封装,但其字典类型未在 API 资料中声明,不能假定具体字典编码。 用户已同意为页面自行创建测试字典。暂定字典类型为:`hazard_major`、`hazard_category`、`hazard_source`、`hazard_type`、`hazard_governance_type`、`hazard_funds_source`。已提供幂等初始化脚本;实际写入生产地址前需在已登录后台执行并核对结果。 ### 4. 审核按钮与弹窗接口 - “通过”:`POST /flowable/hazard/complete`,请求体至少应包含 `taskId`、`comment`、`result=1`;原型的积分发放、员工推送、平台同步属于后端连锁结果,前端只展示响应结果,不能自行调用或固定显示 `+40`。 - “驳回”:同一接口,`result=2`,弹窗选择驳回理由并填写/合并意见到 `comment`;是否还需 `taskName`、`instanceId`、`targetKey` 等流程字段待确认。 - “重新评估等级”:`POST /flowable/hazard/switchLevel`,查询参数 `reportId`、`newHazardLevel`、`switchReason`;成功后刷新详情和列表。 - “查看附件/预览”:`GET /business/hazard/attachment/{reportId}`;原型“添加附件”可调用 `POST /flowable/hazard/uploadAttachment`,但审核详情是否允许上传、上传后是否需要再次保存/提交流程需确认。 - 危险操作(通过、驳回、切换、上传/删除附件)均需确认提示;附件删除接口存在但本页面暂不默认接入,除非用户明确要求。 #### 平台字段补录如何提交 - `POST /flowable/hazard/complete` 的请求体模型是“工作流签字任务相关--请求参数”,直接字段只有 `taskId`、`comment`、`result`、`instanceId`、`taskName`、`variables` 等流程字段。 - 该接口**没有直接声明** `unitId`、`major`、`riskUnit`、`riskTarget`、`hazardName`、`governanceType`、`chargePersonId` 等平台补录字段。 - 理论上可以把补录表单放进 `variables`,但 OpenAPI 只把 `variables` 定义为任意 `object`,没有说明后端会把它保存到隐患表或同步给生产运营平台,不能据此认定“complete 会传并保存这些字段”。 - 现有明确可以保存这些字段的接口是 `POST /business/hazard/updateById`,请求体为完整“隐患信息”,包含上述补录字段。 - 用户已确认调用顺序:点击通过/驳回时,先调用 `updateById` 保存中间补录表单及已上传附件关联信息;保存成功后再调用 `complete` 完成审批。第一步失败时不得继续审批。 ### 5. 入口、URL 参数与回填 - 本页面必须由其他页面带参数进入,后续从左侧菜单配置中移除;不作为可独立打开的菜单页。 - 从工作台“最新上报/去审核”、隐患台账或 `流程管理 → 隐患审批` 的办理入口进入详情时,应携带隐患主键 `id` 和当前 `taskId`(建议 query:`/hazard/audit?id=123&taskId=456`)。 - 页面 `created`/`watch($route)`:有 `id` 时调用 `GET /flowable/hazard/detail/{id}`,再调用附件列表接口;无 `id` 时展示“缺少隐患 ID,无法加载审核详情”的空态,不请求列表。 - 列表行进入详情时必须传 `row.id`,不能用 `reportNo` 替代;返回列表时保留 tab、筛选和分页状态。 - 详情响应的 `canApprove=false` 或缺少 `taskId` 时,隐藏/禁用通过、驳回、切换按钮并提示当前任务不可处理。 - `HazardReport` 模型没有 `taskId` 字段,而 `complete` 明确要求 `taskId`;待办列表是否额外返回 `taskId`、或需通过其他流程任务接口换取,是当前开发前的关键阻塞点。 #### todoList 与 taskId 核对结果 - 通用待办接口 `GET /flowable/task/todoList` 的返回模型“工作流任务相关-返回参数”明确包含 `taskId`、`businessKey`、`procInsId`、`taskName`、`deployId`、`executionId` 等字段;项目现有待办页面也已直接使用 `row.taskId` 跳转处理页。因此从通用待办列表进入时,可以把 `taskId` 和业务 `id` 一并带入本页。 - 隐患专用接口 `GET /flowable/hazard/todoList` 的说明只保证列表项为 `HazardReport`,该模型没有 `taskId`。不能仅凭文档认定它一定返回 `taskId`;需要真实响应确认,或由后端给该接口补充 `taskId`。 - 实施建议:`流程管理 → 隐患审批` 若采用通用待办接口,使用 `businessKey` 作为隐患业务 ID、`taskId` 作为审批任务 ID;若必须使用隐患专用列表,则在确认其真实返回 `taskId` 后再接跳转。 ### 6. 待后端/用户确认问题(简化版) 1. **隐患专用待办响应**:确认 `/flowable/hazard/todoList` 的真实列表项是否额外包含 `taskId`;若没有,审批入口使用通用 `/flowable/task/todoList` 的 `businessKey + taskId`。 2. **字典数据**:专业、隐患分类、隐患来源、隐患类型、治理类型、资金来源由项目方在系统字典中自行维护;用户后续会安排先创建少量测试字典数据,页面必须通过通用字典接口读取,不在代码中写死。 3. **单位/人员范围**:单位机构使用系统机构接口,人员使用人员接口;默认由后端按当前登录用户的数据权限返回“当前机构及下属机构/人员”,前端使用接口返回范围,不擅自扩大范围。 4. **附件关联**:已确认附件上传后,将返回的附件信息随 `updateById` 保存关联;实际请求字段结构仍需以联调响应为准。 其余字段先按详情接口原值回填;积分、同步状态只展示后端返回值,不在前端写死。 ### 7. 验收方式(开发阶段) - [ ] 带 `id` 进入详情时先回填详情和附件;缺少 `id` 时展示明确空态。 - [ ] 三列详情布局覆盖原型全部字段,未确认字段保持空态/禁用并有说明。 - [ ] 通过、驳回、等级切换、附件预览/上传弹窗完成并严格按确认后的请求体调用。 - [ ] `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md`、`page-api-map.md` 与实际接口保持一致。 - [ ] 生产构建通过。 > 每次开始新功能前,AI 必须先复制下面模板填写。不能直接跳过接口与字段梳理开始编码。 ## 任务模板 ### 1. 用户目标 - 要解决的问题: - 涉及页面: - 明确不在本次范围内的内容: ### 2. 当前代码状态 - 页面/组件现状: - 已有 API 封装: - 菜单与权限现状: - 工作区已有改动及影响: ### 3. 接口计划 | 页面动作 | 接口名称 | 方法 | 前端请求路径 | 请求字段 | 响应字段 | 确认状态 | | --- | --- | --- | --- | --- | --- | --- | | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 已确认/待确认 | ### 4. 页面字段映射 | UI 文案 | 前端字段 | 接口字段 | 展示/编辑规则 | 字典或枚举 | | --- | --- | --- | --- | --- | | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | ### 5. 实施步骤 1. 待填写。 2. 待填写。 ### 6. 风险与待确认 - 待填写。 ### 7. 验收方式 - [ ] 页面功能符合需求。 - [ ] 接口封装与字段映射已核对。 - [ ] 加载、空态、错误和分页已处理。 - [ ] 菜单路径及权限配置已说明。 - [ ] 生产构建通过。 - [ ] `CURRENT_STATUS.md`、`DEVELOPMENT_LOG.md` 和页面接口映射已更新。 ### 8. 完成结果 - 实际完成: - 实际使用接口: - 验证结果: - 遗留事项: