/** * 按俱乐部 + 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, }); }); }