// pages/IndexNewCourseDetails/IndexNewCourseDetails.js const api = require('../../utils/api'); const store = require('../../utils/store'); const app = getApp(); Page({ data: { html: ' ', courseCode: '', courseTitle: '', priceYuan: '', buyText: '', contactText: '', /** 是否已拥有这门课:已拥有时按钮就在本页提示,不再跳购买页 */ owned: false, }, onLoad(options) { const id = options.id; if (!id) return; api .getHomeCourses() .then((list) => { const item = (list || []).filter((c) => String(c.id) === String(id))[0]; if (!item) return; this.setData({ html: item.content || ' ', courseCode: item.courseCode || '', courseTitle: item.courseTitle || '', }); this.refreshOwned(); }) .catch((err) => console.error('[IndexNewCourseDetails] 加载失败', err)); }, onShow() { app.ready().then(() => { this.applyConfig(); // 买完回来要立刻变成「已拥有」,所以每次显示都重新问一次 this.refreshOwned(); }); }, /** 查这门课的拥有状态。拿不到就按未拥有处理,不影响正常购买。 */ refreshOwned() { const code = this.data.courseCode; if (!code) return; api .getCourse(code) .then((course) => this.setData({ owned: !!course.owned })) .catch((err) => console.warn('[IndexNewCourseDetails] 拥有状态加载失败', err)); }, /** 按钮文案取自后台配置,后台改完小程序下拉刷新即可生效。 */ applyConfig() { this.setData({ buyText: store.cfg('course.button.buy'), contactText: store.cfg('course.button.contact'), }); }, /** 购买统一走商业化页面。 */ toBuy() { if (!this.data.courseCode) return; // 已经拥有就不必再跳过去了:原地提示一句 if (this.data.owned) { wx.showToast({ title: store.cfg('course.tip.owned'), icon: 'none' }); return; } wx.navigateTo({ url: '/pages/buy/buy?code=' + this.data.courseCode }); }, });