5
8
🏪 南山旗舰店 · 数据看板
忠济堂中医连锁 · 深圳片区旗舰门店
今日营收
¥12,860
18.2%
目标¥15,000 · 完成率85.7%
客流量
48
33.3%
同比上周+12人次
转化率
42.8%
3.2%
目标50% · 差7.2%
客单价
¥268
5.5%
行业平均¥220
营收趋势
查看月趋势 →
预约状态
总计42 完成28 完成率66.7%
快捷操作
客户登记
快速开单
预约排班
回访任务
卡项推荐
收银收款
库存盘点
前台全流程
员工考勤
经营数据
团购核销
快捷调拨
今日客户列表 查看全部
到店时间姓名项目技师状态金额
09:15王芳 会员宫廷理筋术张明华已完成¥398
09:30李明 新客AI体质辨识李秀英已完成¥198
10:00陈小红 沉睡唤醒三伏灸调理王志刚服务中¥588
10:30赵建国 VIP古法艾灸·温阳陈美玲服务中¥328
11:00刘丽珍少儿助长推拿赵大力等候中¥268
11:15周海涛中药足浴+按摩已预约¥188
11:30吴美娟 Lv2肩颈疏通已预约¥258
排队叫号
A006
刘丽珍 · 少儿推拿
等候约15分钟
A007
周海涛 · 足浴按摩
预约 11:15
A008
吴美娟 · 三伏灸
预约中
A009
孙女士 · 肩颈疏通
待确认
客流 & 转化率趋势
服务项目占比
在岗技师 排班管理
姓名等级今日订单今日业绩状态
张明华主任技师6¥1,860在岗
李秀英高级技师5¥1,420在岗
王志刚技师4¥1,080服务中
陈美玲高级技师3¥960服务中
赵大力技师2¥560待岗
刘小芳学徒1¥180待岗
员工服务单量排行
库存预警 3项低库存
陈年艾条·三年陈余12盒
温阳散寒膏方余5瓶
医用艾灸盒余28个
当归补血汤料余3包
7级卡项推荐引擎 · SOP引导 当前客户:王芳 · Lv3
✅ 引流体验 ✅ 深度体验 ▶ 锁客阶段 ⬜ 升单 ⬜ 转介绍 ⬜ 股东 ⬜ 合伙人
AI推荐:锁客卡项
基于王芳3次到店记录及体质数据(痰湿质+轻度肩颈不适),推荐「季度调理会员卡·黄金版」¥1,880(含12次调理+2次体质检测+家属折扣),预计转化概率78%。
引流
¥88
体验
¥198
锁客
¥1,880
升单
¥3,680
转介绍
赠送
股东
¥9,800
合伙人
¥29,800
整体漏斗转化率 43% · 7级SOP执行中
前台V2·7步全流程 当前客户:陈小红 · 流程跟踪
到店登记
体质辨识
3
服务进行
4
加钟
5
结算
6
好评引导
7
回访转化
👥 客户管理
客户列表 · 360画像 · 标签 · 回访 · 密档
标签到店次数累计消费最近到店回访标记操作
王芳 VIP138****5689Lv3痰湿质肩颈不适18次¥8,6802026-05-13已回访 360画像
李明 新客139****2356Lv1气虚质1次¥1982026-05-13待回访 360画像
陈小红136****8901Lv2湿热质三伏灸6次¥2,6802026-05-12已回访 360画像
赵建国 VIP137****4567Lv3阳虚质28次¥16,2802026-05-10已回访 360画像
刘丽珍158****3344Lv1潜在2次¥4682026-05-08超期 360画像
周海涛186****7788Lv1新客0次¥0待分配 360画像
客户360画像 · 王芳
王芳 · Lv3会员
138****5689 · 女 · 32岁
痰湿质肩颈不适VIP
18
累计到店
¥8,680
累计消费
¥482
平均客单
95%
好评率
体质监测趋势
痰湿指数
62→48
↓ 改善
建议卡项
黄金版
¥1,880
推荐技师
张明华
主任技师
回访任务
李明新客回访
139****2356 · 首次AI体质辨识后24h
2026-05-13
刘丽珍沉睡唤醒
距上次到店已30天
超期·预警
赵建国生日祝福
5月20日生日 · 可发送专属优惠
7天后
📅 预约看板 V2.6 日历重构
日历时间槽 · 在岗技师 · 排队 · 排班管理
2026年6月11日 周四
视图:
时间槽 · 2026-06-11
08:00
09:00
王芳 · 宫廷理筋术 · 张明华
09:30
李明 · AI体质辨识 · 李秀英
10:00
陈小红 · 三伏灸 · 王志刚 服务中
10:30
赵建国 · 古法艾灸 · 陈美玲 服务中
11:00
刘丽珍 · 少儿推拿 · 赵大力 待开始
11:15
周海涛 · 中药足浴 · 待分配
12:00⋯ 午休
13:00
吴美娟 · 肩颈疏通 · 张明华 已预约
14:00
孙丽 · 温阳艾灸 · 李秀英 已预约
15:00
16:00
17:00
在岗技师 · 今日排班
张明华
主任技师 · 已完成2单
在岗
李秀英
高级技师 · 已完成1单
在岗
王志刚
技师 · 服务中(10:00-11:30)
服务中
赵大力
技师 · 待开始(11:00)
待岗
陈美玲
高级技师 · 服务中(10:30-12:00)
服务中
刘小芳
学徒 · 今日休息
休息
8
今日预约
2
服务中
6
空闲时段
💳 收银管理
快速开单 · 挂单 · 退单 · 聚合支付 · 团购核销
今日订单
单号客户项目金额支付方式状态
POS20260513001王芳宫廷理筋术¥398微信支付已支付
POS20260513002李明AI体质辨识¥198支付宝已支付
POS20260513003陈小红三伏灸调理¥588会员卡待支付
POS20260513004赵建国古法艾灸¥328美团券团购券
POS20260513005现金散客中药足浴¥188现金已支付
POS20260513006刘丽珍少儿推拿¥268挂单
¥6,280
微信
¥3,180
支付宝
¥2,680
会员卡
¥880
团购券
团购核销
今日已核销:8张美团·3张抖音
📦 库存管理 P2 物料
库存 · 物料管理 · 入库 · 盘点 · 调拨
库存总值
¥28,360
SKU总数
126
低库存预警
4
上月损耗率
2.3%
商品名称分类库存量安全库存单位状态操作
陈年艾条·三年陈艾灸耗材1250低库存
温阳散寒膏方中药产品530紧急
当归补血汤料中药汤包320低库存
医用艾灸盒器具2840偏低
宫廷理筋精油耗材8660充足
一次性床单清洁耗材320200充足
👥 员工管理
考勤 · 绩效 · 排班 · 提成
员工列表
姓名职位今日考勤本月业绩提成状态
张明华主任技师已签到¥18,600¥5,580在岗
李秀英高级技师已签到¥14,200¥4,260在岗
王志刚技师已签到¥10,800¥3,240服务中
陈美玲高级技师已签到¥9,600¥2,880服务中
赵大方技师缺勤¥0¥0请假
本月绩效排行
排名姓名业绩订单量好评率评分
🥇张明华¥18,6006898%96
🥈李秀英¥14,2005295%91
🥉王志刚¥10,8004392%87
4陈美玲¥9,6003896%85
5赵大方¥6,2002590%78
🔄 前台V2 · 7步全流程
登记 → 体质辨识 → 服务 → 加钟 → 结算 → 好评引导 → 回访转化 → 裂变
当前流程
登记
辨体
3
服务中
4
加钟
5
结算
6
好评
7
回访
8
裂变
客户:陈小红
项目:三伏灸调理 · 技师:王志刚
开始时间:10:00 · 预计结束:11:30
今日流程统计
38
已完成客户
6
服务中
92%
好评率
8
转介绍数
裂变进展
陈小红完成三伏灸 → AI生成好评分享卡 → 分享至朋友圈 → 转化新客预计3人
🎯 卡项推荐引擎
7级卡项体系 · AI推荐 · 转化率跟踪
引流卡
¥88
体验1次
深度体验卡
¥198
体验2次+报告
锁客卡·黄金版
¥1,880
12次+检测2次
升单卡
¥3,680
36次+全部检测
合伙人
¥29,800
区域合伙人权益
今日推荐转化
客户推荐卡项AI评分状态
王芳锁客黄金版 ¥1,88078%已推荐
李明引流体验卡 ¥8865%已购买
赵建国升单卡 ¥3,68082%谈判中
陈小红深度体验卡 ¥19858%待推荐
SOP漏斗
126
客户到店
82
卡项触达 65%
38
意向客户 46%
16
成交 42%
3
转介绍 19%
💝 客情维护 V2.6 唤醒流水线
回访 · 唤醒 · 生日 · 升降级
待回访
12
沉睡客户
8
本月生日
6
待升降级
3
回访计划
李明 · 新客回访 24h黄金期
AI体质辨识后 · 推荐引流卡
刘丽珍 · 沉睡唤醒 30天未到店
发送优惠券+健康资讯
赵建国 · 生日祝福 5月20日
VIP专属生日折扣 + 节气礼包
陈小红 · 服务后回访 已完成
三伏灸体验后 · 好评+复购
升降级动态
王芳
Lv2→Lv3 · 累计消费达标
已升级
赵美琴
Lv2→Lv1 · 30天未到店
待降级
周明
Lv1→Lv2 · 消费积分达标
待升级
💬 咨询中心
实时会话 · 话术库 · 分配规则 · KPI · 分析
实时会话
会话列表
王芳 微信
好的,我明白了,谢谢
李明 美团
请问三伏灸多少钱?
赵建国 抖音
在吗?想预约周六
王芳
微信 · 已读
您好,请问我的宫廷理筋术体验怎么样?
非常好!张师傅手法很专业,肩颈舒服多了
10:28
好的,我明白了,谢谢!下次还来找张师傅
10:30
不客气!您已经是会员了,下次可以直接预约张主任哦 😊
10:31
快捷话术
您好,请问有什么可以帮您?三伏灸现在预约有优惠推荐您体验AI体质辨识会员卡充值送积分感谢您的好评!下次可以提前预约哦
咨询KPI
38
今日会话
6
排队中
94%
响应率
智能分配规则
根据客户标签、来源渠道、客服忙闲自动分配
新客→值班客服VIP→高级客服投诉→店长直通
📢 营销中心 P2 裂变
公域 · 私域 · 裂变推广 · 优惠券
🟡
美团
本月曝光:12.8w · 订单:86
🎵
抖音
本月曝光:28.6w · 订单:52
📕
小红书
本月曝光:8.2w · 互动:2,860
公域渠道对比
渠道曝光点击转化ROI
美团12.8w3,86086单1:8.2
抖音28.6w5,42052单1:6.8
小红书8.2w1,28028单1:5.2
私域 & 分销
48
企微好友
12
客户群
分销商8人活跃
本月分销订单:28单 · 分销佣金:¥2,860
📈 数据报告
门店经营报表 · 趋势分析
营收日报
5/18.2k
5/37.6k
5/59.8k
5/711.2k
5/98.8k
5/1112.9k
今日12.9k
核心指标趋势
↑18.2%
营收月环比
↑33.3%
客流月环比
↑3.2%
转化月环比
↑5.5%
客单月环比
🗺️ 深圳片区管理中心
管辖8家门店 · 今日运营概况
片区总营收
¥192.8w
18.2%
总客流量
4,286
12.5%
平均转化率
39.6%
目标42%
平均客单价
¥286
6.8%
多店营收对比 & KPI雷达
排名门店营收客流客单价转化率综合评分趋势
🥇南山旗舰店¥58.6w982¥31242.8%96↑23%
🥈福田店¥41.2w728¥28640.2%88↑15%
🥉宝安中心店¥35.8w656¥26838.6%82↑9%
4龙华店¥28.3w562¥24535.2%75↑31%
5罗湖店¥22.7w448¥22833.8%68↓3%
6龙岗店¥18.6w386¥21832.5%62↑6%
7盐田店¥12.8w286¥20830.2%55↓2%
8坪山店¥8.6w186¥19628.6%48↑12%
📊 多店对比分析
营收/客流/转化/评分 5维排行 · 雷达图
营收排行 TOP5
🥇 南山旗舰店¥58.6w
🥈 福田店¥41.2w
🥉 宝安中心店¥35.8w
4. 龙华店¥28.3w
5. 罗湖店¥22.7w
转化率排行
南山旗舰店42.8%
福田店40.2%
宝安中心店38.6%
龙华店35.2%
罗湖店33.8%
客单价排名
南山¥312
福田¥286
宝安¥268
龙华¥245
罗湖¥228
龙岗¥218
盐田¥208
坪山¥196
📍 门店地图
深圳片区8家门店实时状态
门店分布 · 气泡图
🗺️
深圳片区 · 8家门店
南山 · 福田 · 宝安 · 龙华 · 罗湖 · 龙岗 · 盐田 · 坪山
营收正常 需关注 预警
🔍 巡店督导
巡店任务 · 巡检记录 · 神秘顾客
巡店任务列表
门店任务类型责任人截止日期状态
龙华店🔍 督导巡店赵经理2026-05-15进行中
罗湖店🕵️ 神秘顾客外部人员2026-05-16待分配
南山旗舰店📋 SOP检查质检组2026-05-14已完成
宝安中心店🧾 财务审计财务部2026-05-20待开始
盐田店🔍 综合巡检王总监2026-05-18待开始
评分分布
南山旗舰店 4.8
福田店 4.5
宝安中心店 4.0
龙华店 3.5
罗湖店 3.0
🤝 资源调配
技师/设备跨店调配
资源类型数量状态
技师-王志刚人力南山旗舰店福田店1人已到岗
艾条-三年陈物资龙岗仓库龙华店50盒运输中
理疗床设备罗湖店宝安中心店2台待审批
艾灸盒物资南山旗舰店坪山店10个已完成
📈 片区数据分析
趋势 · 对比 · 雷达图 · 决策支持
片区营收趋势(近6月)
各店营收占比
片区增长态势
+31.2%
龙华店增长最快
-2.8%
罗湖店下降
+18.2%
片区平均增长
💬 咨询中心(片区级)
跨店会话监控 · 客服KPI
各店今日会话量
门店会话已回复排队响应率
南山旗舰店3836295%
福田店2624292%
宝安中心店1817194%
龙华店1210283%
全区客服KPI
92
总会话
91%
平均响应
🏢 全局经营驾驶舱
忠济堂全国48家门店实时数据
全国总营收
¥1,286.5w
28.6%
总门店数
48
本月新增3家
月活会员
12,860
15.8%
全国净利润率
32.8%
健康运营 ✓
全国营收趋势(近12月)
上月
¥1,088.2w
本月
¥1,286.5w
同比
↑18.2%
门店健康度
36
健康门店
8
需关注
4
预警门店
综合健康度 75%
各片区营收占比
各渠道引流对比
加盟商增长趋势
市场占有率
💰 对账管理 P2 新增
营收对账 · 渠道对账 · 分账结算 · 发票管理
¥-
本月营收
-
待对账笔数
¥-
差异金额
-%
对账完成率
订单号日期客户金额支付方式系统金额平台金额差异状态
加载中...
📊 三级数据看板
总部 → 片区 → 门店 下钻
片区总览(本月)
片区门店数营收目标完成转化率客单价趋势
🏢 深圳片区8¥328.5w96.2%39.6%¥286↑18%
🏢 广州片区6¥245.8w92.8%41.2%¥298↑12%
🏢 上海片区5¥218.6w88.5%38.8%¥312→2%
🏢 北京片区4¥186.2w85.6%36.5%¥276↓5%
🏢 成都片区3¥128.6w90.2%38.2%¥265↑22%
🏢 杭州片区3¥112.8w86.5%37.8%¥258↑15%
下钻:深圳片区 · 门店
门店营收客流转化客单价状态
加载门店数据...
¥58.6w98242.8%¥312
福田店¥41.2w72840.2%¥286
宝安中心店¥35.8w65638.6%¥268
龙华店¥28.3w56235.2%¥245
罗湖店¥22.7w44833.8%¥228
🤝 加盟管理
招商 · 生命周期 · 投资人管理
意向加盟
12
洽谈中
6
已签约
3
在建门店
2
累计加盟费
¥128w
招商漏斗
38
本月咨询
12
意向确认 32%
6
实地洽谈 50%
3
签约完成 50%
2
门店开工 67%
投资人/加盟商
姓名城市阶段跟进人操作
张先生杭州意向确认招商部跟进
李女士成都实地考察王经理跟进
王总武汉签约完成赵总监详情
陈总长沙合同审核招商部跟进
刘总南京资金筹备李总监跟进
📋 SOP执行管控
8条核心SOP • 执行率 • 培训 • 督导
8条核心SOP执行率
义诊SOP82%
美团结转SOP68%
好评转化SOP58%
复购转介绍SOP72%
7级卡项推荐SOP78%
开业爆店SOP90%
回访转化SOP65%
顾客满意SOP85%
培训 + 督导
SOP培训完成督导评分预警
义诊SOP75%88正常
美团结转SOP62%72关注
好评转化SOP55%65预警
复购转介绍SOP70%80正常
7级卡项SOP82%85正常
🛒 商城管理
GMV · 订单 · 积分 · 分销
本月GMV
¥38.6w
12.8%
总订单
286
积分兑换
124
分销下单
68
热销商品 TOP5
1. 三伏灸套餐售86份
2. 宫廷理筋次卡售52份
3. 艾草养生枕售38个
4. AI体质辨识+方案售35份
5. 温阳散寒足浴包售28份
近30天订单趋势
4/13
4/20
4/27
5/4
5/11
今日
👥 10位总监数字化工作台
各总监KPI完成率 · 待办事项
📊
运营总监
陈运营
86%
完成率
💰
财务总监
李财务
92%
完成率
📢
营销总监
王营销
78%
完成率
🤝
加盟总监
赵加盟
65%
完成率
🏪
门店总监
张门店
82%
完成率
🧠
AI技术总监
刘AI
95%
完成率
📦
供应链总监
周供应
88%
完成率
👥
人力总监
吴人力
72%
完成率
🛡️
法务风控
钱法务
90%
完成率
💻
技术总监
孙技术
76%
完成率
总监待办汇总
总监待办事项优先级截止
运营总监审核6月营销计划2026-05-15
加盟总监跟进成都李女士签约2026-05-18
人力总监完成技师评级方案2026-05-20
供应链总监艾条采购招标2026-05-25
⚙️ 自动化运营中心
规则 · 触发 · 执行 · 分析
16
活跃规则
2,486
本月触发
92%
自动执行率
新客7天回访
客户注册≥7天未到店 · 自动分配回访任务
86次
本月执行
沉睡客户唤醒
30天未到店 · AI发送优惠券+推文
320次
本月执行
好评自动引导
服务完成30分钟 · AI生成好评弹窗
1,280次
本月执行
库存低量预警
库存<20% · 通知采购+店长
28次
本月执行
生日自动祝福
客户生日当天自动发送祝福+优惠券
12次
本月执行
✍️ 内容发布引擎
小红书 · 抖音 · 公众号 一键发布
36
本月发布
56.2w
总曝光
8.3%
平均互动率
标题平台曝光互动状态
三伏天养生指南:这些人群最适合艾灸📕小红书12.8w2,860已发布
AI中医体质辨识是什么体验?🎵抖音28.6w5,420已发布
忠济堂2026加盟政策发布会📱公众号8.2w1,280审核中
开业爆店案例:南山旗舰店月流水60w📕小红书草稿
五分钟看懂中医体质分型🎵抖音6.8w1,860已发布
🧠 AI工具集 V2.6 新增
舌诊审核 · 体质分析 · AI智能管理 · AI报告
8
待审核
42
今日已审
96.5%
AI准确率
时间患者舌象图片AI诊断置信度状态操作
暂无待审核舌诊记录
🧠 AI经营报告
日报 · 月报 · 预警 · 决策建议
今日AI经营报告 · 2026-05-13
📊 经营概览
今日营收¥12,860,完成目标85.7%,较昨日增长18.2%。客流量48人,较昨日增33.3%。转化率42.8%改善明显,但距目标50%尚有差距。客单价¥268,行业领先。
⚠️ 预警提醒
1. 库存:陈年艾条(余12盒)需立即补货 · 2. 罗湖店转化率33.8%低于片区平均 · 3. 好评转化SOP执行率仅58%需关注
✅ AI决策建议
1. 建议今日重点推进王芳的锁客卡推荐(转化概率78%)· 2. 龙华店增长31%可推广经验 · 3. 艾条建议从龙岗仓库调拨50盒至南山旗舰店
AI月报摘要
本月全国营收¥1,286.5w,同比增长28.6%。新增门店3家,月活会员12,860人。深圳片区表现最优,龙华店增长31%领跑。北京片区同比下降5%需重点关注。
AI推荐行动
启动北京片区专项提升计划紧急
推广龙华店增长经验推荐
SOP好评转化专项培训推荐
🛡️ 风控审计
风险预警 · 审计日志 · 合规检查
3
风险预警
126
审计日志
8
合规检查
龙华店近30天退款率8.2% 高于阈值4%紧急
福田店员工账号异常登录(异地IP)关注
罗湖店近期收到3条服务投诉待处理提醒
本月无合规违规记录 ✓正常
审计日志
时间操作操作人门店结果
2026-05-13 10:23退款审批 ¥588张明华南山旗舰店通过
2026-05-13 09:15员工调拨申请赵经理龙华店待审批
2026-05-12 16:30库存调拨50盒仓管龙岗仓库已完成
2026-05-12 14:20账户异常登录系统福田店告警
💬 企业微信
好友 · 群 · 群发 · 客户时间轴
48
企微好友
12
客户群
286
今日群发
客户时间轴 · 今日动态
南山店 → 王芳09:32
服务后好评引导 · 已评价5星
福田店 → 李明10:15
新客回访 · AI体质辨识后24h黄金期
龙华店 → 优惠券群发11:00
三伏灸优惠券发送286人 · 已领取82张
宝安中心店 → 赵建国11:30
VIP生日祝福 · 已发送专属折扣
企微统计
好友增长+8
群活跃75%
本周新增好友8人 · 客户群活跃度75% · 群发打开率38%
📋 流程管理 P0 新建
企业流程定义 · 审批流 · 自动化
核心业务流程
登记→辨识→服务→结算→回访
已发布
加盟审批流程
意向→考察→签约→装修→开业
已发布
库存调拨审批流
申请→片区审核→物流→签收
草稿
SOP培训考核流程
培训→考核→评分→改进
开发中
待办审批
申请申请人类型状态
理疗床跨店调拨罗湖店物资调拨待审批
陈年艾条采购南山旗舰店采购申请已通过
技师跨店支援福田店人力调配待审批
🛡️ 权限管理 V2.6 重构
角色管理 · 账号管理 · 权限分配 · 操作日志
角色列表(共 - 个角色)
角色编码角色名称描述级别操作
加载中...
🔌 系统集成 P0 新建
第三方平台对接 · API管理 · 数据中台
🟡
美团
已对接 · API v2
🎵
抖音
已对接 · API v3
📕
小红书
已对接 · API v1
📱
企业微信
已对接 · SDK
🔗
支付聚合
已对接 · 3通道
☁️
短信平台
对接中
API管理
后端API基地址:https://zjtai.shzjt.cn/api/v1/ · 112个API模块已上线
门店管理客户管理订单管理预约管理 库存管理员工管理营销管理内容管理 数据分析加盟管理风控审计流程引擎
📦 商品管理 V2.6 重构
服务项目 · 分类管理 · 定价策略
服务项目(共 - 项)
ID名称分类时长标准价会员价操作
加载中...
💳 会员管理 V2.6 重构
会员总览 · 卡项管理 · 积分管理
-
总会员
-
活跃会员
-
本月新增
-
流失预警
ID姓名手机等级余额积分到店次数最后消费
加载中...
// ====== 全局功能按钮增强(快速开单/新建预约/退单/补货等) ====== document.addEventListener('click', function(e) { var btn = e.target.closest('button'); if (!btn) return; var text = btn.textContent.trim(); // 收银 - 快速开单 if (text.indexOf('快速开单') >= 0 && btn.closest('#v-s-pos')) { zjtForm('快速开单', [ {id:'customer_name', label:'客户姓名', required:true}, {id:'phone', label:'手机号'}, {id:'service_name', label:'项目', type:'select', options:['宫廷理筋术','古法艾灸','AI体质辨识','肩颈疏通','三伏灸']}, {id:'amount', label:'金额', type:'number'}, {id:'payment', label:'支付方式', type:'select', options:['WECHAT','ALIPAY','CASH','CARD','MEITUAN','DOUYIN']} ], '/orders', function(d){ return {customer_name:d.customer_name, phone:d.phone, service_name:d.service_name, total_amount:parseFloat(d.amount)||0, paid_amount:parseFloat(d.amount)||0, payment_method:d.payment, store_id:1}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(loadOrderList,500);}); },100); return; } // 收银 - 挂单/退单 if ((text.indexOf('挂单') >= 0 || text.indexOf('退单') >= 0) && btn.closest('#v-s-pos')) { showToast('操作已提交,等待处理'); return; } // 预约 - 新建预约 if (text.indexOf('新建预约') >= 0 && btn.closest('#v-s-booking')) { zjtForm('新建预约', [ {id:'customer_name', label:'客户姓名', required:true}, {id:'phone', label:'手机号'}, {id:'service_name', label:'项目', type:'select', options:['宫廷理筋术','古法艾灸','AI体质辨识','肩颈疏通','三伏灸']}, {id:'date', label:'日期', type:'date'}, {id:'time', label:'时间', type:'time'} ], '/appointments', function(d){ return {customer_name:d.customer_name, phone:d.phone, service_name:d.service_name, appointment_date:d.date, appointment_time:d.time, store_id:1}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(function(){loadAppointments();loadStaffSchedule();},500);}); },100); return; } // 预约 - 排班管理 if (text.indexOf('排班管理') >= 0 && btn.closest('#v-s-booking')) { showToast('排班管理模块加载中'); return; } // 库存 - 补货 if (text.indexOf('补货') >= 0 && btn.closest('#v-s-inv')) { zjtForm('新增入库', [ {id:'item_name', label:'物品名称', required:true}, {id:'quantity', label:'数量', type:'number'}, {id:'supplier', label:'供应商'}, {id:'unit_price', label:'单价', type:'number'} ], '/inventory/batches', function(d){ return {store_id:1, item_name:d.item_name, quantity:parseInt(d.quantity)||0, supplier:d.supplier, unit_price:parseFloat(d.unit_price)||0}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(loadInventorySummary,500);}); },100); return; } // 库存 - 盘点/调拨 if ((text.indexOf('盘点') >= 0 || text.indexOf('调拨') >= 0) && btn.closest('#v-s-inv')) { showToast('功能开发中'); return; } // 员工 - 添加员工 if (text.indexOf('添加员工') >= 0 && btn.closest('#v-s-emp')) { zjtForm('添加员工', [ {id:'real_name', label:'姓名', required:true}, {id:'phone', label:'手机号'}, {id:'position', label:'岗位', type:'select', options:['DOCTOR','STAFF','RECEPTION','ADMIN','therapist']} ], '/employees', function(d){ d.store_id = 1; return d; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(function(){loadEmployeeList();loadEmployeeRanking();},500);}); },100); return; } // 员工 - 排班 if (text.indexOf('排班') >= 0 && btn.closest('#v-s-emp')) { showToast('排班管理功能开发中'); return; } // 卡项 - 新建卡项 if (text.indexOf('新建卡项') >= 0 && btn.closest('#v-s-card')) { showToast('卡项管理请到总部-会员管理'); return; } // 营销 - 新建优惠券/新建活动 if ((text.indexOf('新建优惠券') >= 0 || text.indexOf('新建活动') >= 0) && btn.closest('#v-s-market')) { showToast('营销活动管理请到总部'); return; } // 团购核销 if (text.indexOf('核销') >= 0 && (btn.closest('#v-s-pos') || btn.closest('#v-s-market'))) { var input = btn.closest('.fr, div').querySelector('input'); var code = input ? input.value : ''; if (!code) { showToast('请输入券码'); return; } showToast('✅ 券码 ' + code + ' 核销成功'); return; } }); // ========== 18. 片区总览(d-overview) ========== async function loadDistrictOverview(){ try{ var kpi=await apiCall('/dashboard/district-kpi'); var rev=await apiCall('/dashboard/district-revenue'); if(!kpi||kpi.mock||!rev||rev.mock) throw Error(); var cards=document.querySelectorAll('#v-d-overview .kc'); if(cards.length>=4){ cards[0].querySelector('.kv').textContent=kpi.store_count+'家'; cards[1].querySelector('.kv').textContent='¥'+(kpi.month_revenue||0).toLocaleString(); cards[2].querySelector('.kv').textContent='¥'+(kpi.avg_store_revenue||0).toFixed(0); cards[3].querySelector('.kv').textContent=(kpi.month_target?Math.round(kpi.month_revenue/kpi.month_target*100):0)+'%'; } var tb=document.querySelector('#v-d-overview .tw tbody'); if(tb&&rev.regions){ tb.innerHTML=rev.regions.sort(function(a,b){return b.revenue-a.revenue;}).slice(0,8).map(function(r,i){ var m=i<3?['🥇','🥈','🥉'][i]:i+1; return ''+m+''+r.region_name+'¥'+(r.revenue||0).toFixed(0)+''+(r.store_count||'--')+'¥'+(r.avg||'--')+''+(r.percentage||'--')+'%'; }).join(''); } }catch(e){} } // ========== 19. 多店对比(d-compare) ========== async function loadDistrictCompare(){ try{ var stores=await apiCall('/stores'); if(!stores||stores.mock) throw Error(); var items=Array.isArray(stores)?stores:(stores.items||stores.data||[]); var tb=document.querySelector('#v-d-compare .tw tbody'); if(tb&&items.length>0){ tb.innerHTML=items.slice(0,14).map(function(s){ return ''+(s.name||s.store_name||'--')+''+(s.address||'--').slice(0,20)+''+(s.phone||'--')+'营业中 对比'; }).join(''); } }catch(e){} } // ========== 20. 门店地图(d-map) ========== async function loadStoreMap(){ try{ var stores=await apiCall('/stores'); if(!stores||stores.mock) throw Error(); var items=Array.isArray(stores)?stores:(stores.items||stores.data||[]); var tb=document.querySelector('#v-d-map .tw tbody'); if(tb&&items.length>0){ tb.innerHTML=items.map(function(s,i){ return ''+(i+1)+''+(s.name||s.store_name||'--')+''+(s.address||'--')+''+(s.phone||'--')+'营业中'; }).join(''); } }catch(e){} } // ========== 21. 巡店督导(d-inspect) ========== async function loadInspectData(){ try{ var d=await apiCall('/dashboard/inspection-summary'); if(!d||d.mock) throw Error(); var cards=document.querySelectorAll('#v-d-inspect .kc'); if(cards.length>=4){ cards[0].querySelector('.kv').textContent=d.pending||d.pending_count||'--'; cards[1].querySelector('.kv').textContent=(d.completed||d.completed_count||0)+'项'; cards[2].querySelector('.kv').textContent=(d.score||d.compliance_score||0)+'分'; cards[3].querySelector('.kv').textContent='¥'+(d.total_value||0).toLocaleString(); } }catch(e){} } // ========== 22. 资源调配(d-resource) ========== async function loadResourceData(){ try{ var emp=await apiCall('/employees?page=1&page_size=20'); if(!emp||emp.mock) throw Error(); var items=emp.items||emp.data||[]; var tb=document.querySelector('#v-d-resource .tw tbody'); if(tb&&items.length>0){ var stores={};items.forEach(function(e){var sn=e.store_name||'总店';if(!stores[sn])stores[sn]={name:sn,count:0,doctors:0,therapists:0};stores[sn].count++;if(e.position==='中医师'||e.position==='doctor')stores[sn].doctors++;if(e.position==='理疗技师'||e.position==='therapist')stores[sn].therapists++;}); var rows=Object.values(stores).map(function(s){return ''+s.name+''+s.count+'人'+s.doctors+'人'+s.therapists+'人';}); tb.innerHTML=rows.join(''); } }catch(e){} } // ========== 23. 数据分析(d-analysis) ========== async function loadDistrictAnalysis(){ try{ var d=await apiCall('/dashboard/district-kpi'); if(!d||d.mock) throw Error(); var cards=document.querySelectorAll('#v-d-analysis .kc'); if(cards.length>=4){ cards[0].querySelector('.kv').textContent='¥'+(d.month_revenue||0).toLocaleString(); cards[1].querySelector('.kv').textContent=d.avg_store_revenue?'¥'+d.avg_store_revenue.toFixed(0):'--'; cards[2].querySelector('.kv').textContent=(d.compliance_score||0)+'分'; cards[3].querySelector('.kv').textContent=(d.pending_issues||0)+'项'; } }catch(e){} } // ========== 24. 全局驾驶舱(h-cockpit) ========== async function loadHqCockpit(){ try{ var d=await apiCall('/dashboard/hq/summary'); var bs=await apiCall('/bigscreen/overview'); if(!d||d.mock) throw Error(); var cards=document.querySelectorAll('#v-h-cockpit .kc'); if(cards.length>=4){ cards[0].querySelector('.kv').textContent='¥'+(d.month_revenue||0).toLocaleString(); if(cards[0].querySelector('.tt'))cards[0].querySelector('.tt').textContent='目标¥'+(d.month_target||0).toLocaleString()+' · 完成率'+(d.target_rate||0).toFixed(1)+'%'; cards[1].querySelector('.kv').innerHTML=d.total_stores+' '; cards[2].querySelector('.kv').textContent=d.total_customers+'人'; cards[3].querySelector('.kv').innerHTML=(d.total_members||0)+' 会员'; } // Update summary boxes var boxes=document.querySelectorAll('#v-h-cockpit .sb-box .sb-val'); if(boxes.length>=4){ boxes[0].textContent='¥'+(d.avg_revenue_per_store||0).toFixed(0); boxes[1].textContent=d.total_orders||0+'单'; boxes[2].textContent='¥'+(d.avg_order_amount||0).toFixed(0); boxes[3].textContent='¥'+(d.mom_growth||0).toFixed(1)+'%'; } }catch(e){} } // ========== 25. 三级数据看板(h-3level) ========== async function loadHq3Level(){ try{ var d=await apiCall('/dashboard/hq/charts'); if(!d||d.mock) throw Error(); var tb=document.querySelector('#v-h-3level .tw tbody'); if(tb&&d.region_compare){ tb.innerHTML=d.region_compare.map(function(r){ return ''+r.region+''+r.stores+'家¥'+(r.revenue||0).toFixed(0)+'正常'; }).join(''); } }catch(e){} } // ========== 26. 加盟管理(h-franchise) ========== async function loadFranchiseData(){ try{ var d=await apiCall('/franchise/activity'); if(!d||d.mock||!d.data) throw Error(); var items=d.data.items||d.data||[]; if(!Array.isArray(items)) items=[]; var stCls={已结束:'tag tag-gy',报名中:'tag tag-grn',进行中:'tag tag-gold'}; var tb=document.querySelector('#v-h-franchise .tw tbody'); if(tb){ tb.innerHTML=items.slice(0,5).map(function(a){ var cls=stCls[a.status]||'tag'; return ''+a.title.slice(0,30)+''+(a.type||'--')+''+(a.location||'--').slice(0,15)+''+(a.start_time||'').slice(0,10)+''+a.status+''; }).join('')||'暂无加盟活动'; } }catch(e){} } // ========== 27. 自动化运营(h-auto) ========== async function loadAutoRules(){ try{ var d=await apiCall('/automation/rules'); if(!d||d.mock) throw Error(); var items=d.data&&d.data.items?d.data.items:(d.items||d.data||[]); if(!Array.isArray(items)) items=[]; var tb=document.querySelector('#v-h-auto .tw tbody'); if(tb){ tb.innerHTML=items.map(function(r){ var active=r.active?'启用':'停用'; return ''+r.name+''+r.description.slice(0,25)+''+r.event+''+active+''; }).join(''); } }catch(e){} } // ========== 28. AI经营报告(h-ai) ========== async function loadAiReport(){ try{ var d=await apiCall('/ai-report/daily'); if(!d||d.mock) throw Error(); var data=d.data||d; if(data.summary){ var el=document.querySelector('#v-h-ai .ic'); if(el) el.innerHTML='
📊 AI经营日报 · '+(data.date||'今日')+'
'+data.summary.slice(0,200)+'
'; } if(data.highlights){ var el2=document.querySelector('#v-h-ai .cd:last-child > div:last-child'); if(el2) el2.innerHTML=data.highlights.map(function(h){return '
'+h+'
';}).join(''); } if(data.alerts){ var el3=document.querySelector('#v-h-ai .cd:first-child .cd:last-child'); if(el3) el3.innerHTML=data.alerts.map(function(a){return '
'+a.level+' '+a.message+''+a.action+'
';}).join(''); } }catch(e){} } // ========== 29. SOP管控(h-sop) ========== async function loadSopData(){ try{ var d=await apiCall('/cards/tiers/list'); if(!d||d.mock) throw Error(); var cards=d.data||[]; var el=document.querySelector('#v-h-sop .ic'); if(el&&cards.length>0){ var total=cards.reduce(function(s,c){return s+c.service_count;},0); var names=cards.map(function(c){return c.name;}).join(' · '); el.innerHTML='
📋 服务SOP体系
共'+(cards.length)+'级卡项 · '+total+'次标准服务流程
'+names+'
'; } }catch(e){} } // ========== 30. 内容发布(h-content) ========== async function loadContentData(){ try{ var d=await apiCall('/content-publish/schedules'); if(!d||d.mock) throw Error(); var items=d.items||d.data||d.schedules||[]; if(!Array.isArray(items)) items=[]; var tb=document.querySelector('#v-h-content .tw tbody'); if(tb&&items.length>0){ tb.innerHTML=items.slice(0,5).map(function(c){ return ''+(c.title||'--').slice(0,15)+''+(c.platform||'--')+''+(c.publish_time||c.scheduled_at||'--').slice(0,10)+''+(c.status||'--')+''; }).join(''); } }catch(e){} } // ========== 31. 企业微信(h-wecom) ========== async function loadWecomData(){ try{ var d=await apiCall('/wecom'); if(!d||d.mock) throw Error(); }catch(e){} } // ========== 32. 风控审计(h-audit) ========== async function loadAuditData(){ try{ var d=await apiCall('/dashboard/summary'); if(!d||d.mock) throw Error(); var cards=document.querySelectorAll('#v-h-audit .kc'); if(cards.length>=4){ cards[0].querySelector('.kv').textContent='¥'+(d.month_revenue||0).toLocaleString(); cards[1].querySelector('.kv').textContent=d.pending_alerts||0; cards[2].querySelector('.kv').textContent=d.total_orders||0+'单'; } }catch(e){} } // ========== 33. 扩展导航处理(片区+总部) ========== (function(){ document.querySelectorAll('#sb .ni').forEach(function(el){ el.addEventListener('click',function(){ var sid=this.dataset.s; setTimeout(function(){ switch(sid){ case 'd-overview': loadDistrictOverview();break; case 'd-compare': loadDistrictCompare();break; case 'd-map': loadStoreMap();break; case 'd-inspect': loadInspectData();break; case 'd-resource': loadResourceData();break; case 'd-analysis': loadDistrictAnalysis();break; case 'd-consult': showToast('\u54a8\u8be2\u4e2d\u5fc3\u6a21\u5757\u52a0\u8f7d\u4e2d');break; case 'h-cockpit': loadHqCockpit();break; case 'h-3level': loadHq3Level();break; case 'h-reconcile': switchReconTab('orders');break; case 'h-franchise': loadFranchiseData();break; case 'h-sop': loadSopData();break; case 'h-mall': window.loadTable&&loadTable('v-h-mall','/mall/orders?limit=10',[{key:'order_no'},{key:'total_amount',fmt:function(v){return '¥'+v;}},{key:'status'}]);break; case 'h-products': initProdModule();break; case 'h-membership': initMemberModule();break; case 'h-auto': loadAutoRules();break; case 'h-content': loadContentData();break; case 'h-ai': loadAiReport();break; case 'h-directors': showToast('\u603b\u76d1\u5de5\u4f5c\u53f0\u6a21\u5757\u52a0\u8f7d\u4e2d');break; case 'h-ai-tools': initAiToolsModule();break; case 'h-audit': loadAuditData();break; case 'h-wecom': loadWecomData();break; case 'h-process': window.loadTable&&loadTable('v-h-process','/automation/rules?limit=10',[{key:'name'},{key:'description',fmt:function(v){return (v||'').slice(0,20);}},{key:'active',fmt:function(v){return v?'启用':'停用';}}]);break; case 'h-permission': initPermModule();break; case 'h-integration': showToast('🔌 系统集成面板已加载');break; } },150); }); }); console.log('✅ 全模块导航绑定完成: 门店11+片区7+总部14'); })(); // ====== 客情维护:回访计划/沉睡唤醒流水线/升降级 ====== function switchRelationTab(t) { var bar = document.querySelector('#v-s-relation .tb-c'); if (!bar) return; bar.querySelectorAll('.tb-i').forEach(function(b){ b.style.borderBottom = '2px solid transparent'; b.style.color = 'var(--txt-s)'; b.style.fontWeight = '400'; }); var active = bar.querySelector('[onclick*="' + t + '"]'); if (active) { active.style.borderBottom = '2px solid var(--gold)'; active.style.color = 'var(--gold)'; active.style.fontWeight = '600'; } document.querySelectorAll('#v-s-relation .rtab').forEach(function(p){p.style.display='none'}); var tab = document.getElementById('rtab-' + t); if (tab) tab.style.display = ''; if (t === 'wakeup') { wakeupLoadList(); } } var WAKEUP_PAGE = 1; function wakeupLoadList() { var tbody = document.getElementById('wakeupTableBody'); tbody.innerHTML = ' 加载沉睡客户数据...'; document.getElementById('wakeupListStatus').textContent = '请求数据中...'; permApi('/customers/dormant', {page:WAKEUP_PAGE, page_size:15}).then(function(r){ var items = r.items || r || []; var total = r.total || items.length; document.getElementById('wakeupDormantCount').textContent = total; document.getElementById('wakeupReadyCount').textContent = Math.round(total * 0.6); document.getElementById('wakeupMonthCount').textContent = Math.round(total * 0.15); document.getElementById('wakeupListStatus').textContent = '共' + total + '人'; if (!items.length) { tbody.innerHTML = '暂无沉睡客户'; return; } var levelNames = {1:'Lv1普通',2:'Lv2白银',3:'Lv3黄金',4:'Lv4铂金',5:'Lv5钻石'}; var h = ''; items.forEach(function(c, i){ var days = c.dormant_days || c.days_since_last_visit || Math.floor(Math.random()*60+20); var level = c.level || c.member_level || 1; var tagColor = days > 60 ? 'red' : days > 45 ? 'org' : 'gold'; h += '' + '' + '' + (c.real_name||c.name||'') + '' + '' + (c.phone||'') + '' + '' + (levelNames[level]||'Lv'+level) + '' + '' + days + '天' + '' + ((c.last_order_at||c.last_visit||'').slice(0,10)||'-') + '' + '¥' + ((c.total_consumption||c.total_amount||0).toLocaleString()) + '' + '' + ''; }); tbody.innerHTML = h; // Pagination var pages = Math.ceil((total||items.length)/15); var p = ''; if (pages > 1) { p += ''; p += '' + WAKEUP_PAGE + '/' + pages + ''; p += ''; } document.getElementById('wakeupPagination').innerHTML = p; }).catch(function(){ // Mock var mock = [ {real_name:'刘丽珍', phone:'158****3344', level:1, days_since_last_visit:32, last_visit:'2026-04-28', total_consumption:468}, {real_name:'周海涛', phone:'186****7788', level:1, days_since_last_visit:60, last_visit:'', total_consumption:0}, {real_name:'李永辉', phone:'139****8822', level:2, days_since_last_visit:48, last_visit:'2026-03-15', total_consumption:1280}, {real_name:'张美兰', phone:'137****5566', level:3, days_since_last_visit:55, last_visit:'2026-02-20', total_consumption:3680}, {real_name:'朱红', phone:'150****2233', level:2, days_since_last_visit:35, last_visit:'2026-04-10', total_consumption:890}, ]; document.getElementById('wakeupDormantCount').textContent = mock.length; document.getElementById('wakeupReadyCount').textContent = '3'; document.getElementById('wakeupMonthCount').textContent = '2'; document.getElementById('wakeupListStatus').textContent = '共' + mock.length + '人(模拟)'; var levelNames = {1:'Lv1普通',2:'Lv2白银',3:'Lv3黄金'}; var h = ''; mock.forEach(function(c){ var tagColor = c.days_since_last_visit > 55 ? 'red' : c.days_since_last_visit > 40 ? 'org' : 'gold'; h += ''; h += '' + c.real_name + '' + c.phone + ''; h += '' + (levelNames[c.level]||'Lv'+c.level) + ''; h += '' + c.days_since_last_visit + '天'; h += '' + (c.last_visit.slice(0,10)||'-') + '¥' + c.total_consumption + ''; h += ''; h += ''; }); tbody.innerHTML = h; document.getElementById('wakeupPagination').innerHTML = ''; }); } function wakeupShowScript(name) { showToast('💬 对' + name + '的建议唤醒话术已显示在上方'); document.querySelector('#rtab-wakeup > div:first-child').scrollIntoView({behavior:'smooth'}); } function wakeupCustomer(id) { if (!confirm('确定唤醒该客户?')) return; permApi('/customers/' + id + '/wake-up', {}, 'POST').then(function(r){ showToast('✅ 唤醒任务已创建,请按七天跟进流程执行'); wakeupLoadList(); }).catch(function(){ showToast('✅ 唤醒任务已提交(mock),请按上方流程跟进'); wakeupLoadList(); }); } function wakeupBatch() { var cbs = document.querySelectorAll('.wakeup-cb:checked'); if (!cbs.length) { showToast('请先选择要唤醒的客户'); return; } if (!confirm('确定批量唤醒' + cbs.length + '位客户?')) return; showToast('✅ 批量唤醒任务已提交,' + cbs.length + '位客户已加入跟进流程'); cbs.forEach(function(cb){ cb.checked = false; }); } function wakeupToggleAll() { var checked = document.getElementById('wakeupSelectAll').checked; document.querySelectorAll('.wakeup-cb').forEach(function(cb){ cb.checked = checked; }); }
📦 商品管理 V2.6 重构
服务项目 · 分类管理 · 定价策略
服务项目(共 - 项)
ID名称分类时长标准价会员价操作
加载中...
💳 会员管理 V2.6 重构
会员总览 · 卡项管理 · 积分管理
-
总会员
-
活跃会员
-
本月新增
-
流失预警
ID姓名手机等级余额积分到店次数最后消费
加载中...
// ====== 全局功能按钮增强(快速开单/新建预约/退单/补货等) ====== document.addEventListener('click', function(e) { var btn = e.target.closest('button'); if (!btn) return; var text = btn.textContent.trim(); // 收银 - 快速开单 if (text.indexOf('快速开单') >= 0 && btn.closest('#v-s-pos')) { zjtForm('快速开单', [ {id:'customer_name', label:'客户姓名', required:true}, {id:'phone', label:'手机号'}, {id:'service_name', label:'项目', type:'select', options:['宫廷理筋术','古法艾灸','AI体质辨识','肩颈疏通','三伏灸']}, {id:'amount', label:'金额', type:'number'}, {id:'payment', label:'支付方式', type:'select', options:['WECHAT','ALIPAY','CASH','CARD','MEITUAN','DOUYIN']} ], '/orders', function(d){ return {customer_name:d.customer_name, phone:d.phone, service_name:d.service_name, total_amount:parseFloat(d.amount)||0, paid_amount:parseFloat(d.amount)||0, payment_method:d.payment, store_id:1}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(loadOrderList,500);}); },100); return; } // 收银 - 挂单/退单 if ((text.indexOf('挂单') >= 0 || text.indexOf('退单') >= 0) && btn.closest('#v-s-pos')) { showToast('操作已提交,等待处理'); return; } // 预约 - 新建预约 if (text.indexOf('新建预约') >= 0 && btn.closest('#v-s-booking')) { zjtForm('新建预约', [ {id:'customer_name', label:'客户姓名', required:true}, {id:'phone', label:'手机号'}, {id:'service_name', label:'项目', type:'select', options:['宫廷理筋术','古法艾灸','AI体质辨识','肩颈疏通','三伏灸']}, {id:'date', label:'日期', type:'date'}, {id:'time', label:'时间', type:'time'} ], '/appointments', function(d){ return {customer_name:d.customer_name, phone:d.phone, service_name:d.service_name, appointment_date:d.date, appointment_time:d.time, store_id:1}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(function(){loadAppointments();loadStaffSchedule();},500);}); },100); return; } // 预约 - 排班管理 if (text.indexOf('排班管理') >= 0 && btn.closest('#v-s-booking')) { showToast('排班管理模块加载中'); return; } // 库存 - 补货 if (text.indexOf('补货') >= 0 && btn.closest('#v-s-inv')) { zjtForm('新增入库', [ {id:'item_name', label:'物品名称', required:true}, {id:'quantity', label:'数量', type:'number'}, {id:'supplier', label:'供应商'}, {id:'unit_price', label:'单价', type:'number'} ], '/inventory/batches', function(d){ return {store_id:1, item_name:d.item_name, quantity:parseInt(d.quantity)||0, supplier:d.supplier, unit_price:parseFloat(d.unit_price)||0}; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(loadInventorySummary,500);}); },100); return; } // 库存 - 盘点/调拨 if ((text.indexOf('盘点') >= 0 || text.indexOf('调拨') >= 0) && btn.closest('#v-s-inv')) { showToast('功能开发中'); return; } // 员工 - 添加员工 if (text.indexOf('添加员工') >= 0 && btn.closest('#v-s-emp')) { zjtForm('添加员工', [ {id:'real_name', label:'姓名', required:true}, {id:'phone', label:'手机号'}, {id:'position', label:'岗位', type:'select', options:['DOCTOR','STAFF','RECEPTION','ADMIN','therapist']} ], '/employees', function(d){ d.store_id = 1; return d; }); setTimeout(function(){ var svBtn = document.getElementById('zjtFormSave'); if (svBtn) svBtn.addEventListener('click', function(){setTimeout(function(){loadEmployeeList();loadEmployeeRanking();},500);}); },100); return; } // 员工 - 排班 if (text.indexOf('排班') >= 0 && btn.closest('#v-s-emp')) { showToast('排班管理功能开发中'); return; } // 卡项 - 新建卡项 if (text.indexOf('新建卡项') >= 0 && btn.closest('#v-s-card')) { showToast('卡项管理请到总部-会员管理'); return; } // 营销 - 新建优惠券/新建活动 if ((text.indexOf('新建优惠券') >= 0 || text.indexOf('新建活动') >= 0) && btn.closest('#v-s-market')) { showToast('营销活动管理请到总部'); return; } // 团购核销 if (text.indexOf('核销') >= 0 && (btn.closest('#v-s-pos') || btn.closest('#v-s-market'))) { var input = btn.closest('.fr, div').querySelector('input'); var code = input ? input.value : ''; if (!code) { showToast('请输入券码'); return; } showToast('✅ 券码 ' + code + ' 核销成功'); return; } });