feat(M08-A): 接入顾客端订单查询
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
const { request, ensureLogin, cents } = require('../../utils/api.js')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
orderId: '',
|
||||
loading: false,
|
||||
errorMessage: '',
|
||||
successMessage: '',
|
||||
order: null,
|
||||
history: [],
|
||||
cancellation: null,
|
||||
},
|
||||
|
||||
onLoad(options) {
|
||||
this.setData({ orderId: options.orderId || '' })
|
||||
if (options.orderId) this.loadOrder(options.orderId)
|
||||
},
|
||||
|
||||
async loadOrder(orderId = this.data.orderId) {
|
||||
const targetOrderId = typeof orderId === 'string' ? orderId : this.data.orderId
|
||||
this.setData({ loading: true, errorMessage: '', successMessage: '' })
|
||||
try {
|
||||
await ensureLogin()
|
||||
const [orderResponse, historyResponse] = await Promise.all([
|
||||
request(`/orders/${encodeURIComponent(targetOrderId)}`),
|
||||
request(`/orders/${encodeURIComponent(targetOrderId)}/history`),
|
||||
])
|
||||
this.setData({
|
||||
order: formatOrder(orderResponse.data),
|
||||
history: (historyResponse.data || []).map((item) => ({
|
||||
...item,
|
||||
createdText: formatTime(item.createdAt),
|
||||
})),
|
||||
})
|
||||
} catch (error) {
|
||||
this.setData({ errorMessage: error.message || '订单加载失败' })
|
||||
} finally {
|
||||
this.setData({ loading: false })
|
||||
}
|
||||
},
|
||||
|
||||
async loadCancellationQuote() {
|
||||
if (!this.data.orderId) return
|
||||
await this.withOrderRequest(async () => {
|
||||
const response = await request(`/orders/${encodeURIComponent(this.data.orderId)}/cancellation-quote`)
|
||||
this.setData({
|
||||
cancellation: {
|
||||
...response.data,
|
||||
feeText: cents(response.data.feeCents),
|
||||
refundableText: cents(response.data.refundableCents),
|
||||
},
|
||||
successMessage: '取消测算已更新',
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
async cancelOrder() {
|
||||
if (!this.data.orderId) return
|
||||
await this.withOrderRequest(async () => {
|
||||
await request(`/orders/${encodeURIComponent(this.data.orderId)}/cancel`, {
|
||||
method: 'POST',
|
||||
data: { reason: '用户小程序取消' },
|
||||
})
|
||||
this.setData({ successMessage: '订单已提交取消' })
|
||||
await this.loadOrder(this.data.orderId)
|
||||
})
|
||||
},
|
||||
|
||||
async withOrderRequest(work) {
|
||||
this.setData({ loading: true, errorMessage: '', successMessage: '' })
|
||||
try {
|
||||
await ensureLogin()
|
||||
await work()
|
||||
} catch (error) {
|
||||
this.setData({ errorMessage: error.message || '订单操作失败' })
|
||||
} finally {
|
||||
this.setData({ loading: false })
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
function formatOrder(order) {
|
||||
return {
|
||||
...order,
|
||||
totalText: cents(order.totalAmountCents),
|
||||
paidText: cents(order.paidAmountCents),
|
||||
startText: formatTime(order.startAt),
|
||||
endText: formatTime(order.endAt),
|
||||
}
|
||||
}
|
||||
|
||||
function formatTime(value) {
|
||||
const date = new Date(value)
|
||||
const pad = (input) => String(input).padStart(2, '0')
|
||||
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`
|
||||
}
|
||||
Reference in New Issue
Block a user