# -*- coding: utf-8 -*- """重新设计 board-customer.html 各维度的差异化卡片布局。 每个维度有独特的视觉重点和数据展示方式。""" import pathlib, re TARGET = pathlib.Path("docs/h5_ui/pages/board-customer.html") html = TARGET.read_text(encoding="utf-8") # ── 助教行模板(复用) ── def coach_row(coaches_html): return f'''
助教: {coaches_html}
''' # 常用助教组合 COACHES_A = '''❤️ 小燕 | ❤️ 泡芙 | ❤️ Amy''' COACHES_B = '''❤️ Amy | ❤️ 小燕''' COACHES_C = '''❤️ 泡芙 | ❤️ 小燕''' COACHES_D = '''❤️ 泡芙 | ❤️ 小燕''' COACHES_E = '''❤️ Amy | ❤️ 泡芙''' COACHES_F = '''❤️ 小燕 | ❤️ 泡芙 | ❤️ Amy''' COACHES_G = '''❤️ 小燕 | ❤️ 泡芙''' COACHES_H = '''❤️ 泡芙 | ❤️ Amy''' COACHES_I = '''❤️ 小燕 | ❤️ 泡芙''' COACHES_J = '''❤️ Amy | ❤️ 小燕''' # ── 头像模板 ── def avatar(color_from, color_to, char): return f'''
{char}
''' # ══════════════════════════════════════════════════════════ # 维度1: 最应召回 — 突出超期天数红色警告 + 进度条 # ══════════════════════════════════════════════════════════ DIM_RECALL = '''
''' + avatar("amber-400","orange-500","王") + ''' 王先生
超期 8天
理想间隔 7天 已过 15天
30天到店 5次
余额 ¥8,000
召回指数 0.92
''' + coach_row(COACHES_A) + '''
''' + avatar("pink-400","rose-500","李") + ''' 李女士
超期 10天
理想间隔 10天 已过 20天
30天到店 3次
余额 ¥12,500
召回指数 0.88
''' + coach_row(COACHES_B) + '''
''' + avatar("blue-400","indigo-500","张") + ''' 张先生
超期 11天
理想间隔 7天 已过 18天
30天到店 2次
余额 ¥3,200
召回指数 0.85
''' + coach_row(COACHES_C) + '''
''' # ══════════════════════════════════════════════════════════ # 维度2: 最大消费潜力 — 突出潜力评级 + 消费趋势 # ══════════════════════════════════════════════════════════ DIM_POTENTIAL = '''
''' + avatar("rose-400","pink-500","赵") + ''' 赵女士
0.95
消费潜力
🔥 S级潜力 高频 · 高客单 · 高余额

¥4,800

近30天消费

8次

月均到店

¥15,000

余额

''' + coach_row(COACHES_D) + '''
''' + avatar("green-400","emerald-500","刘") + ''' 刘先生
0.87
消费潜力
⭐ A级潜力 中频 · 高客单

¥3,500

近30天消费

5次

月均到店

¥6,800

余额

