From f1d1c9b4608c690de5015370242cdf76c9aa9fff Mon Sep 17 00:00:00 2001 From: chenglijuan Date: Wed, 29 Apr 2026 15:35:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9D=A5=E8=AE=BF=E6=A0=B8?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/scan/result/index.js | 38 ++++++++++++++++++++++++++++++++++-- pages/scan/result/index.wxml | 13 ++++++++++++ pages/scan/result/index.wxss | 32 ++++++++++++++++++++++++++++++ utils/api.js | 15 ++++++++++++++ utils/config.js | 3 ++- 5 files changed, 98 insertions(+), 3 deletions(-) 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)