概述
页面路径:入口组件:
/profile/personal-rights/recharge-center通过
apps/web/app/profile/personal-rights/recharge-center.vue 自动挂载到“个人权益”分组,并被
definePageMeta({ layout: 'setting', title: 'menu.rechargeCenter', inSystem: true, inLinkSelector: true }) 实时收录到链接选择器。提供用户侧算力(Power)充值闭环:套餐选择 → 下单 → 扫码支付 → 轮询结果 → 到账反馈;后台可开关与动态配置。
system-page-provider.vue
用户角色与权限
| 角色 | 权限 |
|---|---|
| 登录用户 | 可见可买;功能关闭时展示“暂未开放”锁屏 |
| 游客 | 需登录后使用 |
导航与入口
左侧菜单硬编码在 数组
core/layouts/setting.vue,国际化 key:
items
分组:子项:
common.label.personalRights
common.personalRights.rechargeCenter
路由: 链接选择器:由
/profile/personal-rights/recharge-center 扫描
system-page-provider.vue 自动收录,无需手动注册。
meta.inLinkSelector && meta.inSystem
页面结构
用户信息卡片:头像、昵称、算力余额()套餐选择:
user.power
数据源 (
RechargeCenterInfo.rechargeRule)默认选中首项;无数据展示“暂无充值选项”
id/power/givePrice/sellPrice/label
支付方式:
数据源 (
RechargeCenterInfo.payWayList)单选卡片,默认
payType/name/logo(微信支付)
payType = 1
充值说明:
读取后台字典 ;为空用国际化兜底
recharge_explain
结算栏:合计金额、立即购买按钮支付弹窗:
展示二维码 120 s 超时失效,支持“刷新二维码”重新调用
PrepaidInfo.qrCode.code_url 并重启轮询服务条款跳转
prepaid
/agreement?type=agreement&item=payment
成功反馈弹窗:充值成功、继续充值/查看记录
核心流程
进入页调用 :
getRechargeCenterInfo()
服务端读取字典 控制开关;
recharge_status 填充说明
recharge_explain
立即购买:
recharge({id,payType}) → OrderInfo 并弹窗
prepaid({from:"recharge",orderId,payType}) → PrepaidInfo
轮询:每 3 s
getPayResult({orderId,from:"recharge"})
停止轮询,刷新用户算力,展示成功弹窗120 s 超时显示失效层,可刷新二维码重启流程
payStatus===1
取消/关闭:清除定时器,toast 提示“取消支付”
数据模型
interface RechargeCenterInfo {
payWayList: {logo,name,payType}[]
rechargeExplain: string
rechargeRule: {id,power,givePower,sellPrice,label}[]
rechargeStatus: boolean
user: {avatar,id,power,username}
}
interface OrderInfo {orderAmount,orderId,orderNo}
interface PrepaidInfo {payType,qrCode:{code_url}}
interface PayResult {id,orderNo,payStatus} // 0未付 1已付
接口规范
→ RechargeCenterInfo
GET /recharge/center → OrderInfo
POST /recharge/submitRecharge → PrepaidInfo
POST /pay/prepay → PayResult
GET /pay/getPayResult
服务端复用 console 实体:
/
RechargeOrder /
Recharge /
Payconfig /
UserWeb 模块注册链:
Dict →
apps/server/src/modules/web/recharge/recharge.modeule.ts
web.module.ts
文案与多语言
key 速查(zh 示例,同 key 存在于 en/jp):
→ “个人权益”
common.label.personalRights → “充值中心”
common.personalRights.rechargeCenter → “充值中心”
menu.rechargeCenter → 页面内所有操作文案
web-personal-rights.rechargeCenter.*
验收标准
正确展示用户信息、套餐、支付方式;无套餐时禁用购买 下单并弹出二维码;120 s 超时可刷新重试 支付成功 3 s 内识别,算力余额与明细同步更新 功能关闭时显示“暂未开放”锁屏,菜单仍可见 国际化 key 与三语文件保持一致,服务条款链接可访问 埋点事件(进入页/下单/二维码加载/成功/超时/刷新/取消)均已上报
国际化 key 速查表
| key | 文件 | 示例值 |
|---|---|---|
| common.label.personalRights | common.json | 个人权益 |
| common.personalRights.rechargeCenter | common.json | 充值中心 |
| menu.rechargeCenter | menu.json | 充值中心 |
| web-personal-rights.rechargeCenter.selectRechargePackage | web-personal-rights.json | 选择充值套餐 |
| web-personal-rights.rechargeCenter.paymentMethod | web-personal-rights.json | 支付方式 |
| web-personal-rights.rechargeCenter.rechargeInstructions.title | web-personal-rights.json | 充值说明 |
| web-personal-rights.rechargeCenter.immediatelyPurchase | web-personal-rights.json | 立即购买 |
| web-personal-rights.rechargeCenter.qrCodeExpired | web-personal-rights.json | 二维码失效,请刷新 |
| web-personal-rights.rechargeCenter.rechargeSuccess | web-personal-rights.json | 充值成功 |
核心文件索引
页面:布局:
apps/web/app/profile/personal-rights/recharge-center.vue链接选择器:
apps/web/core/layouts/setting.vue数据模型:
apps/web/common/components/console/link-picker/providers/system-page-provider.vueWeb 接口:
apps/web/models/recharge-center.d.ts服务端:
apps/web/services/web/recharge-center.ts
Controller:Service:
apps/server/src/modules/web/recharge/controllers/recharge.controller.tsModule:
apps/server/src/modules/web/recharge/services/recharge.service.ts
apps/server/src/modules/web/recharge/recharge.modeule.ts