|
|
@@ -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"] */
|
|
|
function parseContentNumberArrayFromUrl() {
|
|
|
var raw = getMergedParam('contentNumber') || q('contentNumber');
|
|
|
@@ -1908,14 +2006,15 @@
|
|
|
}
|
|
|
|
|
|
function resolveUserAvatarUrl() {
|
|
|
+ var fromUrl = getCheckInUserDisplayFromUrl().userImage;
|
|
|
+ if (fromUrl) return normalizeMediaUrl(fromUrl);
|
|
|
var top = normalizeMediaUrl(getMergedParam('userImage'));
|
|
|
if (top) return top;
|
|
|
var item = parseOptionsItem();
|
|
|
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;无则用默认图 */
|
|
|
@@ -2084,12 +2183,7 @@
|
|
|
function applyPage() {
|
|
|
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) */
|
|
|
var elStatus = document.getElementById('checkInHeadStatus');
|