import { mockCustomerDetail } from "../../utils/mock-data" interface ConsumptionRecord { id: string type: "table" | "shop" | "recharge" date: string tableName?: string startTime?: string endTime?: string duration?: string tableFee?: number tableOrigPrice?: number coaches?: Array<{ name: string level: string levelColor: string courseType: string hours: string perfHours?: string fee: number }> foodAmount?: number foodOrigPrice?: number totalAmount?: number totalOrigPrice?: number payMethod?: string rechargeAmount?: number } const mockRecords: ConsumptionRecord[] = [ { id: "r1", type: "table", date: "2026-02-05", tableName: "A12号台", startTime: "21:30", endTime: "00:50", duration: "3h 20min", tableFee: 180, tableOrigPrice: 240, coaches: [ { name: "小燕", level: "senior", levelColor: "pink", courseType: "基础课", hours: "2.5h", fee: 200 }, { name: "Amy", level: "junior", levelColor: "green", courseType: "激励课", hours: "0.5h", perfHours: "1h", fee: 50 }, ], foodAmount: 210, foodOrigPrice: 260, totalAmount: 640, totalOrigPrice: 750, }, { id: "r2", type: "table", date: "2026-02-01", tableName: "888号台", startTime: "14:00", endTime: "16:00", duration: "2h 00min", tableFee: 120, coaches: [ { name: "泡芙", level: "middle", levelColor: "purple", courseType: "激励课", hours: "1.5h", perfHours: "2h", fee: 100 }, ], totalAmount: 220, }, { id: "r3", type: "shop", date: "2026-01-28", coaches: [ { name: "小燕", level: "senior", levelColor: "pink", courseType: "基础课", hours: "1h", fee: 100 }, ], foodAmount: 180, totalAmount: 280, }, ] Page({ data: { pageState: "loading" as "loading" | "empty" | "error" | "normal", detail: { id: "cust_001", name: "王先生", avatarChar: "王", phone: "13812345678", balance: "8,600", consumption60d: "2,800", idealInterval: "7天", daysSinceVisit: "12天", }, phoneVisible: false, aiColor: "indigo" as "red" | "orange" | "yellow" | "blue" | "indigo" | "purple", aiInsight: { summary: "高价值 VIP 客户,月均到店 4-5 次,偏好夜场中式台球,近期对斯诺克产生兴趣。社交属性强,常带固定球搭子,有拉新能力。储值余额充足,对促销活动响应积极。", strategies: [ { color: "green", text: "最后到店距今 12 天,超出理想间隔 7 天,建议尽快安排助教小燕主动联系召回" }, { color: "amber", text: "客户提到想练斯诺克走位,可推荐斯诺克专项课程包,结合储值优惠提升客单价" }, { color: "pink", text: "社交属性强,可邀请参加门店球友赛事活动,带动球搭子到店消费" }, ], }, clues: [ { category: "客户\n基础", categoryColor: "primary", text: "🎂 生日 3月15日 · VIP会员 · 注册2年", source: "系统", }, { category: "消费\n习惯", categoryColor: "success", text: "🌙 常来夜场 · 月均4-5次", source: "系统", }, { category: "消费\n习惯", categoryColor: "success", text: "💰 高客单价", source: "系统", detail: "近60天场均消费 ¥420,高于门店均值 ¥180;偏好夜场时段,酒水附加消费占比 35%", }, { category: "玩法\n偏好", categoryColor: "purple", text: "🎱 偏爱中式 · 斯诺克进阶中", source: "系统", }, { category: "促销\n接受", categoryColor: "warning", text: "🍷 爱点酒水套餐 · 对储值活动敏感", source: "系统", detail: "最近3次到店均点了酒水套餐;上次 ¥5000 储值活动当天即充值,对满赠类活动响应率高", }, { category: "社交\n关系", categoryColor: "pink", text: "👥 常带朋友 · 固定球搭子2人", source: "系统", detail: "近60天 80% 的到店为多人局,常与「李哥」「阿杰」同行;曾介绍2位新客办卡", }, { category: "重要\n反馈", categoryColor: "error", text: "⚠️ 上次提到想练斯诺克走位,对球桌维护质量比较在意,建议优先安排VIP房", source: "小燕", }, ], coachTasks: [ { name: "小燕", level: "senior", levelColor: "pink", taskType: "高优先召回", taskColor: "red", bgClass: "coach-card-red", status: "normal", lastService: "02-20 21:30 · 2.5h", metrics: [ { label: "近60天次数", value: "18次", color: "primary" }, { label: "总时长", value: "17h" }, { label: "次均时长", value: "0.9h", color: "warning" }, ], }, { name: "泡芙", level: "middle", levelColor: "purple", taskType: "优先召回", taskColor: "orange", bgClass: "coach-card-orange", status: "pinned", lastService: "02-15 14:00 · 1.5h", metrics: [ { label: "近60天次数", value: "12次", color: "primary" }, { label: "总时长", value: "11h" }, { label: "次均时长", value: "0.9h", color: "warning" }, ], }, { name: "Amy", level: "junior", levelColor: "green", taskType: "关系构建", taskColor: "pink", bgClass: "coach-card-pink", status: "normal", lastService: "02-10 19:00 · 1.0h", metrics: [ { label: "近60天次数", value: "8次", color: "primary" }, { label: "总时长", value: "6h" }, { label: "次均时长", value: "0.75h", color: "warning" }, ], }, { name: "Lucy", level: "senior", levelColor: "pink", taskType: "客户回访", taskColor: "teal", bgClass: "coach-card-teal", status: "abandoned", lastService: "01-28 20:30 · 2.0h", metrics: [ { label: "近60天次数", value: "6次", color: "primary" }, { label: "总时长", value: "9h" }, { label: "次均时长", value: "1.5h", color: "warning" }, ], }, ], favoriteCoaches: [ { emoji: "❤️", name: "小燕", relationIndex: "9.2", indexColor: "success", bgClass: "fav-card-pink", stats: [ { label: "基础", value: "12h", color: "primary" }, { label: "激励", value: "5h", color: "warning" }, { label: "上课", value: "18次" }, { label: "充值", value: "¥5,000", color: "success" }, ], }, { emoji: "💛", name: "泡芙", relationIndex: "7.8", indexColor: "warning", bgClass: "fav-card-amber", stats: [ { label: "基础", value: "8h", color: "primary" }, { label: "激励", value: "3h", color: "warning" }, { label: "上课", value: "12次" }, { label: "充值", value: "¥3,000", color: "success" }, ], }, ], consumptionRecords: mockRecords, loadingMore: false, noteModalVisible: false, sortedNotes: [ { id: 'n1', tagLabel: '管理员', createdAt: '2026-03-05 14:30', content: '本月到店积极,对斯诺克课程感兴趣,建议持续跟进推荐相关课程包' }, { id: 'n2', tagLabel: '小燕', createdAt: '2026-02-20 16:45', content: '客户反馈服务态度很好,提到下次想带朋友一起来' }, { id: 'n3', tagLabel: '管理员', createdAt: '2026-02-10 10:00', content: '上次储值活动当天即充值 ¥5000,对满赠类活动响应积极' }, ] as Array<{ id: string; tagLabel: string; createdAt: string; content: string }>, }, onLoad(options: any) { // 随机 AI 配色 const aiColors = ['red', 'orange', 'yellow', 'blue', 'indigo', 'purple'] as const const aiColor = aiColors[Math.floor(Math.random() * aiColors.length)] this.setData({ aiColor }) this.loadDetail() }, loadDetail() { this.setData({ pageState: "normal" }) }, onRetry() { this.loadDetail() }, /** 查看/隐藏手机号 */ onTogglePhone() { this.setData({ phoneVisible: !this.data.phoneVisible }) }, /** 复制手机号 */ onCopyPhone() { const phone = this.data.detail.phone wx.setClipboardData({ data: phone, success: () => { wx.showToast({ title: '手机号码已复制', icon: 'none' }) }, }) }, onViewServiceRecords() { wx.navigateTo({ url: "/pages/customer-service-records/customer-service-records" }) }, onStartChat() { wx.navigateTo({ url: "/pages/chat/chat" }) }, onAddNote() { this.setData({ noteModalVisible: true }) }, onNoteConfirm(e: any) { this.setData({ noteModalVisible: false }) }, onNoteCancel() { this.setData({ noteModalVisible: false }) }, })