diff --git a/pages/annex/web_view/index.vue b/pages/annex/web_view/index.vue index 90ca84a..c8ca5ce 100644 --- a/pages/annex/web_view/index.vue +++ b/pages/annex/web_view/index.vue @@ -119,9 +119,16 @@ export default { const sceneRaw = decodeURIComponent(option.scene || option.wxscene || ''); if (sceneRaw.indexOf('app=') === 0) { console.log('[DEBUG 太阳码] ✅ scene 匹配成功! 原始:', option.scene, '解码:', sceneRaw); + // scene 格式: "app=pregnancy" 或 "app=pregnancy&ch=YFMM" const source = sceneRaw; - const identifier = source.slice(4); - console.log('[web_view] 太阳码 scene 解析: identifier=' + identifier); + const identifier = source.slice(4).split('&')[0]; + // 提取渠道码 + let channel = ''; + const chMatch = source.match(/&ch=([A-Z]+)/); + if (chMatch) channel = chMatch[1]; + console.log('[web_view] 太阳码 scene 解析: identifier=' + identifier + (channel ? ' ch=' + channel : '')); + // 把 channel 存到 option 中传给 _resolveAppScene + option._channel = channel; // 异步处理:uni.request 拿 H5 url,赋值给 option.url 走后续逻辑 this._resolveAppScene(identifier, option); return; @@ -149,43 +156,43 @@ export default { /** * 太阳码 scene 解析:调 box_app /api/mp/apps 找 url,找到后注入到 option.url * 然后调用 _initWebView(option) 走标准 web_view 加载流程 - */ - _resolveAppScene(identifier, option) { - const appToken = store.state.app.token || ''; - uni.request({ - url: 'https://mp.yizhezhe.com/api/mp/apps?identifier=' + encodeURIComponent(identifier) + '&isPublished=1&pageSize=1', - method: 'GET', - header: appToken ? { 'Authorization': 'Bearer ' + appToken } : {}, - success: (res) => { - console.log('[web_view] 太阳码 scene 解析响应:', JSON.stringify(res.statusCode)); - const items = res.data && res.data.result && res.data.result.items; - if (res.statusCode === 200 && items && items.length > 0) { - // box_app /api/mp/apps 当前不支持 identifier 过滤,遍历找 - const app = items.find(it => it.identifier === identifier) || items[0]; - if (app && app.url) { - const appUrl = app.url; - console.log('[web_view] 解析到 H5 url:', appUrl); - // 编码到 option.url,复用标准流程 - option.url = encodeURIComponent(appUrl); - } else { - // 解析失败:降级到 CRMEB 首页 - console.warn('[DEBUG 太阳码] 降级到 CRMEB 首页'); - option.url = encodeURIComponent('https://shop.douba.top'); - } - } else { - // 响应异常:降级到 CRMEB 首页 - console.warn('[web_view] 太阳码 scene 解析响应异常,降级到 CRMEB 首页'); - option.url = encodeURIComponent('https://shop.douba.top'); - } - this._initWebView(option); - }, - fail: (err) => { - console.error('[web_view] 太阳码 scene 网络请求失败:', err); - option.url = encodeURIComponent('https://shop.douba.top'); - this._initWebView(option); - } - }); - }, + _resolveAppScene(identifier, option) { + const appToken = store.state.app.token || ''; + uni.request({ + url: 'https://mp.yizhezhe.com/api/mp/apps?identifier=' + encodeURIComponent(identifier) + '&isPublished=1&pageSize=1', + method: 'GET', + header: appToken ? { 'Authorization': 'Bearer ' + appToken } : {}, + success: (res) => { + console.log('[web_view] 太阳码 scene 解析响应:', JSON.stringify(res.statusCode)); + const items = res.data && res.data.result && res.data.result.items; + if (res.statusCode === 200 && items && items.length > 0) { + const app = items.find(it => it.identifier === identifier) || items[0]; + if (app && app.url) { + const appUrl = app.url; + let finalUrl = appUrl; + if (option._channel) { + const separator = finalUrl.includes('?') ? '&' : '?'; + finalUrl += separator + 'ch=' + option._channel; + } + console.log('[web_view] 解析到 H5 url:', appUrl, option._channel ? ' ch=' + option._channel : ''); + option.url = encodeURIComponent(finalUrl); + } else { + console.warn('[DEBUG 太阳码] 降级到 CRMEB 首页'); + option.url = encodeURIComponent('https://shop.douba.top'); + } + } else { + console.warn('[web_view] 太阳码 scene 解析响应异常,降级到 CRMEB 首页'); + option.url = encodeURIComponent('https://shop.douba.top'); + } + this._initWebView(option); + }, + fail: (err) => { + console.error('[web_view] 太阳码 scene 网络请求失败:', err); + option.url = encodeURIComponent('https://shop.douba.top'); + this._initWebView(option); + } + }); + }, _initWebView(option) { try {