import { mockTasks, mockPerformance } from '../../utils/mock-data' import type { Task } from '../../utils/mock-data' import { getTaskTypeColor } from '../../utils/task' /** 任务类型 → 详情页路由映射 */ const DETAIL_ROUTE_MAP: Record = { callback: '/pages/task-detail-callback/task-detail-callback', priority_recall: '/pages/task-detail-priority/task-detail-priority', relationship: '/pages/task-detail-relationship/task-detail-relationship', } /** 为任务附加颜色信息 */ function enrichTask(task: Task) { return { ...task, typeColor: getTaskTypeColor(task.taskType), } } Page({ data: { /** 页面状态:loading / empty / normal */ pageState: 'loading' as 'loading' | 'empty' | 'normal', /** 任务列表(附带颜色) */ tasks: [] as ReturnType[], /** 任务总数 */ taskCount: 0, /** Banner 指标 */ bannerMetrics: [] as Array<{ label: string; value: string }>, /** Banner 标题 */ bannerTitle: '', /** 是否还有更多数据(模拟分页) */ hasMore: true, }, onLoad() { this.loadData() }, onShow() { // TabBar 页面每次显示时可刷新 }, /** 下拉刷新 */ onPullDownRefresh() { this.loadData(() => { wx.stopPullDownRefresh() }) }, /** 触底加载更多 */ onReachBottom() { if (!this.data.hasMore) return // Mock:无更多数据 this.setData({ hasMore: false }) wx.showToast({ title: '没有更多了', icon: 'none' }) }, /** 加载数据 */ loadData(cb?: () => void) { this.setData({ pageState: 'loading' }) // 模拟网络延迟 setTimeout(() => { const pending = mockTasks.filter((t) => t.status === 'pending') const enriched = pending.map(enrichTask) const perf = mockPerformance const bannerTitle = `${perf.currentTier}` const bannerMetrics = [ { label: '本月收入', value: `¥${perf.monthlyIncome.toLocaleString()}` }, { label: '今日服务', value: `${perf.todayServiceCount}` }, { label: '距下一档', value: `¥${perf.nextTierGap.toLocaleString()}` }, ] this.setData({ pageState: enriched.length > 0 ? 'normal' : 'empty', tasks: enriched, taskCount: enriched.length, bannerTitle, bannerMetrics, hasMore: true, }) cb?.() }, 600) }, /** 点击任务卡片 → 跳转详情 */ onTaskTap(e: WechatMiniprogram.TouchEvent) { const { id, tasktype } = e.currentTarget.dataset const route = DETAIL_ROUTE_MAP[tasktype] || '/pages/task-detail/task-detail' wx.navigateTo({ url: `${route}?id=${id}`, fail: () => wx.showToast({ title: '页面跳转失败', icon: 'none' }), }) }, /** 长按任务卡片 → 操作菜单 */ onTaskLongPress(e: WechatMiniprogram.TouchEvent) { const { id, name } = e.currentTarget.dataset wx.showActionSheet({ itemList: ['查看详情', '标记完成', '添加备注'], success: (res) => { switch (res.tapIndex) { case 0: { // 查看详情 — 复用点击逻辑 const { tasktype } = e.currentTarget.dataset const route = DETAIL_ROUTE_MAP[tasktype] || '/pages/task-detail/task-detail' wx.navigateTo({ url: `${route}?id=${id}` }) break } case 1: wx.showToast({ title: `已标记「${name}」完成`, icon: 'success' }) break case 2: wx.showToast({ title: `为「${name}」添加备注`, icon: 'none' }) break } }, }) }, })