diff --git a/pages/annex/web_view/index.vue b/pages/annex/web_view/index.vue index 3f88bb2..9cad2f6 100644 --- a/pages/annex/web_view/index.vue +++ b/pages/annex/web_view/index.vue @@ -107,6 +107,62 @@ export default { } }, onLoad(option) { + // 太阳码 scene 解析:scene="app=" 时调 box_app 查 url + // 例如 box_app /api/wxacode?app=pregnancy → scene="app=pregnancy" + // CRMEB 收到后查 box_app /api/mp/apps?isPublished=1 找 url,跳对应 H5 + if (option.scene && option.scene.indexOf('app=') === 0) { + const identifier = option.scene.slice(4); + console.log('[web_view] 太阳码 scene 解析: identifier=' + identifier); + // 异步处理:uni.request 拿 H5 url,赋值给 option.url 走后续逻辑 + this._resolveAppScene(identifier, option); + return; + } + + this._initWebView(option); + }, + methods: { + /** + * 太阳码 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('[web_view] 太阳码 scene 解析失败,降级到 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); + } + }); + }, + + _initWebView(option) { try { let targetUrl = decodeURIComponent(option.url); console.log('[web_view] 原始URL:', targetUrl);