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 @@ + + + + +