|
|
@@ -1138,8 +1138,14 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /** 详情页 onLoad 使用 storeId;分享链常为 id,补全 storeId 避免 App 内参数为空 */
|
|
|
- function buildAppOpenQueryString() {
|
|
|
+ /** getClientStoreDetail 回填后用于补全 storeType / storeTypeName 等唤起参数 */
|
|
|
+ var appLaunchDetailCache = null;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 与 App 详情 onLoad 一致,例如:
|
|
|
+ * pages/ieisureEntertainment/eightTypeList/delicacyDetails?storeId=378&storeType=3&storeTypeName=特色美食&businessSection=1
|
|
|
+ */
|
|
|
+ function buildAppLaunchQueryParams() {
|
|
|
var raw = (location.search && location.search.charAt(0) === '?') ? location.search.slice(1) : (location.search || '');
|
|
|
var params = new URLSearchParams(raw);
|
|
|
var sid = params.get('storeId') || params.get('id') || '';
|
|
|
@@ -1149,11 +1155,40 @@
|
|
|
var lonVal = params.get('lon') || params.get('lng');
|
|
|
if (lonVal) params.set('jingdu', lonVal);
|
|
|
}
|
|
|
- if (!params.has('fromShareIndex')) params.set('fromShareIndex', '1');
|
|
|
- var qs = params.toString();
|
|
|
+ var d = appLaunchDetailCache;
|
|
|
+ if (d && typeof d === 'object') {
|
|
|
+ if (!params.has('storeType') && d.storeType != null && String(d.storeType).trim() !== '') {
|
|
|
+ params.set('storeType', String(d.storeType).trim());
|
|
|
+ }
|
|
|
+ if (!params.has('storeTypeName')) {
|
|
|
+ var tn = d.storeTypeName != null ? d.storeTypeName : d.typeName;
|
|
|
+ if (tn != null && String(tn).trim() !== '') params.set('storeTypeName', String(tn).trim());
|
|
|
+ }
|
|
|
+ if (!params.has('businessSection') && d.businessSection != null && String(d.businessSection).trim() !== '') {
|
|
|
+ params.set('businessSection', String(d.businessSection).trim());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!params.has('businessSection')) {
|
|
|
+ var pathHint = getAppUniPathForBusinessSection();
|
|
|
+ if (pathHint.indexOf('barDetails') >= 0) params.set('businessSection', '2');
|
|
|
+ else if (pathHint.indexOf('lifeDetails') >= 0) params.set('businessSection', '3');
|
|
|
+ else if (pathHint.indexOf('delicacyDetails') >= 0) params.set('businessSection', '1');
|
|
|
+ }
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ function buildAppOpenQueryString() {
|
|
|
+ var qs = buildAppLaunchQueryParams().toString();
|
|
|
return qs ? ('?' + qs) : '';
|
|
|
}
|
|
|
|
|
|
+ /** Uni 路由串(无 shopro://),供 wx-open-launch-app extinfo 与 App plus.runtime.arguments 解析 */
|
|
|
+ function buildAppUniPageLaunchUrl() {
|
|
|
+ var path = getAppUniPathForBusinessSection().replace(/^\//, '');
|
|
|
+ var qs = buildAppLaunchQueryParams().toString();
|
|
|
+ return qs ? path + '?' + qs : path;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 按 URL 参数 businessSection 打开对应 App 页:
|
|
|
* 1 → delicacyDetails,2 → barDetails,3 → lifeDetails
|
|
|
@@ -1353,33 +1388,27 @@
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * wx-open-launch-app 的 extinfo:须为 App 可解析的 Uni 路径/深链,不能传 H5 页 URL。
|
|
|
- * 优先 JSON { path, query },其次 shopro://…/delicacyDetails?storeId=…(与 buildAppDeepLink 一致)。
|
|
|
+ * wx-open-launch-app extinfo:U店在哪 App 按 Uni 页面路径解析(与详情页路由一致)。
|
|
|
+ * 例:pages/ieisureEntertainment/eightTypeList/delicacyDetails?storeId=378&storeType=3&storeTypeName=特色美食&businessSection=1
|
|
|
*/
|
|
|
function buildWeChatLaunchExtinfo() {
|
|
|
- var path = getAppUniPathForBusinessSection().replace(/^\//, '');
|
|
|
- var qs = buildAppOpenQueryString().replace(/^\?/, '');
|
|
|
- try {
|
|
|
- var pack = JSON.stringify({ path: path, query: qs });
|
|
|
- if (pack.length <= 1024) return pack;
|
|
|
- } catch (eJ) {}
|
|
|
- var deep = buildAppDeepLink();
|
|
|
- if (deep.length <= 1024) return deep;
|
|
|
- var params = new URLSearchParams(qs);
|
|
|
+ var uniPage = buildAppUniPageLaunchUrl();
|
|
|
+ if (uniPage.length <= 1024) return uniPage;
|
|
|
+ var params = buildAppLaunchQueryParams();
|
|
|
var mini = new URLSearchParams();
|
|
|
var storeId = params.get('storeId') || params.get('id') || '';
|
|
|
if (storeId) mini.set('storeId', storeId);
|
|
|
- var uid = params.get('userId');
|
|
|
- if (uid) mini.set('userId', uid);
|
|
|
+ var st = params.get('storeType');
|
|
|
+ if (st) mini.set('storeType', st);
|
|
|
+ var stn = params.get('storeTypeName');
|
|
|
+ if (stn) mini.set('storeTypeName', stn);
|
|
|
var bs = params.get('businessSection');
|
|
|
if (bs) mini.set('businessSection', bs);
|
|
|
- mini.set('fromShareIndex', '1');
|
|
|
- var miniQs = mini.toString();
|
|
|
- try {
|
|
|
- var miniPack = JSON.stringify({ path: path, query: miniQs });
|
|
|
- if (miniPack.length <= 1024) return miniPack;
|
|
|
- } catch (eJ2) {}
|
|
|
- return deep.slice(0, 1024);
|
|
|
+ var path = getAppUniPathForBusinessSection().replace(/^\//, '');
|
|
|
+ var shortPage = path + '?' + mini.toString();
|
|
|
+ if (shortPage.length <= 1024) return shortPage;
|
|
|
+ var deep = buildAppDeepLink();
|
|
|
+ return deep.length <= 1024 ? deep : shortPage.slice(0, 1024);
|
|
|
}
|
|
|
|
|
|
function setWxInitError(msg) {
|
|
|
@@ -2682,6 +2711,8 @@
|
|
|
|
|
|
function renderDetail(d) {
|
|
|
if (!d) return;
|
|
|
+ appLaunchDetailCache = d;
|
|
|
+ if (weChatJssdkConfigured) refreshWxLaunchTagAttrs();
|
|
|
document.getElementById('storeName').textContent = d.storeName || '—';
|
|
|
var score = d.scoreAvg != null ? Number(d.scoreAvg) : NaN;
|
|
|
document.getElementById('scoreAvg').textContent = !isNaN(score) ? score.toFixed(1) : '—';
|