Files
lucky_shop/common/js/empty-style-stub.js
ZF sun 82fd3839a9 feat: 新增remote-only主题模式,优化首屏包体积
1. 新增theme-override.js实现主题远端拉取逻辑
2. 新增empty-style-stub.js作为主题包占位符,减少主包~75KB
3. 在vue.config.js中添加构建期主题stub替换逻辑
4. 重构config-external.js的主题配置,新增remote-only模式支持
5. 重构store的applyThemeWithRemote方法,适配远端主题拉取
6. 在bootstrap中新增主题初始化和异步拉取逻辑
2026-07-07 14:56:13 +08:00

170 lines
7.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// 空主题预设占位(stub)
//
// 在 themeConfig.overrideRemote.source === 'remote-only' 模式下,
// style_color.js 会被 webpack.NormalModuleReplacementPlugin 替换为这个 stub.
//
// 目的: 主包不再包含 8 个完整 preset (~80KB), 只保留最小 emergency fallback
// (~5KB, 仅 1 个 default preset 的核心 token).
//
// 设计要点:
// 1) 导出 default 对象, 结构与 style_color.js 一致: { 'default': { ... } }
// 2) 包含最关键的 token(main_color, aux_color, bg_color 等),
// 保证 themeColorSet 能写入基础 CSS 变量,首屏不白屏
// 3) 缺失的 token 由远端 /api/theme/presets 异步补齐,补齐前 var() 解析失败
// 时浏览器会回退到 SCSS 的 fallback 值(uni-app H5 已做 rpx→px)
// 4) 其他 7 个 preset 完全由远端提供,本地不打包
// 5) 失败兜底: 远端不可用时, 切到非 default preset 会落到 default 的样式
//
// token 数量统计: 8 preset × ~50 token = ~400 token. 完整 80KB.
// 1 preset × ~50 token = ~5KB. 节省 ~94%.
// ============================================================
export default {
'default': {
name: 'default',
main_color: '#F4391c',
aux_color: '#F7B500',
bg_color: '#FF4646',
bg_color_shallow: '#FF4646',
promotion_color: '#FF4646',
promotion_aux_color: '#F7B500',
main_color_shallow: '#FFF4F4',
price_color: 'rgb(252,82,39)',
btn_text_color: '#FFFFFF',
goods_price: 'rgb(252,82,39,1)',
promotion_tag: '#FF4646',
goods_card_bg: '#201A18',
goods_card_bg_shallow: '#7C7878',
goods_card_color: '#FFD792',
goods_coupon: '#FC5227',
goods_cart_num_corner: '#FC5227',
goods_btn_color: '#FF4646',
goods_btn_color_shallow: '#F7B500',
pintuan_label_bg: '#F7B500',
pintuan_label_color: '#FFFFFF',
pintuan_color: '#FA6400',
pintuan_promotion_color: '#FA3A1D',
pintuan_promotion_aux_color: '#FD9A01',
super_member_start_bg: '#7c7878',
super_member_end_bg: '#201a18',
super_member_start_text_color: '#FFDBA6',
super_member_end_text_color: '#FFEBCA',
bargain_promotion_color: '#F0353E',
bargain_promotion_aux_color: '#FD9A01',
seckill_promotion_color: '#F83530',
seckill_promotion_aux_color: '#FD9A01',
giftcard_promotion_color: '#FF3369',
giftcard_promotion_aux_color: '#F7B500',
groupby_promotion_color: '#E64136',
groupby_promotion_aux_color: '#F7B500',
hover_nav_bg_color: '#FFFC',
hover_nav_text_color: '#000',
// ===== DIY 分类页字号 token =====
diy_category_tree_select_size: '28rpx',
diy_category_tree_normal_size: '20rpx',
diy_category_item_title_size: '26rpx',
diy_category_item_goods_title_size:'28rpx',
diy_category_item_name_size: '24rpx',
diy_category_item_goods_name_size:'28rpx',
diy_category_item_goods_tag_size: '22rpx',
diy_category_item_consult_now_size:'26rpx',
diy_category_item_consult_now_bg: '#FF4646',
diy_category_item_consult_now_text: '#FFFFFF',
diy_category_item_consult_now_padding: '12rpx 30rpx',
diy_category_item_consult_now_radius: '40rpx',
diy_category_item_consult_now_weight: '500',
diy_category_item_consult_now_line_height:'1.2',
diy_category_item_consult_now_text_align: 'center',
diy_category_item_consult_now_white_space:'nowrap',
diy_category_item_consult_now_display: 'inline-block',
// ===== DIY 分类页 - 商品卡 token =====
diy_category_item_goods_name_line_height:1.3,
diy_category_item_goods_name_margin_top: '20rpx',
diy_category_item_discount_price_weight: 'bold',
diy_category_item_discount_price_line_height: 1,
diy_category_item_discount_price_margin_top: '16rpx',
diy_category_item_pro_info_margin_top: '16rpx',
diy_category_item_delete_price_size: '24rpx',
diy_category_item_delete_price_line_height: 1,
diy_category_item_delete_price_text_decoration:'line-through',
diy_category_item_member_price_tag_width: '60rpx',
diy_category_item_member_price_tag_height: '28rpx',
diy_category_item_member_price_tag_line_height: 1,
diy_category_item_member_price_tag_margin_left: '6rpx',
diy_category_item_info_wrap_padding: '0 20rpx',
diy_category_item_info_wrap_margin_top: '12rpx',
diy_category_item_footer_wrap_display: 'flex',
diy_category_item_footer_wrap_justify_content: 'space-between',
diy_category_item_footer_wrap_align_items: 'normal',
diy_category_item_footer_wrap_margin_top: 0,
diy_category_item_price_wrap_display: 'block',
diy_category_item_price_wrap_align_items: 'normal',
diy_category_item_price_wrap_flex_wrap: 'nowrap',
diy_category_item_price_wrap_justify_content: 'normal',
diy_category_item_price_wrap_margin_top: 0,
diy_category_item_name_wrap_flex: '1',
diy_category_item_consult_now_wrap_display: 'flex',
diy_category_item_consult_now_wrap_justify_content:'flex-end',
diy_category_item_consult_now_wrap_margin_top: 'auto',
diy_category_item_consult_now_wrap_padding_top: '10rpx',
diy_category_item_color_tip_color: '#909399',
diy_category_item_price_font_weight: 500,
// ===== 营销 token(全 8 preset 一致) =====
pintuan_label_grad_start: '#ffbd5b',
pintuan_label_grad_end: '#fd882e',
pintuan_avatar_border: '#ff3d3d',
pintuan_success_start: '#3edb73',
pintuan_success_end: '#1db576',
bargain_promo_shallow: '#ffeadb',
seckill_price_shallow: '#fcecd7',
seckill_price_start: '#fdbe6c',
seckill_discount_start: '#ff5f17',
seckill_discount_end: '#fe2f18',
member_card_gold_start: '#E3B66B',
member_card_gold_end: '#F7DAA5',
member_icon_grad_start: '#814635',
member_icon_grad_end: '#3A221B',
balance_page_bg_start: '#FE7849',
balance_page_bg_end: '#FF1959',
point_page_bg_start: '#FE7849',
point_page_bg_end: '#FF1959',
point_promo_start: '#F8F8F8',
point_promo_end: '#E74A32',
point_item_grad_start: '#F4402B',
point_item_grad_end: '#FD7C40',
invite_grad_start: '#ff2440',
invite_grad_end: '#ff7b7b',
promote_grad_start: '#ffe2ac',
promote_grad_end: '#fdc174',
fenxiao_withdraw_start: '#ff3c29',
fenxiao_withdraw_end: '#ff6f29',
level_1_grad_start: '#9BA7B1', level_1_grad_end: '#D3DEE6',
level_2_grad_start: '#F57E2A', level_2_grad_end: '#FAD494',
level_3_grad_start: '#F85151', level_3_grad_end: '#FF9999',
level_4_grad_start: '#78B8B4', level_4_grad_end: '#AFE6E2',
level_5_grad_start: '#4DA1E1', level_5_grad_end: '#58CBF0',
level_6_grad_start: '#81C636', level_6_grad_end: '#D1F677',
level_7_grad_start: '#6D7279', level_7_grad_end: '#A5AAB0',
level_8_grad_start: '#866DDB', level_8_grad_end: '#D49BFE',
level_9_grad_start: '#f1c74e', level_9_grad_end: '#f7dc81',
level_10_grad_start: '#418CCF', level_10_grad_end: '#9CC6F1',
}
// 其他 7 个 preset (green/blue/pink/gold/purple/yellow/black)
// 全部由远端 /api/theme/presets 异步提供
// 远端拉取前切到非 default preset,会回退到 default 样式
// 注: 历史曾尝试添加 'red' preset, 但前端 style_color.js 从未定义, 已在
// config-external.js themeList 中移除以保持一致性
};