sunshibo 1 هفته پیش
والد
کامیت
70b0f93aae
1فایلهای تغییر یافته به همراه104 افزوده شده و 10 حذف شده
  1. 104 10
      HBuilderProjects/shareCheckIn.html

+ 104 - 10
HBuilderProjects/shareCheckIn.html

@@ -1811,6 +1811,104 @@
 			}
 			}
 		}
 		}
 
 
+		/** 与 group_user checkIn/details pickClockInDetailUserDisplayFromRecord 一致 */
+		function pickCheckInUserDisplayFromRecord(d) {
+			if (!d || typeof d !== 'object') {
+				return { userName: '', userImage: '' };
+			}
+			var nested =
+				d.user && typeof d.user === 'object' && !Array.isArray(d.user)
+					? d.user
+					: d.userInfo && typeof d.userInfo === 'object' && !Array.isArray(d.userInfo)
+						? d.userInfo
+						: null;
+			function pickName(o) {
+				if (!o || typeof o !== 'object') return '';
+				return String(
+					o.userName || o.nickName || o.realName || o.name || o.nickname || ''
+				).trim();
+			}
+			function pickImage(o) {
+				if (!o || typeof o !== 'object') return '';
+				return String(
+					o.userImage || o.userImg || o.headImg || o.avatar || o.headImage || ''
+				).trim();
+			}
+			return {
+				userName: pickName(d) || (nested ? pickName(nested) : ''),
+				userImage: pickImage(d) || (nested ? pickImage(nested) : '')
+			};
+		}
+
+		function getCheckInUserDisplayFromUrl() {
+			var p = mergeSearchAndHashParams();
+			function pickParam() {
+				var keys = arguments;
+				for (var i = 0; i < keys.length; i++) {
+					var v = p.get(keys[i]);
+					if (v != null && String(v).trim() !== '') {
+						return tryDecode(String(v).trim());
+					}
+				}
+				return '';
+			}
+			var userName = pickParam('userName', 'shareUserName', 'nickName', 'nickname', 'realName');
+			var userImage = pickParam('userImage', 'userImg', 'headImg', 'avatar', 'headImage');
+			if (!userName || !userImage) {
+				var item = parseOptionsItem();
+				if (item) {
+					var fromItem = pickCheckInUserDisplayFromRecord(item);
+					if (!userName) userName = fromItem.userName;
+					if (!userImage) userImage = fromItem.userImage;
+				}
+			}
+			return { userName: userName, userImage: userImage };
+		}
+
+		function applyCheckInUserDisplay(display) {
+			if (!display) return;
+			var nameEl = document.getElementById('userName');
+			var avatarEl = document.getElementById('userAvatar');
+			var userName = display.userName ? String(display.userName).trim() : '';
+			var userImage = display.userImage ? normalizeMediaUrl(String(display.userImage).trim()) : '';
+			if (userName && nameEl) nameEl.textContent = userName;
+			if (userImage && avatarEl) avatarEl.src = userImage;
+		}
+
+		/** 优先 URL,再以打卡记录 id 拉详情接口校正(与 App details 页一致) */
+		function loadCheckInUserDisplay() {
+			applyCheckInUserDisplay(getCheckInUserDisplayFromUrl());
+			var recordId = getCheckInRecordIdFromParams();
+			var chain = Promise.resolve();
+			if (recordId) {
+				var path =
+					'/storeClockIn/getStoreClockInById?id=' + encodeURIComponent(recordId);
+				chain = apiFetch(path)
+					.then(function (res) {
+						var ok =
+							res &&
+							(res.code === 200 || res.code === '200' || res.success === true);
+						var data = res && res.data;
+						if (!ok || !data || typeof data !== 'object') return;
+						applyCheckInUserDisplay(pickCheckInUserDisplayFromRecord(data));
+					})
+					.catch(function (e) {
+						console.warn('[getStoreClockInById]', e);
+					});
+			}
+			return chain.finally(function () {
+				var nameEl = document.getElementById('userName');
+				var avEl = document.getElementById('userAvatar');
+				if (nameEl && !String(nameEl.textContent || '').trim()) {
+					nameEl.textContent = '用户名称';
+				}
+				if (avEl && (!avEl.src || String(avEl.src).indexOf('demouser') >= 0)) {
+					var av = resolveUserAvatarUrl();
+					avEl.src = av || CHECKIN_USER_AVATAR_DEFAULT;
+				}
+			});
+		}
+
 		/** App buildCheckInShareH5FullUrl:contentNumber 为 JSON 数组,店铺为 ["N"],地点为 ["年","M"] */
 		/** App buildCheckInShareH5FullUrl:contentNumber 为 JSON 数组,店铺为 ["N"],地点为 ["年","M"] */
 		function parseContentNumberArrayFromUrl() {
 		function parseContentNumberArrayFromUrl() {
 			var raw = getMergedParam('contentNumber') || q('contentNumber');
 			var raw = getMergedParam('contentNumber') || q('contentNumber');
@@ -1908,14 +2006,15 @@
 		}
 		}
 
 
 		function resolveUserAvatarUrl() {
 		function resolveUserAvatarUrl() {
+			var fromUrl = getCheckInUserDisplayFromUrl().userImage;
+			if (fromUrl) return normalizeMediaUrl(fromUrl);
 			var top = normalizeMediaUrl(getMergedParam('userImage'));
 			var top = normalizeMediaUrl(getMergedParam('userImage'));
 			if (top) return top;
 			if (top) return top;
 			var item = parseOptionsItem();
 			var item = parseOptionsItem();
 			if (!item) return '';
 			if (!item) return '';
-			var u = item.userImage;
-			if (u == null || u === '') return '';
-			if (typeof u === 'number') return '';
-			return normalizeMediaUrl(String(u));
+			return pickCheckInUserDisplayFromRecord(item).userImage
+				? normalizeMediaUrl(pickCheckInUserDisplayFromRecord(item).userImage)
+				: '';
 		}
 		}
 
 
 		/** 轮播仅使用 checkInImages:① URL 参数 ② options.item.checkInImages;无则用默认图 */
 		/** 轮播仅使用 checkInImages:① URL 参数 ② options.item.checkInImages;无则用默认图 */
@@ -2084,12 +2183,7 @@
 		function applyPage() {
 		function applyPage() {
 			var item = parseOptionsItem();
 			var item = parseOptionsItem();
 
 
-			var uname = getMergedParam('userName') || getMergedParam('nickname') || q('userName');
-			if (uname) document.getElementById('userName').textContent = tryDecode(uname);
-			else if (item && item.userName) document.getElementById('userName').textContent = String(item.userName);
-
-			var av = resolveUserAvatarUrl();
-			document.getElementById('userAvatar').src = av || CHECKIN_USER_AVATAR_DEFAULT;
+			loadCheckInUserDisplay();
 
 
 			/** getStoreClockInList 等与 App 分享的打卡正文:URL content / textContent,或 options.item(含 context) */
 			/** getStoreClockInList 等与 App 分享的打卡正文:URL content / textContent,或 options.item(含 context) */
 			var elStatus = document.getElementById('checkInHeadStatus');
 			var elStatus = document.getElementById('checkInHeadStatus');