更新记录

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

  • 新增 setupWcVersionGlobals(app):全局 mixin 向所有组件混入 versionHidden / versionReleased 计算属性,页面模板零接线直接 v-if="!versionHidden"(须在 createPinia 之后、createApp 内调用一次)。
  • 同文件内含 ComponentCustomProperties 类型增强(declare module 'vue'),模板里 versionHidden / versionReleased 有 TS 类型提示。
  • 既有 API(versionHidden getter / isVersionHidden() / requireVersionPage())不变;新旧开关共用同一全局判定,三端语义一致。

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

  • 首个版本:封装自 won-passion-for-sports(uni1)的 modules/system(siteConfig 比对)+ shared/auth-gaterequireVersionPage
  • commons/store.ts:Pinia store(configs / remoteVersion / localVersion / versionReleased),启动预热、失败保守不放行。
  • commons/gate.tsrequireVersionPage() 页面级守卫(未放行 redirectTo 404 页)。
  • commons/config.tssetupWcVersion({ localVersion, notFoundUrl }) 宿主注入本地版本线与 404 页路由(插件不读项目环境变量)。
  • 接口对接本项目 server:GET /core/mobile/system/siteConfig(公开,site_config 配置组键值对)。

平台兼容性

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-version

站点配置 + 版本灰度开关:启动时拉取 siteConfig本地版本线比对, 线上 version > 本地 → versionReleased = true(功能放行);否则整体收回 (受控页面直达 404、入口隐藏)。反向布尔开关 versionHidden / isVersionHidden() (本地(线下)≥ 线上 → true = 需要隐藏);setupWcVersionGlobals(app) 再混入 全局模板开关(页面零接线 v-if="versionHidden")。封装自 uni1 的 modules/system + requireVersionPage

工作机制

  • 本地版本线.envVITE_VERSION(数值),随包发布递增;
  • 线上版本线:后台 site_config 配置组的 version key(运营随时可调);
  • 线上 > 本地 → 放行;线上 ≤ 本地 / 配置未加载 / 拉取失败 → 保守不放行;
  • 运营调高 version → 新包恢复可用;调低 → 整体收回(全局开关 / 强制升级手段)。

宿主接线(main.ts)

import { setupWcVersion } from '@/uni_modules/wc-version/commons/config'
import { setupWcVersionGlobals } from '@/uni_modules/wc-version/commons/globals'
import { useVersionStore } from '@/uni_modules/wc-version/commons/store'

// 本地版本线(.env 注入;插件不读环境变量,与 wc-auth 的 wcappid 约定一致)
setupWcVersion({
    localVersion: Number(import.meta.env.VITE_VERSION) || 0,
    notFoundUrl: '/pages/not-found/index', // 缺省即此值,404 页需宿主自备
})

// 全局模板开关:所有页面 / 组件模板零接线直接 v-if="versionHidden"
// (须在 createPinia 之后调用,内部捕获 version store)
setupWcVersionGlobals(app)

// 站点配置预热:启动拉一次(公开接口、silent 失败不弹 toast),此后全局读缓存。
// 失败静默保守收回,下次进入受控页面不重试(与 uni1 行为一致)
void useVersionStore().fetchSiteConfig().catch(() => {})

.env(生产)/.env.development(开发,调高便于日常联调不受控):

VITE_VERSION = 1

使用

模板 v-if(推荐:全局零接线,无需 script)

main.ts 接好 setupWcVersionGlobals(app)(见上文接线)后,所有页面 / 组件模板 直接用 versionHidden(true = 需要隐藏) / versionReleased(反面,true = 已放行):

<template>
    <!-- 受控入口:versionHidden = true(线下 ≥ 线上)→ 隐藏 -->
    <view v-if="!versionHidden" @tap="goSomething">受控入口</view>
    <!-- 仅隐藏期间展示(占位 / 敬请期待) -->
    <view v-if="versionHidden">敬请期待</view>
    <!-- 与 v-if="!versionHidden" 完全等价 -->
    <view v-if="versionReleased" @tap="goSomething">受控入口(等价写法)</view>
</template>
  • 开关响应式:跟随 siteConfig 预热与运营调线自动翻转,无需 watch;
  • 冷启动未加载时保守为 true(隐藏),预热回来后自动恢复,与页面守卫口径一致;
  • 仅模板可直接用;<script setup> 的 JS 代码里 mixin 计算属性不进 script 作用域, 命令式判断仍用 isVersionHidden()
  • 页面自身若有同名 versionHidden / versionReleased computed / data, 自身定义优先(Vue mixin 合并规则:组件覆盖全局)。

模板 v-if(未接全局混入时的 store 形式)

<script setup lang="ts">
import { useVersionStore } from '@/uni_modules/wc-version/commons'
const versionStore = useVersionStore()
</script>

<template>
    <view v-if="!versionStore.versionHidden" @tap="goSomething">受控入口</view>
    <view v-if="versionStore.versionHidden">敬请期待</view>
</template>

命令式调用(onLoad / 提交前 / 拦截器等)

线下(本地)版本线 ≥ 线上 versionisVersionHidden() 返回 true = 需要隐藏 (相等、配置未加载、拉取失败、后台未配置 version 时也保守返回 true); 已放行(线上 > 本地)返回 false,正常展示。

import { isVersionHidden } from '@/uni_modules/wc-version/commons'

const onSomething = () => {
    if (isVersionHidden()) return // 线下 ≥ 线上 → 未放行,隐藏 / 跳过
    // …已放行的正常逻辑
}

页面级守卫(挡分享 / 直达路径,onLoad 首行)

import { requireVersionPage } from '@/uni_modules/wc-version/commons'

onLoad(() => {
    if (!requireVersionPage()) return // 未放行已跳 404,停止初始化
    void initPage()
})

API

成员 说明
setupWcVersionGlobals(app) 全局混入模板开关 versionHidden / versionReleased(须在 createPinia 之后调用;页面零接线 v-if="!versionHidden"
useVersionStore() Pinia store:configs / localVersion / remoteVersion / versionReleased / versionHidden / fetchSiteConfig(force?)
isVersionHidden() 布尔开关:本地(线下)版本线 ≥ 线上 versiontrue = 需要隐藏(相等 / 未加载 / 失败 / 缺失 key 亦保守隐藏)
requireVersionPage() 页面级守卫,未放行 redirectTo 404;返回是否放行
setupWcVersion({ localVersion, notFoundUrl }) 宿主注入本地版本线与 404 页路由
getSiteConfig() GET /core/mobile/system/siteConfig(公开、silent)

行为约定

说明
接口 GET /core/mobile/system/siteConfig(后台 site_config 组键值对,无需登录)
预热时机 main.ts 启动一次;此后全局读 Pinia 缓存,不再发请求
失败语义 拉取失败不写缓存、不弹 toast(接口 silent),保守视为未放行
守卫语义 只读缓存不发请求不等待预热;冷启动直达受控页可能被保守拦截(与 uni1 一致)
version 缺失 后台未配置该 key 时 remoteVersion = 0 → 恒不放行(上线前记得配置)

范围说明

刻意不包含(保持简单):

  • App / 小程序整包升级检测(uni.getUpdateManager,需要时另封装)
  • 按用户 / 百分比的细分灰度(只有全局版本线开关)
  • siteConfig 其它 key 的业务语义(configs 原样暴露,宿主自行取用)

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。