sunshibo 1 week geleden
bovenliggende
commit
8816818244
1 gewijzigde bestanden met toevoegingen van 63 en 16 verwijderingen
  1. 63 16
      HBuilderProjects/shareUndefined.html

+ 63 - 16
HBuilderProjects/shareUndefined.html

@@ -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);
 						}
 					});
 				}