feat(claim): 支持固定H5订单号领取与订单兑换有效性后台控制

- 数据库新增 099_order_claim_status.sql 迁移,扩展 claim_status、claim_status_reason 等字段
- 后端新增 /claims/h5/:orderNo、UID提交、分销提交接口,保留原有 token 接口双轨兼容
- 增加兑换有效性强拦截:暂停/关闭/退款/取消订单精准阻断并返回友好提示
- 后台新增 POST /admin/orders/:orderId/claim-status 接口与审计日志记录
- 前端管理后台(订单列表、详情页)支持 H5 兑换状态展示、一键复制链接及暂停/关闭/启用弹窗
- 前端领取页面适配 /h5/:orderNo 路由及暂停/关闭等状态的异常展示
- 验证方式:运行前后端类型检查、全量单元测试(后端 674、前端 132)及全量构建编译均通过
This commit is contained in:
yml2213
2026-10-10 18:05:46 +08:00
parent 2d727a6797
commit 412d219cca
21 changed files with 788 additions and 50 deletions
+29
View File
@@ -2,6 +2,10 @@ import { Router } from 'express'
import { getAdminOrderDetail, getAdminOrders } from '../../services/admin/admin-read-service.js'
import { resendAdminOrderKuaishouIndustryVoucherCodes } from '../../services/admin/write/kuaishou-industry-actions.js'
import {
updateAdminOrderClaimStatus,
type UpdateOrderClaimStatusPayload,
} from '../../services/admin/write/order-actions.js'
import { createJsonHandler, requireAdminRoles } from './session.js'
import type { AdminOrderRouteParams, AdminOrderRouteQuery } from '../../types/admin/route-inputs.js'
@@ -34,6 +38,30 @@ router.get(
),
)
router.post(
'/orders/:orderId/claim-status',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) =>
updateAdminOrderClaimStatus(
String((req.params as AdminOrderRouteParams).orderId || ''),
req.body as UpdateOrderClaimStatusPayload,
req.adminSession || null,
),
{
successMessage: '订单兑换状态已更新',
errorMessage: '更新订单兑换状态失败',
scope: '[admin/orders/:orderId/claim-status]',
audit: (req, data) => ({
action: 'order_claim_status_update',
targetType: 'order',
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/orders/:orderId/kuaishou-industry/resend-code',
requireAdminRoles(['admin', 'operator', 'support']),
@@ -58,3 +86,4 @@ router.post(
)
export default router