114 lines
3.8 KiB
JavaScript
114 lines
3.8 KiB
JavaScript
|
|
/**
|
|||
|
|
* Soul创业派对 - 导师详情(stitch_soul)
|
|||
|
|
* 联系导师按钮 → 弹出 v2 弹窗(选择咨询项目)
|
|||
|
|
*/
|
|||
|
|
const app = getApp()
|
|||
|
|
|
|||
|
|
Page({
|
|||
|
|
data: {
|
|||
|
|
statusBarHeight: 44,
|
|||
|
|
mentor: null,
|
|||
|
|
loading: true,
|
|||
|
|
showConsultModal: false,
|
|||
|
|
consultOptions: [],
|
|||
|
|
selectedType: '',
|
|||
|
|
selectedAmount: 0,
|
|||
|
|
creating: false,
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onLoad(options) {
|
|||
|
|
this.setData({ statusBarHeight: app.globalData.statusBarHeight || 44 })
|
|||
|
|
if (options.id) this.loadDetail(options.id)
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
async loadDetail(id) {
|
|||
|
|
this.setData({ loading: true })
|
|||
|
|
try {
|
|||
|
|
const res = await app.request({ url: `/api/miniprogram/mentors/${id}`, silent: true })
|
|||
|
|
if (res?.success && res.data) {
|
|||
|
|
const d = res.data
|
|||
|
|
if (d.judgmentStyle && typeof d.judgmentStyle === 'string') {
|
|||
|
|
d.judgmentStyleArr = d.judgmentStyle.split(/[,,]/).map(s => s.trim()).filter(Boolean)
|
|||
|
|
} else {
|
|||
|
|
d.judgmentStyleArr = []
|
|||
|
|
}
|
|||
|
|
const fmt = v => v != null ? String(Math.floor(v)).replace(/\B(?=(\d{3})+(?!\d))/g, ',') : ''
|
|||
|
|
d.priceSingleFmt = fmt(d.priceSingle)
|
|||
|
|
d.priceHalfYearFmt = fmt(d.priceHalfYear)
|
|||
|
|
d.priceYearFmt = fmt(d.priceYear)
|
|||
|
|
const options = []
|
|||
|
|
if (d.priceSingle != null) options.push({ type: 'single', label: '单次咨询', desc: '1小时深度沟通', price: d.priceSingle, priceFmt: fmt(d.priceSingle), original: null })
|
|||
|
|
if (d.priceHalfYear != null) options.push({ type: 'half_year', label: '半年咨询', desc: '不限次数 · 关键节点陪伴', price: d.priceHalfYear, priceFmt: fmt(d.priceHalfYear), original: '98,000' })
|
|||
|
|
if (d.priceYear != null) options.push({ type: 'year', label: '年度咨询', desc: '全年度战略顾问', price: d.priceYear, priceFmt: fmt(d.priceYear), original: '196,000', recommend: true })
|
|||
|
|
this.setData({
|
|||
|
|
mentor: d,
|
|||
|
|
consultOptions: options,
|
|||
|
|
loading: false,
|
|||
|
|
})
|
|||
|
|
} else {
|
|||
|
|
this.setData({ loading: false })
|
|||
|
|
}
|
|||
|
|
} catch (e) {
|
|||
|
|
this.setData({ loading: false })
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onContactTap() {
|
|||
|
|
if (!this.data.mentor || this.data.consultOptions.length === 0) {
|
|||
|
|
wx.showToast({ title: '暂无咨询项目', icon: 'none' })
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
this.setData({
|
|||
|
|
showConsultModal: true,
|
|||
|
|
selectedType: this.data.consultOptions[0].type,
|
|||
|
|
selectedAmount: this.data.consultOptions[0].price,
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
closeConsultModal() {
|
|||
|
|
this.setData({ showConsultModal: false })
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onSelectOption(e) {
|
|||
|
|
const item = e.currentTarget.dataset.item
|
|||
|
|
this.setData({ selectedType: item.type, selectedAmount: item.price })
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
async onConfirmConsult() {
|
|||
|
|
const { mentor, selectedType } = this.data
|
|||
|
|
const userId = app.globalData.userInfo?.id
|
|||
|
|
if (!userId) {
|
|||
|
|
wx.showToast({ title: '请先登录', icon: 'none' })
|
|||
|
|
wx.navigateTo({ url: '/pages/my/my' })
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
this.setData({ creating: true })
|
|||
|
|
try {
|
|||
|
|
const res = await app.request({
|
|||
|
|
url: `/api/miniprogram/mentors/${mentor.id}/book`,
|
|||
|
|
method: 'POST',
|
|||
|
|
data: { userId, consultationType: selectedType },
|
|||
|
|
})
|
|||
|
|
if (res?.success && res.data) {
|
|||
|
|
this.setData({ showConsultModal: false, creating: false })
|
|||
|
|
wx.showToast({ title: '预约创建成功', icon: 'success' })
|
|||
|
|
// TODO: 调起支付 productType: mentor_consultation, productId: res.data.id
|
|||
|
|
wx.showModal({
|
|||
|
|
title: '预约成功',
|
|||
|
|
content: '请联系客服完成后续对接',
|
|||
|
|
showCancel: false,
|
|||
|
|
})
|
|||
|
|
} else {
|
|||
|
|
wx.showToast({ title: res?.error || '创建失败', icon: 'none' })
|
|||
|
|
}
|
|||
|
|
} catch (e) {
|
|||
|
|
wx.showToast({ title: '创建失败', icon: 'none' })
|
|||
|
|
}
|
|||
|
|
this.setData({ creating: false })
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
goBack() {
|
|||
|
|
getApp().goBackOrToHome()
|
|||
|
|
},
|
|||
|
|
})
|