# 资源状态切换:非超管需走审批流程 **日期**: 2026-03-25 **服务**: hl-resource-service **影响范围**: 所有资源模块(景区、酒店、餐厅、活动、车辆、物资、费用项、服务项、人员)的状态切换开关 --- ## 背景说明 当前前端资源列表页的状态 toggle 开关,直接调用了 `PUT /{resource}/{id}/status` 接口。该接口仅限 SUPER_ADMIN 使用,非超管用户操作时会报错 **"仅超级管理员可直接修改状态"**。 **后端已有完整的审批接口**,前端需根据用户角色分别调用不同接口: | 用户角色 | 行为 | 调用接口 | |---------|------|---------| | SUPER_ADMIN | 直接生效 | `PUT /{resource}/{id}/status` | | 其他角色 | 提交审批 | `POST /{resource}/{id}/submit-approval` | --- ## 各资源审批接口清单 | # | 资源 | 审批接口路径 | 方法 | |---|------|-------------|------| | 1 | 景区 | `/admin/scenic/spot/{scenicId}/submit-approval` | POST | | 2 | 酒店 | `/admin/hotel/item/{hotelId}/submit-approval` | POST | | 3 | 房型 | `/admin/hotel/room-type/{roomTypeId}/submit-approval` | POST | | 4 | 餐厅 | `/admin/restaurant/item/{restaurantId}/submit-approval` | POST | | 5 | 活动 | `/admin/activity/item/{activityId}/submit-approval` | POST | | 6 | 车辆 | `/admin/vehicle/model/{vehicleId}/submit-approval` | POST | | 7 | 物资 | `/admin/supplies/item/{suppliesId}/submit-approval` | POST | | 8 | 费用项 | `/admin/cost/item/{costId}/submit-approval` | POST | | 9 | 服务项 | `/admin/service/item/{serviceId}/submit-approval` | POST | | 10 | 人员 | `/admin/staff/{staffId}/submit-approval` | POST | --- ## 审批接口详细定义 ### 使用场景 非超管用户在资源列表页点击状态 toggle 时,弹出确认框让用户填写审批理由,然后调用此接口提交企微OA审批。审批通过后状态自动变更。 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | targetStatus | Integer | 是 | 目标状态:`0`=下架,`1`=上架 | | reason | String | 是 | 审批理由,不能为空 | ### 请求示例 ```json POST /admin/scenic/spot/123456/submit-approval { "targetStatus": 1, "reason": "内容审核完毕,申请上架" } ``` ### 响应示例 **成功(200)**: ```json { "code": 200, "message": "success", "data": { "spNo": "202603250001" } } ``` **失败 - 已有审批进行中**: ```json { "code": 400, "message": "该资源已有审批进行中,请等待审批结果" } ``` --- ## 前端实现建议 ``` 状态 Toggle 开关被点击 │ ├─ 当前角色 = SUPER_ADMIN ? │ ├─ 是 → 直接调 PUT /{resource}/{id}/status(现有逻辑不变) │ └─ 否 ↓ │ ├─ 弹出确认框 │ ┌──────────────────────────────┐ │ │ 申请 [上架/下架] │ │ │ │ │ │ 审批理由: │ │ │ ┌──────────────────────┐ │ │ │ │ (textarea) │ │ │ │ └──────────────────────┘ │ │ │ │ │ │ [取消] [提交审批] │ │ └──────────────────────────────┘ │ └─ 调 POST /{resource}/{id}/submit-approval │ ├─ 成功 → 提示 "审批已提交,请等待审批结果" │ toggle 恢复原状态(审批未通过前不变) └─ 失败 → 提示错误信息,toggle 恢复原状态 ``` ### 角色判断 用户角色已存储在登录 token 中(`X-Admin-Role` header),前端可从本地存储中获取 `role` 字段判断是否为 `SUPER_ADMIN`。 --- ## 注意事项 1. **审批期间 toggle 状态不变**:提交审批后资源进入 `PENDING_APPROVAL` 状态,但显示状态不变,等审批通过后自动切换 2. **不可重复提交**:同一资源有未完成的审批时,再次提交会返回 400 错误 3. **所有资源模块统一逻辑**:景区、酒店、餐厅、活动等全部适用,前端可封装通用组件