Files
qipai/miniapp/pages/recharge/index.js
T
2026-06-25 12:40:21 +08:00

107 lines
2.9 KiB
JavaScript

const {
request,
ensureLogin,
cents,
clientRequestId,
requestWechatPayment,
} = require('../../utils/api.js')
Page({
data: {
loading: false,
errorMessage: '',
successMessage: '',
plans: [],
selectedPlanId: '',
rechargeOrder: null,
},
onLoad() {
this.loadPlans()
},
async loadPlans() {
this.setData({ loading: true, errorMessage: '', successMessage: '' })
try {
await ensureLogin()
const response = await request('/recharge/plans')
const plans = (response.data || []).map((item) => ({
...item,
payText: cents(item.payAmountCents),
giftText: cents(item.giftAmountCents),
totalText: cents(Number(item.payAmountCents || 0) + Number(item.giftAmountCents || 0)),
}))
this.setData({
plans,
selectedPlanId: plans[0]?.planId || '',
})
} catch (error) {
this.setData({ errorMessage: error.message || '充值计划加载失败' })
} finally {
this.setData({ loading: false })
}
},
selectPlan(event) {
this.setData({
selectedPlanId: event.currentTarget.dataset.planId || '',
rechargeOrder: null,
errorMessage: '',
successMessage: '',
})
},
async createRechargeOrder() {
if (!this.data.selectedPlanId) {
this.setData({ errorMessage: '请选择充值计划' })
return
}
const plan = this.data.plans.find((item) => item.planId === this.data.selectedPlanId)
await this.withRequest(async () => {
const response = await request('/recharge/orders', {
method: 'POST',
data: {
planId: this.data.selectedPlanId,
storeId: plan?.storeId || null,
clientRequestId: clientRequestId('miniapp-recharge'),
},
})
this.setData({
rechargeOrder: {
...response.data,
payText: cents(response.data.payAmountCents),
giftText: cents(response.data.giftAmountCents),
},
successMessage: '充值单已创建',
})
})
},
async payRechargeOrder() {
if (!this.data.rechargeOrder || !this.data.rechargeOrder.rechargeOrderId) {
this.setData({ errorMessage: '请先创建充值单' })
return
}
await this.withRequest(async () => {
const response = await request(
`/recharge/orders/${encodeURIComponent(this.data.rechargeOrder.rechargeOrderId)}/wechat-prepay`,
{ method: 'POST' }
)
await requestWechatPayment(response.data)
this.setData({ successMessage: '微信支付已提交,到账结果以服务端通知为准' })
})
},
async withRequest(work) {
this.setData({ loading: true, errorMessage: '', successMessage: '' })
try {
await ensureLogin()
await work()
} catch (error) {
this.setData({ errorMessage: error.message || '充值操作失败' })
} finally {
this.setData({ loading: false })
}
},
})