From 46a200e0ba33cce12b8b8a98becd57e2f17bf073 Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Thu, 6 Aug 2026 00:14:53 +0800 Subject: [PATCH] feat(mini-user): show version on mine page and force exit when below min (v3.4.13) Display v3.4.x next to brand on mine page; below minClientVersion prompt update via UpdateManager or exit mini program after acknowledge. Co-authored-by: Cursor --- apps/mini-user/src/lib/client-version.ts | 73 ++++++++++++++++++++++-- apps/mini-user/src/pages/mine/index.tsx | 3 +- 杜康好客-v3-PRD.md | 2 +- 杜康好客-v3.4.13-体验优化开发文档.md | 16 +++++- 4 files changed, 83 insertions(+), 11 deletions(-) diff --git a/apps/mini-user/src/lib/client-version.ts b/apps/mini-user/src/lib/client-version.ts index 90537ab..45fa6a1 100644 --- a/apps/mini-user/src/lib/client-version.ts +++ b/apps/mini-user/src/lib/client-version.ts @@ -4,6 +4,8 @@ import { fetchClientConfig } from './pay-wechat'; /** 与 package.json version 同步,供服务端 minClientVersion 比对 */ export const APP_VERSION = '3.4.13'; +export const APP_VERSION_LABEL = `v${APP_VERSION}`; + function parseSemver(v: string): number[] { return v.split('.').map((n) => parseInt(n, 10) || 0); } @@ -20,17 +22,76 @@ export function compareSemver(a: string, b: string): number { return 0; } +function exitMiniProgramIfSupported() { + if (process.env.TARO_ENV !== 'weapp') return; + if (typeof Taro.exitMiniProgram !== 'function') return; + void Taro.exitMiniProgram({}); +} + +/** 微信 CDN 有新包时引导 applyUpdate;返回是否已触发更新流程 */ +function tryWeappForceUpdate(min: string): Promise { + if (process.env.TARO_ENV !== 'weapp' || typeof Taro.getUpdateManager !== 'function') { + return Promise.resolve(false); + } + + return new Promise((resolve) => { + const manager = Taro.getUpdateManager(); + let settled = false; + const finish = (updated: boolean) => { + if (settled) return; + settled = true; + resolve(updated); + }; + + manager.onCheckForUpdate((res) => { + if (!res.hasUpdate) { + finish(false); + return; + } + manager.onUpdateReady(() => { + void Taro.showModal({ + title: '版本过低', + content: `当前 ${APP_VERSION_LABEL} 低于要求版本 v${min},已检测到新版本,请立即更新后继续使用。`, + showCancel: false, + confirmText: '立即更新', + success: (r) => { + if (r.confirm) { + manager.applyUpdate(); + finish(true); + } else { + finish(false); + } + }, + fail: () => finish(false), + }); + }); + manager.onUpdateFailed(() => finish(false)); + }); + + setTimeout(() => finish(false), 4000); + }); +} + +async function enforceMinClientVersion(min: string) { + const updated = await tryWeappForceUpdate(min); + if (updated) return; + + await Taro.showModal({ + title: '版本过低', + content: `当前 ${APP_VERSION_LABEL} 低于要求版本 v${min},请更新至最新版本后继续使用。`, + showCancel: false, + confirmText: '我知道了', + }); + + exitMiniProgramIfSupported(); +} + export async function checkClientVersionGate() { try { const config = await fetchClientConfig(); const min = config.minClientVersion?.trim(); if (min && compareSemver(APP_VERSION, min) < 0) { - await Taro.showModal({ - title: '版本过低', - content: '当前小程序版本过低,请更新至最新版本后继续使用。', - showCancel: false, - confirmText: '我知道了', - }); + await enforceMinClientVersion(min); } } catch { /* 配置拉取失败不阻塞启动 */ diff --git a/apps/mini-user/src/pages/mine/index.tsx b/apps/mini-user/src/pages/mine/index.tsx index 6257404..9cae36c 100644 --- a/apps/mini-user/src/pages/mine/index.tsx +++ b/apps/mini-user/src/pages/mine/index.tsx @@ -23,6 +23,7 @@ import { } from '../../lib/mini-wechat-profile'; import { isLoggedIn, logout, request, toast, type UserProfile } from '../../lib/api'; import { isWechatEnv } from '../../lib/weixin'; +import { APP_VERSION_LABEL } from '../../lib/client-version'; import { maskPhone } from '../../lib/phone'; import { DEFAULT_SHARE_DESC, @@ -499,7 +500,7 @@ export default function MinePage() { - 杜康好客 + 杜康好客 {APP_VERSION_LABEL} logout()}> 退出登录 diff --git a/杜康好客-v3-PRD.md b/杜康好客-v3-PRD.md index d08d357..9b34f25 100644 --- a/杜康好客-v3-PRD.md +++ b/杜康好客-v3-PRD.md @@ -48,7 +48,7 @@ | 版本 | 日期 | 说明 | |------|------|------| -| **3.4.13** | 2026-08-05 | 推广码归因统计 + **指标事件日志/高峰趋势**、核销用户信息、技术支持工单优先级、mini-user 门店/商品/提货/版本/**物流增强(签收照/拨号/ETA/路由回调签收→已完成)**、H5 登录校验、合伙人微信暂停禁登、**OSS 图片超 10MB 客户端压缩**;开发设计见 [`杜康好客-v3.4.13-体验优化开发文档.md`](./杜康好客-v3.4.13-体验优化开发文档.md) | +| **3.4.13** | 2026-08-05 | 推广码归因统计 + **指标事件日志/高峰趋势**、核销用户信息、技术支持工单优先级、mini-user **我的页版本号/低于 min 强制退出**、门店/商品/提货/**物流增强(签收照/拨号/ETA/路由回调签收→已完成)**、H5 登录校验、合伙人微信暂停禁登、**OSS 图片超 10MB 客户端压缩**;开发设计见 [`杜康好客-v3.4.13-体验优化开发文档.md`](./杜康好客-v3.4.13-体验优化开发文档.md) | --- diff --git a/杜康好客-v3.4.13-体验优化开发文档.md b/杜康好客-v3.4.13-体验优化开发文档.md index 336b589..3edc381 100644 --- a/杜康好客-v3.4.13-体验优化开发文档.md +++ b/杜康好客-v3.4.13-体验优化开发文档.md @@ -8,7 +8,7 @@ | 模块 | 内容 | |------|------| | admin-web | 推广码 attributionCount + **指标事件日志/ECharts 趋势**;核销记录用户信息;技术支持工单优先级;**大图上传前压缩** | -| mini-user | 门店电话脱敏+拨打埋点;门头/套餐展示;商品去分享+首图 preview;提货确认弹框;版本更新提示;**物流增强(签收照/拨号/时间线/ETA)**;**头像超 10MB 压缩** | +| mini-user | 门店电话脱敏+拨打埋点;门头/套餐展示;商品去分享+首图 preview;提货确认弹框;**我的页版本号 v3.4.x**;**低于 minClientVersion 强制更新/点我知道了退出**;**物流增强(签收照/拨号/时间线/ETA)**;**头像超 10MB 压缩** | | h5-partner / h5-shop / h5-user | 登录 phone/code 前端校验;**OSS 图片超 10MB 自动 canvas 压缩后上传** | | 后端 | 工单 priority;client-config minClientVersion;合伙人微信暂停禁登;**Courier 适配器**;**log_promo_event 推广码指标日志** | @@ -20,7 +20,7 @@ | ST1785924286682833 | 用户端-门店电话加密+拨打埋点 | ✅ maskPhone + store_phone_call | | ST1785921693982470 | 技术支持-工单优先级 | ✅ priority 枚举 + HQ UI | | ST1785921585900725 | 门店端扫一扫授权异常 | ✅ 已有(v3.4.12 前) | -| ST1785907536648201 | 版本不对提示更新 | ✅ UpdateManager + minClientVersion | +| ST1785907536648201 | 版本不对提示更新 | ✅ 我的页 v3.4.x + UpdateManager + **低于 min 强制更新/退出** | | ST1785906800359657 | 合伙人暂停后禁登 | ✅ loginPartnerWechat status | | ST1785906592340255 | PARTNER_H5 login 校验 | ✅ 前端空字段拦截 | | ST1785906390321653 | 现场提货提交确认弹框 | ✅ showModal | @@ -41,7 +41,7 @@ | 方法 | 路径 / 配置 | 说明 | |------|-------------|------| -| GET | `/common/client-config` | 新增 `minClientVersion`(env `MINI_USER_MIN_VERSION`) | +| GET | `/common/client-config` | `minClientVersion`(`MINI_USER_MIN_VERSION`);客户端 semver 比对,低于则强制更新或退出 | | — | `CommonSupportTicket.priority` | `LOW \| NORMAL \| HIGH \| URGENT`,默认 NORMAL | | — | `loginPartnerWechat` | 非 ACTIVE 账号抛出「合伙人账号已停用」 | | GET | `/trade/orders/:id/track` | 聚合:`nodes`(旧→新)、`signPhotoUrls`、`estimatedArrival`;经 `CourierService` 适配小飞侠 cmd 100102/100108/100301 | @@ -66,6 +66,15 @@ **HQ UI**:推广码详情页 → 数据趋势 Card(DatePicker + 按日/按时 + ECharts 四曲线 + 事件 Table) +### 3.2 mini-user 版本门控(ST1785907536648201) + +| 项 | 行为 | +|----|------| +| 我的页 | 左下角展示 `杜康好客 v3.4.x`(与 `APP_VERSION` / package.json 同步) | +| 启动校验 | `GET /common/client-config` → `minClientVersion`;`APP_VERSION` 低于最低版本时拦截 | +| 微信有新包 | `UpdateManager` 弹「立即更新」→ `applyUpdate()` | +| 无新包 / 仍过低 | 弹「版本过低」→ 点「我知道了」→ `Taro.exitMiniProgram()` 退出小程序 | + ### 4. mini-user 物流(ST1785939375449985) | 页面 | 行为 | @@ -139,6 +148,7 @@ POST https://api-test.dukanghaoke.com/api/v1/callbacks/courier/xfx/track - [ ] 核销记录含 userNo/nickname/phone - [ ] 技术支持可创建/筛选/编辑优先级 - [ ] 合伙人/门店登录空字段前端提示;暂停合伙人微信登录被拒 +- [ ] mini-user:我的页左下角显示 `杜康好客 v3.4.x`;低于 `minClientVersion` 时强制更新,无新包则点「我知道了」退出小程序 - [ ] mini-user:电话脱敏、拨打埋点、提货确认、无分享按钮、首图 preview、门头/套餐正常 - [ ] mini-user:配送中物流摘要 + 签收照预览 + 电话拨号 + 时间线旧→新全点亮 + 预估送达 - [ ] 小飞侠路由回调 `POST /callbacks/courier/xfx/track`:status=5 或 statusName 已签收 → 订单 **COMPLETED**;重复回调幂等