feat: VIP会员开通 + 订单分类 + EnumResolver统一枚举
VIP 会员开通页面(VipPage)
- 四部分布局:激活码 / 套餐选择(双列:Radio + 权益图库) / 协议确认 / 支付跟踪
- 支付跟踪:仿照 RechargePage 模式,创建订单后进入待支付阶段,轮询 VipAPI.getVipOrder
- 页面锁定:待支付中禁止关闭容器(PAGE_LOCK),仅可通过 "X" 关闭
- 权益图库:双列布局右列展示,antd Image 组件支持点击放大预览
- Bug 修复:取消错误判断 name==='AbortError' → instanceof RequestError && type===CANCELLED
订单明细分类(OrdersPage)
- 新增订单类型切换(充值订单 / VIP订单),各自独立数据源与列定义
- startVipPolling:VIP 订单轮询(VipAPI.getVipOrder),与充值轮询对称
- handleContinuePay 统一:根据 orderType 分发到对应轮询函数
- Bug 修复:同 VipPage 的取消错误判断
EnumResolver 统一枚举(enum-resolver.ts)
- 新增 payments 模块:status.label/color + method.label
- 扩展 vip.orderStatus.color
- VipPage / OrdersPage 移除所有直接 Map 索引和本地映射函数,统一走 EnumResolver
VipAPI 扩展(vip-api.ts)
- 新增 getVipOrder(orderId):单订单查询端点 /api/v1/vip/orders/{order_id}
PageDispatcher
- /vip 路由注册 VipPage,label="VIP 会员开通",width=560
This commit is contained in:
@@ -53,7 +53,7 @@ export interface VipLevelsItem {
|
||||
model_package_id: number;
|
||||
description: Nullable<string>;
|
||||
image: Nullable<string>;
|
||||
is_active: number;
|
||||
is_active: boolean;
|
||||
sort_order: number;
|
||||
target_account_type: TargetAccountTypeValue;
|
||||
seat_limit: Nullable<number>;
|
||||
@@ -147,6 +147,12 @@ export class VipAPI {
|
||||
return await get<VipOrderRead[]>(VipApiUrl.VipOrders, params as Record<string, unknown>);
|
||||
}
|
||||
|
||||
/** 获取单个 VIP 订单详情 */
|
||||
static async getVipOrder(orderId: string): Promise<VipOrderRead> {
|
||||
const url = `${VipApiUrl.VipOrders}/${orderId}`;
|
||||
return await get<VipOrderRead>(url);
|
||||
}
|
||||
|
||||
/** 模拟支付成功(仅开发测试用) */
|
||||
static async mockPay(orderId: string): Promise<VipOrderRead> {
|
||||
return await get<VipOrderRead>(`${VipApiUrl.MockPay}/${orderId}`);
|
||||
|
||||
Reference in New Issue
Block a user