miniprogram: 用永平版本替换(含超级个体、会员详情、提现等)
- 来源: 一场soul的创业实验-永平/soul/miniprogram - 新增: addresses/agreement/privacy/withdraw-records 等页面 - 新增: components/icon, utils/chapterAccessManager, readingTracker - 删除: 上传脚本、部署说明等冗余文件 - 同步永平最新结构和功能 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,7 +7,19 @@ Page({
|
||||
daysRemaining: 0,
|
||||
expireDateStr: '',
|
||||
price: 1980,
|
||||
rights: [],
|
||||
originalPrice: 6980,
|
||||
contentRights: [
|
||||
{ title: '解锁全部章节', desc: '365天全部章节内容' },
|
||||
{ title: '案例库', desc: '30-100个创业项目案例' },
|
||||
{ title: '智能纪要', desc: '每天推送派对精华' },
|
||||
{ title: '会议纪要库', desc: '之前所有场次的会议纪要' }
|
||||
],
|
||||
socialRights: [
|
||||
{ title: '匹配创业伙伴', desc: '匹配所有创业伙伴' },
|
||||
{ title: '创业老板排行', desc: '排行榜展示您的项目' },
|
||||
{ title: '链接资源', desc: '进群聊天、链接资源的权利' },
|
||||
{ title: '专属VIP标识', desc: '头像金色VIP光圈' }
|
||||
],
|
||||
profile: { name: '', project: '', contact: '', bio: '' },
|
||||
purchasing: false
|
||||
},
|
||||
@@ -21,7 +33,7 @@ Page({
|
||||
const userId = app.globalData.userInfo?.id
|
||||
if (!userId) return
|
||||
try {
|
||||
const res = await app.request(`/api/vip/status?userId=${userId}`)
|
||||
const res = await app.request({ url: `/api/vip/status?userId=${userId}`, silent: true })
|
||||
if (res?.success) {
|
||||
const d = res.data
|
||||
let expStr = ''
|
||||
@@ -33,15 +45,11 @@ Page({
|
||||
isVip: d.isVip,
|
||||
daysRemaining: d.daysRemaining,
|
||||
expireDateStr: expStr,
|
||||
price: d.price || 1980,
|
||||
rights: d.rights || ['解锁全部章节内容(365天)','匹配所有创业伙伴','创业老板排行榜展示','专属VIP标识']
|
||||
price: d.price || 1980
|
||||
})
|
||||
if (d.isVip) this.loadProfile(userId)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('[VIP] 加载失败', e)
|
||||
this.setData({ rights: ['解锁全部章节内容(365天)','匹配所有创业伙伴','创业老板排行榜展示','专属VIP标识'] })
|
||||
}
|
||||
} catch (e) { console.log('[VIP] 加载失败', e) }
|
||||
},
|
||||
|
||||
async loadProfile(userId) {
|
||||
@@ -52,35 +60,53 @@ Page({
|
||||
},
|
||||
|
||||
async handlePurchase() {
|
||||
const userId = app.globalData.userInfo?.id
|
||||
if (!userId) { wx.showToast({ title: '请先登录', icon: 'none' }); return }
|
||||
let userId = app.globalData.userInfo?.id
|
||||
let openId = app.globalData.openId || app.globalData.userInfo?.open_id
|
||||
if (!userId || !openId) {
|
||||
wx.showLoading({ title: '登录中...', mask: true })
|
||||
try {
|
||||
await app.login()
|
||||
userId = app.globalData.userInfo?.id
|
||||
openId = app.globalData.openId || app.globalData.userInfo?.open_id
|
||||
wx.hideLoading()
|
||||
if (!userId || !openId) {
|
||||
wx.showToast({ title: '登录失败,请重试', icon: 'none' })
|
||||
return
|
||||
}
|
||||
} catch (e) {
|
||||
wx.hideLoading()
|
||||
wx.showToast({ title: '登录失败', icon: 'none' })
|
||||
return
|
||||
}
|
||||
}
|
||||
this.setData({ purchasing: true })
|
||||
try {
|
||||
const res = await app.request('/api/vip/purchase', { method: 'POST', data: { userId } })
|
||||
if (res?.success) {
|
||||
// 调用微信支付
|
||||
const payRes = await app.request('/api/miniprogram/pay', {
|
||||
method: 'POST',
|
||||
data: { orderSn: res.data.orderSn, openId: app.globalData.openId }
|
||||
})
|
||||
if (payRes?.success && payRes.payParams) {
|
||||
wx.requestPayment({
|
||||
...payRes.payParams,
|
||||
success: () => {
|
||||
wx.showToast({ title: 'VIP开通成功', icon: 'success' })
|
||||
this.loadVipInfo()
|
||||
},
|
||||
fail: () => wx.showToast({ title: '支付取消', icon: 'none' })
|
||||
})
|
||||
} else {
|
||||
wx.showToast({ title: '支付参数获取失败', icon: 'none' })
|
||||
const payRes = await app.request('/api/miniprogram/pay', {
|
||||
method: 'POST',
|
||||
data: {
|
||||
openId,
|
||||
userId,
|
||||
productType: 'vip',
|
||||
productId: 'vip_annual',
|
||||
amount: this.data.price,
|
||||
description: '卡若创业派对VIP年度会员(365天)'
|
||||
}
|
||||
})
|
||||
if (payRes?.success && payRes.data?.payParams) {
|
||||
wx.requestPayment({
|
||||
...payRes.data.payParams,
|
||||
success: () => {
|
||||
wx.showToast({ title: 'VIP开通成功', icon: 'success' })
|
||||
this.loadVipInfo()
|
||||
},
|
||||
fail: () => wx.showToast({ title: '支付取消', icon: 'none' })
|
||||
})
|
||||
} else {
|
||||
wx.showToast({ title: res?.error || '创建订单失败', icon: 'none' })
|
||||
wx.showToast({ title: payRes?.error || '支付参数获取失败', icon: 'none' })
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[VIP] 购买失败', e)
|
||||
wx.showToast({ title: '购买失败', icon: 'none' })
|
||||
wx.showToast({ title: '购买失败,请稍后重试', icon: 'none' })
|
||||
} finally { this.setData({ purchasing: false }) }
|
||||
},
|
||||
|
||||
@@ -95,8 +121,7 @@ Page({
|
||||
const p = this.data.profile
|
||||
try {
|
||||
const res = await app.request('/api/vip/profile', {
|
||||
method: 'POST',
|
||||
data: { userId, name: p.name, project: p.project, contact: p.contact, bio: p.bio }
|
||||
method: 'POST', data: { userId, name: p.name, project: p.project, contact: p.contact, bio: p.bio }
|
||||
})
|
||||
if (res?.success) wx.showToast({ title: '资料已保存', icon: 'success' })
|
||||
else wx.showToast({ title: res?.error || '保存失败', icon: 'none' })
|
||||
|
||||
Reference in New Issue
Block a user