JhHardwareWRS/pages/dashboard/dashboard.js
2026-06-24 15:19:14 +08:00

135 lines
3.3 KiB
JavaScript

const api = require('../../utils/api')
const util = require('../../utils/util')
Page({
data: {
startDate: '',
endDate: '',
rows: [],
page: 1,
pageInput: '1',
totalPages: 1,
refreshing: false,
filterVoided: true,
},
onLoad(options) {
const defaultDate = util.today()
this.setData({
startDate: options.startDate || defaultDate,
endDate: options.endDate || defaultDate,
})
},
onShow() {
this.load()
},
async load(page = this.data.page) {
try {
const result = await api.listDashboard({
startDate: this.data.startDate,
endDate: this.data.endDate,
page,
pageSize: 8,
includeVoided: !this.data.filterVoided,
})
this.setData({
rows: result.rows,
page: result.page,
pageInput: String(result.page || 1),
totalPages: result.totalPages,
})
} catch (error) {
wx.showToast({ title: error.message, icon: 'none' })
}
},
async onPullDownRefresh() {
this.setData({ refreshing: true })
try {
await this.load(1)
} finally {
this.setData({ refreshing: false })
if (wx.stopPullDownRefresh) {
wx.stopPullDownRefresh()
}
}
},
onStartChange(e) {
this.setData({ startDate: e.detail.value, page: 1 })
this.load(1)
},
onEndChange(e) {
this.setData({ endDate: e.detail.value, page: 1 })
this.load(1)
},
shiftRangeDate(field, days) {
const otherField = field === 'startDate' ? 'endDate' : 'startDate'
const current = this.data[field]
const other = this.data[otherField]
const base = current || other || util.today()
const updates = {
[field]: util.addDays(base, days),
page: 1,
}
if (!current && !other) {
updates[otherField] = base
}
this.setData(updates)
this.load(1)
},
decreaseStartDate() {
this.shiftRangeDate('startDate', -1)
},
increaseEndDate() {
this.shiftRangeDate('endDate', 1)
},
toggleFilterVoided() {
this.setData({ filterVoided: !this.data.filterVoided, page: 1 })
this.load(1)
},
onFilterVoidedChange(e) {
this.setData({ filterVoided: !!e.detail.value, page: 1 })
this.load(1)
},
prevPage() {
if (this.data.page > 1) {
this.load(this.data.page - 1)
}
},
nextPage() {
if (this.data.page < this.data.totalPages) {
this.load(this.data.page + 1)
}
},
onPageInput(e) {
this.setData({ pageInput: e.detail.value })
},
jumpToPage(e) {
wx.hideKeyboard()
const inputValue = e && e.detail && e.detail.value !== undefined ? e.detail.value : this.data.pageInput
const target = Math.max(1, Math.min(Number(inputValue) || this.data.page, this.data.totalPages))
if (target === this.data.page) {
this.setData({ pageInput: String(this.data.page || 1) })
return
}
this.load(target)
},
async exportFile() {
wx.showLoading({ title: '导出中' })
try {
const filePath = await api.exportDashboard({
startDate: this.data.startDate,
endDate: this.data.endDate,
includeVoided: !this.data.filterVoided,
})
wx.openDocument({
filePath,
fileType: 'xlsx',
showMenu: true,
})
} catch (error) {
wx.showToast({ title: error.message, icon: 'none' })
} finally {
wx.hideLoading()
}
},
})