yingsa/miniprogram/pages/points/order/index.js
2026-01-20 08:50:50 +08:00

116 lines
2.5 KiB
JavaScript

const app = getApp()
const util = require('../../../utils/util')
const QRCode = require('../../../utils/qrcode.js')
Page({
data: {
orders: [],
status: '',
loading: false,
page: 1,
pageSize: 20,
hasMore: true,
showOrderModal: false,
currentOrder: null
},
onLoad() {
this.fetchOrders()
},
onPullDownRefresh() {
this.setData({ page: 1, hasMore: true })
this.fetchOrders().then(() => {
wx.stopPullDownRefresh()
})
},
onReachBottom() {
if (this.data.hasMore && !this.data.loading) {
this.loadMore()
}
},
getStatusText(status) {
return util.getOrderStatusText(status)
},
async fetchOrders() {
this.setData({ loading: true })
try {
const params = {
page: this.data.page,
pageSize: this.data.pageSize
}
if (this.data.status !== '') {
params.status = this.data.status
}
const res = await app.request('/api/points/orders', params)
const orders = (res.data.list || []).map(order => ({
...order,
createdAt: util.formatDate(order.createdAt)
}))
this.setData({
orders: this.data.page === 1 ? orders : [...this.data.orders, ...orders],
hasMore: orders.length >= this.data.pageSize
})
} catch (e) {
console.error('获取订单列表失败:', e)
} finally {
this.setData({ loading: false })
}
},
loadMore() {
this.setData({ page: this.data.page + 1 })
this.fetchOrders()
},
setStatus(e) {
const status = e.currentTarget.dataset.status
this.setData({ status, page: 1, hasMore: true })
this.fetchOrders()
},
async viewOrder(e) {
const order = e.currentTarget.dataset.order
wx.showLoading({ title: '加载中...' })
try {
const res = await app.request(`/api/points/orders/${order.id}`)
wx.hideLoading()
this.setData({
currentOrder: res.data,
showOrderModal: true
})
// 如果待核销,生成二维码
if (res.data.status === 0) {
setTimeout(() => {
new QRCode('orderQrcode', {
text: res.data.exchangeCode,
width: 200,
height: 200,
colorDark: '#000000',
colorLight: '#ffffff'
})
}, 100)
}
} catch (e) {
wx.hideLoading()
console.error('获取订单详情失败:', e)
}
},
closeOrderModal() {
this.setData({ showOrderModal: false })
}
})