文案配置化 + 支付开关

小程序
- 页面固定文案全部改读后台配置(购买、登录、资料、首页、分享、介绍页),代码里不再硬编码
- 已拥有课程时在当前页提示,不再跳购买页再提示
- 介绍页正文由代码常量改为读 settings.page.formula.content

服务端
- 课程相关报错文案(不存在 / 已下架 / 课时不存在 / 未购买 / 已过期 / 重复购买 / 未配置支付商品)改读配置,代码保留默认值兜底
- 新增支付总开关 pay.blocked:打开即拦截下单并下发配置里的提示;开关存在数据库里,开发库与生产库各一份(开发库已开,生产库未设)

后台
- 系统配置页按页面分组折叠,默认收起;认不出来的配置归入「其他」

配套数据(不在代码里):对应的 settings 行已写入生产库与开发库
This commit is contained in:
Yeomai committed 2026-10-01 11:28:29 +08:00
1 parent c45025fc86
commit 879e74ebda
21 files changed
+325 -103

No files matched your search

@@ -1,6 +1,7 @@
// pages/IndexFreeCourseDetails/IndexFreeCourseDetails.js
const api = require('../../utils/api');
const format = require('../../utils/format');
const store = require('../../utils/store');
Page({
data: {
@@ -9,6 +10,8 @@ Page({
VideoPlayerSrc: '',
HiddenVideoControl: true,
top: 0,
/** 列表上方的更新期数文案,整句来自后台配置 */
updatedText: '',
},
onLoad(options) {
@@ -32,6 +35,7 @@ Page({
this.setData({
playdata: rows,
VideoTitle: rows.length ? rows[0].videoTitle || '' : '',
updatedText: store.cfg('course.lesson.updated').replace('{n}', rows.length),
});
})
.catch((err) => {
@@ -43,14 +47,14 @@ Page({
onTapLesson(e) {
const item = this.data.playdata[e.currentTarget.dataset.index];
if (!item || !item.videoUrl) {
wx.showToast({ title: '该课时暂无视频', icon: 'none' });
wx.showToast({ title: store.cfg('course.tip.lessonNoVideo'), icon: 'none' });
return;
}
this.setData({ VideoPlayerSrc: item.videoUrl, HiddenVideoControl: false, top: 420 });
},
onShareAppMessage() {
return { title: '叶雷讲数学', path: '/pages/index/index' };
return { title: store.cfg('share.title'), path: '/pages/index/index' };
},
});