You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.6 KiB
171 lines
4.6 KiB
const app = getApp<IAppOption>() |
|
|
|
Page({ |
|
data: { |
|
// 时间筛选 |
|
startDate: '', |
|
endDate: '', |
|
type: 'day', // day-按日,month-按月 |
|
|
|
// 统计数据(从 summary 获取) |
|
invitePatientCount: 0, |
|
jumpPatientCount: 0, |
|
enrollPatientCount: 0, |
|
|
|
// 列表数据 |
|
list: [] as any[], |
|
|
|
// 分页信息 |
|
page: 1, |
|
pageSize: 20, |
|
pagination: { |
|
count: 0, |
|
page: 0, |
|
pages: 0, |
|
}, |
|
}, |
|
onLoad() { |
|
// 地推端统计页面,仅允许地推人员访问 |
|
app.waitLogin({ types: [3] }).then(() => { |
|
// 设置默认时间范围(2026年3月至今) |
|
this.setDefaultDateRange() |
|
|
|
// 获取列表数据(包含顶部统计数据) |
|
this.getList(true) |
|
}) |
|
}, |
|
// 设置默认时间范围(2026年3月至今) |
|
setDefaultDateRange() { |
|
const endDate = new Date() |
|
const startDate = new Date('2026-03-01') |
|
|
|
this.setData({ |
|
startDate: this.formatDate(startDate), |
|
endDate: this.formatDate(endDate), |
|
}) |
|
}, |
|
// 格式化日期 |
|
formatDate(date: Date): string { |
|
const year = date.getFullYear() |
|
const month = String(date.getMonth() + 1).padStart(2, '0') |
|
const day = String(date.getDate()).padStart(2, '0') |
|
return `${year}-${month}-${day}` |
|
}, |
|
// 获取列表数据(包含顶部统计数据) |
|
getList(reset = false) { |
|
const { startDate, endDate, type, page, pageSize, pagination } = this.data |
|
|
|
// 如果是重置(如筛选条件变化),先重置状态 |
|
if (reset) { |
|
if (pagination.page > 0 && pagination.page < pagination.pages) return // 如果正在加载,不重复请求 |
|
this.setData({ |
|
page: 1, |
|
list: [], |
|
pagination: { count: 0, page: 0, pages: 0 }, |
|
}) |
|
} else { |
|
// 非重置情况下,如果正在加载或已加载完,不再请求 |
|
if (pagination.page > 0 && (pagination.page >= pagination.pages)) return |
|
} |
|
|
|
const currentPage = reset ? 1 : page |
|
|
|
wx.ajax({ |
|
method: 'GET', |
|
url: '/app/promoter/promoter/patient-statistics-list', |
|
data: { |
|
startDate, |
|
endDate, |
|
type, |
|
page: currentPage, |
|
pageSize, |
|
}, |
|
}).then((res: any) => { |
|
const newList = res.list || [] |
|
const total = res.total || 0 |
|
const summary = res.summary || {} |
|
|
|
// 转换数据格式 |
|
const formattedList = newList.map((item: any) => ({ |
|
date: item.statDate, |
|
inviteCount: item.invitePatientCount || 0, |
|
jumpCount: item.jumpPatientCount || 0, |
|
enrollCount: item.enrollPatientCount || 0, |
|
indicationStats: (item.indicationStats || []).map((ind: any) => ({ |
|
indicationName: ind.indicationName, |
|
inviteCount: ind.invitePatientCount || 0, |
|
jumpCount: ind.jumpPatientCount || 0, |
|
enrollCount: ind.enrollPatientCount || 0, |
|
})), |
|
})) |
|
|
|
const list = reset ? formattedList : [...this.data.list, ...formattedList] |
|
const pages = Math.ceil(total / pageSize) |
|
|
|
this.setData({ |
|
// 顶部统计数据从 summary 获取 |
|
invitePatientCount: summary.invitePatientCount || 0, |
|
jumpPatientCount: summary.jumpPatientCount || 0, |
|
enrollPatientCount: summary.enrollPatientCount || 0, |
|
// 列表数据 |
|
list, |
|
page: currentPage + 1, |
|
pagination: { |
|
count: total, |
|
page: currentPage, |
|
pages, |
|
}, |
|
}) |
|
}) |
|
}, |
|
|
|
// 加载更多 |
|
onReachBottom() { |
|
this.getList() |
|
}, |
|
// 开始时间选择 |
|
handleStartDateChange(e: WechatMiniprogram.CustomEvent) { |
|
const startDate = e.detail.value |
|
const { endDate } = this.data |
|
|
|
// 如果已选择结束时间,验证开始时间不能大于结束时间 |
|
if (endDate && startDate > endDate) { |
|
wx.showToast({ |
|
title: '开始时间不能大于结束时间', |
|
icon: 'none', |
|
}) |
|
return |
|
} |
|
|
|
this.setData({ startDate }) |
|
this.getList(true) |
|
}, |
|
// 结束时间选择 |
|
handleEndDateChange(e: WechatMiniprogram.CustomEvent) { |
|
const endDate = e.detail.value |
|
const { startDate } = this.data |
|
|
|
// 如果已选择开始时间,验证结束时间不能小于开始时间 |
|
if (startDate && endDate < startDate) { |
|
wx.showToast({ |
|
title: '结束时间不能小于开始时间', |
|
icon: 'none', |
|
}) |
|
return |
|
} |
|
|
|
this.setData({ endDate }) |
|
this.getList(true) |
|
}, |
|
// 切换统计类型 |
|
handleTypeChange(e: WechatMiniprogram.CustomEvent) { |
|
const type = e.currentTarget.dataset.type |
|
this.setData({ type }) |
|
this.getList(true) |
|
}, |
|
handleBack() { |
|
wx.navigateBack() |
|
}, |
|
}) |
|
|
|
export {}
|
|
|