156 lines
7.0 KiB
Python
156 lines
7.0 KiB
Python
"""小程序页面静态资源(背景图/图标)— 数据库配置 + 默认值"""
|
|
from django.core.cache import cache
|
|
|
|
_CACHE_PREFIX = 'xcx_page_ziyuan_v1'
|
|
_CACHE_TTL = 120
|
|
|
|
# 默认资源(相对 OSS 路径,不含域名)
|
|
DEFAULT_ZIYUAN = {
|
|
'paihangbang.pageBg': 'beijing/paihangbang/page-bg.jpg',
|
|
'paihangbang.cardBg': 'beijing/paihangbang/list-card-bg.png',
|
|
'paihangbang.emptyIcon': 'beijing/paihangbang/empty.png',
|
|
'paihangbang.refreshIcon': 'beijing/paihangbang/icon-refresh.png',
|
|
'shangjiaduan.pageBg': 'beijing/shangjiaduan/page_bg.png',
|
|
'shangjiaduan.avatarCardBg': 'beijing/shangjiaduan/avatar_card_bg.png',
|
|
'shangjiaduan.assetCardBg': 'beijing/shangjiaduan/asset_card_bg.png',
|
|
'shangjiaduan.statCardBg': 'beijing/shangjiaduan/stat_card_bg.png',
|
|
'shangjiaduan.funcItemBg': 'beijing/shangjiaduan/func_item_bg.png',
|
|
'shangjiaduan.primaryFuncBg': 'beijing/shangjiaduan/primary_func_bg.png',
|
|
'shangjiaduan.highlightFuncBg': 'beijing/shangjiaduan/highlight_func_bg.png',
|
|
'shangjiaduan.iconRelease': 'beijing/shangjiaduan/icon_release.png',
|
|
'shangjiaduan.iconFast': 'beijing/shangjiaduan/icon_fast.png',
|
|
'shangjiaduan.iconOrders': 'beijing/shangjiaduan/icon_orders.png',
|
|
'shangjiaduan.iconService': 'beijing/shangjiaduan/icon_service.png',
|
|
'shangjiaduan.iconPunish': 'beijing/shangjiaduan/icon_punish.png',
|
|
'shangjiaduan.iconRank': 'beijing/shangjiaduan/icon_rank.png',
|
|
'shangjiaduan.iconRecharge': 'beijing/shangjiaduan/icon_recharge.png',
|
|
'shangjiaduan.iconWithdraw': 'beijing/shangjiaduan/icon_withdraw.png',
|
|
'shangjiaduan.iconRefresh': 'beijing/shangjiaduan/icon_refresh.png',
|
|
'shangjiaduan.iconCopy': 'beijing/shangjiaduan/icon_copy.png',
|
|
'shangjiaduan.avatarFrame': 'beijing/shangjiaduan/avatar_frame.png',
|
|
'guanshiduan.pageBg': 'beijing/guanshiduan/page-bg.jpg',
|
|
'guanshiduan.topDecor': 'beijing/guanshiduan/top-decor.png',
|
|
'guanshiduan.cardBg1': 'beijing/guanshiduan/card-bg1.png',
|
|
'guanshiduan.cardBg2': 'beijing/guanshiduan/card-bg2.png',
|
|
'guanshiduan.iconRefresh': 'beijing/guanshiduan/icon-refresh.png',
|
|
'guanshiduan.iconCopy': 'beijing/guanshiduan/icon-copy.png',
|
|
'guanshiduan.iconInvite': 'beijing/guanshiduan/icon-invite.png',
|
|
'guanshiduan.iconSub': 'beijing/guanshiduan/icon-sub.png',
|
|
'guanshiduan.iconRecord': 'beijing/guanshiduan/icon-record.png',
|
|
'guanshiduan.iconRank': 'beijing/guanshiduan/icon-rank.png',
|
|
'guanshiduan.iconPoster': 'beijing/guanshiduan/icon-poster.png',
|
|
'guanshiduan.iconWithdraw': 'beijing/guanshiduan/icon-withdraw.png',
|
|
'guanshiduan.iconContact': 'beijing/guanshiduan/icon-contact.png',
|
|
'guanshiduan.iconArrow': 'beijing/guanshiduan/icon-arrow.png',
|
|
}
|
|
|
|
# 后台配置页展示用中文说明(键名 pageBg 等仅供程序识别)
|
|
ZIYUAN_MIAOSHU = {
|
|
'paihangbang.pageBg': '排行榜 · 整页背景图',
|
|
'paihangbang.cardBg': '排行榜 · 列表卡片背景',
|
|
'paihangbang.emptyIcon': '排行榜 · 暂无数据图标',
|
|
'paihangbang.refreshIcon': '排行榜 · 刷新按钮图标',
|
|
'shangjiaduan.pageBg': '商家端 · 首页背景图',
|
|
'shangjiaduan.avatarCardBg': '商家端 · 头像区域卡片背景',
|
|
'shangjiaduan.assetCardBg': '商家端 · 余额/资产卡片背景',
|
|
'shangjiaduan.statCardBg': '商家端 · 数据统计卡片背景',
|
|
'shangjiaduan.funcItemBg': '商家端 · 普通功能入口背景',
|
|
'shangjiaduan.primaryFuncBg': '商家端 · 主要功能按钮背景',
|
|
'shangjiaduan.highlightFuncBg': '商家端 · 高亮功能按钮背景',
|
|
'shangjiaduan.iconRelease': '商家端 · 发布/派单图标',
|
|
'shangjiaduan.iconFast': '商家端 · 快捷操作图标',
|
|
'shangjiaduan.iconOrders': '商家端 · 订单列表图标',
|
|
'shangjiaduan.iconService': '商家端 · 客服/服务图标',
|
|
'shangjiaduan.iconPunish': '商家端 · 处罚相关图标',
|
|
'shangjiaduan.iconRank': '商家端 · 排行榜入口图标',
|
|
'shangjiaduan.iconRecharge': '商家端 · 充值图标',
|
|
'shangjiaduan.iconWithdraw': '商家端 · 提现图标',
|
|
'shangjiaduan.iconRefresh': '商家端 · 刷新图标',
|
|
'shangjiaduan.iconCopy': '商家端 · 复制图标',
|
|
'shangjiaduan.avatarFrame': '商家端 · 头像边框装饰',
|
|
'guanshiduan.pageBg': '管事端 · 首页背景图',
|
|
'guanshiduan.topDecor': '管事端 · 顶部装饰图',
|
|
'guanshiduan.cardBg1': '管事端 · 卡片背景(样式一)',
|
|
'guanshiduan.cardBg2': '管事端 · 卡片背景(样式二)',
|
|
'guanshiduan.iconRefresh': '管事端 · 刷新图标',
|
|
'guanshiduan.iconCopy': '管事端 · 复制图标',
|
|
'guanshiduan.iconInvite': '管事端 · 邀请打手图标',
|
|
'guanshiduan.iconSub': '管事端 · 下级/下属图标',
|
|
'guanshiduan.iconRecord': '管事端 · 记录/流水图标',
|
|
'guanshiduan.iconRank': '管事端 · 排行榜图标',
|
|
'guanshiduan.iconPoster': '管事端 · 海报/分享图标',
|
|
'guanshiduan.iconWithdraw': '管事端 · 提现图标',
|
|
'guanshiduan.iconContact': '管事端 · 联系客服图标',
|
|
'guanshiduan.iconArrow': '管事端 · 箭头/跳转图标',
|
|
}
|
|
|
|
|
|
def get_ziyuan_miaoshu(zu: str, key: str) -> str:
|
|
return ZIYUAN_MIAOSHU.get(f'{zu}.{key}', f'{zu} · {key}')
|
|
|
|
|
|
def clear_page_ziyuan_cache():
|
|
cache.delete_many([
|
|
f'{_CACHE_PREFIX}:all',
|
|
f'{_CACHE_PREFIX}:paihangbang',
|
|
f'{_CACHE_PREFIX}:shangjiaduan',
|
|
f'{_CACHE_PREFIX}:guanshiduan',
|
|
])
|
|
|
|
|
|
def _load_all_from_db():
|
|
try:
|
|
from peizhi.models import XcxPageZiyuan
|
|
rows = XcxPageZiyuan.objects.all()
|
|
data = {}
|
|
for r in rows:
|
|
key = f'{r.ziyuan_zu}.{r.ziyuan_key}'
|
|
if r.ziyuan_path:
|
|
data[key] = r.ziyuan_path.lstrip('/')
|
|
return data
|
|
except Exception:
|
|
return {}
|
|
|
|
|
|
def get_all_ziyuan_merged():
|
|
cached = cache.get(f'{_CACHE_PREFIX}:all')
|
|
if cached is not None:
|
|
return cached
|
|
merged = dict(DEFAULT_ZIYUAN)
|
|
merged.update(_load_all_from_db())
|
|
cache.set(f'{_CACHE_PREFIX}:all', merged, _CACHE_TTL)
|
|
return merged
|
|
|
|
|
|
def get_ziyuan_group(zu: str) -> dict:
|
|
cache_key = f'{_CACHE_PREFIX}:{zu}'
|
|
cached = cache.get(cache_key)
|
|
if cached is not None:
|
|
return cached
|
|
merged = get_all_ziyuan_merged()
|
|
group = {}
|
|
prefix = f'{zu}.'
|
|
for k, v in merged.items():
|
|
if k.startswith(prefix):
|
|
group[k[len(prefix):]] = v
|
|
cache.set(cache_key, group, _CACHE_TTL)
|
|
return group
|
|
|
|
|
|
def build_paihang_assets_for_api():
|
|
g = get_ziyuan_group('paihangbang')
|
|
return {
|
|
'pageBg': g.get('pageBg', DEFAULT_ZIYUAN['paihangbang.pageBg']),
|
|
'cardBg': g.get('cardBg', DEFAULT_ZIYUAN['paihangbang.cardBg']),
|
|
'emptyIcon': g.get('emptyIcon', DEFAULT_ZIYUAN['paihangbang.emptyIcon']),
|
|
'refreshIcon': g.get('refreshIcon', DEFAULT_ZIYUAN['paihangbang.refreshIcon']),
|
|
}
|
|
|
|
|
|
def build_page_assets_for_api():
|
|
return {
|
|
'shangjiaduan': get_ziyuan_group('shangjiaduan'),
|
|
'paihangbang': get_ziyuan_group('paihangbang'),
|
|
'guanshiduan': get_ziyuan_group('guanshiduan'),
|
|
}
|