85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
/**
|
||
* 按俱乐部 + page_key 拉取公告/轮播(必须带 X-Club-Id)
|
||
* 约定(与星阙小程序一致,注意与客服后台中文名曾有历史对调感):
|
||
* order_pool → 点单商城首页
|
||
* accept_order → 抢单池页
|
||
* merchant_home → 商家首页
|
||
* 禁止多页共用同一个 shangpinlunbo 槽,否则会串台。
|
||
*/
|
||
import { buildClubHeaders, getClubId } from './club-context';
|
||
|
||
function ensureGonggaoStore(app) {
|
||
const g = app.globalData || {};
|
||
if (!g._gonggaoByPage) g._gonggaoByPage = {};
|
||
return g._gonggaoByPage;
|
||
}
|
||
|
||
/** 读取某页面的缓存(按 club_id + page_key 隔离) */
|
||
export function getCachedGonggaoLunbo(app, pageKey = 'order_pool') {
|
||
app = app || getApp();
|
||
const cid = getClubId(app);
|
||
const store = ensureGonggaoStore(app);
|
||
const entry = store[pageKey];
|
||
if (entry && entry.clubId === cid) {
|
||
return {
|
||
shangpingonggao: entry.shangpingonggao || '',
|
||
shangpinlunbo: entry.shangpinlunbo || [],
|
||
};
|
||
}
|
||
// 兼容旧版单槽缓存(仅当 page_key 一致时才命中)
|
||
const g = app.globalData || {};
|
||
if (g._gonggaoPageKey === pageKey && g._gonggaoClubId === cid) {
|
||
return {
|
||
shangpingonggao: g.shangpingonggao || '',
|
||
shangpinlunbo: g.shangpinlunbo || [],
|
||
};
|
||
}
|
||
return null;
|
||
}
|
||
|
||
export function isGonggaoCacheValid(app, pageKey = 'order_pool') {
|
||
const cached = getCachedGonggaoLunbo(app, pageKey);
|
||
if (!cached) return false;
|
||
return !!(cached.shangpingonggao || (cached.shangpinlunbo && cached.shangpinlunbo.length));
|
||
}
|
||
|
||
export function applyGonggaoToGlobal(app, data, pageKey = 'order_pool') {
|
||
if (!data) return;
|
||
const g = app.globalData;
|
||
const payload = {
|
||
shangpingonggao: data.shangpingonggao || '',
|
||
shangpinlunbo: data.shangpinlunbo || [],
|
||
clubId: getClubId(app),
|
||
};
|
||
ensureGonggaoStore(app)[pageKey] = payload;
|
||
// 保留直读字段,但必须记下 page_key,避免跨页误用
|
||
g.shangpingonggao = payload.shangpingonggao;
|
||
g.shangpinlunbo = payload.shangpinlunbo;
|
||
g._gonggaoClubId = payload.clubId;
|
||
g._gonggaoPageKey = pageKey;
|
||
}
|
||
|
||
export function fetchGonggaoLunbo(app, pageKey = 'order_pool') {
|
||
const apiBase = app.globalData && app.globalData.apiBaseUrl;
|
||
if (!apiBase) {
|
||
return Promise.resolve(null);
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
wx.request({
|
||
url: `${apiBase}/peizhi/shangpingonggao/`,
|
||
method: 'POST',
|
||
header: buildClubHeaders({ 'content-type': 'application/json' }),
|
||
data: { page_key: pageKey },
|
||
success: (res) => {
|
||
if (res.statusCode === 200 && res.data) {
|
||
applyGonggaoToGlobal(app, res.data, pageKey);
|
||
resolve(res.data);
|
||
} else {
|
||
reject(new Error('shangpingonggao 请求失败'));
|
||
}
|
||
},
|
||
fail: reject,
|
||
});
|
||
});
|
||
}
|