diff --git a/App.vue b/App.vue
index ca2ce57..4ba7579 100644
--- a/App.vue
+++ b/App.vue
@@ -168,6 +168,8 @@
this.parseClaimPatientScene(rawScene)
// 医生代支付:ppay={order_id}
this.parseProxyPayScene(rawScene)
+ // 挂号凭证:rid={register_id}(打印小程序码扫码进凭证页)
+ this.parseRegisterVoucherScene(rawScene)
// 判断scene中是否包含sal_id
let isSalespersonId = rawScene.includes('sal_id');
@@ -236,7 +238,18 @@
}
},
/**
- * 登录后:弹出认领模态 / 代付确认模态(不再直接跳转代付页)
+ * 解析挂号凭证 scene:rid=挂号单ID
+ * 写入待跳转 ID,登录后由 tryHandlePendingSceneActions 进入凭证页
+ */
+ parseRegisterVoucherScene(rawScene) {
+ const match = String(rawScene).match(/(?:^|&)rid=(\d+)/)
+ const registerId = Number((match && match[1]) || 0)
+ if (registerId > 0) {
+ uni.setStorageSync('pending_register_voucher_id', registerId)
+ }
+ },
+ /**
+ * 登录后:弹出认领模态 / 代付确认模态 / 跳转挂号凭证页
*/
tryHandlePendingSceneActions() {
const token = uni.getStorageSync('token')
@@ -256,6 +269,16 @@
uni.$emit('open-proxy-pay-confirm-modal')
}, 500)
}
+ // 挂号凭证扫码:登录后跳转一次并清掉 pending,避免反复 navigate
+ const voucherId = Number(uni.getStorageSync('pending_register_voucher_id') || 0)
+ if (voucherId > 0) {
+ uni.removeStorageSync('pending_register_voucher_id')
+ setTimeout(() => {
+ uni.navigateTo({
+ url: '/subPackages/register/register-voucher?id=' + voucherId,
+ })
+ }, 600)
+ }
},
initWebSocket() {
webSocketManager.connect();
diff --git a/pages.json b/pages.json
index c2c409e..f4c37cb 100644
--- a/pages.json
+++ b/pages.json
@@ -409,6 +409,13 @@
"navigationBarTitleText": "挂号详情",
"navigationStyle": "custom"
}
+ },
+ {
+ "path": "register/register-voucher",
+ "style": {
+ "navigationBarTitleText": "挂号凭证",
+ "enablePullDownRefresh": true
+ }
}
]
},
diff --git a/pages/home/home.vue b/pages/home/home.vue
index bc0ff0f..cb22aa1 100644
--- a/pages/home/home.vue
+++ b/pages/home/home.vue
@@ -123,7 +123,7 @@
:key="item.key"
class="order-remind-card"
:class="{
- 'order-remind-card--register': item.key === 'unpaid_register',
+ 'order-remind-card--register': item.key === 'unpaid_register' || item.key === 'queue_register',
'order-remind-card--product': item.key === 'unpaid_product',
'order-remind-card--shipped': item.key === 'shipped',
'order-remind-card--arrived': item.key === 'arrived'
@@ -155,7 +155,7 @@
item && item.count > 0);
+ const isClinic = this.storeType === '0' || this.storeType === 0;
+ return (this.orderRemindItems || []).filter((item) => {
+ if (!item || !(item.count > 0)) return false;
+ if (item.key === 'queue_register' && !isClinic) return false;
+ return true;
+ });
},
},
onLoad() {
@@ -609,6 +616,19 @@ export default {
});
return;
}
+ // 排队中挂号:单条进凭证页,多条进预约列表
+ if (item.key === 'queue_register') {
+ if (count === 1 && firstId > 0) {
+ uni.navigateTo({
+ url: '/subPackages/register/register-voucher?id=' + firstId,
+ });
+ return;
+ }
+ uni.navigateTo({
+ url: '/subPackages/my/myappiont',
+ });
+ return;
+ }
if (count === 1 && firstId > 0) {
uni.navigateTo({
url: `/subPackages/my/my-drug/drug-info?id=${firstId}`,
diff --git a/request/api/register.js b/request/api/register.js
index 959f0c3..ee642b2 100644
--- a/request/api/register.js
+++ b/request/api/register.js
@@ -122,3 +122,12 @@ export async function registerReschedule(params = {}) {
export async function registerRescheduleLogs(params = {}) {
return await post('/register/reschedule-logs', params, 3)
}
+
+/**
+ * 挂号凭证详情(排队人数 + 预估等待)xk-api POST /register/voucher-detail
+ * 取值:unwrapXkApi → code / result / message
+ * @param {{ register_id: number }} params
+ */
+export async function getRegisterVoucherDetailApi(params = {}) {
+ return await post('/register/voucher-detail', params, 3)
+}
diff --git a/subPackages/register/register-info.vue b/subPackages/register/register-info.vue
index 586d18a..ff75b4a 100644
--- a/subPackages/register/register-info.vue
+++ b/subPackages/register/register-info.vue
@@ -174,6 +174,10 @@
修改时间
+
+
+ 查看挂号凭证
+
返回首页
@@ -296,6 +300,16 @@
if (r.is_cancel != 0 || r.status != 1 || r.is_pay != 1) return false;
return appt.visit_date > this.todayStr;
},
+ /**
+ * 是否展示「查看挂号凭证」:已支付且未取消(与纸质凭证扫码同一页)
+ */
+ canViewVoucher() {
+ const r = this.registList || {};
+ if (!r || !r.id) return false;
+ if (r.is_pay != 1) return false;
+ if (r.is_cancel == 1 || r.status == 4 || r.status == 7) return false;
+ return true;
+ },
/** 当前选中的日期对象 */
selectedDay() {
return this.calendarDays[this.selectedDayIndex] || null;
@@ -488,6 +502,19 @@
url: '/pages/home/home'
})
},
+ /**
+ * 跳转挂号凭证页(与打印小程序码扫码落地同一页)
+ */
+ goVoucher() {
+ const id = this.register_id || (this.registList && this.registList.id)
+ if (!id) {
+ uni.showToast({ title: '缺少挂号单', icon: 'none' })
+ return
+ }
+ uni.navigateTo({
+ url: '/subPackages/register/register-voucher?id=' + id,
+ })
+ },
// 挂号信息(已迁 xk-api POST /register/detail:result 为单对象,老 Yii 是 data.list[0])
getInfo() {
diff --git a/subPackages/register/register-success.vue b/subPackages/register/register-success.vue
index 1d07c54..97ba9c5 100644
--- a/subPackages/register/register-success.vue
+++ b/subPackages/register/register-success.vue
@@ -7,13 +7,15 @@
挂号成功
-
+
+
+ 查看挂号凭证
+
确认
-
@@ -48,12 +50,24 @@
async bindSpecialPrescriptionRecord() {
await tryCreateSpecialPrescriptionPatientRecord(this.register_id)
},
- // 确认
+ // 确认 → 挂号详情
goOrder() {
uni.navigateTo({
url: '/subPackages/register/register-info?id=' + this.register_id,
})
- }
+ },
+ /**
+ * 查看挂号凭证(排队人数/预估,与扫码落地同一页)
+ */
+ goVoucher() {
+ if (!this.register_id) {
+ uni.showToast({ title: '缺少挂号单', icon: 'none' })
+ return
+ }
+ uni.navigateTo({
+ url: '/subPackages/register/register-voucher?id=' + this.register_id,
+ })
+ },
}
}
@@ -90,15 +104,31 @@
.btn {
width: 750rpx;
- height: 110rpx;
display: flex;
justify-content: space-between;
align-items: center;
padding: 12rpx 32rpx;
margin-top: 44rpx;
+ box-sizing: border-box;
+ gap: 24rpx;
+
+ .ghost {
+ flex: 1;
+ height: 86rpx;
+ text-align: center;
+ line-height: 86rpx;
+ background: #FFFFFF;
+ border: 1px solid rgba(65, 117, 238, 0.35);
+ border-radius: 198rpx;
+ font-size: 30rpx;
+ font-family: PingFang SC-Medium, PingFang SC;
+ font-weight: 500;
+ color: #4175EE;
+ box-shadow: 0 0 8rpx rgba(65, 117, 238, 0.12);
+ }
.back {
- width: 686rpx;
+ flex: 1;
height: 86rpx;
text-align: center;
line-height: 86rpx;
diff --git a/subPackages/register/register-voucher.vue b/subPackages/register/register-voucher.vue
new file mode 100644
index 0000000..6746a20
--- /dev/null
+++ b/subPackages/register/register-voucher.vue
@@ -0,0 +1,546 @@
+
+
+
+
+
+
+ {{ loadError }}
+ 重新加载
+
+
+
+
+
+ 每 30 秒自动更新排队
+
+
+ {{ refreshing ? '刷新中' : '刷新' }}
+
+
+
+ {{ detail.store || '—' }}
+ 挂号凭证
+ {{ detail.order_no || '—' }}
+
+ 前面等待 {{ queueAheadText }} 人
+ {{ detail.eta_display || '—' }}
+
+ 病历号:{{ detail.order_no || '—' }}
+ 姓名:{{ patientText }}
+ 门诊号:{{ outpatientText }}
+ 挂号类型:自费
+ 挂号日期:{{ registerDateText }}
+ 挂号费:{{ feeText }}
+ 科室:{{ detail.depart || '—' }}
+ 医生:{{ detail.doctor || '—' }}
+ 状态:{{ detail.status_txt || '—' }}
+ 预约:{{ appointmentText }}
+ --------------------
+ 排队人数为当天同医生、同门店待接诊估算,仅供参考,请以现场叫号为准。
+
+
+
+
+
+ 每 30 秒自动更新排队
+
+
+ {{ refreshing ? '刷新中' : '刷新' }}
+
+
+
+ 前面等待
+
+ {{ queueAheadText }}
+ 人
+
+ {{ detail.eta_display || '—' }}
+
+
+
+ 诊所
+ {{ detail.store || '—' }}
+
+
+ 医生
+ {{ detail.doctor || '—' }}
+
+
+ 科室
+ {{ detail.depart || '—' }}
+
+
+ 门诊号
+ {{ outpatientText }}
+
+
+ 就诊人
+ {{ patientText }}
+
+
+ 状态
+ {{ detail.status_txt || '—' }}
+
+
+ 预约
+ {{ appointmentText }}
+
+
+ 病历号
+ {{ detail.order_no || '—' }}
+
+
+ 排队人数为当天同医生、同门店待接诊估算,仅供参考,请以现场叫号为准。
+
+
+
+
+
+
+