Files
miniwx/pages/scan/result/index.js
T
2026-04-29 15:35:20 +08:00

90 lines
2.4 KiB
JavaScript

const { appointmentDB, formatRecord } = require('../../../utils/api')
Page({
data: {
record: null,
loading: true,
error: '',
verifying: false
},
onLoad(options) {
const id = this.extractId(options)
if (!id) {
this.setData({ loading: false, error: '缺少预约记录ID' })
return
}
this.loadRecordDetail(id)
},
extractId(options) {
if (options.id) return options.id
if (!options.scene) return null
const scene = decodeURIComponent(options.scene)
return scene.startsWith('id=') ? scene.substring(3) : scene
},
async loadRecordDetail(id) {
try {
this.setData({ loading: true })
const result = await appointmentDB.getDetail(id)
if (!result) {
this.setData({ loading: false, error: '预约记录不存在' })
return
}
const statusMap = {
'pending': '待审核',
'approved': '已通过',
'rejected': '已拒绝',
'cancelled': '已取消'
}
// checkStatus 为字符串:'0' 未核销,'1' 已核销
const checkStatus = String(result.checkStatus)
const checkStatusText = checkStatus === '1' ? '已核销' : '未核销'
this.setData({
record: {
...formatRecord(result),
statusText: statusMap[result.status] || result.status,
checkStatus: checkStatus,
checkStatusText: checkStatusText
},
loading: false
})
} catch (err) {
console.error('加载预约记录详情失败', err)
this.setData({ loading: false, error: '加载失败,请稍后重试' })
}
},
async onVerify() {
const { record, verifying } = this.data
if (verifying || !record || !record.id) return
wx.showModal({
title: '确认核销',
content: '确定要核销该预约记录吗?',
confirmColor: '#1890ff',
success: async (res) => {
if (!res.confirm) return
this.setData({ verifying: true })
try {
await appointmentDB.notifyHost(record.id)
wx.showToast({ title: '核销成功', icon: 'success' })
// 刷新详情页
this.loadRecordDetail(record.id)
} catch (err) {
console.error('核销失败', err)
wx.showToast({ title: '核销失败,请重试', icon: 'none' })
} finally {
this.setData({ verifying: false })
}
}
})
}
})