|
|
@@ -38,7 +38,7 @@
|
|
|
overflow-x: hidden;
|
|
|
}
|
|
|
|
|
|
- /* getOne businessStatus=99 或「暂无承载数据」:隐藏主内容 #dynPageMain,展示关店横幅 + 更多推荐(与 shareIndex 一致) */
|
|
|
+ /* getOne 关店/暂无承载,或 getDynamicsDetail 无有效 data:隐藏 #dynPageMain,展示横幅 + 更多推荐 */
|
|
|
#dynPageMain {
|
|
|
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) {
|
|
|
if (!res || typeof res !== 'object') return false;
|
|
|
var tip = res.msg != null ? String(res.msg).trim() : '';
|
|
|
@@ -3154,13 +3250,24 @@
|
|
|
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);
|
|
|
refreshWxLaunchTagAttrs();
|
|
|
return;
|
|
|
}
|
|
|
- if (isNoCarryingDataDeleteFlagMsg(res)) {
|
|
|
+ if (isNoCarryingDataDeleteFlagMsg(storeRes)) {
|
|
|
+ showDynNoCarryingDataState();
|
|
|
+ refreshWxLaunchTagAttrs();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!isDynamicsDetailResponsePresent(dynamicsRes)) {
|
|
|
showDynNoCarryingDataState();
|
|
|
refreshWxLaunchTagAttrs();
|
|
|
return;
|