From 4bf7b52918c287b1f8f38c63f2e072c65934f9db Mon Sep 17 00:00:00 2001 From: zoujing Date: Sun, 20 Sep 2026 17:04:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BA=E5=AE=9A=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E7=9A=84=E5=8F=82=E6=95=B0=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=20target=3Dbenefits=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/nav.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/utils/nav.js b/src/utils/nav.js index 8b6260f..1645260 100644 --- a/src/utils/nav.js +++ b/src/utils/nav.js @@ -62,28 +62,29 @@ export const consumePendingMerchant = () => { return value; }; +/** 承载入口目标值的键名(query 直传、scene 内、q 解码后的 query 共用一套) */ +const ID_KEYS = ["merchant_id", "merchantId", "id", "target"]; + +const pickByKeys = (source) => ID_KEYS.map((key) => pickParam(source, key)).find((v) => v) || ""; + /** - * 从启动/唤起参数里取商家 id:兼容四种来源 - * - `merchant_id` / `merchantId` / `id`:页面 query 直传(小程序码 path、分享链接) - * - `scene`:小程序码 getUnlimited,值可能是 `merchant_id=xxx` 也可能是短码 + * 从启动/唤起参数里取入口值:兼容三种来源 + * - `merchant_id` / `merchantId` / `id` / `target`:页面 query 直传(小程序码 path、普通链接) + * - `scene`:小程序码 getUnlimited,值可能是 `merchant_id=xxx` / `target=xxx` 也可能是短码 * - `q`:普通链接二维码,值是 URL 编码过的原始链接,解码后再取 query + * 值可能是商家 id,也可能是保留值(如只切权益 Tab,见壳页 runEntry) */ export const pickMerchantId = (options) => { const o = options || {}; - const direct = o.merchant_id || o.merchantId || o.id || ""; + const direct = ID_KEYS.map((key) => o[key]).find((v) => v); if (direct) return decodeURIComponent(String(direct)).trim(); if (o.scene) { const scene = decodeURIComponent(String(o.scene)); - return ( - pickParam(scene, "merchant_id") || - pickParam(scene, "merchantId") || - pickParam(scene, "id") || - scene.trim() - ); + return pickByKeys(scene) || scene.trim(); } if (o.q) { const query = decodeURIComponent(String(o.q)).split("?")[1] || ""; - return pickParam(query, "merchant_id") || pickParam(query, "merchantId") || pickParam(query, "id"); + return pickByKeys(query); } return ""; };