sunshibo 1 周之前
父節點
當前提交
d227d7fe2a
共有 1 個文件被更改,包括 111 次插入4 次删除
  1. 111 4
      HBuilderProjects/shareDynamic.html

+ 111 - 4
HBuilderProjects/shareDynamic.html

@@ -38,7 +38,7 @@
 			overflow-x: hidden;
 			overflow-x: hidden;
 		}
 		}
 
 
-		/* getOne businessStatus=99 或「暂无承载数据」:隐藏主内容 #dynPageMain,展示关店横幅 + 更多推荐(与 shareIndex 一致) */
+		/* getOne 关店/暂无承载,或 getDynamicsDetail 无有效 data:隐藏 #dynPageMain,展示横幅 + 更多推荐 */
 		#dynPageMain {
 		#dynPageMain {
 			display: block;
 			display: block;
 		}
 		}
@@ -1937,6 +1937,102 @@
 				});
 				});
 		}
 		}
 
 
+		function isShareApiOk(res) {
+			if (!res || typeof res !== 'object') return false;
+			if (res.success === false) return false;
+			var c = res.code;
+			return c === 200 || c === '200' || Number(c) === 200;
+		}
+
+		/**
+		 * GET /userDynamics/getDynamicsDetail?id=<动态id>
+		 * 无动态 id 时不请求(由 boot 按「无有效详情」处理)。
+		 */
+		function fetchDynamicsDetailIfId() {
+			var dynId = resolveDynamicIdForAppLaunch();
+			if (!dynId) {
+				return Promise.resolve({ skipped: true, reason: 'noDynamicId' });
+			}
+			var path =
+				'/userDynamics/getDynamicsDetail?id=' + encodeURIComponent(dynId);
+			return apiFetch(path)
+				.then(function (res) {
+					return res;
+				})
+				.catch(function (e) {
+					console.warn('[getDynamicsDetail]', e);
+					return null;
+				});
+		}
+
+		var DYNAMICS_DETAIL_META_KEYS = {
+			id: 1,
+			dynamicid: 1,
+			sourceid: 1,
+			storeid: 1,
+			userid: 1,
+			phoneid: 1,
+			type: 1,
+			sourcetype: 1,
+			businesstype: 1,
+			createtime: 1,
+			createdtime: 1,
+			updatetime: 1,
+			updatedtime: 1,
+			deletetime: 1,
+			status: 1,
+			deleteflag: 1
+		};
+
+		function isDynamicsDetailValuePresent(val) {
+			if (val == null) return false;
+			if (typeof val === 'string') return val.trim() !== '';
+			if (Array.isArray(val)) return val.length > 0;
+			if (typeof val === 'number') return !isNaN(val);
+			if (typeof val === 'boolean') return true;
+			if (typeof val === 'object') {
+				var keys = Object.keys(val);
+				if (!keys.length) return false;
+				for (var i = 0; i < keys.length; i++) {
+					if (isDynamicsDetailValuePresent(val[keys[i]])) return true;
+				}
+				return false;
+			}
+			return true;
+		}
+
+		function isDynamicsDetailDataObjectPresent(data) {
+			if (!data || typeof data !== 'object' || Array.isArray(data)) {
+				return isDynamicsDetailValuePresent(data);
+			}
+			var keys = Object.keys(data);
+			if (!keys.length) return false;
+			var k;
+			for (var i = 0; i < keys.length; i++) {
+				k = String(keys[i]).toLowerCase();
+				if (DYNAMICS_DETAIL_META_KEYS[k]) continue;
+				if (isDynamicsDetailValuePresent(data[keys[i]])) return true;
+			}
+			return false;
+		}
+
+		/**
+		 * 仅当 res.data 存在且除 id/时间等元字段外,仍有非 null 的业务字段时展示主内容。
+		 */
+		function isDynamicsDetailResponsePresent(res) {
+			if (!isShareApiOk(res)) return false;
+			var data = res.data;
+			if (data == null) return false;
+			if (Array.isArray(data)) {
+				if (!data.length) return false;
+				for (var j = 0; j < data.length; j++) {
+					if (isDynamicsDetailDataObjectPresent(data[j])) return true;
+				}
+				return false;
+			}
+			return isDynamicsDetailDataObjectPresent(data);
+		}
+
 		function isNoCarryingDataDeleteFlagMsg(res) {
 		function isNoCarryingDataDeleteFlagMsg(res) {
 			if (!res || typeof res !== 'object') return false;
 			if (!res || typeof res !== 'object') return false;
 			var tip = res.msg != null ? String(res.msg).trim() : '';
 			var tip = res.msg != null ? String(res.msg).trim() : '';
@@ -3154,13 +3250,24 @@
 				console.warn('[WeixinOpenTagsError]', e && e.detail);
 				console.warn('[WeixinOpenTagsError]', e && e.detail);
 			});
 			});
 
 
-			fetchGetDeleteFlagByIdIfId().then(function (res) {
-				if (isGetOneBusinessStatus99(res)) {
+			Promise.all([
+				fetchGetDeleteFlagByIdIfId(),
+				fetchDynamicsDetailIfId()
+			]).then(function (results) {
+				var storeRes = results[0];
+				var dynamicsRes = results[1];
+
+				if (isGetOneBusinessStatus99(storeRes)) {
 					applyShareDynamicClosedMerchantUi(true);
 					applyShareDynamicClosedMerchantUi(true);
 					refreshWxLaunchTagAttrs();
 					refreshWxLaunchTagAttrs();
 					return;
 					return;
 				}
 				}
-				if (isNoCarryingDataDeleteFlagMsg(res)) {
+				if (isNoCarryingDataDeleteFlagMsg(storeRes)) {
+					showDynNoCarryingDataState();
+					refreshWxLaunchTagAttrs();
+					return;
+				}
+				if (!isDynamicsDetailResponsePresent(dynamicsRes)) {
 					showDynNoCarryingDataState();
 					showDynNoCarryingDataState();
 					refreshWxLaunchTagAttrs();
 					refreshWxLaunchTagAttrs();
 					return;
 					return;