''' + coach_row(COACHES_E) + '''
''' # ══════════════════════════════════════════════════════════ # 维度3: 最高余额 — 突出余额大字 + 消耗速率 # ══════════════════════════════════════════════════════════ DIM_BALANCE = '''
''' + avatar("rose-400","pink-500","赵") + ''' 赵女士
¥25,000 余额
60天消费 ¥6,200
月均消耗 ¥3,100
预计可用 8个月
最近到店 12天前
理想间隔 10天
''' + coach_row(COACHES_F) + '''
''' + avatar("purple-400","violet-500","陈") + ''' 陈先生
¥18,500 余额
60天消费 ¥3,800
月均消耗 ¥1,900
预计可用 9.7个月
最近到店 8天前
理想间隔 14天
''' + coach_row(COACHES_G) + '''
''' # ══════════════════════════════════════════════════════════ # 维度4: 最近充值 — 时间线样式 + 充值金额突出 # ══════════════════════════════════════════════════════════ DIM_RECHARGE = '''
''' + avatar("indigo-400","blue-500","吴") + '''
吴先生
2天前充值
+¥5,000 充值
充后余额
¥8,200
最近到店 2天前
理想间隔 7天
本年充值 3次
''' + coach_row(COACHES_B) + '''
''' + avatar("orange-400","amber-500","郑") + '''
郑女士
5天前充值
+¥3,000 充值
充后余额
¥6,500
最近到店 5天前
理想间隔 10天
本年充值 2次
''' + coach_row(COACHES_C) + '''
''' # ══════════════════════════════════════════════════════════ # 维度5: 最高消费 近60天 — 消费金额突出 + 排名徽章 # ══════════════════════════════════════════════════════════ DIM_SPEND60 = '''
''' + avatar("pink-400","rose-500","李") + ''' 李女士 1
¥12,800 近60天消费

18次

到店

¥711

次均消费

¥8,200

余额

''' + coach_row(COACHES_A) + '''
''' + avatar("amber-400","orange-500","王") + ''' 王先生 2
¥9,500 近60天消费

12次

到店

¥792

次均消费

¥5,000

余额

''' + coach_row(COACHES_H) + '''
''' # ══════════════════════════════════════════════════════════ # 维度6: 最频繁 近60天 — 到店天数突出 + 频率柱状图 # ══════════════════════════════════════════════════════════ DIM_FREQ60 = '''
''' + avatar("blue-400","indigo-500","张") + ''' 张先生
18
60天到店
8周前 本周
平均间隔 3.3天
60天消费 ¥8,600
余额 ¥4,200
''' + coach_row(COACHES_F) + '''
''' + avatar("purple-400","violet-500","陈") + ''' 陈先生
15
60天到店
8周前 本周
平均间隔 4天
60天消费 ¥6,200
余额 ¥7,800
''' + coach_row(COACHES_J) + '''
''' # ══════════════════════════════════════════════════════════ # 维度7: 最近到店 — 突出"X天前"大字 + 新鲜度色彩 # ══════════════════════════════════════════════════════════ DIM_RECENT = '''
''' + avatar("green-400","emerald-500","刘") + '''
刘先生
1 天前到店
极新鲜
理想间隔 7天
60天到店 12天
余额 ¥9,200
''' + coach_row(COACHES_H) + '''
''' + avatar("cyan-400","teal-500","周") + '''
周先生
2 天前到店
很新鲜
理想间隔 10天
60天到店 8天
余额 ¥5,500
''' + coach_row(COACHES_I) + '''
''' # ══════════════════════════════════════════════════════════ # 维度8: 最专一 — 助教关系优先 + 关系指数条 # ══════════════════════════════════════════════════════════ DIM_LOYAL = '''
''' + avatar("teal-400","cyan-500","孙") + ''' 孙先生
0.81
专一指数
小燕
0.95
泡芙
0.68
Amy
0.32
最近到店 6天前
60天到店 10天
余额 ¥7,200
''' + avatar("rose-400","pink-500","赵") + ''' 赵女士
0.90
专一指数
Amy
0.88
泡芙
0.72
最近到店 4天前
60天到店 14天
余额 ¥12,000
''' # ══════════════════════════════════════════════════════════ # 执行替换 # ══════════════════════════════════════════════════════════ ALL_DIMS = DIM_RECALL + DIM_POTENTIAL + DIM_BALANCE + DIM_RECHARGE + DIM_SPEND60 + DIM_FREQ60 + DIM_RECENT + DIM_LOYAL # 定位:从第一个 dim-container 到悬浮助手按钮之前 pattern = re.compile( r'(' end_marker = ' ' start_idx = html.find(start_marker) end_idx = html.find(end_marker) if start_idx == -1 or end_idx == -1: # 尝试备选标记 start_marker2 = '