|
|
@@ -465,6 +465,20 @@
|
|
|
display: none !important;
|
|
|
}
|
|
|
|
|
|
+ .fab-wrap .fab,
|
|
|
+ #openApp {
|
|
|
+ display: block;
|
|
|
+ width: 100%;
|
|
|
+ touch-action: manipulation;
|
|
|
+ }
|
|
|
+
|
|
|
+ #openApp {
|
|
|
+ padding: 0;
|
|
|
+ border: none;
|
|
|
+ background: transparent;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
#openAppToast {
|
|
|
display: none;
|
|
|
position: fixed;
|
|
|
@@ -594,8 +608,9 @@
|
|
|
* 更多推荐:POST http://124.93.18.180:9100/ai/life-manager/api/v1/second_hand/global-recommend
|
|
|
* 常用 query:userId、userLat/userLng 或 lat/weidu、lon/jingdu、radiusKm、page、pageSize、categoryOneId、categoryTwoId
|
|
|
*
|
|
|
- * 本页仅展示「已卖出 / 下架 / 删除」占位与推荐,无有效商品详情:点「APP内打开」一律进 App 登录页
|
|
|
- * shopro://pages/index/login?…(与 shareIndex.html 关店唤起一致)。在 App 内嵌 H5 且存在 uni 时优先 uni.navigateTo。
|
|
|
+ * 商品不可用占位页;底部「APP内打开」始终可唤起 App:
|
|
|
+ * 有 goodsId/id/sourceId → 二手详情页(带 goodsUnavailable 等参数,由 App 展示已删除态);
|
|
|
+ * 无商品 id → pages/index/login。
|
|
|
*
|
|
|
* 注意:用 file:// 打开本页时,浏览器可能因 CORS 拦截跨域请求。
|
|
|
*/
|
|
|
@@ -680,7 +695,11 @@
|
|
|
})();
|
|
|
|
|
|
function rawQueryHasGoodsId(qs) {
|
|
|
- return /(?:^|&)(goodsId|id)=/i.test('&' + String(qs || '') + '&');
|
|
|
+ return /(?:^|&)(goodsId|id|sourceId)=/i.test('&' + String(qs || '') + '&');
|
|
|
+ }
|
|
|
+
|
|
|
+ function getShareGoodsIdForAppOpen() {
|
|
|
+ return (q('goodsId') || q('id') || q('sourceId') || '').trim();
|
|
|
}
|
|
|
|
|
|
function getRawMergedQueryForAppOpen() {
|
|
|
@@ -700,8 +719,14 @@
|
|
|
return rawHashQ || rawSearch;
|
|
|
}
|
|
|
|
|
|
- /** 本 HTML 仅为不可用商品落地页,唤起路径固定为登录(不依赖 URL 是否带 goodsUnavailable,避免旧链/丢参) */
|
|
|
+ /** 有商品 id 时进二手详情(已删除也由 App 处理);否则进登录页 */
|
|
|
function getAppUniPathForShareUndefined() {
|
|
|
+ if (getShareGoodsIdForAppOpen()) {
|
|
|
+ return String(APP_UNI_STORE_PATH || 'pages/secondHandTransactions/pages/detail/index').replace(
|
|
|
+ /^\//,
|
|
|
+ ''
|
|
|
+ );
|
|
|
+ }
|
|
|
return 'pages/index/login';
|
|
|
}
|
|
|
|
|
|
@@ -712,13 +737,17 @@
|
|
|
}
|
|
|
|
|
|
var params = mergeSearchAndHashParams();
|
|
|
- var gid = params.get('goodsId') || params.get('id') || '';
|
|
|
+ var gid =
|
|
|
+ params.get('goodsId') || params.get('id') || params.get('sourceId') || '';
|
|
|
if (gid && !params.has('goodsId')) {
|
|
|
params.set('goodsId', gid);
|
|
|
}
|
|
|
if (gid && !params.has('id')) {
|
|
|
params.set('id', gid);
|
|
|
}
|
|
|
+ if (gid && !params.has('sourceId')) {
|
|
|
+ params.set('sourceId', gid);
|
|
|
+ }
|
|
|
var sid = params.get('storeId') || '';
|
|
|
if (sid && !params.has('storeId')) {
|
|
|
params.set('storeId', sid);
|
|
|
@@ -739,10 +768,12 @@
|
|
|
if (gs != null && String(gs).trim() !== '') {
|
|
|
mini.set('goodsStatus', String(gs).trim());
|
|
|
}
|
|
|
- var goodsId = params.get('goodsId') || params.get('id') || '';
|
|
|
+ var goodsId =
|
|
|
+ params.get('goodsId') || params.get('id') || params.get('sourceId') || '';
|
|
|
if (goodsId) {
|
|
|
mini.set('goodsId', String(goodsId).trim());
|
|
|
mini.set('id', String(goodsId).trim());
|
|
|
+ mini.set('sourceId', String(goodsId).trim());
|
|
|
}
|
|
|
var userId = params.get('userId');
|
|
|
if (userId != null && String(userId).trim() !== '') {
|
|
|
@@ -784,7 +815,7 @@
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * wx-open-launch-app extinfo:pages/index/login?…(与 shareIndex 关店唤起一致)
|
|
|
+ * wx-open-launch-app extinfo:二手详情或登录页 + 精简 query(含 goodsUnavailable)
|
|
|
*/
|
|
|
function buildWeChatLaunchExtinfo(useBarePathOnly) {
|
|
|
var path = getAppUniPathForShareUndefined().replace(/^\//, '');
|
|
|
@@ -800,7 +831,14 @@
|
|
|
var uniPage = qs ? path + '?' + qs : path;
|
|
|
if (uniPage.length <= 1024) return uniPage;
|
|
|
|
|
|
- var shortKeys = ['goodsUnavailable', 'goodsStatus', 'goodsId', 'id', 'userId'];
|
|
|
+ var shortKeys = [
|
|
|
+ 'goodsUnavailable',
|
|
|
+ 'goodsStatus',
|
|
|
+ 'goodsId',
|
|
|
+ 'id',
|
|
|
+ 'sourceId',
|
|
|
+ 'userId'
|
|
|
+ ];
|
|
|
var shortMini = new URLSearchParams();
|
|
|
shortKeys.forEach(function (key) {
|
|
|
var val = mini.get(key);
|
|
|
@@ -812,11 +850,15 @@
|
|
|
return shortPage.length <= 1024 ? shortPage : path;
|
|
|
}
|
|
|
|
|
|
- /** 供 App 内嵌 WebView:uni 路由到登录页,query 与深链一致 */
|
|
|
- function buildUniLoginPageUrl() {
|
|
|
+ /** 供 App 内嵌 WebView:uni 路由与深链一致(二手详情或登录) */
|
|
|
+ function buildUniAppOpenPageUrl() {
|
|
|
+ var path = getAppUniPathForShareUndefined().replace(/^\//, '');
|
|
|
var tail = buildAppOpenQueryStringMerged();
|
|
|
- var u = '/pages/index/login' + (tail || '');
|
|
|
- return u.length > 1800 ? '/pages/index/login' : u;
|
|
|
+ var u = '/' + path + (tail || '');
|
|
|
+ var fallbackPath = getShareGoodsIdForAppOpen()
|
|
|
+ ? String(APP_UNI_STORE_PATH).replace(/^\//, '')
|
|
|
+ : 'pages/index/login';
|
|
|
+ return u.length > 1800 ? '/' + fallbackPath : u;
|
|
|
}
|
|
|
|
|
|
function buildAppDeepLink() {
|
|
|
@@ -1374,15 +1416,20 @@
|
|
|
}
|
|
|
|
|
|
if (typeof uni !== 'undefined' && typeof uni.navigateTo === 'function') {
|
|
|
- var loginUrl = buildUniLoginPageUrl();
|
|
|
+ var uniUrl = buildUniAppOpenPageUrl();
|
|
|
+ var uniFallback =
|
|
|
+ '/' +
|
|
|
+ (getShareGoodsIdForAppOpen()
|
|
|
+ ? String(APP_UNI_STORE_PATH).replace(/^\//, '')
|
|
|
+ : 'pages/index/login');
|
|
|
try {
|
|
|
uni.navigateTo({
|
|
|
- url: loginUrl,
|
|
|
+ url: uniUrl,
|
|
|
fail: function () {
|
|
|
if (typeof uni.reLaunch === 'function') {
|
|
|
try {
|
|
|
uni.reLaunch({
|
|
|
- url: loginUrl.length > 1800 ? '/pages/index/login' : loginUrl,
|
|
|
+ url: uniUrl.length > 1800 ? uniFallback : uniUrl,
|
|
|
fail: function () {
|
|
|
openBySchemeOrPlus();
|
|
|
}
|
|
|
@@ -1900,7 +1947,7 @@
|
|
|
showFabToast(
|
|
|
wxInitLastError || '微信 SDK 初始化中,请稍候再点底部按钮'
|
|
|
);
|
|
|
- return;
|
|
|
+ initWeChatOpenLaunchApp(true);
|
|
|
}
|
|
|
});
|
|
|
}
|