diff --git a/docs/development/CURRENT_STATUS.md b/docs/development/CURRENT_STATUS.md index 702ad41..47806d2 100644 --- a/docs/development/CURRENT_STATUS.md +++ b/docs/development/CURRENT_STATUS.md @@ -37,7 +37,8 @@ | 工作台 | `src/views/workbench/index.vue` | `workbench/index` | 已开发(2026-10-15),待测试。6 项 KPI + 近 7 日趋势柱状图 + 待办与预警表 + 最新上报前 5 条;接口 `analysis/home/overview`、`todo-warning`、`trend-latest`。“平台同步失败”无接口,展示 `—`、重试禁用;风控预警“处理”目标页未开发,禁用 | | 隐患审核 | `src/views/hazard/audit/index.vue` | `hazard/audit/index` | 已完成隐患详情/附件展示、平台字段补录、通过/驳回/等级切换,并接入 `getProcessDetail` 自动补齐审批 `taskId`;已在左侧菜单隐藏,仅由台账“去审核”等入口携带参数进入 | | 隐患台账 | `src/views/hazard/ledger/index.vue` | `hazard/ledger/index` | 已完成新版 Card Table、五态筛选/Tag、分页、详情弹窗和审核入口;列表已切换为 `/flowable/hazard/todoList`;单位筛选按角色使用 `factoryList`/`myFactory`;附件九宫格支持大图预览;平台同步列暂时隐藏;同步重试等待后端接口 | -| 积分管理 | `src/views/points/management/index.vue` | `points/management/index` | 已完成积分规则 Tab、统一 Card 列表、厂区列、分页、详情、新增、启停和删除;超管可筛选/选择厂区,厂区管理员可管理本厂区规则;其余 Tab 暂禁用 | +| 积分管理 | `src/views/points/management/index.vue` | `points/management/index` | 已完成积分规则 Tab、统一 Card 列表、厂区列、分页、详情、新增、启停和删除;超管可筛选/选择厂区,厂区管理员可管理本厂区规则。**流水冲正 Tab 已开发(2026-10-15,待测试)**;申诉处理移至独立「申诉台账」页,此 Tab 暂禁用;手动调整 Tab 因 `balance/adjust` 接口定义不完整暂缓 | +| 申诉台账 | `src/views/points/appeal/index.vue` | `points/appeal/index` | 已开发(2026-10-15),待测试。独立页(抄隐患台账 + 审批):列表 `appeal/todoList`、详情 `appeal/detail/{id}`、审批 `appeal/completeFlow`(taskId 由 `flowable/busiInfo/getProcessDetail` 补全)。待联调确认:completeFlow 的 taskId 来源、改判补分 `adjustPoints` 传参 | | 隐患流程配置 | `src/views/flowable/hazardConfig/index.vue` | `flowable/hazardConfig/index` | 已完成列表、筛选、分页、新增、修改、状态 Tag、删除和厂区权限展示;新增“流程类型”字段(`bizType`,字典 `flow_biz_type`)并在列表以 Tag 展示;分页按真实 `data.list/data.total` 解析 | | 切换日志 | `src/views/flowable/switchLog/index.vue` | `flowable/switchLog/index` | 空白页面,无明确列表接口 | diff --git a/docs/development/DEVELOPMENT_LOG.md b/docs/development/DEVELOPMENT_LOG.md index 8f04765..b8de133 100644 --- a/docs/development/DEVELOPMENT_LOG.md +++ b/docs/development/DEVELOPMENT_LOG.md @@ -1,5 +1,22 @@ # 开发日志 +## 2026-10-15:新增 Web 积分管理「流水冲正」Tab(W4) + +- 新增 `src/views/points/management/components/TransactionReversePanel.vue`:积分流水分页列表(筛选:业务类型 / 状态 / 流水号),行操作“冲正”(二次确认,仅 `status=1` 有效可冲正)。 +- 新增 `src/api/points/transaction.js`:`listTransactions`(`transaction/getListByPage`)、`reverseTransaction`(`transaction/reverse/{logId}`)。 +- 在 `src/views/points/management/index.vue` 启用第 4 个 Tab「流水冲正」(`v-if` 懒加载),第 3 个 Tab「手动调整」仍禁用。 +- 备注:流水明细无用户姓名字段,列表“用户”列显示 `userId`。 +- 验证:新文件 `eslint --no-ignore` 通过、`npm run build:prod` 通过(仅既有 warning)、页面诊断无错误。 + +## 2026-10-15:新增 Web 申诉台账页面(含审批) + +- 新增 `src/views/points/appeal/index.vue`:独立「申诉台账」页,抄隐患台账结构(筛选/表格/分页/详情弹窗)+ 审批弹窗(通过/驳回 + 调整积分 + 意见)。 +- 新增 `src/api/points/appeal.js`:`listAppealTodo`、`getAppealDetail`、`getAppealProcessDetail`、`completeAppealFlow`,对应 `appeal/todoList`、`appeal/detail/{id}`、`flowable/busiInfo/getProcessDetail`、`appeal/completeFlow`。 +- 审批走新流程 `completeFlow`:taskId 由 `flowable/busiInfo/getProcessDetail`(按 `flowInstanceId`)取当前待办任务补全,与隐患审核一致;无 taskId 时提示不可提交。 +- **待联调确认**:① `completeFlow` 的 taskId 取值方式;② 改判补分的 `adjustPoints` 传参(当前放入 `variables`)。 +- 菜单(需后端配置):一级「积分与商城」→ 菜单「申诉台账」,路由 `points/appeal`,组件 `points/appeal/index`(`/points/appeal`)。原型积分管理内原“申诉处理 Tab”暂保持禁用。 +- 验证:`eslint --no-ignore` 通过、`npm run build:prod` 通过(仅既有 warning)。 + ## 2026-10-15:新增 Web 工作台页面 - 新增 `src/views/workbench/index.vue`:6 项 KPI(待审核 / 本月已闭环 / 平台同步失败 / 今日新增上报 / 今日兑换单 / 今日发放积分)、近 7 日上报趋势柱状图、待办与预警表、最新上报(前 5 条)。 diff --git a/docs/development/PAGES_TODO.md b/docs/development/PAGES_TODO.md index b4504c8..91e6ae6 100644 --- a/docs/development/PAGES_TODO.md +++ b/docs/development/PAGES_TODO.md @@ -27,9 +27,9 @@ | 3 | 隐患治理 | 隐患审核 | ✅ | ✅ | — | [hazard/audit](../../src/views/hazard/audit/index.vue) | | 4 | 隐患治理 | 隐患台账 | ✅ | ⚠️ | — | [hazard/ledger](../../src/views/hazard/ledger/index.vue);“重试同步”缺平台同步接口,列已隐藏 | | 5 | 积分与商城 | 积分管理 · Tab1 积分规则 | ✅ | ✅ | — | [points/management](../../src/views/points/management/index.vue) | -| 6 | 积分与商城 | 积分管理 · Tab2 申诉处理 | ❌ | ✅ | ✅ | 受理/处理/审批:`appeal/todoList`、`accept/{id}`、`handle/{id}`、`completeFlow`、`detail/{id}`([积分申诉管理](../api/modules/07-points-appeal.md)) | -| 7 | 积分与商城 | 积分管理 · Tab3 手动调整 | ❌ | ✅ | ✅ | `balance/adjust`(补发/扣减 + 自动生成流水与审计)、`balance/getByUserId/{userId}`([用户积分账户](../api/modules/04-points-balance.md)) | -| 8 | 积分与商城 | 积分管理 · Tab4 流水冲正 | ❌ | ✅ | ✅ | `transaction/reverse/{logId}`、`transaction/list`([积分流水明细](../api/modules/05-points-transaction.md)) | +| 6 | 积分与商城 | 申诉台账(独立页,抄隐患台账 + 审批界面) | ⚠️ 待测试 | ✅ | ✅ | **已开发(2026-10-15)**:`src/views/points/appeal/index.vue` + `src/api/points/appeal.js`。列表 `appeal/todoList`、详情 `appeal/detail/{id}`、审批 `appeal/completeFlow`(taskId 由 `flowable/busiInfo/getProcessDetail` 补全)。注:原型积分管理内原“申诉处理 Tab”暂保持禁用 | +| 7 | 积分与商城 | 积分管理 · Tab3 手动调整 | ❌ | ⛔ | ⛔ | **阻塞**:`balance/adjust` 文档仅声明 form-urlencoded + 单整数,缺 `userId`/`points`/原因字段,需后端补请求结构 | +| 8 | 积分与商城 | 积分管理 · Tab4 流水冲正 | ⚠️ 待测试 | ✅ | ✅ | **已开发(2026-10-15)**:`src/views/points/management/components/TransactionReversePanel.vue` + `src/api/points/transaction.js`。列表 `transaction/getListByPage`、冲正 `transaction/reverse/{logId}`(二次确认,仅 status=1 可冲正) | | 9 | 积分与商城 | 商城运营(主页:KPI + 兑换订单表 + 订单详情时间线 + 退款/导出) | ❌ | ⚠️ | ⚠️ | 订单/追踪/物品/日志接口齐全([兑换订单](../api/modules/08-exchange-order.md)、[订单追踪](../api/modules/10-exchange-order-track.md)、[兑换物品](../api/modules/09-exchange-item.md)、[操作日志](../api/modules/12-exchange-operation-log.md));**“惠服对接状态卡”(Token 状态/同步时间/全量·增量·单品同步/刷新 Token)无接口**,该卡片需等后端 | | 10 | 积分与商城 | 商城运营 › 分类管理 | ❌ | ⛔ | ⛔ | 页面本体由惠服平台提供,需甲方给出嵌入方案(URL/SSO) | | 11 | 积分与商城 | 商城运营 › 轮播图管理 | ❌ | ⛔ | ⛔ | 同上 | @@ -163,6 +163,9 @@ **A. 需后端确认(接口 / 字段 / 入参)** - [ ] `completeFlow` 请求体结构:`taskId`、通过/驳回标识、`adjustPoints` 传参位置(每节点 or 结束节点)、审批意见字段名。 + + > **W2 落地假设(2026-10-15,待联调确认)**:审批 body 采用 `{ taskId, instanceId, type: 'appeal', result: '1'|'2', comment }`;`taskId` 由 `flowable/busiInfo/getProcessDetail?id=flowInstanceId` 取当前待办任务补全(沿用隐患审核做法);**改判补分的 `adjustPoints` 暂放入 `variables`**——若后端实际从申诉记录字段读取,需改为“先 `appeal/updateById` 更新记录再 `completeFlow`”。 +- [ ] **手动调整 `balance/adjust` 请求结构(阻塞 W3)**:文档仅声明 form-urlencoded 单整数,缺 `userId`/`points`/原因字段与参数名,需后端补充后才能开发「手动调整」。**【后端计划 2026-10-16 更新该接口并补参数;同时需确认是直接生效还是二级审批】** - [ ] `todoList` 筛选参数(待办/已办、类型、状态、厂区)与返回字段是否含 `canApprove`、`isInitiator`(现有 api.json 文档未列出)。 - [ ] `myList` 筛选参数(`appealType` / `status`)。 - [ ] `detail/{id}` 返回的“流程进度信息”结构(时间线需要:节点名 / 处理人 / 处理时间 / 审批意见)。 @@ -196,9 +199,9 @@ | 编号 | 端 | 功能 / 页面 | 关键接口 | 建议文件(页面 / 封装) | 优先级 | 状态 | 依赖 / 备注 | | --- | --- | --- | --- | --- | --- | --- | --- | | W1 | Web | 工作台 | `analysis/home/overview`、`home/todo-warning`、`home/trend-latest` | `src/views/workbench/index.vue` + `src/api/analysis/home.js` | 高 | ◐ 待测试 | **已开发(2026-10-15)**,待测试。菜单:一级「工作台」,路由 `workbench`,组件 `workbench/index`(`/workbench`)。“平台同步失败”KPI 无接口,展示 `—` | -| W2 | Web | 积分管理 · 申诉处理 Tab | `appeal/todoList`、`appeal/detail/{id}`、`appeal/completeFlow` | `src/views/points/management/index.vue` + `src/api/points/appeal.js` | 高 | ☐ | 默认走 `completeFlow`;开工前按第八节 A 确认入参 | -| W3 | Web | 积分管理 · 手动调整 Tab | `balance/adjust`、`balance/getByUserId/{userId}` | 同上 + `src/api/points/balance.js` | 高 | ☐ | 员工选择用 `system/getOrgUsers` | -| W4 | Web | 积分管理 · 流水冲正 Tab | `transaction/reverse/{logId}`、`transaction/list` | 同上 + `src/api/points/transaction.js` | 中 | ☐ | 冲正需二次确认 | +| W2 | Web | 申诉台账(独立页,抄隐患台账 + 审批) | `appeal/todoList`、`appeal/detail/{id}`、`appeal/completeFlow`、`flowable/busiInfo/getProcessDetail` | `src/views/points/appeal/index.vue` + `src/api/points/appeal.js` | 高 | ◐ 待测试 | **已开发(2026-10-15)**,待测试。菜单:一级「积分与商城」→「申诉台账」,路由 `points/appeal`,组件 `points/appeal/index`(`/points/appeal`)。待联调确认:completeFlow 的 taskId 来源、改判补分 `adjustPoints` 传参(当前放 `variables`) | +| W3 | Web | 积分管理 · 手动调整 Tab | `balance/adjust`、`balance/getByUserId/{userId}` | `src/views/points/management/index.vue` + `src/api/points/balance.js` | 高 | ⛔ 需确认 | **接口定义不完整**:`balance/adjust` 文档仅声明 `application/x-www-form-urlencoded` + 单个整数,缺 `userId`/`points`/原因字段结构,无法开工;**后端计划 2026-10-16 更新该接口并补参数**,更新后即可开发 | +| W4 | Web | 积分管理 · 流水冲正 Tab | `transaction/getListByPage`、`transaction/reverse/{logId}` | `src/views/points/management/components/TransactionReversePanel.vue` + `src/api/points/transaction.js` | 中 | ◐ 待测试 | **已开发(2026-10-15)**,待测试。积分管理第 4 个 Tab;仅 status=1(有效)可冲正,二次确认。流水无用户姓名字段,列表显示 userId | | W5 | Web | 安全兑换管理 | `exchange/config/active`·`validate`·`switch/status`·`switch/toggle`·`updateById`、`anti/farm/active`·`detectAll`·`detectSelfAudit` | `src/views/exchange/security/index.vue` + `src/api/exchange/config.js` | 中 | ☐ | 字段见 `ExchangeConfig` / `AntiFarmConfig` | | W6 | Web | 数据分析 | `analysis/stats/*`、`ranking/*`、`timeliness/level`、`report/monthly`(+`/export`)、`stats/category`·`stats/level` | `src/views/analysis/index.vue` + `src/api/analysis/index.js` | 中 | ☐ | **页面调整(2026-10-15)**:① 去掉隐患热力图(`heatmap/*` 接口暂不接);② 去掉顶部筛选列;③「处理时效漏斗」与「积分排行」改为左右布局占一行。图表用已装 `echarts` | | A1 | APP | 设置(推送/声音/震动/关于/清缓存/退出) | 纯本地(AsyncStorage) | `src/screens/home/SettingsScreen.tsx` | 中 | ☐ | 参考原型 `scr-settings` | diff --git a/src/api/points/appeal.js b/src/api/points/appeal.js new file mode 100644 index 0000000..75977e9 --- /dev/null +++ b/src/api/points/appeal.js @@ -0,0 +1,25 @@ +import request from '@/utils/request' + +// 申诉审批台账(审批人视角,待办/已办;返回 PageInfo,行内含 canApprove/isInitiator) +export function listAppealTodo(params) { + return request({ url: '/business/points/appeal/todoList', method: 'get', params }) +} + +// 申诉详情(含完整申诉字段与流程进度信息) +export function getAppealDetail(id) { + return request({ url: '/business/points/appeal/detail/' + id, method: 'get' }) +} + +// 根据流程实例 ID 获取流程详情,用于补齐当前待办任务 taskId +export function getAppealProcessDetail(flowInstanceId) { + return request({ + url: '/flowable/busiInfo/getProcessDetail', + method: 'get', + params: { id: flowInstanceId } + }) +} + +// 审批申诉流程(通过/驳回当前节点);流程结束时后端按 adjustPoints 补/扣分并推送消息 +export function completeAppealFlow(data) { + return request({ url: '/business/points/appeal/completeFlow', method: 'post', data }) +} diff --git a/src/api/points/transaction.js b/src/api/points/transaction.js new file mode 100644 index 0000000..9141857 --- /dev/null +++ b/src/api/points/transaction.js @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 积分流水分页查询(管理端) +export function listTransactions(params) { + return request({ url: '/business/points/transaction/getListByPage', method: 'get', params }) +} + +// 积分冲正:按原流水 ID 冲正,原流水标记已冲正并生成反向流水 +export function reverseTransaction(logId) { + return request({ url: '/business/points/transaction/reverse/' + logId, method: 'post' }) +} diff --git a/src/views/points/appeal/index.vue b/src/views/points/appeal/index.vue new file mode 100644 index 0000000..d9b8514 --- /dev/null +++ b/src/views/points/appeal/index.vue @@ -0,0 +1,388 @@ + + + + + diff --git a/src/views/points/management/components/TransactionReversePanel.vue b/src/views/points/management/components/TransactionReversePanel.vue new file mode 100644 index 0000000..310ccdf --- /dev/null +++ b/src/views/points/management/components/TransactionReversePanel.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/points/management/index.vue b/src/views/points/management/index.vue index bdab623..b7cd07d 100644 --- a/src/views/points/management/index.vue +++ b/src/views/points/management/index.vue @@ -167,10 +167,9 @@ > + + { if (!value) callback(new Error("请选择所属厂区"));