编辑页面

修改后将从当前时间重新计算过期时间
` :f.type==='switch'?`
${f.hint||''}
` :``} ${f.hint&&f.type!=='switch'?`${f.hint}`:''}
`).join('')}
${(b.buttons||[{t:'保存',p:1},{t:'取消',g:1}]).map(x=>``).join('')}
`; case 'list': return `
${b.title?`

${b.title}${b.sub?`${b.sub}`:''}

`:''} ${b.items.map(i=>`
${i.ic||'•'}
${i.t}${i.d?`${i.d}`:''}
${i.r||''}
`).join('')}
`; case 'note': return `
${b.html}
`; case 'bars': return `
${b.title?`

${b.title}${b.sub?`${b.sub}`:''}

`:''}${hbars(b.items,b.opt)}
`; case 'tl': return `
${b.title?`

${b.title}

`:''}
${b.items.map(i=>`
${i.t}${i.d}
`).join('')}
`; case 'flow': return `
${b.title?`

${b.title}

`:''}
${b.steps.map((s,i)=>`
${i+1}. ${s.t}${s.d}
`+(i→':'')).join('')}
`; case 'up': return `
${b.title?`

${b.title}${b.sub?`${b.sub}`:''}

`:''}
📄
点击上传或拖拽小票图片到此处支持 JPG / PNG / HEIC,单张不超过 10MB,可批量上传
`; case 'ocr': return `

${b.title}${b.sub?`${b.sub}`:''}

原小票图片
${b.receipt}
AI 识别结果 整体置信度 96.4%
${b.fields.map(f=>`
`).join('')}
`; case 'html': return b.html; case 'gap': return `
`; default: return ''; } } function renderView(view){return (Array.isArray(view)?view:[view]).map(renderBlock).join('
');} /* ===================== 会员与同步数据 ===================== */ const DATA={ members:[ ['MEL-2026-08841','Emma Wang','0412 888 128','黄金会员','$517.00','2026-09-22','5','活跃','到店店员引导'], ['MEL-2026-08822','Jason Wu','0433 217 908','白银会员','$286.50','2026-09-21','3','活跃','活动海报'], ['MEL-2026-08790','Cindy Liu','0455 660 231','黄金会员','$742.00','2026-09-20','8','高价值','老带新邀请'], ['MEL-2026-08766','Mia Zhou','0421 330 776','普通会员','$86.00','2026-09-18','1','新客','小程序注册'], ['MEL-2026-08701','Tom Huang','0488 902 114','黑金会员','$1,860.00','2026-09-17','14','高价值','到店店员引导'], ['MEL-2026-08655','Sophie Tan','0466 118 203','白银会员','$318.00','2026-08-30','4','沉睡','活动海报'], ['MEL-2026-08502','Daniel Kim','0402 774 559','普通会员','$124.00','2026-07-12','2','流失','小程序注册'], ['MEL-2026-08744','Ryan Park','0477 552 330','白银会员','$398.00','2026-09-19','6','活跃','桌贴二维码'] ] }; const rowCache={}; function lvlTag(v){return v==='黑金会员'?'黑金会员':v==='黄金会员'?'黄金会员':v==='白银会员'?'白银会员':'普通会员';} function segTag(v){return v==='高价值'?'高价值':v==='活跃'?'活跃':v==='新客'?'新客':v==='沉睡'?'沉睡':'流失';} const SERIES={ sales7:{labels:['9/18','9/19','9/20','9/21','9/22','9/23','9/24'], series:[{name:'会员消费',color:C.o,data:[2860,3120,4180,2960,3420,3980,4210]}, {name:'非会员消费',color:'#C9CED6',data:[5240,5680,6420,4890,5120,6040,5860]}]}, member6:{labels:['4月','5月','6月','7月','8月','9月'],data:[286,412,658,724,796,862]}, hour:{labels:['11','12','13','14','17','18','19','20','21'],data:[180,420,380,160,240,560,640,480,220]}, freq:{labels:['1 次','2 次','3-4 次','5-8 次','9-12 次','12 次以上'],data:[2860,2420,3180,2260,1180,586]} }; const MODULES=[]; /* === CHUNK-1 === */ MODULES.push( {id:'dashboard',name:'数据看板',ic:'📊',group:'概览',tabs:[ {id:'overview',name:'经营总览',view:()=>[ {type:'kpi',cols:6,items:[ {ic:'👥',bg:'#FFF1EA',label:'会员总数',value:'12,486',delta:'6.9%',trend:'up',cmp:'较上月'}, {ic:'🆕',bg:'#E9F7F0',label:'本月新增会员',value:'862',delta:'8.3%',trend:'up',cmp:'较上月'}, {ic:'🔥',bg:'#FEF5E4',label:'活跃会员数',value:'5,240',delta:'3.1%',trend:'up',cmp:'近 30 天有消费'}, {ic:'⭐',bg:'#FEF5E4',label:'积分发放(本月)',value:'386,400',delta:'11.2%',trend:'up',cmp:'较上月'}, {ic:'🎫',bg:'#EAF1FE',label:'券核销率',value:'43.6%',delta:'2.4%',trend:'down',cmp:'较上月'}, {ic:'💰',bg:'#FFF1EA',label:'会员贡献营收',value:'$186,420',delta:'9.6%',trend:'up',cmp:'较上月'}]}, {type:'chart',title:'会员 vs 非会员消费趋势',sub:'近 7 天 · 单位 $',kind:'line',labels:SERIES.sales7.labels,series:SERIES.sales7.series, desc:'会员消费占比从月初 31.2% 提升至 41.8%,营销活动带动明显。'}, {type:'html',html:`

会员增长趋势近 6 个月 · 人

${barChart(SERIES.member6.labels,SERIES.member6.data,{h:206,colors:[C.g,C.g,C.o,C.o,C.o,C.o]})}

会员分层占比

${donutChart([{n:'新客',v:3820},{n:'活跃会员',v:5240},{n:'高价值会员',v:1860},{n:'沉睡会员',v:1046},{n:'流失会员',v:520}],{center:'12,486',centerSub:'会员总数'})}
`}, {type:'html',html:`

各门店会员消费排行本月 · AUD

${hbars([{n:'CBD 店',v:68420,t:'$68,420'},{n:'Southbank 店',v:47980,t:'$47,980'},{n:'Docklands 店',v:39260,t:'$39,260'},{n:'Box Hill 店',v:30760,t:'$30,760'}])}

优惠券核销漏斗

${hbars([{n:'已发放',v:12480,t:'12,480'},{n:'已领取',v:9860,t:'9,860'},{n:'已到店使用',v:5440,t:'5,440'},{n:'核销成功',v:5432,t:'5,432'}],{mono:true})}
整体核销率 43.6%,高于餐饮行业均值 32%,满减券表现最佳。
`} ]}, {id:'todo',name:'待办提醒',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🧾',bg:'#FDECEC',label:'待核对小票',value:'12',color:'var(--red)',sub:'超 2 小时未处理 3 张'}, {ic:'⚠️',bg:'#FEF5E4',label:'券核销异常',value:'3',color:'#96650A',sub:'POS 结果与系统不匹配'}, {ic:'💤',bg:'#EAF1FE',label:'流失预警会员',value:'48',color:'#28527E',sub:'超过 60 天未到店'}, {ic:'📝',bg:'#F1EDFB',label:'待审批积分调整',value:'2',color:'#5A44A8',sub:'需管理员二次确认'}]}, {type:'table',id:'todo',title:'今日待办明细',count:'共 65 项',clickable:true,cols:['类型','内容','门店','负责人','创建时间','优先级','操作'], rows:[ ['小票待核对','SO-20260924-0081 Emma Wang · $86.50','CBD 店','Lisa','12:36','高',''], ['小票待核对','SO-20260924-0080 Jason Wu · $42.00','CBD 店','Ken','12:12','高',''], ['券核销异常','满 $60 减 $15 重复核销疑似','Southbank 店','Ken','11:48','中',''], ['流失预警','Sophie Tan 已 52 天未到店','CBD 店','系统','09:00','中',''], ['识别失败','SO-20260923-0076 小票模糊','CBD 店','Amy','昨日 19:02','低',''], ['积分调整审批','+500 积分 补偿申请','CBD 店','Lisa','昨日 16:20','中','']], foot:'共 65 项待办 · 其中高优先级 8 项'} ]} ]}, {id:'sync',name:'消费数据同步',ic:'🔄',group:'核心业务',tabs:[ {id:'link',name:'会员关联',view:()=>[ {type:'note',tone:'blue',html:'业务前提:商家 POS 系统封闭、不开放接口。店员需在顾客点餐前完成会员关联,后续消费数据通过「店员双录」或「小票 AI 识别」回填至该会员账户。'}, {type:'form',title:'检索会员',fields:[ {label:'会员卡号 / 手机号',value:'0412 888 128',ph:'扫描会员码或输入手机号 / 卡号'}, {label:'门店',type:'select',options:['CBD 店','Southbank 店','Docklands 店','Box Hill 店']}, {label:'店员',type:'select',options:['Lisa','Ken','Amy']}, {label:'用餐时间',value:'2026-09-24 12:36'}], buttons:[{t:'检索会员',msg:'已匹配到 1 位会员'},{g:1,t:'扫码识别会员码',msg:'已调起扫码,识别到会员 Emma Wang'}]}, {type:'table',id:'link',title:'匹配结果',count:'1 条',clickable:true,cols:['卡号','姓名','手机号','等级','累计消费','可用积分','最近到店','操作'], rows:[['MEL-2026-08841','Emma Wang','0412 888 128',lvlTag('黄金会员'),'$517.00','2,860','2026-09-22', '']]}, {type:'flow',title:'关联后的录单方式',steps:[ {t:'店员双录',d:'手工录入订单明细(主方式)'},{t:'小票扫码',d:'拍照 → AI / OCR 识别'}, {t:'人工核对',d:'修正识别偏差'},{t:'确认入库',d:'生成消费记录 + 触发积分'}]} ]}, {id:'dual',name:'双录录入',view:()=>[ {type:'note',html:'主同步方式:POS 无接口时,由店员按小票内容手工录入订单。提交后系统自动计算积分并按会员等级发放。'}, {type:'form',title:'订单录入',fields:[ {label:'关联会员',req:true,value:'Emma Wang · MEL-2026-08841',hint:'可点击右侧「检索会员」重新关联'}, {label:'门店',type:'select',options:['CBD 店','Southbank 店','Docklands 店','Box Hill 店'],req:true}, {label:'用餐时间',req:true,value:'2026-09-24 12:36'}, {label:'店员',type:'select',options:['Lisa(工号 1002)','Ken(工号 1003)','Amy(工号 1005)'],req:true}, {label:'优惠券使用',type:'select',options:['未使用','满 $60 减 $15(MEL15-0826-4102)','工作日午市 8.5 折']}, {label:'POS 订单号',value:'POS-20260924-1208',ph:'选填,用于防重校验'}, {label:'菜品明细',type:'textarea',rows:5,wide:true,value:'招牌黑椒和牛堡 x1 $28.00\n香煎三文鱼沙拉 x1 $26.00\n冰美式 x2 $16.00\n薯条 x1 $8.50',hint:'每行一项,格式:菜名 x数量 金额,与菜品档案联动可自动补全'}, {label:'订单金额($)',req:true,value:'78.50'}, {label:'优惠金额($)',value:'15.00'}, {label:'实付金额($)',value:'63.50',wide:true,hint:'系统自动计算,可手工修正'}], buttons:[{t:'提交并生成消费记录',msg:'提交成功,Emma Wang 获得 95 积分'},{g:1,t:'保存草稿'},{g:1,t:'清空'}]}, {type:'table',id:'dual',title:'本店今日双录记录',count:'14 条',clickable:true,cols:['时间','会员','菜品数','金额','店员','状态'], rows:[['12:12','Jason Wu','3','$42.00','Ken','已入库'], ['11:20','Cindy Liu','6','$156.00','Ken','已入库'], ['10:48','—(散客)','2','$32.00','Amy','未匹配会员']]} ]}, {id:'ocr',name:'小票上传识别',view:()=>[ {type:'up',title:'上传点餐小票',sub:'AI / OCR 自动识别并填充订单字段'}, {type:'ocr',title:'识别结果对照(可人工修正)',sub:'SO-20260924-0081 · CBD 店',receipt:`
MELBOURNE DINING CLUB
CBD Store · 258 Collins St
Date2026-09-24 12:36
OrderPOS-1208
StaffLISA
Wagyu Burger28.00
Salmon Salad26.00
Iced Latte x216.00
Fries8.50
SUBTOTAL78.50
COUPON-15.00
TOTAL63.50
Thank you!
`, fields:[ {label:'用餐时间',value:'2026-09-24 12:36'}, {label:'菜品明细',value:'招牌黑椒和牛堡 x1 / 香煎三文鱼沙拉 x1 / 冰美式 x2 / 薯条 x1'}, {label:'订单金额($)',value:'78.50'}, {label:'优惠金额($)',value:'15.00'}, {label:'实付金额($)',value:'63.50',low:true}, {label:'关联会员',value:'Emma Wang · MEL-2026-08841(按会员码自动匹配)'}]}, {type:'note',tone:'yellow',html:'识别准确率提示:当前小票制式识别准确率约 94.2%;模糊、褶皱、手写小票识别率较低,系统会自动标记「需人工确认」字段(如上)供店员修正。'} ]}, {id:'verify',name:'核对入库',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🧾',bg:'#FDECEC',label:'待核对',value:'12',color:'var(--red)'}, {ic:'✅',bg:'#E9F7F0',label:'今日已入库',value:'38',color:'#1D7A51'}, {ic:'⏱️',bg:'#EAF1FE',label:'平均核对时长',value:'42 秒'}, {ic:'🎯',bg:'#FEF5E4',label:'本月识别准确率',value:'94.2%'}]}, {type:'table',id:'verify',title:'待核对小票',count:'12 条',clickable:true, actions:[{t:'批量核对通过',msg:'已通过 12 张小票,触发积分发放'},{g:1,t:'批量指派',msg:'请勾选待核对小票后指派核对人'}], cols:['订单号','会员','门店','用餐时间','金额','来源','识别置信度','店员','操作'], rows:[ ['SO-20260924-0081','Emma Wang','CBD 店','09-24 12:36','$86.50','小票 AI 识别',' 96%','Lisa',''], ['SO-20260924-0080','Jason Wu','CBD 店','09-24 12:12','$42.00','店员双录','—','Ken',''], ['SO-20260924-0079','散客','Docklands 店','09-24 11:48','$58.00','小票 AI 识别',' 88%','Amy',''], ['SO-20260923-0076','散客','CBD 店','09-23 19:02','$32.00','小票 AI 识别',' 42%','Amy',''], ['SO-20260923-0075','Mia Zhou','CBD 店','09-23 18:40','$68.00','小票 AI 识别',' 93%','Lisa','']]} ]}, {id:'records',name:'同步记录查询',view:()=>[ {type:'html',html:`
至
`}, {type:'table',id:'sync',title:'同步记录列表',count:'共 386 条',clickable:true,cols:['订单号','会员','门店','用餐时间','金额','来源','状态','店员'], rows:[ ['SO-20260924-0081','Emma Wang','CBD 店','09-24 12:36','$86.50','小票 AI 识别','待核对','Lisa'], ['SO-20260924-0080','Jason Wu','CBD 店','09-24 12:12','$42.00','店员双录','待核对','Ken'], ['SO-20260924-0079','散客','Docklands 店','09-24 11:48','$58.00','小票 AI 识别','未匹配会员','Amy'], ['SO-20260924-0078','Cindy Liu','Southbank 店','09-24 11:20','$156.00','小票 AI 识别','已入库','Ken'], ['SO-20260923-0077','Mia Zhou','CBD 店','09-23 19:44','$68.00','店员双录','已入库','Lisa'], ['SO-20260923-0076','散客','CBD 店','09-23 19:02','$32.00','小票 AI 识别','识别失败','Amy']], foot:'共 386 条 · 每页 20 条'} ]}, {id:'exception',name:'异常处理',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'♻️',bg:'#FDECEC',label:'疑似重复单',value:'4',color:'var(--red)',sub:'同一订单号多次提交'}, {ic:'🚫',bg:'#FEF5E4',label:'识别失败单',value:'5',color:'#96650A',sub:'小票模糊 / 格式异常'}, {ic:'❓',bg:'#EAF1FE',label:'未匹配会员',value:'9',color:'#28527E',sub:'待补登记或挂起'}, {ic:'🚩',bg:'#F1EDFB',label:'金额异常',value:'2',color:'#5A44A8',sub:'实付与明细不符'}]}, {type:'table',id:'exc',title:'异常单据',count:'20 条',clickable:true,cols:['订单号','异常类型','说明','门店','发生时间','处理状态','操作'], rows:[ ['SO-20260924-0079','未匹配会员','小票无会员信息,需补登记','Docklands 店','09-24 11:48','待处理',''], ['SO-20260923-0076','识别失败','小票图像模糊,置信度 42%','CBD 店','09-23 19:02','待处理',''], ['SO-20260923-0068','疑似重复','同订单号 POS-1203 已存在','CBD 店','09-23 13:20','处理中',''], ['SO-20260922-0055','金额异常','明细合计 $92.00 ≠ 实付 $68.00','Southbank 店','09-22 20:14','已处理','']]} ]} ]}, {id:'members',name:'会员管理',ic:'👥',group:'核心业务',tabs:[ {id:'list',name:'会员档案',view:()=>[ {type:'html',html:`
`}, {type:'table',id:'mem',title:'会员列表',count:'12,486 位',clickable:true,cols:['会员卡号','姓名','手机号','等级','累计消费','最近到店','到店次数','状态','来源'], rows:DATA.members.map(m=>[m[0],`${m[1]}`,m[2],lvlTag(m[3]),m[4],m[5],m[6],segTag(m[7]),m[8]]), foot:'共 12,486 位会员 · 每页 20 条', detail:r=>`
会员卡号${r[0]}
姓名${r[1]}
手机号${r[2]}
会员等级${r[3]}
累计消费${r[4]}
最近到店${r[5]}
到店次数${r[6]}
来源渠道${r[8]}
可用积分2,860
可用优惠券3 张
`} ]}, {id:'levels',name:'等级体系',view:()=>[ {type:'table',id:'lvl',title:'会员等级规则配置',count:'4 个等级',clickable:true,actions:[{t:'+ 新增等级',f:'level'}], cols:['等级','成长值门槛','积分倍数','专属权益','会员数','占比','操作'], rows:[ ['普通会员','0','1.0 倍','生日券','3,820','30.6%',''], ['白银会员','1,000','1.2 倍','每月 1 张 5 折饮品券','4,326','34.6%',''], ['黄金会员','2,500','1.5 倍','免排队 · 生日双倍积分','2,480','19.9%',''], ['黑金会员','6,000','2.0 倍','专属客服 · 每月特价套餐','1,860','14.9%','']]}, {type:'form',title:'等级规则参数',fields:[ {label:'成长值计算方式',type:'select',options:['按累计有效消费金额($1 = 1 成长值)','按累计到店次数','按消费金额 + 到店次数加权']}, {label:'等级复核周期',type:'select',options:['每月 1 日自动复核','每季度复核','不自动复核(仅人工)']}, {label:'是否支持降级',type:'select',options:['不降级(推荐)','连续 2 个周期未达标则降级']}, {label:'等级变更是否需要审批',type:'select',options:['手工调整需管理员审批','无需审批']}], buttons:[{t:'保存规则',msg:'等级规则已保存并生效'}]}, {type:'table',id:'lvllog',title:'等级变更记录',count:'近 30 天 386 条',clickable:true,cols:['时间','会员','变更类型','原等级','新等级','操作人','原因'], rows:[ ['2026-09-12 10:22','Cindy Liu','自动升级','白银会员','黄金会员','系统','累计消费达标'], ['2026-09-08 15:40','Tom Huang','自动升级','黄金会员','黑金会员','系统','累计消费达标'], ['2026-09-05 11:12','Jason Wu','手工调整','普通会员','白银会员','Ken(店长)','门店补偿:订单漏记'], ['2026-08-28 09:30','Daniel Kim','手工降级','白银会员','普通会员','系统管理员','异常刷单,奖励撤销']]} ]}, {id:'tags',name:'会员标签',view:()=>[ {type:'note',html:'标签用于精细化分层与定向营销,分为「口味偏好」「来源渠道」「消费行为」三类,支持自定义扩展。'}, {type:'table',id:'tag',title:'标签管理',count:'18 个标签',clickable:true,actions:[{t:'+ 新建标签',f:'tag'}], cols:['标签名称','标签分类','标签值示例','覆盖会员数','用途','操作'], rows:[ ['口味偏好','系统标签','微辣 / 不吃香菜 / 少冰','6,842','菜品推荐、活动定向',''], ['来源渠道','系统标签','到店店员引导 / 活动海报 / 老带新','12,486','渠道效果分析',''], ['高价值客户','行为标签','近 90 天消费 ≥ $500','1,860','专属权益、VIP 维护',''], ['午市常客','行为标签','工作日 11-15 点到店 ≥ 5 次','2,140','午市套餐定向',''], ['游客','自定义标签','旅行季到店客户','486','旅行季营销','']]} ]}, {id:'segment',name:'会员分层',view:()=>[ {type:'html',html:`

分层分布

${donutChart([{n:'新客(30 天内注册)',v:3820},{n:'活跃会员(30 天内有消费)',v:5240},{n:'高价值会员(RFM 高分)',v:1860},{n:'沉睡会员(31-90 天未到店)',v:1046},{n:'流失会员(90 天以上未到店)',v:520}])}

分层规则

🆕
新客注册 30 天内 · 尚未形成复购
3,820
🔥
活跃会员近 30 天有消费记录
5,240
💎
高价值会员RFM 综合得分 ≥ 4 分
1,860
💤
沉睡会员31-90 天未到店
1,046
📉
流失会员90 天以上未到店
520
分层每日 03:00 自动重算,可对任一分层一键发起定向营销。
`}, {type:'bars',title:'各分层客单价对比',sub:'近 90 天 · AUD',items:[ {n:'高价值会员',v:186,t:'$186.40'},{n:'活跃会员',v:104,t:'$104.20'},{n:'沉睡会员',v:92,t:'$92.10'}, {n:'新客',v:78,t:'$78.60'},{n:'流失会员',v:64,t:'$64.30'}],opt:{mono:true}}, {type:'table',id:'seg',title:'分层会员明细(示例:高价值会员)',count:'1,860 人',clickable:true, cols:['会员卡号','姓名','等级','近 90 天消费','到店次数','客单价','R 最近','F 频次','M 金额'], rows:[ ['MEL-2026-08701','Tom Huang',lvlTag('黑金会员'),'$1,860.00','14','$132.86','5','5','5'], ['MEL-2026-08790','Cindy Liu',lvlTag('黄金会员'),'$742.00','8','$92.75','4','4','4'], ['MEL-2026-08841','Emma Wang',lvlTag('黄金会员'),'$517.00','5','$103.40','4','4','3']]} ]}, {id:'churn',name:'流失预警',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'⚠️',bg:'#FEF5E4',label:'高风险会员',value:'48',color:'#96650A',sub:'超 2 倍复购周期未到店'}, {ic:'💤',bg:'#EAF1FE',label:'沉睡会员',value:'1,046',color:'#28527E'}, {ic:'📤',bg:'#F1EDFB',label:'本月已召回',value:'126',color:'#5A44A8'}, {ic:'✅',bg:'#E9F7F0',label:'召回成功率',value:'22.4%',color:'#1D7A51'}]}, {type:'table',id:'churn',title:'流失风险会员',count:'48 人',clickable:true, actions:[{t:'批量发送召回券',msg:'已向 48 位会员发放 $10 召回券'},{g:1,t:'导出名单',msg:'流失风险名单已导出'}], cols:['会员卡号','姓名','等级','平均复购周期','已静默天数','风险等级','历史消费','建议动作'], rows:[ ['MEL-2026-08655','Sophie Tan',lvlTag('白银会员'),'21 天','52 天','高','$318.00',''], ['MEL-2026-08601','Alex Chen',lvlTag('普通会员'),'28 天','63 天','高','$186.00',''], ['MEL-2026-08502','Daniel Kim',lvlTag('普通会员'),'35 天','74 天','中','$124.00',''], ['MEL-2026-08466','Grace Li',lvlTag('白银会员'),'24 天','48 天','中','$264.00','']]}, {type:'note',tone:'yellow',html:'预警逻辑:会员「已静默天数 ≥ 2 × 其历史平均复购周期」时自动进入预警名单,并推送至店长待办提醒。'} ]}, {id:'query',name:'查询与导出',view:()=>[ {type:'form',title:'高级组合检索',fields:[ {label:'会员卡号',ph:'模糊匹配'},{label:'手机号',ph:'支持后 4 位'}, {label:'邮箱',ph:'email@example.com'},{label:'会员等级',type:'select',options:['不限','普通会员','白银会员','黄金会员','黑金会员']}, {label:'注册时间起',type:'text',value:'2026-01-01'},{label:'注册时间止',type:'text',value:'2026-09-24'}, {label:'累计消费区间($)',value:'0 - 5000'},{label:'积分余额区间',value:'0 - 10000'}, {label:'来源渠道',type:'select',options:['不限','到店店员引导','活动海报','老带新邀请','小程序注册']}, {label:'会员标签',type:'select',options:['不限','高价值客户','午市常客','游客']}, {label:'会员分层',type:'select',options:['不限','新客','活跃会员','高价值会员','沉睡会员','流失会员']}, {label:'是否订阅营销',type:'select',options:['不限','已订阅','已退订']}], buttons:[{g:1,t:'重置',msg:'筛选条件已重置'},{t:'查询',msg:'共匹配到 386 位会员'}, {g:1,t:'导出 Excel',msg:'已导出为 Excel(386 条)'},{g:1,t:'导出脱敏名单',msg:'已导出脱敏名单(隐藏手机号)'}, {g:1,t:'存为人群包',msg:'已保存为人群包「午市高价值客户」'}]}, {type:'table',id:'q',title:'查询结果预览',count:'386 位',clickable:true,cols:['会员卡号','姓名','等级','累计消费','积分余额','分层','来源','注册时间'], rows:[ ['MEL-2026-08841','Emma Wang',lvlTag('黄金会员'),'$517.00','2,860',segTag('活跃'),'到店店员引导','2025-11-08'], ['MEL-2026-08790','Cindy Liu',lvlTag('黄金会员'),'$742.00','3,648',segTag('高价值'),'老带新邀请','2025-09-20'], ['MEL-2026-08701','Tom Huang',lvlTag('黑金会员'),'$1,860.00','8,460',segTag('高价值'),'到店店员引导','2025-06-12'], ['MEL-2026-08822','Jason Wu',lvlTag('白银会员'),'$286.50','1,086',segTag('活跃'),'活动海报','2026-02-18']]} ]}, {id:'offline',name:'线下转化登记',view:()=>[ {type:'note',tone:'green',html:'来源追踪闭环:店员引导、活动海报、桌贴二维码等线下渠道的新客登记后自动记录来源,可在「渠道追踪码」中查看各渠道转化效果。'}, {type:'form',title:'新客登记',fields:[ {label:'手机号',req:true,value:'0466 882 341'},{label:'姓名',value:'Rachel Green'}, {label:'登记门店',type:'select',options:['CBD 店','Southbank 店','Docklands 店','Box Hill 店'],req:true}, {label:'引导店员',type:'select',options:['Lisa','Ken','Amy'],req:true}, {label:'来源渠道',type:'select',options:['店员引导','桌贴二维码','活动海报','收银台立牌','外卖袋卡片'],req:true}, {label:'渠道追踪码',value:'CH-CBD-TABLE03',hint:'扫渠道码登记时自动带入'}, {label:'口味偏好',value:'不吃牛肉 / 喜欢甜口',wide:true}, {label:'备注',type:'textarea',rows:2,wide:true,value:'顾客为附近写字楼白领,工作日午市常来。'}], buttons:[{t:'提交登记并开通会员',msg:'登记成功,已生成会员卡号 MEL-2026-08842'},{g:1,t:'重置'}]}, {type:'table',id:'off',title:'今日线下登记记录',count:'9 条',clickable:true,cols:['登记时间','姓名','手机号','门店','来源渠道','追踪码','引导店员','状态'], rows:[ ['12:48','Rachel Green','0466 882 341','CBD 店','桌贴二维码','CH-CBD-TABLE03','Lisa','已开通会员'], ['12:20','Ryan Lee','0477 118 902','CBD 店','店员引导','—','Ken','已开通会员'], ['11:50','Olivia Ma','0411 552 003','Docklands 店','活动海报','CH-DOCK-POSTER01','Amy','待验证']]} ]} ]} ); MODULES.push( {id:'points',name:'积分管理',ic:'⭐',group:'权益管理',tabs:[ {id:'earn',name:'获取规则配置',view:()=>[ {type:'table',id:'pe',title:'积分获取规则',count:'6 条规则',clickable:true,actions:[{t:'+ 新增规则',f:'pointRule'}], cols:['规则名称','触发条件','积分值','等级加成','生效范围','状态','操作'], rows:[ ['消费返积分','每消费 $1','1 积分','黄金 ×1.5 / 黑金 ×2','全部门店','启用',''], ['老带新奖励','好友注册并完成首单','+300 积分','不叠加','线上','启用',''], ['新人注册礼','完成注册','+200 积分','不叠加','线上','启用',''], ['社交任务奖励','转发 / 探店笔记核销','+50 ~ +200','不叠加','线上','启用',''], ['生日双倍积分','生日当天消费','基础积分 ×2','可叠加','全部门店','启用',''], ['工作日午市加倍','工作日 11-15 点消费','基础积分 ×1.3','可叠加等级加成','CBD / Southbank','停用','']]}, {type:'form',title:'规则参数',fields:[ {label:'基础返积分比例',value:'$1 = 1 积分'}, {label:'积分发放时机',type:'select',options:['消费记录确认入库后即时发放','每日 24:00 批量发放','每周一统一发放']}, {label:'多规则叠加方式',type:'select',options:['等级加成与活动加成相乘','取最高值','加和']}, {label:'异常订单处理',type:'select',options:['退款订单自动扣回积分','退款不扣回(需人工处理)']}], buttons:[{t:'保存配置',msg:'积分获取规则已保存'}]} ]}, {id:'redeem',name:'抵扣规则配置',view:()=>[ {type:'form',title:'积分抵扣规则',fields:[ {label:'抵扣比例',req:true,value:'500 积分 = $10'}, {label:'单笔最高抵扣额度($)',req:true,value:'30'}, {label:'最低消费门槛($)',value:'20'}, {label:'可参与抵扣的菜品范围',type:'select',options:['指定菜品(12 道招牌菜)','全部菜品','排除酒水与特价套餐']}, {label:'抵扣时段',type:'select',options:['全时段','仅工作日午市 11:00-15:00','仅晚市 17:00 后']}, {label:'是否可与优惠券叠加',type:'select',options:['可与满减券叠加','不可叠加(二选一)']}], buttons:[{t:'保存配置',msg:'积分抵扣规则已保存'}]}, {type:'table',id:'pr',title:'可抵扣菜品配置',count:'12 道',clickable:true,actions:[{t:'+ 添加菜品',f:'pointDish'}], cols:['菜品名称','分类','单价','所需积分','单笔上限','状态'], rows:[ ['招牌黑椒和牛堡','主菜','$28.00','500','$10','启用'], ['香煎三文鱼沙拉','主菜','$26.00','500','$10','启用'], ['澳洲牛肉派','主菜','$18.00','375','$7.50','启用'], ['提拉米苏','甜点','$15.00','375','$7.50','停用'], ['精酿啤酒','酒水','$14.00','—','—','不可用']]} ]}, {id:'expire',name:'有效期规则',view:()=>[ {type:'form',title:'积分有效期规则',fields:[ {label:'积分有效期',type:'select',options:['自获取日起 12 个月','自获取日起 24 个月','当年度有效,次年 12 月 31 日清零','永久有效']}, {label:'到期提醒时点',type:'select',options:['到期前 30 天 / 7 天 / 3 天 分次提醒','仅到期前 7 天提醒','不提醒']}, {label:'到期清零方式',type:'select',options:['按批次先进先出清零','整账户一次性清零']}, {label:'是否允许到期续期',type:'select',options:['不允许','高价值会员可续期 6 个月']}], buttons:[{t:'保存规则',msg:'积分有效期规则已保存'}]}, {type:'table',id:'exp',title:'近期积分到期批次',count:'4 个批次',clickable:true,cols:['到期日','来源批次','涉及会员数','积分总量','提醒状态','紧急度'], rows:[ ['2026-09-30','2025-09 新人礼','312','62,400','已提醒','3 天内到期'], ['2026-10-31','2025-10 活动奖励','846','24,800','已提醒','7 天内到期'], ['2026-12-31','2025-12 消费返积分','2,486','86,400','已提醒','30 天内到期'], ['2027-03-31','2026-03 消费返积分','3,120','112,600','未到期','正常']]} ]}, {id:'account',name:'积分账户管理',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'⭐',bg:'#FEF5E4',label:'积分总存量',value:'4,286,400',color:'#96650A'}, {ic:'📈',bg:'#E9F7F0',label:'本月发放',value:'386,400',color:'#1D7A51',delta:'11.2%',trend:'up'}, {ic:'📉',bg:'#EAF1FE',label:'本月消耗',value:'214,800',delta:'8.4%',trend:'up'}, {ic:'⏳',bg:'#FDECEC',label:'30 天内到期',value:'111,200',color:'var(--red)'}]}, {type:'table',id:'pa',title:'会员积分账户',count:'12,486 个账户',clickable:true,actions:[{t:'批量调整',f:'pointAdjust'},{g:1,t:'导出',msg:'积分账户已导出'}], cols:['会员卡号','姓名','等级','积分余额','累计获取','累计消耗','30 天内到期','最近变动','操作'], rows:[ ['MEL-2026-08701','Tom Huang',lvlTag('黑金会员'),'8,460','21,600','13,140','380','09-17 消费 +372',''], ['MEL-2026-08841','Emma Wang',lvlTag('黄金会员'),'2,860','4,120','1,260','380','09-22 消费 +130',''], ['MEL-2026-08790','Cindy Liu',lvlTag('黄金会员'),'3,648','6,240','2,592','120','09-20 消费 +234',''], ['MEL-2026-08822','Jason Wu',lvlTag('白银会员'),'1,086','1,880','794','0','09-21 消费 +63','']]}, {type:'table',id:'padj',title:'积分调整审批',count:'2 笔待审批',clickable:true,cols:['申请时间','会员','调整值','调整原因','申请人','状态','操作'], rows:[ ['2026-09-23 16:20','Emma Wang','+500','订单漏记补偿','Lisa','待审批',''], ['2026-09-22 10:05','Daniel Kim','-1,200','异常刷单撤销奖励','系统管理员','待审批','']]}, {type:'note',tone:'yellow',html:'合规要求:所有手工调整积分的操作必须填写原因并经管理员二次审批,全程留痕可追溯。'} ]}, {id:'pflow',name:'积分流水',view:()=>[ {type:'html',html:`
至
`}, {type:'table',id:'pf',title:'积分流水明细',count:'共 12,684 条',clickable:true,cols:['时间','会员','变动类型','变动值','变动后余额','关联订单','备注'], rows:[ ['09-22 12:41','Emma Wang','消费返积分','+130','2,860','SO-…0081','$86.50 × 1.5 倍'], ['09-20 19:30','Cindy Liu','消费返积分','+234','3,648','SO-…0078','$156.00 × 1.5 倍'], ['09-18 19:20','Emma Wang','消费返积分','+186','2,730','SO-…0070','$124.00 × 1.5 倍'], ['09-15 09:02','Emma Wang','老带新奖励','+300','2,544','—','好友 Cindy 完成首单'], ['09-12 20:10','Emma Wang','积分抵扣','-500','2,244','SO-…0055','招牌黑椒和牛堡抵 $10'], ['09-05 11:30','Emma Wang','社交任务','+50','2,744','—','小红书内容转发核销']], foot:'共 12,684 条 · 每页 50 条'} ]}, {id:'pos',name:'核销结果记录',view:()=>[ {type:'note',tone:'blue',html:'说明:积分抵扣与优惠券核销均在门店 POS 端完成,本系统仅记录核销结果用于对账与统计,不参与支付流程。'}, {type:'table',id:'pos',title:'积分核销结果',count:'本月 4,326 笔',clickable:true, actions:[{t:'导出对账单',msg:'对账单已导出'},{g:1,t:'手工登记 POS 结果',f:'posRecord'}], cols:['核销时间','会员','门店','核销积分','抵扣金额','POS 单号','登记方式','状态'], rows:[ ['09-12 20:10','Emma Wang','CBD 店','-500','$10.00','POS-0920','店员补录','正常'], ['09-20 19:36','Cindy Liu','Southbank 店','-1,000','$20.00','POS-1032','店员补录','正常'], ['09-18 13:02','Jason Wu','CBD 店','-500','$10.00','POS-0988','店员补录','正常'], ['09-15 12:44','Tom Huang','CBD 店','-1,500','$30.00','POS-0945','店员补录','重复核销疑似']]} ]} ]}, {id:'coupons',name:'优惠券管理',ic:'🎫',group:'权益管理',tabs:[ {id:'tpl',name:'券模板创建',view:()=>[ {type:'table',id:'ct',title:'券模板库',count:'8 个模板',clickable:true,actions:[{t:'+ 新建券模板',f:'couponTpl'}], cols:['模板名称','券类型','面额 / 折扣','使用门槛','有效期','适用范围','状态','操作'], rows:[ ['新人礼 $10 券','满减券','$10','满 $40 可用','领取后 30 天','全门店堂食','启用',''], ['满 $60 减 $15','满减券','$15','满 $60 可用','领取后 30 天','全门店堂食','启用',''], ['工作日午市 8.5 折','折扣券','8.5 折','无门槛','2026-10-15 前','工作日 11-15 点','启用',''], ['免费柠檬茶兑换券','兑换券','1 杯中杯','满 $30 可用','领取后 60 天','限柠檬茶单品','启用',''], ['满 $80 赠双人甜点','满赠券','双人甜点','满 $80 可用','活动期内有效','全门店','停用','']]}, ]}, {id:'rule',name:'券规则配置',view:()=>[ {type:'form',title:'券通用规则',fields:[ {label:'每人每种券限领张数',value:'1 张'}, {label:'单笔订单可用券数量',type:'select',options:['1 张','2 张(需指定叠加规则)']}, {label:'退款时券的处理',type:'select',options:['退回券(原有效期不变)','退回券并延长 15 天','不退回']}, {label:'过期前提醒',type:'select',options:['到期前 7 天 / 3 天 / 1 天 提醒','仅到期前 3 天提醒','不提醒']}, {label:'券码编码规则',value:'MEL{面额}-{日期}-{4 位随机}'}, {label:'可转让性',type:'select',options:['不可转让(绑定会员)','可转赠好友']}], buttons:[{t:'保存规则',msg:'券通用规则已保存'}]} ]}, {id:'issue',name:'券发放',view:()=>[ {type:'table',id:'ci',title:'发放任务',count:'6 个任务',clickable:true,actions:[{t:'+ 新建发放任务',f:'couponTask'}], cols:['任务名称','券模板','发放方式','目标人群','发放数','领取数','核销数','状态','操作'], rows:[ ['双人午市套餐领券','满 $60 减 $15','活动页领取','全部会员','不限','5,240','2,186','进行中',''], ['新客首单礼','新人礼 $10 券','注册自动发放','新注册会员','不限','862','486','进行中',''], ['沉睡会员召回','满 $60 减 $15','批量定向发放','沉睡会员(1,046 人)','1,046','846','382','进行中',''], ['高价值会员回馈','免费柠檬茶兑换券','批量定向发放','高价值会员(1,860 人)','1,860','1,684','1,024','进行中',''], ['中秋限定券','中秋限定 满 $50 减 $12','活动页 + 定向','全部会员','不限','2,486','0','未开始',''], ['母亲节满赠','满 $80 赠双人甜点','活动页领取','全部会员','不限','486','214','已结束','']]}, ]}, {id:'records',name:'核销记录',view:()=>[ {type:'html',html:`
`}, {type:'table',id:'cr',title:'券核销明细',count:'共 5,432 条',clickable:true,cols:['核销时间','会员','券名称','券码','门店','订单金额','核销结果','登记人'], rows:[ ['09-22 12:41','Emma Wang','满 $60 减 $15','MEL15-0826-4102','CBD 店','$86.50','核销成功','Lisa'], ['09-18 19:20','Emma Wang','工作日午市 8.5 折','MEL85-0715-2286','Southbank 店','$124.00','核销成功','Ken'], ['09-11 13:12','Emma Wang','满 $40 减 $8','MEL08-0612-3311','Docklands 店','$52.00','核销成功','Amy'], ['09-15 12:44','Tom Huang','满 $60 减 $15','MEL15-0826-8890','CBD 店','$46.00','异常:未达门槛','Lisa'], ['09-15 12:52','Tom Huang','满 $60 减 $15','MEL15-0826-8890','CBD 店','$62.00','异常:重复核销','Lisa'], ['09-20 13:22','Cindy Liu','免费柠檬茶兑换券','MEL05-0901-7788','Southbank 店','$72.00','核销成功','Ken']], foot:'共 5,432 条 · 异常 12 条'} ]}, {id:'stats',name:'券数据统计',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'📤',bg:'#EAF1FE',label:'累计发放',value:'12,480'}, {ic:'📥',bg:'#E9F7F0',label:'累计领取',value:'9,860',sub:'领取率 78.9%'}, {ic:'✅',bg:'#FFF1EA',label:'累计核销',value:'5,432',color:'var(--brand-deep)'}, {ic:'🎯',bg:'#FEF5E4',label:'整体核销率',value:'43.6%',color:'#96650A',sub:'高于行业均值 32%'}]}, {type:'html',html:`

各券种核销率对比

${barChart(['满减券','折扣券','兑换券','满赠券'],[52.4,41.2,38.6,29.8],{h:212,fmtV:v=>v+'%'})}

券生命周期转化漏斗

${hbars([{n:'券已发放',v:12480,t:'12,480'},{n:'会员已领取',v:9860,t:'9,860'},{n:'会员到店',v:6140,t:'6,140'},{n:'POS 核销成功',v:5432,t:'5,432'}],{mono:true})}
从领取到核销的主要流失点在「到店」环节,建议加强到期提醒与门店引导。
`}, {type:'table',id:'cs',title:'券效果明细',count:'8 个模板',clickable:true,cols:['券名称','发放量','领取量','核销量','核销率','带动订单金额','平均客单价','ROI'], rows:[ ['满 $60 减 $15','4,286','3,846','2,186','56.8%','$186,420','$85.28','4.6'], ['工作日午市 8.5 折','2,486','2,104','986','46.9%','$86,240','$87.46','3.4'], ['新人礼 $10 券','1,862','1,862','486','26.1%','$38,640','$79.51','1.9'], ['免费柠檬茶兑换券','1,860','1,684','1,024','60.8%','$94,320','$92.11','3.2'], ['满 $80 赠双人甜点','486','486','214','44.0%','$58,320','$272.52','5.8']]} ]} ]}, {id:'campaigns',name:'营销活动管理',ic:'🎁',group:'营销增长',tabs:[ {id:'deals',name:'特价套餐活动',view:()=>[ {type:'table',id:'cd',title:'特价套餐活动',count:'3 个活动',clickable:true,actions:[{t:'+ 创建特价套餐',f:'combo'}], cols:['活动名称','原价','活动价','包含内容','活动时间','适用门店','参与人数','带动营收','状态'], rows:[ ['双人午市套餐 $49','$78','$49','主菜 2 份 + 饮品 2 杯','09-01 ~ 10-31','全部 4 家门店','1,286','$62,014','进行中'], ['周末家庭分享餐 $88','$138','$88','主菜 4 份 + 甜点 2 份','07-01 ~ 08-31','全部 4 家门店','902','$79,376','已结束'], ['单人工作日午餐 $19','$28','$19','主菜 1 份 + 饮品 1 杯','09-15 ~ 12-31','CBD / Southbank','646','$21,724','进行中']]}, ]}, {id:'gift',name:'满赠活动',view:()=>[ {type:'table',id:'cg',title:'满赠活动',count:'2 个活动',clickable:true,actions:[{t:'+ 创建满赠活动',f:'gift'}], cols:['活动名称','满额门槛','赠品','活动时间','适用门店','参与人数','带动营收','状态'], rows:[ ['满 $120 赠招牌甜点','$120','双人甜点拼盘','09-15 ~ 10-20','CBD / Docklands','486','$58,320','进行中'], ['母亲节满赠康乃馨','$88','康乃馨 1 支 + 甜点','05-10 ~ 05-12','CBD 店','214','$21,400','已结束']]}, ]}, {id:'pointuse',name:'积分抵扣活动',view:()=>[ {type:'table',id:'cp',title:'积分抵扣活动',count:'2 个活动',clickable:true,actions:[{t:'+ 创建抵扣活动',f:'pointAct'}], cols:['活动名称','指定菜品 / 范围','抵扣比例','单笔上限','活动时段','适用门店','参与人次','状态'], rows:[ ['招牌菜 500 积分抵 $10','12 道招牌菜','500 积分 = $10','$30','全时段','全部 4 家门店','1,024','进行中'], ['午市积分双倍抵','工作日午市套餐','500 积分 = $15','$30','工作日 11-15 点','CBD / Southbank','386','未开始']]}, ]}, {id:'status',name:'活动上下架',view:()=>[ {type:'table',id:'cs2',title:'活动状态总览',count:'8 个活动',clickable:true, actions:[{t:'批量上架',msg:'已上架 2 个活动'},{g:1,t:'批量下架',msg:'已下架 1 个活动'}], cols:['活动名称','活动类型','开始时间','结束时间','参与人数','带动营收','状态','操作'], rows:[ ['双人午市套餐 $49','特价套餐','2026-09-01','2026-10-31','1,286','$62,014','进行中',''], ['满 $120 赠招牌甜点','满赠活动','2026-09-15','2026-10-20','486','$58,320','进行中',''], ['招牌菜 500 积分抵 $10','积分抵扣','2026-09-01','2026-12-31','1,024','—','进行中',''], ['邀请好友各得 300 积分','老带新','长期','长期','318','—','进行中',''], ['午市积分双倍抵','积分抵扣','2026-10-01','2026-10-31','0','—','未开始',''], ['中秋满 $100 赠月饼','满赠活动','2026-09-20','2026-10-06','0','—','草稿',''], ['周末家庭分享餐 $88','特价套餐','2026-07-01','2026-08-31','902','$79,376','已结束','']]}, {type:'note',html:'活动下架后用户端小程序将立即隐藏该活动入口,但已领取的券仍可在有效期内使用。'} ]}, {id:'channel',name:'渠道追踪码',view:()=>[ {type:'note',tone:'green',html:'线下核销追踪闭环:为每个渠道 / 海报生成专属二维码,新客扫码注册时自动写入来源标签,可在下方查看各渠道的拉新与转化效果。'}, {type:'table',id:'ch',title:'渠道追踪码',count:'6 个渠道',clickable:true,actions:[{t:'+ 生成追踪码',f:'channelCode'}], cols:['渠道码','渠道名称','落地页面','扫码次数','注册数','转化率','首单率','关联营收'], rows:[ ['CH-CBD-TABLE03','CBD 店桌贴 03','注册页 + 新人礼','1,286','486','37.8%','62.4%','$38,640'], ['CH-DOCK-POSTER01','Docklands 活动海报','注册页 + 双人套餐','946','312','33.0%','58.2%','$24,180'], ['CH-CBD-COUNTER','CBD 收银台立牌','注册页','862','286','33.2%','54.6%','$21,420'], ['CH-FOODBAG','外卖袋卡片','注册页 + 配送券','1,240','386','31.1%','41.2%','$18,860'], ['CH-SB-STAFF','Southbank 店员引导','店员引导登记','1,620','742','45.8%','72.4%','$62,140'], ['CH-BH-LOBBY','Box Hill 商场灯箱','注册页','486','124','25.5%','38.6%','$8,240']]}, {type:'bars',title:'各渠道拉新量对比',items:[ {n:'店员引导',v:742},{n:'桌贴二维码',v:486},{n:'外卖袋卡片',v:386},{n:'活动海报',v:312}, {n:'收银台立牌',v:286},{n:'商场灯箱',v:124}]} ]}, {id:'fission',name:'裂变任务配置',view:()=>[ {type:'table',id:'cf',title:'裂变任务',count:'4 个任务',clickable:true,actions:[{t:'+ 新建裂变任务',f:'fission'}], cols:['任务名称','任务类型','奖励规则','参与人数','完成人数','完成率','状态','操作'], rows:[ ['邀请好友注册','老带新','邀请人 +100,被邀请人得新人礼','3,860','2,486','64.4%','进行中',''], ['好友首单奖励','老带新','双方各 +300 积分','2,486','1,684','67.7%','进行中',''], ['分享小程序给好友','社交互动','+20 积分','5,240','3,486','66.5%','进行中',''], ['小红书探店笔记','社交互动','发布并核销 +150 积分','1,286','486','37.8%','进行中',''], ['Google Review 五星好评','社交互动','核销后 +200 积分','2,140','1,024','47.9%','进行中','']]}, ]} ]} ); MODULES.push( {id:'messaging',name:'消息触达管理',ic:'📣',group:'营销增长',tabs:[ {id:'inapp',name:'站内信推送',view:()=>[ {type:'note',html:'站内消息在小程序 / H5「消息」页展示,适合承载活动通知、积分变动、券到期提醒等。'}, {type:'form',title:'新建站内信推送',fields:[ {label:'消息标题',req:true,value:'中秋限定菜单开放预订'}, {label:'消息类型',type:'select',options:['活动通知','积分变动','券到期提醒','会员权益','系统消息'],req:true}, {label:'推送人群',type:'select',options:['全部会员','新客','活跃会员','高价值会员','沉睡会员','流失会员','自定义人群包'],req:true}, {label:'预计触达',value:'12,486 人',hint:'按当前人群包实时估算'}, {label:'跳转页面',type:'select',options:['活动详情页','优惠券卡包','会员中心','自定义链接']}, {label:'推送时间',type:'select',options:['立即推送','定时推送','用户活跃时段推送']}, {label:'消息内容',type:'textarea',rows:3,wide:true,value:'9 月 25 日起供应中秋限定菜单,会员可提前 2 天预订并享 9 折优惠,点击查看详情。'}], buttons:[{t:'立即推送',msg:'站内信已推送,预计触达 12,486 位会员'},{g:1,t:'定时推送'},{g:1,t:'存为草稿'}]}, {type:'table',id:'im',title:'站内信发送记录',count:'近 30 天 18 条',clickable:true,cols:['发送时间','标题','类型','目标人群','触达人数','已读人数','已读率','点击率'], rows:[ ['09-24 10:00','双人午市套餐上线啦','活动通知','全部会员','12,486','8,426','67.5%','21.4%'], ['09-23 09:30','积分到账提醒','积分变动','近 7 天消费会员','4,286','3,864','90.2%','32.6%'], ['09-20 11:00','2 张券将在 7 天内到期','券到期提醒','有即将到期券会员','2,486','2,140','86.1%','42.8%'], ['09-12 18:00','您已升级为黄金会员','会员权益','本月升级会员','386','342','88.6%','28.4%']]} ]}, {id:'sms',name:'短信/邮件群发',view:()=>[ {type:'note',tone:'yellow',html:'合规提示:按澳洲反垃圾信息法规(Spam Act 2003),营销类短信 / 邮件必须获得用户明确同意,且每条消息须包含发送方标识与一键退订入口。系统已自动过滤已退订用户。'}, {type:'form',title:'新建短信 / 邮件群发',fields:[ {label:'渠道',type:'select',options:['短信','邮件','短信 + 邮件'],req:true}, {label:'发送主题',req:true,value:'中秋限定菜单,会员专享 9 折'}, {label:'目标人群',type:'select',options:['已订阅营销的会员(8,426 人)','高价值会员','沉睡会员','流失会员'],req:true}, {label:'预计触达',value:'8,426 人(已自动排除 4,060 位未订阅 / 已退订用户)'}, {label:'发送时间',type:'select',options:['立即发送','定时发送','发送时间区间']}, {label:'消息模板',type:'select',options:['活动推广模板 A','券到期提醒模板','积分变动模板','自定义']}, {label:'消息正文',type:'textarea',rows:4,wide:true,value:'【Melbourne Dining Club】中秋限定菜单已上线,会员提前预订享 9 折。点击查看菜单 >> 退订回复 TD'}], buttons:[{t:'提交发送',msg:'已提交发送,预计 5 分钟内完成'},{g:1,t:'发送测试',msg:'测试消息已发送至 0412 *** 128'},{g:1,t:'存为草稿'}]}, {type:'kpi',cols:4,items:[ {ic:'✉️',bg:'#EAF1FE',label:'本月已发送',value:'24,860'}, {ic:'📬',bg:'#E9F7F0',label:'到达率',value:'98.6%',color:'#1D7A51'}, {ic:'👀',bg:'#FEF5E4',label:'打开率',value:'32.4%',color:'#96650A'}, {ic:'🚫',bg:'#FDECEC',label:'退订人数',value:'86',color:'var(--red)'}]} ]}, {id:'tpl',name:'消息模板',view:()=>[ {type:'table',id:'mt',title:'消息模板库',count:'12 个模板',clickable:true,actions:[{t:'+ 新建模板',f:'msgTpl'}], cols:['模板名称','模板类型','适用场景','变量占位符','使用次数','状态','操作'], rows:[ ['活动推广模板 A','短信模板','新活动上线通知','{会员姓名} {活动名称} {活动时间}','86','启用',''], ['券到期提醒模板','短信模板','优惠券到期提醒','{会员姓名} {券名称} {到期日}','124','启用',''], ['积分变动模板','短信模板','积分为账通知','{会员姓名} {变动值} {余额}','386','启用',''], ['月度消费账单','邮件模板','每月消费总结','{会员姓名} {月份} {消费额} {积分}','3','启用',''], ['生日祝福模板','站内信模板','会员生日祝福','{会员姓名} {生日券}','12','启用',''], ['沉睡会员召回模板','短信模板','流失召回','{会员姓名} {召回券} {有效期}','48','启用','']]} ]}, {id:'logs',name:'触达记录',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'📤',bg:'#EAF1FE',label:'本月触达总量',value:'38,286'}, {ic:'✅',bg:'#E9F7F0',label:'成功送达',value:'37,750',color:'#1D7A51'}, {ic:'❌',bg:'#FDECEC',label:'发送失败',value:'536',color:'var(--red)'}, {ic:'🚫',bg:'#F1EDFB',label:'退订累计',value:'486'}]}, {type:'table',id:'ml',title:'触达明细',count:'共 38,286 条',clickable:true,actions:[{g:1,t:'导出记录',msg:'触达记录已导出'}], cols:['发送时间','渠道','标题 / 主题','目标人群','触达人数','送达率','打开率','退订数','状态'], rows:[ ['09-24 10:00','站内信','双人午市套餐上线啦','全部会员','12,486','100%','67.5%','0','已完成'], ['09-23 09:30','短信','积分到账提醒','近 7 天消费会员','4,286','98.2%','—','3','已完成'], ['09-20 11:00','短信 + 邮件','2 张券将在 7 天内到期','有即将到期券会员','2,486','97.6%','42.8%','6','已完成'], ['09-18 14:00','邮件','9 月会员月报','全部已订阅会员','8,426','99.1%','28.4%','12','已完成'], ['09-16 16:20','短信','沉睡会员召回','沉睡会员','1,046','96.4%','—','24','已完成'], ['09-15 10:00','短信','中秋活动预告','全部会员','12,486','94.2%','—','41','部分失败']]} ]}, {id:'social',name:'社交媒体发布',view:()=>[ {type:'note',blue:'',html:'管理门店在公域平台(Instagram / 小红书 / Facebook / Google Business)的内容发布与效果回流,与社交互动任务打通。'}, {type:'table',id:'so',title:'内容发布计划',count:'8 条内容',clickable:true,actions:[{t:'+ 新建发布计划',f:'socialPost'}], cols:['标题','平台','内容类型','关联活动','发布时间','状态','互动量','带来的注册数'], rows:[ ['双人午市套餐探店笔记','小红书','图文笔记','双人午市套餐 $49','09-22 10:00','已发布','4,286','186'], ['秋季新品 Reel 短视频','Instagram','短视频','秋季限定菜单','09-20 18:00','已发布','8,642','248'], ['中秋限定菜单预告','Facebook','图文帖','中秋满 $100 赠月饼','09-19 12:00','已发布','1,286','62'], ['CBD 店探店视频','小红书','短视频','—','09-15 19:00','已发布','6,420','214'], ['会员日预告','Instagram Story','快拍','会员日双倍积分','09-25 09:00','待发布','—','—'], ['客户好评合集','Google Business','图文帖','—','09-26 11:00','草稿','—','—']]}, {type:'bars',title:'各平台拉新效果对比',sub:'近 30 天 · 带来注册数',items:[ {n:'Instagram',v:462},{n:'小红书',v:400},{n:'Facebook',v:186},{n:'Google Business',v:96}]} ]} ]}, {id:'portrait',name:'客户画像分析',ic:'🧭',group:'数据分析',tabs:[ {id:'freq',name:'点单频次分析',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🔁',bg:'#FFF1EA',label:'人均到店频次',value:'3.8 次',color:'var(--brand-deep)',sub:'近 90 天'}, {ic:'📅',bg:'#EAF1FE',label:'平均复购周期',value:'21 天'}, {ic:'🔥',bg:'#FEF5E4',label:'高频会员占比',value:'22.4%',color:'#96650A',sub:'月到店 ≥ 3 次'}, {ic:'🆕',bg:'#E9F7F0',label:'一次到店会员占比',value:'22.9%',color:'#1D7A51'}]}, {type:'chart',title:'会员到店频次分布',sub:'近 90 天 · 人',kind:'bar',labels:SERIES.freq.labels,data:SERIES.freq.data, desc:'到店 1 次的会员占比 22.9%,是二次转化营销的重点人群;到店 5 次以上会员贡献了 41% 的营收。'}, {type:'html',html:`

复购周期分布

${hbarPct([{n:'7 天内复购',v:18.6},{n:'8-15 天',v:26.4},{n:'16-30 天',v:31.2},{n:'31-60 天',v:16.4},{n:'60 天以上',v:7.4}])}

频次 × 客单价交叉分析

到店频次会员人数平均客单价人均年贡献
1 次2,860$78.60$78.60
2 次2,420$86.40$172.80
3-4 次3,180$94.20$329.70
5-8 次2,260$108.60$706.00
9-12 次1,180$124.80$1,310.40
12 次以上586$142.40$2,278.40
`} ]}, {id:'aov',name:'客单价分析',view:()=>[ {type:'chart',title:'会员客单价分布',sub:'近 90 天',kind:'bar',labels:['$0-30','$30-60','$60-90','$90-120','$120-200','$200+'], data:[1260,2860,3420,2260,1680,1006],desc:'客单价集中在 $60-90 区间(27.4%),$120 以上高客单会员 2,686 人,是重点维护对象。'}, {type:'html',html:`

客单价趋势近 6 个月 · AUD

${lineChart(['4月','5月','6月','7月','8月','9月'],[{name:'会员客单价',color:C.o,data:[86.4,88.2,92.6,96.4,99.8,103.4]},{name:'非会员客单价',color:'#C9CED6',data:[72.6,74.2,76.8,78.4,79.6,81.2]}],{h:206,area:false})}

客单价提升驱动因素

${hbars([{n:'套餐组合购买',v:38.4,t:'+38.4%',color:C.o},{n:'积分抵扣叠加',v:22.6,t:'+22.6%',color:C.g},{n:'满赠活动拉动',v:18.2,t:'+18.2%',color:C.b},{n:'会员等级权益',v:12.4,t:'+12.4%',color:C.p}])}
套餐组合购买是客单价提升的最强驱动,建议持续丰富套餐结构。
`}, {type:'table',id:'aov',title:'各等级客单价对比',count:'4 个等级',clickable:true,cols:['会员等级','会员数','平均客单价','平均消费频次','人均年贡献','客单价环比'], rows:[ ['黑金会员','1,860','$142.40','11.2 次','$2,278.40','↑ 6.4%'], ['黄金会员','2,480','$103.40','6.4 次','$1,072.60','↑ 4.8%'], ['白银会员','4,326','$86.20','3.8 次','$426.40','↑ 3.2%'], ['普通会员','3,820','$72.60','2.1 次','$186.20','↓ 1.4%']]} ]}, {id:'retention',name:'复购与流失分析',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🔁',bg:'#E9F7F0',label:'整体复购率',value:'38.6%',color:'#1D7A51',delta:'2.8%',trend:'up'}, {ic:'📉',bg:'#FDECEC',label:'流失率',value:'11.4%',color:'var(--red)',delta:'1.2%',trend:'down'}, {ic:'📅',bg:'#EAF1FE',label:'平均会员生命周期',value:'142 天'}, {ic:'💎',bg:'#F1EDFB',label:'高价值会员留存率',value:'76.4%',color:'#5A44A8'}]}, {type:'chart',title:'会员留存曲线',sub:'按注册后月数 · %',kind:'line', labels:['M0','M1','M2','M3','M4','M5','M6','M7','M8','M9'], series:[{name:'留存率',color:C.o,data:[100,62.4,48.6,41.2,36.8,34.2,32.6,31.4,30.6,29.8]}], desc:'注册后第 1 个月是流失高发期(流失 37.6%),建议在注册后 7 天内完成首次消费引导。'}, {type:'html',html:`

各分层复购率对比

${hbarPct([{n:'高价值会员',v:82.4},{n:'活跃会员',v:64.8},{n:'新客',v:26.4},{n:'沉睡会员',v:18.6},{n:'流失会员',v:4.2}])}

流失原因分布(抽样问卷 386 份)

${donutChart([{n:'搬到其他区域',v:124},{n:'菜品口味变化',v:96},{n:'价格偏高',v:82},{n:'服务体验一般',v:48},{n:'其他',v:36}],{center:'386',centerSub:'样本量'})}
`} ]}, {id:'taste',name:'消费偏好分析',view:()=>[ {type:'html',html:`

菜品偏好 TOP 8按会员点单次数

${hbars([{n:'招牌黑椒和牛堡',v:4286},{n:'香煎三文鱼沙拉',v:3864},{n:'澳洲牛肉派',v:3246},{n:'冰美式',v:2986},{n:'双人午市套餐',v:2686},{n:'提拉米苏',v:2140},{n:'烤羊排',v:1864},{n:'南瓜浓汤',v:1620}])}

套餐 vs 单点占比

${donutChart([{n:'特价套餐',v:3860},{n:'单点菜品',v:6420},{n:'饮品独立加购',v:2206}],{center:'12,486',centerSub:'订单占比样本'})}
套餐订单占比 30.9%,但贡献了 42.6% 的营收,套餐渗透率仍有提升空间。
`}, {type:'html',html:`

口味偏好标签分布

${hbars([{n:'微辣 / 中辣',v:3426},{n:'少冰 / 去冰',v:2864},{n:'不吃香菜',v:2140},{n:'偏甜口',v:1686},{n:'不吃海鲜',v:1240},{n:'素食倾向',v:680}],{mono:true})}

分类消费结构

${hbarPct([{n:'主菜',v:42.6},{n:'饮品',v:22.4},{n:'甜点',v:14.8},{n:'小食',v:12.6},{n:'酒水',v:7.6}])}
`}, {type:'table',id:'taste',title:'菜品复购排行',count:'TOP 20',clickable:true,cols:['菜品名称','分类','单价','点单次数','复购会员数','复购率','毛利率'], rows:[ ['招牌黑椒和牛堡','主菜','$28.00','4,286','2,140','49.9%','62.4%'], ['香煎三文鱼沙拉','主菜','$26.00','3,864','1,986','51.4%','58.6%'], ['澳洲牛肉派','主菜','$18.00','3,246','1,624','50.0%','64.2%'], ['冰美式','饮品','$8.00','2,986','1,864','62.4%','78.4%'], ['双人午市套餐','套餐','$49.00','2,686','1,286','47.9%','54.2%']]} ]}, {id:'time',name:'消费时段分析',view:()=>[ {type:'chart',title:'会员消费时段分布',sub:'按半小时聚合 · 订单量',kind:'bar',labels:SERIES.hour.labels,data:SERIES.hour.data, desc:'午市高峰 12:00-13:00,晚市高峰 18:00-19:30。16:00-17:00 为明显低谷,可考虑推出下午茶时段活动。', opt:{colors:[C.g,C.o,C.o,C.g,C.g,C.o,C.o,C.o,C.g]}}, {type:'html',html:`

午市 vs 晚市对比

时段订单数营收平均客单价会员占比
午市 11:00-15:001,140$86,420$75.8142.6%
晚市 17:00-22:002,140$248,640$116.1938.4%
下午茶 14:00-17:00160$8,640$54.0026.8%
晚市客单价是午市的 1.53 倍,但会员占比略低,建议加强晚市会员转化。

各时段会员转化率

${hbarPct([{n:'午市',v:42.6},{n:'晚市',v:38.4},{n:'下午茶',v:26.8},{n:'夜宵',v:18.4}])}
下午茶与夜宵时段会员转化率偏低,可尝试在该时段推送专属券。
`} ]}, {id:'leveldiff',name:'等级消费差异',view:()=>[ {type:'html',html:`

各等级会员数 vs 营收贡献

${barChart(['普通会员','白银会员','黄金会员','黑金会员'],[3820,4326,2480,1860],{h:206,colors:[C.b,C.b,C.g,C.o]})}
人数—— 营收贡献占比:14.9% / 24.6% / 28.4% / 32.1%

营收贡献结构

${donutChart([{n:'黑金会员',v:32.1,t:'32.1%'},{n:'黄金会员',v:28.4,t:'28.4%'},{n:'白银会员',v:24.6,t:'24.6%'},{n:'普通会员',v:14.9,t:'14.9%'}],{center:'100%',centerSub:'营收贡献'})}
黑金会员仅占 14.9% 人数,却贡献 32.1% 营收,是核心资产。
`}, {type:'table',id:'ld',title:'等级消费能力对比',count:'4 个等级',clickable:true,cols:['会员等级','会员数','人数占比','累计消费总额','营收贡献占比','平均客单价','人均到店次数','积分倍数'], rows:[ ['黑金会员','1,860','14.9%','$1,086,420','32.1%','$142.40','11.2','2.0 倍'], ['黄金会员','2,480','19.9%','$962,640','28.4%','$103.40','6.4','1.5 倍'], ['白银会员','4,326','34.6%','$834,260','24.6%','$86.20','3.8','1.2 倍'], ['普通会员','3,820','30.6%','$504,860','14.9%','$72.60','2.1','1.0 倍']]} ]}, {id:'rfm',name:'高价值客户识别',view:()=>[ {type:'note',tone:'green',html:'RFM 模型:R(最近一次消费时间)、F(消费频次)、M(消费金额)三维各按 1-5 分打分,综合得分 ≥ 12 分判定为高价值客户。'}, {type:'html',html:`

RFM 分值分布

${hbarPct([{n:'15 分(顶尖)',v:6.4},{n:'12-14 分(高价值)',v:8.5},{n:'8-11 分(中价值)',v:32.6},{n:'4-7 分(低价值)',v:36.4},{n:'1-3 分(待激活)',v:16.1}])}

RFM 八分群

${donutChart([{n:'重要保持客户',v:1860},{n:'重要发展客户',v:1240},{n:'重要挽留客户',v:986},{n:'一般保持客户',v:2140},{n:'一般发展客户',v:2860},{n:'一般挽留客户',v:1680},{n:'低价值客户',v:1720}],{center:'12,486',centerSub:'会员总数'})}
`}, {type:'table',id:'rfm',title:'高价值客户名单',count:'1,860 人',clickable:true, actions:[{t:'批量发送专属权益',msg:'已向 1,860 位高价值会员发送专属权益'},{g:1,t:'导出名单',msg:'高价值客户名单已导出'}], cols:['会员卡号','姓名','等级','R 最近消费','F 消费频次','M 消费金额','RFM 得分','客户分群','建议动作'], rows:[ ['MEL-2026-08701','Tom Huang',lvlTag('黑金会员'),'2 天前','14 次','$1,860.00','5-5-5 = 15','重要保持客户',''], ['MEL-2026-08790','Cindy Liu',lvlTag('黄金会员'),'4 天前','8 次','$742.00','4-4-4 = 12','重要保持客户',''], ['MEL-2026-08841','Emma Wang',lvlTag('黄金会员'),'2 天前','5 次','$517.00','4-4-3 = 11','重要发展客户',''], ['MEL-2026-08655','Sophie Tan',lvlTag('白银会员'),'52 天前','4 次','$318.00','1-3-3 = 7','重要挽留客户','']]} ]} ]}, {id:'marketing',name:'营销效果分析',ic:'📈',group:'数据分析',tabs:[ {id:'join',name:'活动参与分析',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🎯',bg:'#FFF1EA',label:'活动参与人次',value:'6,842',color:'var(--brand-deep)',delta:'14.2%',trend:'up'}, {ic:'👥',bg:'#EAF1FE',label:'活动参与率',value:'34.6%',delta:'4.8%',trend:'up'}, {ic:'🔂',bg:'#E9F7F0',label:'人均参与活动数',value:'2.4 个',color:'#1D7A51'}, {ic:'📈',bg:'#FEF5E4',label:'活动带动新客',value:'1,286',color:'#96650A'}]}, {type:'html',html:`

各活动参与人数对比

${hbarPct([{n:'双人午市套餐',v:82.4},{n:'招牌菜积分抵扣',v:65.6},{n:'满 $120 赠甜点',v:31.1},{n:'老带新邀请',v:20.4},{n:'社交互动任务',v:43.8}])}
数值为「参与人数 / 目标人群」参与率。

活动参与人数趋势近 6 个月

${lineChart(['4月','5月','6月','7月','8月','9月'],[{name:'参与人次',color:C.o,data:[3860,4286,5140,6240,6680,6842]}],{h:206})}
`}, {type:'table',id:'aj',title:'活动参与明细',count:'8 个活动',clickable:true,cols:['活动名称','活动类型','目标人群','参与人数','参与率','完成转化','转化率','带动营收'], rows:[ ['双人午市套餐 $49','特价套餐','全部会员','1,286','10.3%','1,286','100%','$62,014'], ['招牌菜 500 积分抵 $10','积分抵扣','全部会员','1,024','8.2%','1,024','100%','—'], ['满 $120 赠招牌甜点','满赠活动','全部会员','486','3.9%','486','100%','$58,320'], ['邀请好友各得 300 积分','老带新','全部会员','318','2.5%','186','58.5%','—'], ['社交互动任务','社交裂变','全部会员','686','5.5%','486','70.8%','—']]} ]}, {id:'cpn',name:'券效果分析',view:()=>[ {type:'chart',title:'券领取率 vs 核销率',sub:'各券模板对比 · %',kind:'bar',labels:['满 $60 减 $15','午市 8.5 折','新人礼 $10','柠檬茶兑换','满 $80 赠甜点'], data:[89.7,84.6,100,90.5,100],opt:{fmtV:v=>v+'%'},desc:'新人礼券领取率 100%(注册自动发放),但核销率仅 26.1%,需在注册后 7 天内强化提醒。'}, {type:'html',html:`

券核销率对比

${hbarPct([{n:'柠檬茶兑换券',v:60.8},{n:'满 $60 减 $15',v:56.8},{n:'午市 8.5 折',v:46.9},{n:'满 $80 赠甜点',v:44.0},{n:'新人礼 $10 券',v:26.1}])}

券带动营收

${hbarPct([{n:'满 $60 减 $15',v:186420,t:'$186,420'},{n:'柠檬茶兑换券',v:94320,t:'$94,320'},{n:'午市 8.5 折',v:86240,t:'$86,240'},{n:'满 $80 赠甜点',v:58320,t:'$58,320'},{n:'新人礼 $10 券',v:38640,t:'$38,640'}])}
`}, {type:'table',id:'cpn',title:'券效果明细',count:'8 个模板',clickable:true,cols:['券名称','发放量','领取率','核销量','核销率','带动营收','券成本','ROI','结论'], rows:[ ['满 $60 减 $15','4,286','89.7%','2,186','56.8%','$186,420','$32,790','4.6','高效'], ['免费柠檬茶兑换券','1,860','90.5%','1,024','60.8%','$94,320','$9,216','3.2','高效'], ['工作日午市 8.5 折','2,486','84.6%','986','46.9%','$86,240','$12,936','3.4','高效'], ['满 $80 赠双人甜点','486','100%','214','44.0%','$58,320','$5,564','5.8','高效'], ['新人礼 $10 券','1,862','100%','486','26.1%','$38,640','$4,860','1.9','待优化']]} ]}, {id:'fis',name:'裂变效果分析',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🎉',bg:'#F1EDFB',label:'裂变带来的新会员',value:'1,286',color:'#5A44A8'}, {ic:'📊',bg:'#EAF1FE',label:'裂变占新增比',value:'34.6%'}, {ic:'🤝',bg:'#E9F7F0',label:'平均邀请人数',value:'2.4 人',color:'#1D7A51'}, {ic:'💸',bg:'#FEF5E4',label:'裂变获客成本',value:'$8.60',color:'#96650A',sub:'对比其他渠道 $18.40'}]}, {type:'html',html:`

裂变层级分布

${hbars([{n:'一级邀请',v:1286},{n:'二级邀请',v:486},{n:'三级及以上',v:186}])}

裂变渠道来源占比

${donutChart([{n:'微信好友分享',v:642},{n:'朋友圈海报',v:386},{n:'小红书内容',v:186},{n:'群二维码',v:72}],{center:'1,286',centerSub:'裂变新会员'})}
`}, {type:'table',id:'fis',title:'裂变任务效果',count:'4 个任务',clickable:true,cols:['任务名称','参与人数','完成人数','完成率','带来新会员','发放积分','发放券数','获客成本'], rows:[ ['邀请好友注册','3,860','2,486','64.4%','1,286','248,600','—','$8.60'], ['好友首单奖励','2,486','1,684','67.7%','1,684','1,010,400','—','$12.40'], ['分享小程序给好友','5,240','3,486','66.5%','—','69,720','—','—'], ['小红书探店笔记','1,286','486','37.8%','386','72,900','—','$6.20'], ['Google Review 五星好评','2,140','1,024','47.9%','248','204,800','—','$9.80']]} ]}, {id:'revenue',name:'活动收益评估',view:()=>[ {type:'html',html:`

活动带来增量营收近 6 个月 · AUD

${barChart(['4月','5月','6月','7月','8月','9月'],[38260,46120,62480,79860,86240,94860],{h:210,colors:[C.g,C.g,C.o,C.o,C.o,C.o]})}

ROI 对比

${hbarPct([{n:'满赠活动',v:580,t:'5.8'},{n:'特价套餐',v:460,t:'4.6'},{n:'积分抵扣',v:340,t:'3.4'},{n:'优惠券',v:320,t:'3.2'},{n:'裂变任务',v:220,t:'2.2'}])}
ROI = 活动带来增量营收 / 活动成本(含券成本、赠品成本、积分成本)。
`}, {type:'table',id:'rev',title:'活动收益明细',count:'8 个活动',clickable:true,cols:['活动名称','活动类型','活动成本','带动营收','增量营收','ROI','会员新增','状态'], rows:[ ['满 $120 赠招牌甜点','满赠活动','$10,056','$58,320','$48,264','5.8','486','进行中'], ['双人午市套餐 $49','特价套餐','$13,482','$62,014','$48,532','4.6','1,286','进行中'], ['招牌菜积分抵扣','积分抵扣','$8,426','$42,624','$34,198','3.4','1,024','进行中'], ['券发放组合','优惠券','$65,366','$274,640','$209,274','3.2','2,486','进行中'], ['裂变任务','裂变','$16,240','$51,860','$35,620','2.2','1,286','进行中'], ['母亲节满赠','满赠活动','$3,640','$21,400','$17,760','4.9','214','已结束']]} ]}, {id:'pst',name:'积分发放消耗',view:()=>[ {type:'chart',title:'积分发放与消耗趋势',sub:'近 7 天 · 分值',kind:'line',labels:SERIES.sales7.labels, series:[{name:'发放',color:C.o,data:[12400,13860,16420,14260,16840,18260,19420]}, {name:'消耗',color:C.b,data:[6820,7640,9860,7240,8460,10240,11680]}], desc:'积分发放持续高于消耗,存量不断累积(当前 4,286,400 分),需关注到期清零带来的用户体验影响。'}, {type:'html',html:`

积分来源结构

${donutChart([{n:'消费返积分',v:286400},{n:'老带新奖励',v:48600},{n:'社交任务',v:24600},{n:'活动奖励',v:18600},{n:'手工调整',v:6200}],{center:'386,400',centerSub:'本月发放'})}

积分消耗去向

${donutChart([{n:'积分抵扣消费',v:186400},{n:'积分兑换券',v:18600},{n:'过期清零',v:9800}],{center:'214,800',centerSub:'本月消耗'})}
`}, {type:'table',id:'pst',title:'积分发放消耗汇总',count:'近 6 个月',clickable:true,cols:['月份','发放积分','消耗积分','净增','存量','发放环比','消耗环比','核销率'], rows:[ ['2026-09','386,400','214,800','+171,600','4,286,400','↑ 11.2%','↑ 8.4%','55.6%'], ['2026-08','347,200','198,200','+149,000','4,114,800','↑ 8.6%','↑ 6.2%','57.1%'], ['2026-07','319,600','186,600','+133,000','3,965,800','↑ 6.4%','↑ 4.8%','58.4%'], ['2026-06','300,400','178,000','+122,400','3,832,800','↑ 4.2%','↑ 3.6%','59.3%'], ['2026-05','288,200','171,800','+116,400','3,710,400','↑ 2.8%','↓ 1.2%','59.6%'], ['2026-04','280,400','173,800','+106,600','3,594,000','—','—','62.0%']]} ]}, {id:'channel',name:'渠道转化对比',view:()=>[ {type:'note',blue:'',html:'对比短信、邮件、社交平台、站内信四类触达渠道的新客获取、转化率与获客成本,用于优化渠道投放预算。'}, {type:'html',html:`

各渠道带来新会员数

${barChart(['站内信','短信','邮件','社交平台','线下物料'],[1286,986,486,862,2140],{h:210,colors:[C.o,C.o,C.g,C.b,C.gn]})}

各渠道转化率

${hbarPct([{n:'线下店员引导',v:45.8},{n:'站内信',v:12.4},{n:'社交平台',v:9.6},{n:'短信',v:6.8},{n:'邮件',v:3.2}])}
`}, {type:'table',id:'ch2',title:'渠道效果对比',count:'5 个渠道',clickable:true,cols:['渠道','触达人数','带来注册','转化率','带来首单','首单转化率','获客成本','带动营收','ROI'], rows:[ ['线下店员引导','6,420','2,140','33.3%','1,486','69.4%','$6.20','$148,620','12.4'], ['站内信','38,286','1,286','3.4%','862','67.0%','$1.40','$86,240','9.6'], ['社交平台','24,860','862','3.5%','486','56.4%','$12.80','$48,640','4.2'], ['短信','18,640','986','5.3%','642','65.1%','$18.40','$64,260','3.1'], ['邮件','12,480','486','3.9%','286','58.8%','$8.60','$28,640','2.4']]} ]} ]} ); function hbarPct(items){ const max=Math.max.apply(null,items.map(i=>i.v))||1; return items.map((it,i)=>`
${it.n} ${it.t||(it.v+'%')}
`).join(''); } MODULES.push( {id:'storebiz',name:'门店经营分析',ic:'🏪',group:'数据分析',tabs:[ {id:'share',name:'会员消费占比',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'💰',bg:'#FFF1EA',label:'门店总营收',value:'$446,420',color:'var(--brand-deep)'}, {ic:'👥',bg:'#E9F7F0',label:'会员消费营收',value:'$186,420',color:'#1D7A51'}, {ic:'📊',bg:'#EAF1FE',label:'会员消费占比',value:'41.8%',delta:'10.6%',trend:'up',cmp:'较月初'}, {ic:'🎯',bg:'#FEF5E4',label:'目标占比',value:'50.0%',color:'#96650A',sub:'达成 83.6%'}]}, {type:'chart',title:'会员 vs 非会员消费趋势',sub:'近 7 天 · 单位 $',kind:'line',labels:SERIES.sales7.labels,series:SERIES.sales7.series, desc:'会员消费占比稳步提升,从月初 31.2% 升至 41.8%,距 50% 目标仍有 8.2 个百分点空间。'}, {type:'html',html:`

各门店会员消费占比

${hbarPct([{n:'CBD 店',v:48.6},{n:'Southbank 店',v:42.4},{n:'Docklands 店',v:38.2},{n:'Box Hill 店',v:34.8}])}
CBD 店店员引导转化最强,其经验(桌贴 + 收银台话术)建议向其他门店复制。

营收结构

${donutChart([{n:'会员消费',v:186420,t:'$186,420'},{n:'非会员消费',v:260000,t:'$260,000'}],{center:'41.8%',centerSub:'会员占比'})}
`} ]}, {id:'hour',name:'分时段经营统计',view:()=>[ {type:'chart',title:'分时段客流与会员消费',sub:'订单量',kind:'bar',labels:SERIES.hour.labels,data:SERIES.hour.data, opt:{colors:[C.g,C.o,C.o,C.g,C.g,C.o,C.o,C.o,C.g]}, desc:'12:00-13:00 与 18:00-19:30 为双高峰,会员消费占比分别为 42.6% 与 38.4%。'}, {type:'table',id:'hour',title:'各门店分时段统计',count:'4 家门店',clickable:true, cols:['门店','午市订单','午市营收','晚市订单','晚市营收','最高峰时段','会员占比','平均翻台率'], rows:[ ['CBD 店','640','$48,620','1,020','$124,860','18:30-19:30','48.6%','2.8'], ['Southbank 店','420','$32,140','640','$78,240','19:00-20:00','42.4%','2.4'], ['Docklands 店','380','$28,640','486','$58,420','18:00-19:00','38.2%','2.1'], ['Box Hill 店','320','$24,860','420','$52,140','18:30-19:30','34.8%','1.9']]} ]}, {id:'pointscpn',name:'积分券使用概况',view:()=>[ {type:'html',html:`

各门店积分使用

${hbars([{n:'CBD 店',v:1860,t:'1,860 次'},{n:'Southbank 店',v:1240,t:'1,240 次'},{n:'Docklands 店',v:862,t:'862 次'},{n:'Box Hill 店',v:364,t:'364 次'}])}

各门店券使用

${hbars([{n:'CBD 店',v:2486,t:'2,486 张'},{n:'Southbank 店',v:1420,t:'1,420 张'},{n:'Docklands 店',v:986,t:'986 张'},{n:'Box Hill 店',v:540,t:'540 张'}])}
`}, {type:'table',id:'pc',title:'门店积分券使用汇总',count:'4 家门店',clickable:true,actions:[{t:'导出汇总表',msg:'积分券使用汇总已导出'}], cols:['门店','积分核销次数','抵扣金额','券核销张数','券优惠金额','合计让利','带动营收','让利率'], rows:[ ['CBD 店','1,860','$37,200','2,486','$32,790','$69,990','$186,420','27.4%'], ['Southbank 店','1,240','$24,800','1,420','$18,640','$43,440','$124,860','25.8%'], ['Docklands 店','862','$17,240','986','$12,860','$30,100','$86,420','25.8%'], ['Box Hill 店','364','$7,280','540','$6,240','$13,520','$48,720','21.7%']]} ]}, {id:'export',name:'报表导出',view:()=>[ {type:'table',id:'rp',title:'可导出报表',count:'12 类报表',clickable:true,cols:['报表名称','报表类型','数据维度','更新频率','最近导出','操作'], rows:[ ['会员经营总览报表','经营类','全门店 / 按日','每日 06:00','2026-09-23',''], ['会员消费明细报表','消费类','按门店 / 按会员','实时','2026-09-24',''], ['积分发放消耗报表','权益类','按门店 / 按日','每日 06:00','2026-09-22',''], ['优惠券核销报表','权益类','按券模板 / 按门店','每日 06:00','2026-09-23',''], ['活动效果报表','营销类','按活动 / 按人群','每日 06:00','2026-09-21',''], ['客户画像分析报表','分析类','按分层 / 按 RFM','每周一','2026-09-16',''], ['录单绩效报表','管理类','按店员 / 按门店','每日 06:00','2026-09-23',''], ['小票识别质量报表','管理类','按门店 / 按店员','每日 06:00','2026-09-20','']]}, {type:'form',title:'自定义报表导出',fields:[ {label:'报表类型',type:'select',options:['会员经营总览','会员消费明细','积分发放消耗','优惠券核销','活动效果','客户画像','录单绩效','小票识别质量']}, {label:'数据维度',type:'select',options:['按门店','按会员等级','按客户分层','按活动','按店员','按渠道']}, {label:'时间范围',value:'2026-09-01 ~ 2026-09-24'}, {label:'导出格式',type:'select',options:['Excel (.xlsx)','CSV','PDF']}, {label:'是否包含手机号等敏感字段',type:'select',options:['脱敏导出(推荐)','完整导出(需管理员权限)']}, {label:'接收邮箱',value:'ken.zhang@melbdining.com.au'}], buttons:[{t:'生成并发送报表',msg:'报表已生成,已发送至指定邮箱'},{g:1,t:'预览'}]} ]}, {id:'advice',name:'策略优化建议',view:()=>[ {type:'note',tone:'green',html:'以下建议由系统基于近 90 天数据自动生成,可作为运营决策参考,实际执行请结合门店情况判断。'}, {type:'list',title:'高优先级建议',sub:'预计影响最大',items:[ {ic:'🎯',bg:'#FFF1EA',t:'强化注册后 7 天内的首单引导',d:'注册后首月流失率高达 37.6%。建议在注册后第 2 天推送「$10 无门槛券 + 剩余 5 天到期」提醒,目标将首单转化率从 54.6% 提升至 68%。',r:'预计 +$42,600/月'}, {ic:'🌙',bg:'#EAF1FE',t:'提升晚市会员转化率',d:'晚市客单价 $116.19,是午市的 1.53 倍,但会员占比仅 38.4%。建议晚市增加店员引导话术与桌贴物料,目标占比提升至 45%。',r:'预计 +$28,400/月'}, {ic:'🍰',bg:'#F2F3F5',t:'填补 14:00-17:00 下午茶空档',d:'下午茶时段订单量仅占 4.2%,会员转化率 26.8%。建议推出 $12.9 下午茶套餐 + 双倍积分,激活写字楼客群。',r:'预计 +$12,800/月'}, {ic:'📤',bg:'#E9F7F0',t:'加强沉睡会员召回',d:'沉睡会员 1,046 人,本月召回成功率 22.4%。建议对 31-60 天未到店会员发放「限 7 天」高门槛券,提升紧迫感。',r:'预计 +$8,600/月'}]}, {type:'list',title:'中优先级建议',sub:'体验与效率优化',items:[ {ic:'🧾',bg:'#F1EDFB',t:'提升小票识别质量',d:'Box Hill 店小票识别置信度 88.2%,低于全店均值 94.2%。建议统一小票打印制式并培训店员拍摄角度。',r:'效率'}, {ic:'🎫',bg:'#FEF5E4',t:'优化新人券核销率',d:'新人礼券核销率仅 26.1%,但满减券整体核销率 56.8%。建议将新人礼从「满 $40 减 $10」调整为「满 $25 减 $8」降低门槛。',r:'转化'}, {ic:'💎',bg:'#F1EDFB',t:'黑金会员专属运营',d:'黑金会员仅占 14.9% 人数却贡献 32.1% 营收,建议增加专属客服与季度回访机制,目标留存率从 76.4% 提升至 82%。',r:'留存'}, {ic:'⭐',bg:'#FEF5E4',t:'控制积分存量增速',d:'积分发放持续高于消耗,存量已达 428 万。建议增加积分兑换权益(如兑换免费菜品)提升消耗率。',r:'健康度'}]}, {type:'table',id:'adv',title:'建议执行跟踪',count:'8 条建议',clickable:true,cols:['建议','优先级','负责人','状态','预期收益','创建时间','截止时间'], rows:[ ['强化注册后 7 天首单引导','高','市场营销部','执行中','+$42,600/月','2026-09-18','2026-10-15'], ['提升晚市会员转化率','高','CBD 店 · Ken','执行中','+$28,400/月','2026-09-18','2026-10-31'], ['下午茶套餐活动策划','中','市场营销部','待开始','+$12,800/月','2026-09-20','2026-11-15'], ['沉睡会员限时召回','中','运营组','已完成','+$8,600/月','2026-09-10','2026-09-22']]} ]} ]}, {id:'stores',name:'门店与员工管理',ic:'🧑‍🍳',group:'系统与组织',tabs:[ {id:'shop',name:'门店档案',view:()=>[ {type:'table',id:'st',title:'门店档案',count:'4 家门店',clickable:true,actions:[{t:'+ 新增门店',f:'store'}], cols:['门店编号','门店名称','地址','营业时间','联系电话','店员数','会员数','本月营收','状态','操作'], rows:[ ['ST-001','CBD 店','258 Collins St, Melbourne VIC 3000','11:00-22:00','+61 3 9600 1208','8','4,286','$173,480','营业中',''], ['ST-002','Southbank 店','12 Riverside Quay, Southbank VIC 3006','11:00-22:30','+61 3 9600 3426','6','3,426','$110,380','营业中',''], ['ST-003','Docklands 店','88 Harbour Esp, Docklands VIC 3008','10:30-21:30','+61 3 9600 6688','5','2,486','$86,420','营业中',''], ['ST-004','Box Hill 店','17 Market St, Box Hill VIC 3128','10:00-21:00','+61 3 9890 1268','4','2,288','$72,860','筹备中','']]}, {type:'form',title:'门店信息维护',fields:[ {label:'门店名称',req:true,value:'CBD 店'}, {label:'门店编号',value:'ST-001'}, {label:'门店地址',req:true,value:'258 Collins St, Melbourne VIC 3000',wide:true}, {label:'营业时间',value:'11:00-22:00'}, {label:'联系电话',value:'+61 3 9600 1208'}, {label:'门店半径(米)',value:'500',hint:'用于「附近门店」与到店核销判定'}, {label:'门店经纬度',value:'-37.8163, 144.9652'}, {label:'是否参与活动',type:'select',options:['参与全部活动','仅参与指定活动','不参与活动']}], buttons:[{t:'保存门店信息',msg:'门店信息已保存'}]} ]}, {id:'staff',name:'店员账号',view:()=>[ {type:'table',id:'sf',title:'店员账号',count:'23 个账号',clickable:true,actions:[{t:'+ 新增店员',f:'staff'}], cols:['工号','姓名','所属门店','角色','手机号','本月录单数','状态','最近登录','操作'], rows:[ ['1002','Lisa','CBD 店','店员','0412 886 201','386','正常','2026-09-24 12:40',''], ['1003','Ken','CBD 店','店长','0412 886 202','248','正常','2026-09-24 12:12',''], ['1005','Amy','Docklands 店','店员','0412 886 205','214','正常','2026-09-24 11:52',''], ['1008','Kevin','Southbank 店','店员','0412 886 208','186','待激活','—',''], ['1012','Rachel','CBD 店','市场专员','0412 886 212','0','正常','2026-09-24 09:20',''], ['1015','Ivan','Box Hill 店','店员','0412 886 215','86','已停用','2026-08-30 18:20','']]}, ]}, {id:'role',name:'角色权限',view:()=>[ {type:'note',html:'按角色配置数据权限范围与功能操作权限,遵循最小权限原则。'}, {type:'table',id:'ro',title:'角色权限配置',count:'5 个角色',clickable:true,actions:[{t:'+ 新增角色',f:'role'}], cols:['角色','成员数','数据权限范围','会员管理','积分调整','优惠券管理','活动管理','数据分析','系统设置'], rows:[ ['系统管理员','2','全部门店','读写','读写 + 审批','读写','读写','读写','读写'], ['店长','4','本门店','读写','申请 + 审批','读写','只读','读写','无权限'], ['店员','12','仅本人录单','只读','无权限','只读','只读','无权限','无权限'], ['市场专员','3','全部门店','只读','无权限','读写','读写','读写','无权限'], ['财务','2','全部门店','只读','只读','只读','只读','读写','无权限']]}, {type:'form',title:'角色权限明细(示例:店长)',fields:[ {label:'可查看会员列表',type:'select',options:['仅本门店','本门店 + 下属门店','全部门店']}, {label:'可导出会员名单',type:'select',options:['不可导出','可导出脱敏名单','可导出完整名单']}, {label:'可手工调整积分',type:'select',options:['不可调整','可申请(需管理员审批)','可直接调整并留痕']}, {label:'可查看手机号等敏感信息',type:'select',options:['不可查看(脱敏)','可查看后 4 位','可查看完整手机号']}, {label:'可操作活动上下架',type:'select',options:['不可操作','可操作本门店活动','可操作全部活动']}, {label:'可查看营收数据',type:'select',options:['不可查看','仅本门店','全部门店']}], buttons:[{t:'保存权限配置',msg:'权限配置已保存'}]} ]}, {id:'perf',name:'录单绩效',view:()=>[ {type:'kpi',cols:4,items:[ {ic:'🧾',bg:'#FFF1EA',label:'本月录单总数',value:'2,486',color:'var(--brand-deep)',delta:'12.4%',trend:'up'}, {ic:'🏆',bg:'#FEF5E4',label:'录单冠军',value:'Lisa',color:'#96650A',sub:'386 单'}, {ic:'🎯',bg:'#E9F7F0',label:'平均识别准确率',value:'94.2%',color:'#1D7A51'}, {ic:'👥',bg:'#EAF1FE',label:'引导注册转化率',value:'33.3%',delta:'4.6%',trend:'up'}]}, {type:'chart',title:'各店员录单量对比',sub:'本月 · 单',kind:'bar',labels:['Lisa','Ken','Amy','Kevin','Ivan','其他'], data:[386,248,214,186,86,164],desc:'Lisa 引导注册转化率 45.8%,为全店最高,建议其经验推广至其他店员。'}, {type:'table',id:'pf2',title:'店员录单绩效明细',count:'23 名店员',clickable:true, cols:['工号','姓名','门店','双录单数','小票识别单数','合计录单','识别准确率','引导注册数','注册转化率','平均单笔金额'], rows:[ ['1002','Lisa','CBD 店','142','244','386','96.4%','286','45.8%','$92.40'], ['1003','Ken','CBD 店','96','152','248','95.2%','142','32.6%','$88.60'], ['1005','Amy','Docklands 店','86','128','214','92.8%','96','28.4%','$78.20'], ['1008','Kevin','Southbank 店','64','122','186','94.6%','86','30.2%','$82.60'], ['1015','Ivan','Box Hill 店','32','54','86','88.2%','24','18.6%','$68.40']]} ]}, {id:'logs',name:'操作日志',view:()=>[ {type:'html',html:`
至
`}, {type:'table',id:'lg',title:'关键操作留痕',count:'共 8,642 条',clickable:true,cols:['时间','操作人','角色','操作类型','操作对象','变更内容','IP 地址','结果'], rows:[ ['2026-09-24 12:42','Lisa','店员','消费记录核对','SO-20260924-0081','核对通过,触发 +130 积分','203.12.86.42','成功'], ['2026-09-24 12:12','Ken','店长','消费记录录入','SO-20260924-0080','双录提交,金额 $42.00','203.12.86.40','成功'], ['2026-09-23 16:20','Lisa','店员','积分调整','MEL-2026-08841','提交 +500 积分申请(待审批)','203.12.86.42','待审批'], ['2026-09-23 15:40','系统管理员','管理员','积分调整审批','MEL-2026-08502','批准 -1,200 积分(异常刷单撤销)','203.12.86.10','成功'], ['2026-09-22 18:20','Rachel','市场专员','活动上下架','双人午市套餐 $49','上架活动,有效期至 10-31','203.12.86.66','成功'], ['2026-09-22 10:05','系统管理员','管理员','权限变更','角色「店长」','开启「导出会员名单」权限','203.12.86.10','成功'], ['2026-09-21 09:12','Kevin','店员','登录','—','账号登录成功','203.12.86.51','成功'], ['2026-09-20 22:30','Ivan','店员','登录','—','账号已停用,登录被拒绝','203.12.86.88','失败']]}, {type:'note',tone:'yellow',html:'留痕要求:会员数据修改、积分调整、活动上下架、权限变更等关键操作全部留痕,日志保存 3 年,不可删除。'} ]} ]}, {id:'settings',name:'系统管理',ic:'⚙️',group:'系统与组织',tabs:[ {id:'dual',name:'小程序/H5 双端配置',view:()=>[ {type:'note',green:'',html:'双端一致:小程序与 H5 共用同一套页面与业务逻辑,仅登录方式与分享能力存在差异,配置一次双端同步生效。'}, {type:'table',id:'dual',title:'双端页面配置',count:'12 个页面',clickable:true,cols:['页面','路径','小程序','H5','是否需登录','入口位置','排序','状态'], rows:[ ['首页','/pages/home','启用','启用','是','底部导航 1','1','正常'], ['营销活动','/pages/activity','启用','启用','否','底部导航 2','2','正常'], ['消息中心','/pages/message','启用','启用','是','底部导航 3','3','正常'], ['我的','/pages/profile','启用','启用','是','底部导航 4','4','正常'], ['会员身份码','/pages/member-code','启用','启用','是','首页 / 我的','—','正常'], ['我的积分','/pages/points','启用','启用','是','我的','—','正常'], ['我的优惠券','/pages/coupons','启用','启用','是','首页 / 我的','—','正常'], ['老带新邀请','/pages/invite','启用','受限','是','我的','—','H5 分享能力受限']]}, {type:'form',title:'双端入口与品牌配置',fields:[ {label:'小程序名称',value:'墨尔本餐饮会员'}, {label:'H5 站点名称',value:'Melbourne Dining Club'}, {label:'H5 访问域名',value:'member.melbdining.com.au'}, {label:'品牌主色',value:'#F2622E'}, {label:'小程序 AppID',value:'wx8f2a1b6c9d0e3f4a'}, {label:'默认登录方式',type:'select',options:['手机号验证码','微信授权','邮箱验证码']}, {label:'客服联系方式',value:'+61 3 9600 1208'}, {label:'登录页欢迎语',type:'textarea',rows:2,wide:true,value:'注册即享新人礼:$10 无门槛券 + 200 积分,消费再返积分。'}], buttons:[{t:'保存配置',msg:'双端配置已保存并同步生效'},{g:1,t:'生成小程序码',msg:'小程序码已生成,可下载使用'}]} ]}, {id:'dish',name:'菜品档案',view:()=>[ {type:'note',blue:'',html:'菜品档案用于小票识别时的菜品名称匹配与核对,建议与门店 POS 菜品名保持一致以提高识别准确率。'}, {type:'table',id:'ds',title:'菜品档案库',count:'86 道菜品',clickable:true,actions:[{t:'+ 新增菜品',f:'dish'},{g:1,t:'批量导入',f:'dishImport'}], cols:['菜品编码','菜品名称','分类','单价','POS 别名','是否参与积分抵扣','是否参与活动','状态','操作'], rows:[ ['D-001','招牌黑椒和牛堡','主菜','$28.00','Wagyu Burger','是','是','启用',''], ['D-002','香煎三文鱼沙拉','主菜','$26.00','Salmon Salad','是','是','启用',''], ['D-003','澳洲牛肉派','主菜','$18.00','Aussie Pie','是','是','启用',''], ['D-021','冰美式','饮品','$8.00','Iced Latte / Iced Americano','否','是','启用',''], ['D-045','提拉米苏','甜点','$15.00','Tiramisu','否','是','停用',''], ['D-062','双人午市套餐','套餐','$49.00','Lunch Set for 2','否','是','启用','']]}, {type:'form',title:'菜品编辑(示例:D-001 招牌黑椒和牛堡)',sub:'点击「+ 新增菜品」可打开新增表单',fields:[ {label:'菜品编码',req:true,value:'D-001'}, {label:'菜品名称',req:true,value:'招牌黑椒和牛堡'}, {label:'菜品分类',type:'select',options:['主菜','饮品','甜点','小食','酒水','套餐'],req:true}, {label:'单价($)',req:true,value:'28.00'}, {label:'POS 别名(用于小票识别匹配)',value:'Wagyu Burger',wide:true,hint:'多个别名用 | 分隔,如:Wagyu Burger | 和牛堡'}, {label:'是否参与积分抵扣',type:'select',options:['是','否']}, {label:'是否参与营销活动',type:'select',options:['是','否']}, {label:'毛利率(%)',value:'62.4'}], buttons:[{t:'保存菜品',msg:'菜品已保存'}]} ]}, {id:'openapi',name:'支付接口预留',view:()=>[ {type:'note',tone:'yellow',html:'扩展位预留:当前版本会员系统不参与支付,积分与券核销均记录 POS 端结果。线上支付接口按需开发,接口已预留,接通后可用于会员卡充值、线上点单支付等场景。'}, {type:'table',id:'api',title:'预置接口清单',count:'6 个接口',clickable:true,cols:['接口名称','接口用途','协议','预留状态','依赖方','预计工作量','备注'], rows:[ ['会员卡余额充值','为会员卡充值,支持线下扫码充值','HTTPS / REST','已预留','支付网关','5 人日','需接入 Stripe / 微信支付海外版'], ['线上点单支付','小程序内直接点单并支付','HTTPS / REST','已预留','支付网关 + POS','12 人日','需 POS 商家侧提供订单同步方案'], ['会员卡消费扣款','会员卡余额直接扣款','HTTPS / REST','未启用','POS 系统','8 人日','POS 不开放接口,暂不可行'], ['订单状态回调','支付结果异步通知','Webhook','已预留','支付网关','2 人日',''], ['退款处理','线上支付订单退款','HTTPS / REST','已预留','支付网关','4 人日',''], ['对账单下载','按日下载支付对账单','HTTPS / REST','未启用','支付网关','3 人日','']]}, {type:'list',title:'接入前提',items:[ {ic:'🔑',bg:'#FEF5E4',t:'支付通道资质',d:'需以商家主体申请海外支付通道(如 Stripe、Adyen 或微信支付海外版)'}, {ic:'🔒',bg:'#EAF1FE',t:'PCI DSS 合规',d:'涉及卡信息处理需满足 PCI DSS 要求,建议使用托管收银台规避'}, {ic:'🧾',bg:'#E9F7F0',t:'澳洲税务合规',d:'需支持 GST 计算与 Tax Invoice 开具'}, {ic:'🔗',bg:'#F1EDFB',t:'POS 数据回传',d:'线上订单仍需通过双录 / 小票方式回流至会员体系'}]} ]}, {id:'online',name:'线上售卖预留',view:()=>[ {type:'note',tone:'yellow',html:'扩展位预留:纯线上商品售卖模块(如礼盒、代金券、储值卡)已预留页面入口与数据结构,按需开发上线。'}, {type:'table',id:'ol',title:'线上商品预留清单',count:'4 类商品',clickable:true,cols:['商品类型','商品示例','售卖形式','库存管理','发货方式','预留状态','预计工作量'], rows:[ ['实体礼盒','中秋月饼礼盒 / 节日伴手礼','小程序商城下单','需开发','门店自提 / 邮寄','已预留','15 人日'], ['电子代金券','$100 储值券 / 双人套餐券','线上购买,到店核销','需开发','电子券码','已预留','10 人日'], ['会员储值卡','充 $200 送 $30','线上充值','需开发','绑定会员账户','已预留','12 人日'], ['线上预约订座','周末包间预订','小程序预约','需开发','到店核销','未启用','18 人日']]} ]}, {id:'dict',name:'数据字典参数',view:()=>[ {type:'table',id:'dd',title:'业务数据字典',count:'12 类字典',clickable:true,actions:[{t:'+ 新增字典',f:'dict'}], cols:['字典编码','字典名称','字典项','字典项数量','是否可编辑','使用场景','操作'], rows:[ ['member_level','会员等级','普通会员 / 白银会员 / 黄金会员 / 黑金会员','4','不可编辑','等级体系',''], ['member_segment','会员分层','新客 / 活跃会员 / 高价值会员 / 沉睡会员 / 流失会员','5','可编辑','分层运营',''], ['source_channel','来源渠道','到店店员引导 / 活动海报 / 老带新邀请 / 小程序注册 / 桌贴二维码','5','可编辑','渠道分析',''], ['coupon_type','券类型','满减券 / 折扣券 / 兑换券 / 满赠券','4','不可编辑','优惠券',''], ['campaign_type','活动类型','特价套餐 / 满赠活动 / 积分抵扣 / 老带新 / 社交裂变','5','不可编辑','营销活动',''], ['point_change_type','积分变动类型','消费返积分 / 活动奖励 / 老带新 / 社交任务 / 积分抵扣 / 过期清零 / 手工调整','7','不可编辑','积分流水',''], ['taste_tag','口味偏好标签','微辣 / 中辣 / 少冰 / 无香菜 / 偏甜 / 不吃海鲜 / 素食','自定义','可编辑','个性化推荐',''], ['staff_role','员工角色','店员 / 店长 / 市场专员 / 财务 / 系统管理员','5','不可编辑','权限管理','']]}, {type:'form',title:'系统参数配置',fields:[ {label:'积分过期提前提醒天数',value:'30 / 7 / 3'}, {label:'优惠券过期提前提醒天数',value:'7 / 3 / 1'}, {label:'会员沉默判定天数(沉睡)',value:'31'}, {label:'会员流失判定天数',value:'90'}, {label:'RFM 高价值判定分数线',value:'12'}, {label:'小票识别置信度阈值',value:'85%',hint:'低于该阈值自动标记为「需人工确认」'}, {label:'单店单日录单量上限',value:'500',hint:'超过上限触发异常预警'}, {label:'数据保留期限(年)',value:'3'}], buttons:[{t:'保存系统参数',msg:'系统参数已保存'}]} ]} ]} ); /* ===================== 新增表单(抽屉式新增页) ===================== */ const EXTRA_ROWS={}; // 表格 id -> 通过「新增表单」新增的行 const HL={}; // 表格 id -> {i:新增行序号, t:时间戳} 用于高亮新行 function tableRows(b){ return (b.rows||[]).concat(EXTRA_ROWS[b.id]||[]); } function swToggle(el){ el.classList.toggle('on'); } function nowStr(){ const d=new Date(), p=n=>String(n).padStart(2,'0'); return d.getFullYear()+'-'+p(d.getMonth()+1)+'-'+p(d.getDate())+' '+p(d.getHours())+':'+p(d.getMinutes()); } function tagOf(s){ s=s||'无权限'; if(/读写/.test(s)) return ''+s+''; if(/只读/.test(s)) return ''+s+''; if(/无权限/.test(s)) return '无权限'; return ''+s+''; } const OPT={ store:['CBD 店','Southbank 店','Docklands 店','Box Hill 店'], storeAll:['全部 4 家门店','CBD 店','Southbank 店','Docklands 店'], staff:['Lisa(1002)','Ken(1003)','Amy(1005)','Kevin(1008)'], channel:['店员引导','桌贴二维码','活动海报','收银台立牌','外卖袋卡片','小程序注册','老带新邀请'], segment:['全部会员','新客','活跃会员','高价值会员','沉睡会员','流失会员','自定义人群包'], level:['普通会员','白银会员','黄金会员','黑金会员'] }; const FORM_REG={ /* ---------- 会员管理 ---------- */ member:{ic:'👥',title:'新增会员',sub:'后台代客开卡 · 手机号唯一校验,已存在将自动合并档案',tableId:'mem', saveMsg:'会员已创建,会员卡号 MEL-2026-08843 已生成', fields:[ {sep:'基础信息',d:'用于会员身份识别与账号登录'}, {k:'tel',label:'手机号',req:true,value:'0466 882 341',hint:'澳洲手机号格式,注册后即绑定为登录账号'}, {k:'name',label:'姓名',req:true,value:'Rachel Green'}, {label:'邮箱',ph:'name@example.com'}, {label:'性别',type:'select',options:['不愿透露','女','男']}, {label:'生日',type:'date',value:'1994-06-18',hint:'用于生日双倍积分与生日券发放'}, {label:'注册门店',type:'select',options:OPT.store,req:true}, {sep:'来源与归属',d:'用于渠道拉新效果归因'}, {k:'channel',label:'来源渠道',type:'select',options:OPT.channel,req:true}, {label:'引导店员',type:'select',options:OPT.staff,req:true}, {label:'渠道追踪码',value:'CH-CBD-TABLE03',hint:'扫渠道码登记时自动带入,可手工修改'}, {sep:'初始权益',d:'开卡一次性赠予,可在「积分账户管理」中追溯'}, {k:'level',label:'初始会员等级',type:'select',options:OPT.level}, {label:'赠送积分',value:'200'}, {label:'赠送优惠券',type:'select',options:['新人礼 $10 券','不赠送']}, {label:'口味偏好',ph:'不吃牛肉 / 少冰 / 偏甜',wide:true}, {label:'是否订阅营销',type:'switch',value:true,hint:'默认开启,用户可随时在「订阅设置」中退订'}, {label:'备注',type:'textarea',rows:2,wide:true,ph:'例如:附近写字楼白领,工作日午市常来'}], newRow:v=>['MEL-2026-08843',''+(v.name||'—')+'',v.tel||'—',lvlTag(v.level||'普通会员'),'$0.00','—','0',segTag('新客'),v.channel||'店员引导']}, level:{ic:'🏅',title:'新增会员等级',sub:'等级顺序按成长值门槛自动排序,直接影响积分倍数与专属权益',tableId:'lvl', saveMsg:'等级已创建,保存后立即生效', fields:[ {k:'name',label:'等级名称',req:true,value:'钻石会员'}, {label:'等级标识色',type:'select',options:['橙色(品牌主色)','蓝色','紫色','金色']}, {k:'growth',label:'成长值门槛',req:true,value:'8,500',hint:'累计有效消费 $1 = 1 成长值'}, {k:'rate',label:'积分倍数',req:true,value:'2.5 倍'}, {k:'benefit',label:'专属权益',type:'textarea',rows:2,wide:true,value:'专属客服 · 免排队 · 每月特价套餐 · 生日双倍积分'}, {label:'是否支持降级',type:'select',options:['不降级(推荐)','连续 2 个周期未达标则降级']}, {label:'自动升级',type:'switch',value:true,hint:'关闭后仅支持管理员手工调整'}, {label:'权益说明',type:'textarea',rows:2,wide:true,ph:'将展示在用户端「等级权益」页面'}], newRow:v=>[''+(v.name||'—')+'',v.growth||'—',v.rate||'—',(v.benefit||'—').split(' · ')[0],'0','0%','']}, tag:{ic:'🏷️',title:'新建会员标签',sub:'支持系统标签与自定义标签,用于精细化分层与定向营销',tableId:'tag', saveMsg:'标签已创建,等待下次分层计算后生效', fields:[ {k:'name',label:'标签名称',req:true,value:'晚市常客'}, {k:'cat',label:'标签分类',type:'select',options:['自定义标签','行为标签','系统标签','口味偏好','来源渠道'],req:true}, {k:'vals',label:'标签值(多个用 / 分隔)',wide:true,value:'晚市到店 ≥ 5 次'}, {label:'自动打标规则',type:'textarea',rows:2,wide:true,value:'近 90 天 17:00 后到店次数 ≥ 5 次',hint:'留空则仅支持人工打标'}, {label:'每日自动重算',type:'switch',value:true}, {k:'use',label:'主要用途',type:'select',options:['定向营销','菜品推荐','渠道效果分析','VIP 维护']}, {label:'标签说明',type:'textarea',rows:2,wide:true,ph:'供运营人员理解标签含义'}], newRow:v=>[v.name||'—',v.cat||'自定义标签',v.vals||'—','0',v.use||'—','']}, levelAdjust:{ic:'🔧',title:'调整会员等级',sub:'手工调整需填写原因并全程留痕,可同步提交管理员审批',tableId:'lvllog',saveBtn:'提交调整', saveMsg:'等级调整申请已提交,待管理员审批', fields:[ {k:'member',label:'会员',req:true,value:'Emma Wang · MEL-2026-08841'}, {k:'from',label:'原等级',type:'select',options:OPT.level,value:'黄金会员'}, {k:'to',label:'新等级',type:'select',options:OPT.level,req:true,value:'黑金会员'}, {k:'type',label:'变更类型',type:'select',options:['手工升级','手工降级']}, {k:'reason',label:'变更原因',type:'textarea',rows:2,wide:true,req:true,value:'门店补偿:订单漏记导致成长值不足'}, {label:'需要管理员审批',type:'switch',value:true,hint:'开启后同步进入「积分调整审批」流程'}], newRow:v=>[nowStr(),v.member||'—',''+(v.type||'手工调整')+'',v.from||'—',v.to||'—','Ken(店长)',v.reason||'—']}, /* ---------- 积分管理 ---------- */ pointRule:{ic:'⭐',title:'新增积分获取规则',sub:'多条规则可叠加,叠加方式在「规则参数」中统一配置',tableId:'pe', saveMsg:'积分规则已创建并生效', fields:[ {k:'name',label:'规则名称',req:true,value:'周末消费双倍积分'}, {k:'cond',label:'触发条件',req:true,value:'周六 / 周日任意消费'}, {k:'val',label:'积分值',req:true,value:'基础积分 ×2'}, {k:'bonus',label:'等级加成',type:'select',options:['不叠加','可叠加等级加成','按等级取最高值']}, {k:'scope',label:'生效范围',type:'select',options:['全部门店','CBD 店','CBD / Southbank'],req:true}, {label:'生效时间',value:'2026-10-01 ~ 2026-12-31'}, {label:'立即启用',type:'switch',value:true}, {label:'规则说明',type:'textarea',rows:2,wide:true,ph:'将展示在用户端「积分规则」页面'}], newRow:v=>[v.name||'—',v.cond||'—',v.val||'—',v.bonus||'不叠加',v.scope||'全部门店','启用','']}, pointDish:{ic:'🍽️',title:'添加可抵扣菜品',sub:'从菜品档案中选择,抵扣比例按「抵扣规则配置」自动换算',tableId:'pr',saveBtn:'加入可抵扣范围', saveMsg:'菜品已加入可抵扣范围', fields:[ {k:'dish',label:'选择菜品',type:'select',options:['招牌黑椒和牛堡 · $28.00','香煎三文鱼沙拉 · $26.00','澳洲牛肉派 · $18.00','提拉米苏 · $15.00','烤羊排 · $32.00'],req:true}, {k:'cat',label:'菜品分类',type:'select',options:['主菜','甜点','小食','饮品','套餐']}, {k:'price',label:'单价($)',value:'28.00'}, {k:'pt',label:'所需积分',req:true,value:'500'}, {k:'cap',label:'单笔抵扣上限($)',value:'10'}, {label:'可抵扣时段',type:'select',options:['全时段','仅工作日午市 11:00-15:00','仅晚市 17:00 后']}, {label:'立即启用',type:'switch',value:true}], newRow:v=>[(v.dish||'—').split(' · ')[0],v.cat||'主菜',v.price||'—',v.pt||'—',v.cap||'—','启用']}, pointAdjust:{ic:'⚖️',title:'提交积分调整申请',sub:'所有手工调整必须填写原因并经管理员二次审批,全程留痕可追溯',tableId:'padj',saveBtn:'提交申请', saveMsg:'积分调整申请已提交,等待管理员审批', fields:[ {k:'member',label:'会员',req:true,value:'Emma Wang · MEL-2026-08841'}, {k:'dir',label:'调整方向',type:'select',options:['增加积分','扣减积分'],req:true}, {k:'amt',label:'调整值',req:true,value:'+500',hint:'增加直接填数字,扣减前加 -'}, {k:'reason',label:'调整原因',req:true,type:'select',options:['订单漏记补偿','异常刷单撤销奖励','活动奖励补发','系统故障补偿','其他(请在补充说明中注明)']}, {label:'补充说明',type:'textarea',rows:2,wide:true,value:'9 月 22 日 POS 订单 SO-20260924-0081 未同步,已核对小票原件。'}, {label:'标记为紧急',type:'switch',value:false}], newRow:v=>[nowStr(),v.member||'—',''+(v.amt||'—')+'',v.reason||'—','Ken','待审批','']}, posRecord:{ic:'🧾',title:'手工登记 POS 核销结果',sub:'本系统不参与支付,仅登记 POS 端核销结果用于对账与统计',tableId:'pos',saveBtn:'登记核销结果', saveMsg:'已登记 1 条 POS 核销结果', fields:[ {k:'member',label:'会员',req:true,value:'Emma Wang · MEL-2026-08841'}, {k:'store',label:'门店',type:'select',options:OPT.store,req:true}, {k:'pt',label:'核销积分',req:true,value:'-500'}, {k:'amt',label:'抵扣金额($)',req:true,value:'10.00'}, {k:'posno',label:'POS 单号',req:true,value:'POS-1208',hint:'用于重复核销校验'}, {label:'登记方式',type:'select',options:['店员补录','POS 小票照片上传','对账单导入']}, {label:'核销时间',value:'2026-09-24 12:41'}, {label:'上传 POS 凭证',ph:'点击上传小票照片(选填)',wide:true}], newRow:v=>['09-24 12:41',v.member||'—',(v.store||'—').replace(' 店',''),v.pt||'—','$'+(v.amt||'0'),v.posno||'—','店员补录','正常']}, /* ---------- 优惠券管理 ---------- */ couponTpl:{ic:'🎫',title:'新建券模板',sub:'模板创建后可被「券发放」任务引用,同一模板支持多次发放',tableId:'ct', saveMsg:'券模板已创建', fields:[ {k:'name',label:'模板名称',req:true,value:'周末限定 满 $50 减 $12'}, {k:'type',label:'券类型',type:'select',options:['满减券','折扣券','兑换券','满赠券'],req:true}, {k:'face',label:'面额 / 折扣',req:true,value:'$12'}, {k:'limit',label:'使用门槛($)',value:'50'}, {k:'valid',label:'有效期规则',type:'select',options:['领取后 30 天内有效','固定日期区间','领取当天有效(限次日使用)']}, {k:'scope',label:'适用范围',type:'select',options:['全门店堂食','指定门店','指定菜品','排除酒水与特价套餐']}, {label:'叠加规则',type:'select',options:['不可与同类券叠加','可与积分抵扣叠加','完全互斥']}, {label:'每人限领张数',value:'1 张'}, {label:'发放说明',type:'textarea',rows:2,wide:true,value:'限会员本人使用,不可转赠,不可兑换现金。'}, {label:'创建后立即启用',type:'switch',value:true}], newRow:v=>[v.name||'—',v.type||'满减券',v.face||'—',(v.limit?('满 $'+v.limit+' 可用'):'无门槛'),v.valid||'领取后 30 天',v.scope||'全门店堂食','启用','']}, couponTask:{ic:'📤',title:'新建券发放任务',sub:'支持活动页自助领取、注册自动发放与批量定向发放',tableId:'ci', saveMsg:'发放任务已创建,预计触达 3,000 位会员', fields:[ {k:'name',label:'任务名称',req:true,value:'中秋会员专属券'}, {k:'tpl',label:'券模板',type:'select',options:['中秋限定 满 $50 减 $12','满 $60 减 $15','工作日午市 8.5 折','免费柠檬茶兑换券'],req:true}, {k:'way',label:'发放方式',type:'select',options:['活动页自助领取','注册自动发放','批量定向发放','手动单个发放'],req:true}, {k:'target',label:'目标人群',type:'select',options:OPT.segment}, {k:'num',label:'预计发放数量',value:'3,000'}, {label:'发放时间',type:'select',options:['立即发放','定时发放','领取时间区间']}, {label:'每人限领',value:'1 张'}, {label:'自动发送到期提醒',type:'switch',value:true,hint:'到期前 7 / 3 / 1 天分次提醒'}], newRow:v=>[v.name||'—',v.tpl||'—',v.way||'—',v.target||'全部会员',v.num||'不限','0','0','未开始','']}, /* ---------- 营销活动管理 ---------- */ combo:{ic:'🍱',title:'创建特价套餐活动',sub:'上架后用户端「活动」页立即展示,可设置适用门店与时段',tableId:'cd', saveMsg:'特价套餐活动已创建并上架', fields:[ {k:'name',label:'活动名称',req:true,value:'工作日单人午餐 $19'}, {label:'活动标签',type:'select',options:['特价套餐','限时特惠','新品尝鲜']}, {k:'orig',label:'原价($)',value:'28.00'}, {k:'price',label:'活动价($)',req:true,value:'19.00'}, {k:'items',label:'包含菜品',type:'textarea',rows:3,wide:true,value:'招牌黑椒和牛堡 x1\n冰美式 x1\n薯条 x1'}, {k:'time',label:'活动时间',value:'2026-09-25 00:00 ~ 2026-12-31 23:59'}, {k:'scope',label:'适用门店',type:'select',options:OPT.storeAll}, {label:'适用时段',type:'select',options:['全时段','工作日 11:00-15:00','工作日 17:00 后']}, {label:'是否可与券 / 积分叠加',type:'select',options:['可叠加积分抵扣','不可叠加任何优惠']}, {label:'每日限量',value:'不限',hint:'填写数字时售罄自动下架'}], newRow:v=>[v.name||'—',(v.orig?'$'+v.orig:'—'),(v.price?'$'+v.price:'—'),(v.items||'—').split('\n').join(' + '),v.time||'—',v.scope||'全部 4 家门店','0','$0','进行中']}, gift:{ic:'🎁',title:'创建满赠活动',sub:'单桌消费达标即赠,赠品库存按门店独立扣减',tableId:'cg', saveMsg:'满赠活动已创建', fields:[ {k:'name',label:'活动名称',req:true,value:'中秋满 $100 赠月饼'}, {k:'threshold',label:'满额门槛($)',req:true,value:'100'}, {k:'gift',label:'赠品名称',req:true,value:'手工月饼 1 盒'}, {label:'赠品库存',value:'500'}, {label:'每桌限领数量',value:'1 份'}, {k:'time',label:'活动时间',value:'2026-09-20 ~ 2026-10-06'}, {k:'scope',label:'适用门店',type:'select',options:OPT.storeAll}, {label:'活动规则说明',type:'textarea',rows:2,wide:true,value:'单桌消费满 $100 赠手工月饼 1 盒,每桌限 1 份,不与其他满赠活动同享。'}], newRow:v=>[v.name||'—',(v.threshold?'$'+v.threshold:'—'),v.gift||'—',v.time||'—',v.scope||'全部 4 家门店','0','$0','进行中']}, pointAct:{ic:'💠',title:'创建积分抵扣活动',sub:'活动期内可临时提高抵扣比例,优先级高于「抵扣规则配置」',tableId:'cp', saveMsg:'积分抵扣活动已创建', fields:[ {k:'name',label:'活动名称',req:true,value:'中秋积分抵扣翻倍'}, {k:'rate',label:'抵扣比例',req:true,value:'500 积分 = $20'}, {k:'cap',label:'单笔抵扣上限($)',value:'40'}, {k:'scope',label:'可抵扣菜品范围',type:'select',options:['全部菜品','12 道招牌菜','指定套餐']}, {label:'活动时段',type:'select',options:['全时段','工作日 11:00-15:00','晚市 17:00 后']}, {k:'store',label:'适用门店',type:'select',options:OPT.storeAll}, {k:'time',label:'活动时间',value:'2026-09-25 ~ 2026-10-08'}, {label:'活动说明',type:'textarea',rows:2,wide:true,ph:'将展示在用户端活动详情页'}], newRow:v=>[v.name||'—',v.scope||'全部菜品',v.rate||'—',(v.cap?'$'+v.cap:'—'),v.time||'—',v.store||'全部 4 家门店','0','未开始']}, channelCode:{ic:'🔗',title:'生成渠道追踪码',sub:'为线下物料生成专属二维码,扫码注册自动写入来源标签',tableId:'ch',saveBtn:'生成并下载二维码', saveMsg:'渠道追踪码已生成,二维码图片已下载', fields:[ {k:'code',label:'渠道码',req:true,value:'CH-CBD-TABLE04',hint:'建议格式:CH-门店-物料-序号'}, {k:'name',label:'渠道名称',req:true,value:'CBD 店桌贴 04'}, {k:'page',label:'落地页面',type:'select',options:['注册页','注册页 + 新人礼','注册页 + 双人套餐','注册页 + 配送券','店员引导登记页']}, {label:'归属门店',type:'select',options:OPT.store}, {label:'绑定店员(可选)',type:'select',options:['不绑定'].concat(OPT.staff)}, {label:'有效期',type:'select',options:['长期有效','2026-12-31 截止','自定义']}, {k:'preview',label:'二维码预览',value:'生成后自动显示二维码与下载按钮',wide:true,hint:'原型演示,实际将调用小程序码生成接口'}, {label:'投放说明',type:'textarea',rows:2,wide:true,ph:'例如:收银台立牌正面,尺寸 A5'}], newRow:v=>[v.code||'—',v.name||'—',v.page||'注册页','0','0','—','—','$0']}, fission:{ic:'🤝',title:'新建裂变任务',sub:'奖励由系统在注册 / 首单触发时自动核销,异常单可人工复核',tableId:'cf', saveMsg:'裂变任务已创建并生效', fields:[ {k:'name',label:'任务名称',req:true,value:'邀请 3 位好友得 $20 券'}, {k:'type',label:'任务类型',type:'select',options:['老带新邀请','社交互动任务','内容分享任务']}, {label:'奖励类型',type:'select',options:['积分奖励','优惠券奖励','积分 + 券组合']}, {k:'val',label:'奖励数值',value:'邀请人 $20 券 / 被邀请人 200 积分'}, {label:'目标人群',type:'select',options:OPT.segment}, {label:'任务有效期',value:'2026-09-25 ~ 2026-12-31'}, {label:'核销方式',type:'select',options:['系统自动核销(注册 / 首单触发)','店员人工核销','系统核销 + 人工复核']}, {label:'每人最多参与次数',value:'3 次'}, {label:'活动规则',type:'textarea',rows:2,wide:true,value:'邀请好友注册并完成首单后,邀请人获得 $20 券,被邀请人获得 200 积分,奖励于 7 个工作日内到账。'}], newRow:v=>[v.name||'—',v.type||'老带新邀请',v.val||'—','0','0','0%','进行中','']}, /* ---------- 消息触达管理 ---------- */ msgTpl:{ic:'✉️',title:'新建消息模板',sub:'模板支持 {变量} 占位符,可被站内信 / 短信 / 邮件复用',tableId:'mt', saveMsg:'消息模板已创建', fields:[ {k:'name',label:'模板名称',req:true,value:'中秋活动提醒模板'}, {k:'type',label:'模板类型',type:'select',options:['短信模板','邮件模板','站内信模板'],req:true}, {label:'适用场景',value:'节点活动通知'}, {k:'vars',label:'变量占位符',wide:true,value:'{会员姓名} {活动名称} {活动时间}'}, {label:'消息标题 / 主题',value:'【Melbourne Dining Club】中秋限定菜单已上线'}, {label:'消息正文',type:'textarea',rows:4,wide:true,value:'{会员姓名} 您好,中秋限定菜单 {活动时间} 起供应,会员提前预订享 9 折。点击查看菜单 >> 退订回复 TD'}, {label:'发送前预检',type:'switch',value:true,hint:'预检退订链接、发送方标识与敏感词'}], newRow:v=>[v.name||'—',v.type||'短信模板','节点活动通知',v.vars||'—','0','启用','']}, socialPost:{ic:'📱',title:'新建内容发布计划',sub:'发布后可在「社交媒体发布」查看互动量与带来的注册数回流',tableId:'so', saveMsg:'发布计划已创建', fields:[ {k:'title',label:'内容标题',req:true,value:'中秋限定菜单探店笔记'}, {k:'plat',label:'发布平台',type:'select',options:['小红书','Instagram','Facebook','Google Business','TikTok'],req:true}, {label:'内容类型',type:'select',options:['图文笔记','短视频','Reel 短视频','快拍','图文帖']}, {label:'关联活动',type:'select',options:['不关联','中秋满 $100 赠月饼','双人午市套餐 $49','招牌菜积分抵扣']}, {k:'time',label:'发布时间',value:'2026-09-26 10:00'}, {label:'文案内容',type:'textarea',rows:3,wide:true,value:'中秋限定菜单上线啦!会员提前预订享 9 折,到店扫码注册会员还能领 $10 券~'}, {label:'话题标签',wide:true,value:'#墨尔本美食 #MelbourneEats #中餐'}, {label:'定时自动发布',type:'switch',value:false,hint:'关闭时需在平台手工发布后回填数据'}], newRow:v=>[v.title||'—',v.plat||'—','图文笔记','—',v.time||'—','待发布','—','—']}, /* ---------- 门店与员工管理 ---------- */ store:{ic:'🏪',title:'新增门店',sub:'门店创建后可分配店员账号并参与活动配置',tableId:'st', saveMsg:'门店已创建', fields:[ {k:'id',label:'门店编号',req:true,value:'ST-005'}, {k:'name',label:'门店名称',req:true,value:'Glen Waverley 店'}, {k:'addr',label:'门店地址',req:true,wide:true,value:'123 Kingsway, Glen Waverley VIC 3150'}, {label:'营业时间',value:'11:00-22:00'}, {label:'联系电话',value:'+61 3 9800 1268'}, {label:'门店半径(米)',value:'500',hint:'用于「附近门店」与到店核销判定'}, {label:'门店经纬度',value:'-37.8778, 145.1646'}, {label:'店长',type:'select',options:['暂不指定'].concat(OPT.staff)}, {label:'是否参与活动',type:'select',options:['参与全部活动','仅参与指定活动','不参与活动']}, {label:'立即开业(对外展示)',type:'switch',value:false,hint:'关闭时为「筹备中」,用户端不展示该门店'}], newRow:v=>[v.id||'—',v.name||'—',v.addr||'—','11:00-22:00','+61 3 9800 1268','0','0','$0','筹备中','']}, staff:{ic:'🧑‍🍳',title:'新增店员账号',sub:'初始密码由系统生成并短信下发,首次登录需修改',tableId:'sf', saveMsg:'店员账号已创建,初始密码已短信发送', fields:[ {k:'no',label:'工号',req:true,value:'1026'}, {k:'name',label:'姓名',req:true,value:'Jason Lee'}, {k:'store',label:'所属门店',type:'select',options:OPT.store,req:true}, {k:'role',label:'角色',type:'select',options:['店员','店长','市场专员','财务','系统管理员'],req:true}, {k:'tel',label:'手机号',req:true,value:'0412 886 226'}, {k:'pwd',label:'初始密码',value:'系统自动生成并短信发送'}, {label:'数据权限范围',type:'select',options:['仅本门店','本门店 + 下属门店','全部门店']}, {label:'账号状态',type:'select',options:['启用','停用']}, {label:'发送欢迎短信',type:'switch',value:true}], newRow:v=>[v.no||'—',v.name||'—',v.store||'—',v.role||'店员',v.tel||'—','0','待激活','—','']}, role:{ic:'🔐',title:'新增角色',sub:'按最小权限原则配置数据范围与功能操作权限',tableId:'ro', saveMsg:'角色已创建', fields:[ {k:'name',label:'角色名称',req:true,value:'区域督导'}, {k:'scope',label:'数据权限范围',type:'select',options:['全部门店','本门店','仅本人录单','指定多店']}, {k:'member',label:'会员管理',type:'select',options:['读写','只读','无权限']}, {k:'point',label:'积分调整',type:'select',options:['读写 + 审批','申请 + 审批','只读','无权限']}, {k:'coupon',label:'优惠券管理',type:'select',options:['读写','只读','无权限']}, {k:'act',label:'活动管理',type:'select',options:['读写','只读','无权限']}, {k:'ana',label:'数据分析',type:'select',options:['读写','只读','无权限']}, {k:'sys',label:'系统设置',type:'select',options:['读写','只读','无权限']}, {label:'可导出会员名单',type:'select',options:['不可导出','可导出脱敏名单','可导出完整名单']}], newRow:v=>[v.name||'—','0',v.scope||'全部门店',tagOf(v.member),tagOf(v.point),tagOf(v.coupon),tagOf(v.act),tagOf(v.ana),tagOf(v.sys)]}, /* ---------- 系统管理 ---------- */ dish:{ic:'🍜',title:'新增菜品',sub:'菜品名称与 POS 别名用于小票识别的名称匹配,建议与 POS 保持一致',tableId:'ds', saveMsg:'菜品已保存', fields:[ {k:'code',label:'菜品编码',req:true,value:'D-087'}, {k:'name',label:'菜品名称',req:true,value:'黑松露蘑菇汤'}, {k:'cat',label:'菜品分类',type:'select',options:['主菜','饮品','甜点','小食','酒水','套餐'],req:true}, {k:'price',label:'单价($)',req:true,value:'16.00'}, {k:'alias',label:'POS 别名(用于小票识别匹配)',wide:true,value:'Truffle Mushroom Soup | 松露蘑菇汤',hint:'多个别名用 | 分隔,可显著提升识别准确率'}, {k:'pt',label:'是否参与积分抵扣',type:'select',options:['否','是']}, {k:'act',label:'是否参与营销活动',type:'select',options:['是','否']}, {label:'毛利率(%)',value:'68.0'}, {label:'启用菜品',type:'switch',value:true}], newRow:v=>[v.code||'—',v.name||'—',v.cat||'主菜',(v.price?'$'+v.price:'—'),v.alias||'—',v.pt==='是'?'是':'否',v.act==='是'?'是':'否','启用','']}, dishImport:{ic:'📥',title:'批量导入菜品',sub:'支持 Excel / CSV 模板导入,POS 别名可多列填写',tableId:'ds',saveBtn:'开始导入', saveMsg:'导入完成,共新增 12 道菜品(跳过重复 2 道)', fields:[ {label:'① 下载导入模板',value:'菜品导入模板 V2.xlsx',hint:'含菜品编码、名称、分类、单价、POS 别名等 9 个字段'}, {label:'导入模式',type:'select',options:['仅新增(跳过重复)','新增并更新同编码菜品','清空重导(危险)']}, {label:'适用门店',type:'select',options:['全部门店','CBD 店','Southbank 店','Docklands 店']}, {label:'② 上传文件',value:'dish_import_20260928.xlsx',hint:'支持 .xlsx / .csv,单次不超过 2000 行'}, {sep:'③ 导入预览',d:'仅展示前 3 行的校验结果'}, {label:'预览结果',type:'textarea',rows:4,wide:true,value:'黑松露蘑菇汤 / 主菜 / $16.00 / Truffle Mushroom Soup → 新增\n和牛塔可 / 小食 / $19.00 / Wagyu Taco → 新增\n招牌黑椒和牛堡 / 主菜 / $28.00 / Wagyu Burger → 跳过(已存在)'}, {label:'导入完成后通知我',type:'switch',value:true}], newRow:v=>['D-087','黑松露蘑菇汤','主菜','$16.00','Truffle Mushroom Soup','否','是','启用','']}, dict:{ic:'📚',title:'新增数据字典',sub:'字典项修改后,所有引用该字典的下拉项同步生效',tableId:'dd', saveMsg:'字典已创建', fields:[ {k:'code',label:'字典编码',req:true,value:'dining_scene',hint:'建议使用小写英文 + 下划线'}, {k:'name',label:'字典名称',req:true,value:'用餐场景'}, {k:'items',label:'字典项(多个用 / 分隔)',wide:true,req:true,value:'堂食 / 外带 / 外卖 / 包间'}, {k:'edit',label:'是否可编辑',type:'select',options:['可编辑','不可编辑(系统内置)']}, {k:'use',label:'使用场景',value:'会员标签与个性化推荐'}, {label:'字典说明',type:'textarea',rows:2,wide:true,ph:'说明该字典的业务含义与使用位置'}], newRow:v=>[v.code||'—',v.name||'—',v.items||'—',String((v.items||'').split('/').filter(x=>x.trim()).length),v.edit==='可编辑'?'可编辑':'不可编辑',v.use||'—','']} }; let FRM={key:null}; function fieldCtl(f,i){ const fi='data-fi="'+i+'"'; if(f.type==='select') return ''; if(f.type==='textarea') return ''; if(f.type==='switch') return '
'; return ''; } function formField(f,i){ if(f.sep) return '
'+f.sep+(f.d?''+f.d+'':'')+'
'; const ctl=fieldCtl(f,i); if(f.type==='switch') return '
'+ '
'+ctl+ ''+(f.hint||'')+'
'; return '
'+ctl+ (f.hint?''+f.hint+'':'')+'
'; } function openForm(key){ const F=FORM_REG[key]; if(!F){ toast('该新增表单暂未配置'); return; } FRM={key:key}; const btn=F.saveBtn||'确认新增'; $('drawerBody').innerHTML= '

'+(F.ic||'➕')+' '+F.title+'

'+(F.sub||'')+'
'+ '
'+F.fields.map(formField).join('')+'
'+ '
'+ '
'+ '
'+ '原型说明:点击「'+btn+'」后,列表会实时新增一行并高亮标注,用于演示完整的「新增 → 入库 → 列表可见」闭环。
'; $('drawerBody').scrollTop=0; $('drawer').classList.add('form'); $('drawer').classList.add('show'); } function submitForm(){ const F=FORM_REG[FRM.key]; if(!F) return; const dw=$('drawerBody'), vals={}, byKey={}; dw.querySelectorAll('[data-fi]').forEach(el=>{ const i=+el.dataset.fi; const isSw=el.classList&&el.classList.contains('sw'); const v=isSw?(el.classList.contains('on')?'是':'否'):el.value; vals[i]=v; const f=F.fields[i]; if(f&&f.k) byKey[f.k]=v; }); const miss=[]; F.fields.forEach((f,i)=>{ if(f.req&&f.type!=='switch'&&!String(vals[i]||'').trim()) miss.push(f.label); }); if(miss.length){ toast('请补充必填项:'+miss.slice(0,3).join('、')+(miss.length>3?' 等 '+miss.length+' 项':'')); return; } if(F.tableId&&F.newRow){ EXTRA_ROWS[F.tableId]=EXTRA_ROWS[F.tableId]||[]; EXTRA_ROWS[F.tableId].push(F.newRow(byKey,vals)); HL[F.tableId]={i:EXTRA_ROWS[F.tableId].length-1,t:Date.now()}; } closeDrawer(); render(); toast(F.saveMsg||(F.title+'成功')); try{ const tr=document.querySelector('tr.newrow'); if(tr&&tr.scrollIntoView) tr.scrollIntoView({block:'center',behavior:'smooth'}); }catch(e){} } /* ===================== 页面渲染 ===================== */ let ST={mod:'dashboard',tab:'overview'}; function currentMod(){return MODULES.find(m=>m.id===ST.mod);} function render(){ const m=currentMod(); const t=m.tabs.find(x=>x.id===ST.tab)||m.tabs[0]; $('crumb').innerHTML=`${m.name}/${t.name}`; const html=`
${m.tabs.map(x=>``).join('')}
` +renderView(t.view()); $('body').innerHTML=html; document.querySelectorAll('.nav-i').forEach(n=>n.classList.toggle('on',n.dataset.m===ST.mod)); } function buildNav(){ const groups={}; MODULES.forEach(m=>{(groups[m.group]=groups[m.group]||[]).push(m);}); $('nav').innerHTML=Object.entries(groups).map(([g,ms])=> ``+ms.map(m=>``).join('')).join(''); } function openRow(id,ri){ const m=currentMod(), t=m.tabs.find(x=>x.id===ST.tab); const block=t.view().find(b=>b.type==='table'&&b.id===id); if(!block)return; const r=tableRows(block)[ri]; if(!r)return; const first=r[0].replace(/<[^>]+>/g,''); let body=`

${first}

${block.title} · 明细
`; body+=block.cols.map((c,i)=>`
${c}${r[i]}
`).join(''); if(block.detail) body+=block.detail(r); body+=`
`; $('drawerBody').innerHTML=body; $('drawer').classList.remove('form'); $('drawer').classList.add('show'); } function closeDrawer(){$('drawer').classList.remove('show');$('drawer').classList.remove('form');} buildNav(); /* 支持 ?m=模块ID&t=页签ID 直达 */ (function(){ try{ const q=new URLSearchParams(location.search); const m=q.get('m'), t=q.get('t'), fm=q.get('form'); if(m&&MODULES.some(x=>x.id===m)){ ST.mod=m; ST.tab=(t&&MODULES.find(x=>x.id===m).tabs.some(y=>y.id===t))?t:MODULES.find(x=>x.id===m).tabs[0].id; } if(fm&&FORM_REG[fm]) window.__openForm=fm; }catch(e){} })(); render(); if(window.__openForm) setTimeout(()=>openForm(window.__openForm),40); document.addEventListener('keydown',e=>{if(e.key==='Escape')closeDrawer();}); 取消
访问码: rzaqwfim