101 lines
3.3 KiB
JavaScript
101 lines
3.3 KiB
JavaScript
/**
|
||
* 订阅支付页
|
||
* 接收参数: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' })
|
||
})
|
||
}
|
||
})
|