Files
2026-03-05 09:08:21 +08:00

101 lines
3.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 订阅支付页
* 接收参数:channelId, channelName, monthlyPrice, quarterlyPrice, annualPrice
*/
const app = getApp()
const api = require('../../utils/api')
Page({
data: {
channelId: '',
channelName: '',
monthlyPrice: 0,
quarterlyPrice: 0,
annualPrice: 0,
selectedPlan: '', // 'monthly' | 'quarterly' | 'annual'
currentPrice: 0
},
onLoad(options) {
// 后端价格单位为「分」,除以 100 转为「元」
const monthly = (parseFloat(options.monthlyPrice) || 0) / 100
const quarterly = (parseFloat(options.quarterlyPrice) || 0) / 100
const annual = (parseFloat(options.annualPrice) || 0) / 100
// 默认选中"包年"(如果有),否则最便宜的
let defaultPlan = ''
let defaultPrice = 0
if (annual > 0) {
defaultPlan = 'annual'
defaultPrice = annual
} else if (quarterly > 0) {
defaultPlan = 'quarterly'
defaultPrice = quarterly
} else if (monthly > 0) {
defaultPlan = 'monthly'
defaultPrice = monthly
}
this.setData({
channelId: options.channelId || '',
channelName: decodeURIComponent(options.channelName || ''),
monthlyPrice: monthly,
quarterlyPrice: quarterly,
annualPrice: annual,
selectedPlan: defaultPlan,
currentPrice: defaultPrice,
// 预计算节省金额和月均价(WXML 不支持 .toFixed()
_quarterlySaving: monthly > 0 && quarterly > 0 ? Math.round(monthly * 3 - quarterly) : 0,
_quarterlyMonthly: quarterly > 0 ? (quarterly / 3).toFixed(1) : '0',
_annualSaving: monthly > 0 && annual > 0 ? Math.round(monthly * 12 - annual) : 0,
_annualMonthly: annual > 0 ? (annual / 12).toFixed(1) : '0'
})
},
/** 选择套餐 */
selectPlan(e) {
const plan = e.currentTarget.dataset.plan
const priceMap = {
monthly: this.data.monthlyPrice,
quarterly: this.data.quarterlyPrice,
annual: this.data.annualPrice
}
this.setData({
selectedPlan: plan,
currentPrice: priceMap[plan] || 0
})
},
/** 发起支付 */
onPay() {
const { channelId, selectedPlan, currentPrice, channelName } = this.data
if (!selectedPlan) {
wx.showToast({ title: '请选择订阅方案', icon: 'none' })
return
}
// 调用订阅/支付接口
wx.showLoading({ title: '处理中...' })
api.subscribeChannel({
channelId,
plan: selectedPlan,
price: currentPrice
}).then(function (res) {
wx.hideLoading()
if (res.code === 200) {
wx.showToast({ title: '订阅成功!', icon: 'success' })
setTimeout(function () {
wx.navigateBack()
}, 1500)
} else {
wx.showToast({ title: res.msg || '订阅失败', icon: 'none' })
}
}).catch(function (err) {
wx.hideLoading()
console.error('[订阅] 失败:', err)
wx.showToast({ title: '网络异常,请重试', icon: 'none' })
})
}
})