微信小程序页面迁移校验之前 P5任务处理之前
This commit is contained in:
123
apps/miniprogram - 副本/miniprogram/pages/task-list/task-list.ts
Normal file
123
apps/miniprogram - 副本/miniprogram/pages/task-list/task-list.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
import { mockTasks, mockPerformance } from '../../utils/mock-data'
|
||||
import type { Task } from '../../utils/mock-data'
|
||||
import { getTaskTypeColor } from '../../utils/task'
|
||||
|
||||
/** 任务类型 → 详情页路由映射 */
|
||||
const DETAIL_ROUTE_MAP: Record<string, string> = {
|
||||
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<typeof enrichTask>[],
|
||||
/** 任务总数 */
|
||||
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
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user