更新记录
1.0.0(2026-09-18)
下载此版本
- 首个版本:对接本项目 server
GET /core/mobile/system/miniProgramConfig(公开接口,后台 mini_program_config 配置组)。
commons/types.ts:AgreementType / AgreementSection / AgreementDoc(与宿主 constants/agreements.ts 本地草稿完全同构)+ MiniProgramConfigData。
commons/api.ts:getMiniProgramConfig()(silent 失败不弹 toast、dedupe 合并并发)。
commons/store.ts:Pinia store(configs / configVersion / userAgreement / privacyAgreement / fetchMiniProgramConfig(force?)),启动预热一次、失败不写缓存下次自然重试;模块级函数 getMpAgreement(type, force?) / getMpConfig(force?) 失败统一返回 null(消费端回退本地草稿)。
- readme 含
version 语义消歧:本组 version 是 semver 文案版本号,与 siteConfig(wc-version)的数字放行线无关,本模块不参与版本灰度判定。
平台兼容性
uni-app(5.24)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
√ |
- |
- |
- |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(5.24)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
- |
- |
- |
- |
wc-mp-config
小程序公共配置(协议文档后台化):对接 GET /core/mobile/system/miniProgramConfig
(后台 mini_program_config 配置组),启动预热一次 + Pinia 全局缓存。
《用户协议》《隐私政策》正文改为后台维护(法务改文案不必发版),
未配置 / 拉取失败时返回 null,消费端回退本地草稿(constants/agreements.ts)。
工作机制
- 后台配置组:
mini_program_config,当前三个 key:
version:配置内容版本号,semver 字符串(如 '1.0.0'),随文案修订递增;
user_agreement:《用户协议》JSON 文档(结构见下文「协议文档结构」);
privacy_agreement:《隐私政策》JSON 文档(同构);
- 服务端已把协议 JSON decode 为对象返回,非法 / 未配置时该 key 为
null;
- ⚠️ version 语义消歧:本接口的
version(semver 文案版本)与
siteConfig 的 version(数字放行线,版本灰度用,见 wc-version)完全无关,
请勿混用;本模块不参与版本灰度判定。
协议文档结构(AgreementDoc)
与 constants/agreements.ts 的本地草稿完全同构(后台 JSON 就是按它设计的):
{
"type": "user | privacy",
"title": "用户协议",
"version": "v1.0",
"updatedAt": "2026-09-16",
"intro": ["开头引导段(一段一行)"],
"sections": [{ "heading": "小节标题", "paragraphs": ["段落(一段一行)"] }]
}
宿主接线(main.ts)
import { useMpConfigStore } from '@/uni_modules/wc-mp-config/commons/store'
// 小程序配置预热:协议内容后台可改(法务改文案不必发版),启动拉一次缓存全局。
// 失败静默不弹 toast(接口 silent),协议页 getMpAgreement 回退本地草稿
void useMpConfigStore().fetchMiniProgramConfig().catch(() => {})
使用
协议页(后台优先,本地草稿兜底)
import { getMpAgreement, type AgreementType } from '@/uni_modules/wc-mp-config/commons'
// 本地草稿(兜底内容,与后台 JSON 同构)
import { getAgreementDoc } from '@/constants/agreements'
const type: AgreementType = 'user' // 或 'privacy'(页面路由参数)
onLoad(async () => {
// 后台优先;未配置 / JSON 非法 / 拉取失败 → null → 回退本地草稿
const doc = (await getMpAgreement(type)) ?? getAgreementDoc(type)
// …用 doc(title / version / updatedAt / intro / sections)渲染协议页
})
后台未配好 / 接口挂了时页面始终有内容可显(本地草稿),正式文案由运营在后台改,
无需发版。运营改完文案后重新进小程序(或下拉刷新触发 force = true 强刷)即生效。
取整组配置(version 等扩展 key)
import { getMpConfig } from '@/uni_modules/wc-mp-config/commons'
const configs = await getMpConfig()
// configs: { version: '1.0.0', user_agreement: …, privacy_agreement: … } | null
API
| 成员 |
说明 |
getMpAgreement(type, force?) |
取协议文档('user' / 'privacy');失败 / 未配置 → null(回退本地草稿) |
getMpConfig(force?) |
取整组 configs(version + 协议文档,未来扩展 key 也在此);失败 → null |
useMpConfigStore() |
Pinia store:configs / configVersion / userAgreement / privacyAgreement / fetchMiniProgramConfig(force?) |
getMiniProgramConfig() |
GET /core/mobile/system/miniProgramConfig(公开、silent、dedupe;错误原样上抛,一般不直接用) |
行为约定
| 项 |
说明 |
| 接口 |
GET /core/mobile/system/miniProgramConfig(公开,无需登录,后台 mini_program_config 组) |
| 预热时机 |
main.ts 启动一次;此后全局读 Pinia 缓存,不再发请求 |
| 失败语义 |
store 层失败不写缓存、错误上抛(下次调用自然重试);模块级函数 getMpAgreement / getMpConfig 内部捕获 → 返回 null 不抛错 |
| 并发 |
接口层 dedupe: true:冷启动预热与协议页并发发起时只飞一条请求 |
| 协议 JSON 非法 |
服务端 decode 失败记 warning 并返回 null → 前端回退本地草稿(不阻塞、不报错) |
version 缺失 |
未配置时 configVersion = '';version 是 semver 文案版本,不是放行线(放行线见 wc-version 的 siteConfig) |
范围说明
刻意不包含(保持简单):
- 协议同意留痕上报(「用户 ID + 协议版本 + 同意时间」后端留痕;当前仅本地标记,
见
composables/useAgreement.ts 的 TODO,需要时另封装)
- 本地草稿内容与维护(
constants/agreements.ts 归宿主项目;后台配置好正式文案后,
草稿可长期保留作兜底)
siteConfig / 其它配置组(site_config 归 wc-version;协议之外的未来 key 直接从
getMpConfig() 的 configs 里取)