更新记录

1.0.0(2026-09-18) 下载此版本

  • 首个版本:对接本项目 server GET /core/mobile/system/miniProgramConfig(公开接口,后台 mini_program_config 配置组)。
  • commons/types.tsAgreementType / AgreementSection / AgreementDoc(与宿主 constants/agreements.ts 本地草稿完全同构)+ MiniProgramConfigData
  • commons/api.tsgetMiniProgramConfig()(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 文案版本)与 siteConfigversion数字放行线,版本灰度用,见 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 里取)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。