小程序 - 页面固定文案全部改读后台配置(购买、登录、资料、首页、分享、介绍页),代码里不再硬编码 - 已拥有课程时在当前页提示,不再跳购买页再提示 - 介绍页正文由代码常量改为读 settings.page.formula.content 服务端 - 课程相关报错文案(不存在 / 已下架 / 课时不存在 / 未购买 / 已过期 / 重复购买 / 未配置支付商品)改读配置,代码保留默认值兜底 - 新增支付总开关 pay.blocked:打开即拦截下单并下发配置里的提示;开关存在数据库里,开发库与生产库各一份(开发库已开,生产库未设) 后台 - 系统配置页按页面分组折叠,默认收起;认不出来的配置归入「其他」 配套数据(不在代码里):对应的 settings 行已写入生产库与开发库
61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
// pages/IndexFreeCourseDetails/IndexFreeCourseDetails.js
|
|
const api = require('../../utils/api');
|
|
const format = require('../../utils/format');
|
|
const store = require('../../utils/store');
|
|
|
|
Page({
|
|
data: {
|
|
VideoTitle: '',
|
|
playdata: [],
|
|
VideoPlayerSrc: '',
|
|
HiddenVideoControl: true,
|
|
top: 0,
|
|
/** 列表上方的更新期数文案,整句来自后台配置 */
|
|
updatedText: '',
|
|
},
|
|
|
|
onLoad(options) {
|
|
const seriesNo = options.seriesNo;
|
|
if (!seriesNo) {
|
|
wx.switchTab({ url: '/pages/index/index' });
|
|
return;
|
|
}
|
|
|
|
api
|
|
.getFreeLessons(Number(seriesNo))
|
|
.then((list) => {
|
|
const rows = (list || []).map((item) => ({
|
|
coverUrl: item.coverUrl,
|
|
videoTitle: item.videoTitle,
|
|
intro: item.intro,
|
|
publishedAt: format.toDateString(item.publishedAt),
|
|
duration: item.duration,
|
|
videoUrl: item.videoUrl,
|
|
}));
|
|
this.setData({
|
|
playdata: rows,
|
|
VideoTitle: rows.length ? rows[0].videoTitle || '' : '',
|
|
updatedText: store.cfg('course.lesson.updated').replace('{n}', rows.length),
|
|
});
|
|
})
|
|
.catch((err) => {
|
|
console.error('[IndexFreeCourseDetails] 加载失败', err);
|
|
this.setData({ playdata: [] });
|
|
});
|
|
},
|
|
|
|
onTapLesson(e) {
|
|
const item = this.data.playdata[e.currentTarget.dataset.index];
|
|
if (!item || !item.videoUrl) {
|
|
wx.showToast({ title: store.cfg('course.tip.lessonNoVideo'), icon: 'none' });
|
|
return;
|
|
}
|
|
this.setData({ VideoPlayerSrc: item.videoUrl, HiddenVideoControl: false, top: 420 });
|
|
},
|
|
|
|
onShareAppMessage() {
|
|
return { title: store.cfg('share.title'), path: '/pages/index/index' };
|
|
},
|
|
});
|
|
|