diff --git a/pages/scan/result/index.js b/pages/scan/result/index.js
index 8518d26..ca22d46 100644
--- a/pages/scan/result/index.js
+++ b/pages/scan/result/index.js
@@ -4,7 +4,8 @@ Page({
data: {
record: null,
loading: true,
- error: ''
+ error: '',
+ verifying: false
},
onLoad(options) {
@@ -41,10 +42,16 @@ Page({
'cancelled': '已取消'
}
+ // checkStatus 为字符串:'0' 未核销,'1' 已核销
+ const checkStatus = String(result.checkStatus)
+ const checkStatusText = checkStatus === '1' ? '已核销' : '未核销'
+
this.setData({
record: {
...formatRecord(result),
- statusText: statusMap[result.status] || result.status
+ statusText: statusMap[result.status] || result.status,
+ checkStatus: checkStatus,
+ checkStatusText: checkStatusText
},
loading: false
})
@@ -52,5 +59,32 @@ Page({
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 })
+ }
+ }
+ })
}
})
\ No newline at end of file
diff --git a/pages/scan/result/index.wxml b/pages/scan/result/index.wxml
index eac3626..e82be45 100644
--- a/pages/scan/result/index.wxml
+++ b/pages/scan/result/index.wxml
@@ -65,5 +65,18 @@
{{record.area}}
+
+
+
+
+ 核销状态
+ {{record.checkStatusText}}
+
+
+
+ {{verifying ? '核销中...' : '确认核销'}}
+
+
+
\ No newline at end of file
diff --git a/pages/scan/result/index.wxss b/pages/scan/result/index.wxss
index 32a91ae..8a33141 100644
--- a/pages/scan/result/index.wxss
+++ b/pages/scan/result/index.wxss
@@ -133,4 +133,36 @@
color: #333;
text-align: right;
word-break: break-all;
+}
+
+/* 核销状态文字 */
+.text-warning {
+ color: #faad14;
+ font-weight: bold;
+}
+
+.text-success {
+ color: #52c41a;
+ font-weight: bold;
+}
+
+/* 核销按钮 */
+.verify-btn-wrap {
+ padding-top: 20rpx;
+}
+
+.verify-btn {
+ width: 100%;
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%);
+ color: #fff;
+ font-size: 30rpx;
+ font-weight: bold;
+ border-radius: 12rpx;
+}
+
+.verify-btn-disabled {
+ opacity: 0.6;
}
\ No newline at end of file
diff --git a/utils/api.js b/utils/api.js
index 1f47f08..743eff4 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -197,6 +197,21 @@ const appointmentDB = {
data: { department }
})
return data || []
+ },
+
+ /**
+ * 核销通知被访人
+ * @param {string} id - 预约记录 id
+ * @returns {Promise}
+ */
+ async notifyHost(id) {
+ await request({
+ url: BASE_URL + API.NOTIFY_HOST,
+ method: 'POST',
+ header: { 'content-type': 'application/json' },
+ data: { id }
+ })
+ return true
}
}
diff --git a/utils/config.js b/utils/config.js
index 3e06bd8..d6469ed 100644
--- a/utils/config.js
+++ b/utils/config.js
@@ -29,7 +29,8 @@ const API = {
APPOINTMENT_CANCEL: '/api/wx-mini/appointment/cancel',
APPOINTMENT_DETAIL: '/api/wx-mini/appointment/detail',
WXACODE: '/api/wx-mini/wxacode',
- PERSON_SELECTOR: '/api/wx-mini/appointment/person/selector'
+ PERSON_SELECTOR: '/api/wx-mini/appointment/person/selector',
+ NOTIFY_HOST: '/visitor/notify-host'
}
console.log('[config] 当前环境:', wx.getAccountInfoSync().miniProgram.envVersion, 'BASE_URL:', BASE_URL)