yingsa/miniprogram/pages/points/order/index.js
ethanfly 8f9eb38666 fix(dependencies): Remove peer flags from package-lock.json and update Vite dependencies
- Removed unnecessary "peer" flags from various dependencies in package-lock.json to streamline package management.
- Updated Vite dependencies and their corresponding metadata for improved performance and compatibility.
- Adjusted import paths in CSS files to reflect the correct directory structure.
- Deleted unused CSS files related to the "col" component to clean up the project.
2026-02-07 02:05:34 +08:00

163 lines
3.8 KiB
JavaScript

const app = getApp()
const util = require('../../../utils/util')
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()
}
},
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 =>
Object.assign({}, order, {
createdAt: util.formatDate(order.createdAt)
})
)
this.setData({
orders: this.data.page === 1 ? orders : this.data.orders.concat(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()
const orderData = Object.assign({}, res.data, {
createdAt: util.formatDate(res.data.createdAt),
qrcodeImage: ''
})
this.setData({
currentOrder: orderData,
showOrderModal: true
})
// 如果待核销,获取二维码图片
if (res.data.status === 0 && res.data.exchangeCode) {
this.generateQrcode(res.data.exchangeCode)
}
} catch (e) {
wx.hideLoading()
console.error('获取订单详情失败:', e)
wx.showToast({ title: '获取订单详情失败', icon: 'none' })
}
},
// 生成二维码
async generateQrcode(code) {
try {
const res = await app.request('/api/points/orders/qrcode', { code })
if (res.data && res.data.qrcode) {
this.setData({
'currentOrder.qrcodeImage': res.data.qrcode
})
}
} catch (e) {
console.error('生成二维码失败:', e)
}
},
closeOrderModal() {
this.setData({
showOrderModal: false,
currentOrder: null
})
},
// 根据订单 ID 刷新当前列表与弹窗(供 WebSocket 回调调用)
async refreshOrderById(orderId) {
if (!orderId) return
try {
const res = await app.request(`/api/points/orders/${orderId}`)
const detail = res.data
// 更新列表中的状态
const orders = (this.data.orders || []).map(item =>
item.id === orderId
? Object.assign({}, item, { status: detail.status })
: item
)
// 如果弹窗正在展示当前这笔订单,同步更新弹窗里的状态等信息
let currentOrder = this.data.currentOrder
if (currentOrder && currentOrder.id === orderId) {
currentOrder = Object.assign({}, currentOrder, {
status: detail.status
})
}
this.setData({
orders,
currentOrder
})
} catch (e) {
console.error('通过 ID 刷新订单失败:', e)
}
},
goToMall() {
wx.switchTab({ url: '/pages/points/mall/index' })
}
})