diff --git a/docs/development/CURRENT_STATUS.md b/docs/development/CURRENT_STATUS.md index 47806d2..dd1df68 100644 --- a/docs/development/CURRENT_STATUS.md +++ b/docs/development/CURRENT_STATUS.md @@ -37,7 +37,7 @@ | 工作台 | `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 已开发(2026-10-15,待测试)**;申诉处理移至独立「申诉台账」页,此 Tab 暂禁用;手动调整 Tab 因 `balance/adjust` 接口定义不完整暂缓 | +| 积分管理 | `src/views/points/management/index.vue` | `points/management/index` | 已完成积分规则 Tab、统一 Card 列表、厂区列、分页、详情、新增、启停和删除;超管可筛选/选择厂区,厂区管理员可管理本厂区规则。**流水冲正 Tab 已开发(2026-10-15,待测试)**;申诉处理 Tab 已启用(复用独立「申诉台账」页同一组件 `AppealLedgerPanel`);手动调整 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 b8de133..fc68532 100644 --- a/docs/development/DEVELOPMENT_LOG.md +++ b/docs/development/DEVELOPMENT_LOG.md @@ -1,5 +1,12 @@ # 开发日志 +## 2026-10-15:申诉处理 Tab 复用申诉台账组件 + +- 将申诉台账核心逻辑抽成可复用组件 `src/views/points/appeal/components/AppealLedgerPanel.vue`(列表/详情/审批)。 +- 独立页 `src/views/points/appeal/index.vue` 改为仅包裹该组件。 +- 积分管理 `src/views/points/management/index.vue` 启用第 2 个 Tab「申诉处理」(`v-if` 懒加载),复用同一组件。 +- 验证:`eslint --no-ignore` 通过、`npm run build:prod` 通过(仅既有 warning)。 + ## 2026-10-15:新增 Web 积分管理「流水冲正」Tab(W4) - 新增 `src/views/points/management/components/TransactionReversePanel.vue`:积分流水分页列表(筛选:业务类型 / 状态 / 流水号),行操作“冲正”(二次确认,仅 `status=1` 有效可冲正)。 diff --git a/docs/development/PAGES_TODO.md b/docs/development/PAGES_TODO.md index 91e6ae6..e42beb0 100644 --- a/docs/development/PAGES_TODO.md +++ b/docs/development/PAGES_TODO.md @@ -27,7 +27,7 @@ | 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 | 积分与商城 | 申诉台账(独立页,抄隐患台账 + 审批界面) | ⚠️ 待测试 | ✅ | ✅ | **已开发(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”暂保持禁用 | +| 6 | 积分与商城 | 申诉台账(独立页 + 积分管理内“申诉处理”Tab) | ⚠️ 待测试 | ✅ | ✅ | **已开发(2026-10-15)**:`AppealLedgerPanel.vue`(复用组件)+ 独立页 `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)无接口**,该卡片需等后端 | diff --git a/src/views/points/appeal/components/AppealLedgerPanel.vue b/src/views/points/appeal/components/AppealLedgerPanel.vue new file mode 100644 index 0000000..2905f25 --- /dev/null +++ b/src/views/points/appeal/components/AppealLedgerPanel.vue @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + 刷新 + + + + + + + + {{ typeLabel(scope.row) }} + + + + + {{ statusLabel(scope.row) }} + + + + {{ formatTime(scope.row.createTime) }} + + + + 详情 + 去审批 + + + + + + + + + + + + + + {{ detail.appealNo || '—' }} + {{ typeLabel(detail) }} + {{ detail.userName || '—' }} + {{ detail.factoryDeptName || '—' }} + {{ detail.reportNo || '—' }} + {{ statusLabel(detail) }} + {{ formatTime(detail.createTime) }} + {{ formatTime(detail.handleTime) }} + {{ detail.handleUserName || '—' }} + {{ formatAdjust(detail.adjustPoints) }} + {{ detail.appealReason || '—' }} + {{ detail.handleRemark || '—' }} + + + 附件 + {{ url }} + + + + + + + + + 申诉编号:{{ approveForm.appealNo || '—' }} + 申诉人:{{ approveForm.userName || '—' }} + 关联隐患:{{ approveForm.reportNo || '—' }} + 申诉理由:{{ approveForm.appealReason || '—' }} + + + + + + 通过 + 驳回 + + + + + 正数补发、负数扣减;不填则按原积分处理 + + + + + + + + + + + + + diff --git a/src/views/points/appeal/index.vue b/src/views/points/appeal/index.vue index d9b8514..0764e77 100644 --- a/src/views/points/appeal/index.vue +++ b/src/views/points/appeal/index.vue @@ -1,340 +1,15 @@ - - - - - - - - - - - - - - - 搜索 - 重置 - - - - - - 刷新 - - - - - - - - {{ typeLabel(scope.row) }} - - - - - {{ statusLabel(scope.row) }} - - - - {{ formatTime(scope.row.createTime) }} - - - - 详情 - 去审批 - - - - - - - - - - - - - - {{ detail.appealNo || '—' }} - {{ typeLabel(detail) }} - {{ detail.userName || '—' }} - {{ detail.factoryDeptName || '—' }} - {{ detail.reportNo || '—' }} - {{ statusLabel(detail) }} - {{ formatTime(detail.createTime) }} - {{ formatTime(detail.handleTime) }} - {{ detail.handleUserName || '—' }} - {{ formatAdjust(detail.adjustPoints) }} - {{ detail.appealReason || '—' }} - {{ detail.handleRemark || '—' }} - - - 附件 - {{ url }} - - - - - - - - - 申诉编号:{{ approveForm.appealNo || '—' }} - 申诉人:{{ approveForm.userName || '—' }} - 关联隐患:{{ approveForm.reportNo || '—' }} - 申诉理由:{{ approveForm.appealReason || '—' }} - - - - - - 通过 - 驳回 - - - - - 正数补发、负数扣减;不填则按原积分处理 - - - - - - - + @@ -342,47 +17,4 @@ export default { .appeal-ledger { min-height: calc(100vh - 52px); } - -.approve-summary { - margin-bottom: 14px; - padding: 12px 14px; - border-radius: 8px; - background: var(--prototype-panel-soft, #fafbfc); - color: var(--prototype-text-secondary, #5a5a72); - font-size: 13px; - line-height: 22px; -} - -.approve-summary .label { - color: var(--prototype-text-muted, #9898ae); -} - -.field-tip { - margin-left: 10px; - color: var(--prototype-text-muted, #9898ae); - font-size: 12px; -} - -.appeal-attachments { - margin-top: 14px; -} - -.appeal-attachments__title { - margin-bottom: 6px; - color: var(--prototype-text-secondary, #5a5a72); - font-size: 13px; - font-weight: 600; -} - -.appeal-attachments__item { - display: block; - margin-bottom: 4px; - color: #1890ff; - font-size: 12px; - word-break: break-all; -} - -.approve-summary .el-input-number { - width: 100%; -} diff --git a/src/views/points/management/index.vue b/src/views/points/management/index.vue index b7cd07d..207c05a 100644 --- a/src/views/points/management/index.vue +++ b/src/views/points/management/index.vue @@ -164,7 +164,9 @@ - > + + @@ -300,6 +302,7 @@ import { getMyFactoryDepartment, } from "@/api/system/dept"; import TransactionReversePanel from "./components/TransactionReversePanel"; +import AppealLedgerPanel from "@/views/points/appeal/components/AppealLedgerPanel"; const LEVELS = [ { value: "general", label: "一般隐患" }, { value: "major", label: "较大隐患" }, @@ -307,7 +310,7 @@ const LEVELS = [ ]; export default { name: "PointsManagement", - components: { TransactionReversePanel }, + components: { TransactionReversePanel, AppealLedgerPanel }, data() { const deptRequired = (rule, value, callback) => { if (!value) callback(new Error("请选择所属厂区"));