diff --git a/pages/workbench/index.vue b/pages/workbench/index.vue index 52788ec..42b2170 100644 --- a/pages/workbench/index.vue +++ b/pages/workbench/index.vue @@ -30,7 +30,7 @@ - + {{`${doctorInfo.store.store.name}(${doctorInfo.DoctorInfo.depart['name']})`}} @@ -397,6 +397,9 @@ export default { systemList: [], see_rate: "", acceptingPatientList: [], // 正在接诊的患者列表 + refreshTimer: null, + refreshIntervalMs: 10000, + isReceptionRefreshing: false, }; }, watch: { @@ -421,6 +424,7 @@ export default { }, onUnload() { + this.stopRefreshTimer(); if (this.__doctorImRoomUpdateHandler) { uni.$off('doctor-im-room-update', this.__doctorImRoomUpdateHandler); this.__doctorImRoomUpdateHandler = null; @@ -433,6 +437,7 @@ export default { uni.$off('doctor-im-room-update', this.__doctorImRoomUpdateHandler); uni.$on('doctor-im-room-update', this.__doctorImRoomUpdateHandler); this.refreshWorkbenchData(); + this.startRefreshTimer(); }, onPullDownRefresh() { this.refreshWorkbenchData().finally(() => { @@ -440,6 +445,7 @@ export default { }); }, onHide() { + this.stopRefreshTimer(); if (this.__doctorImRoomUpdateHandler) { uni.$off('doctor-im-room-update', this.__doctorImRoomUpdateHandler); } @@ -454,6 +460,31 @@ export default { this.getAcceptingPatientList() ]); }, + refreshReceptionData() { + if (this.isReceptionRefreshing) { + return Promise.resolve(); + } + this.isReceptionRefreshing = true; + return Promise.all([ + this.getInfo(), + this.getList(), + this.getAcceptingPatientList() + ]).finally(() => { + this.isReceptionRefreshing = false; + }); + }, + startRefreshTimer() { + this.stopRefreshTimer(); + this.refreshTimer = setInterval(() => { + this.refreshReceptionData(); + }, this.refreshIntervalMs); + }, + stopRefreshTimer() { + if (this.refreshTimer) { + clearInterval(this.refreshTimer); + this.refreshTimer = null; + } + }, call () { uni.makePhoneCall({ phoneNumber: '18157126670', diff --git a/subPackages/sub_clinic_admin/order/index.vue b/subPackages/sub_clinic_admin/order/index.vue index 2a80067..910f613 100644 --- a/subPackages/sub_clinic_admin/order/index.vue +++ b/subPackages/sub_clinic_admin/order/index.vue @@ -2,44 +2,47 @@ - - - - - {{ dateStart || '开始日期' }} - - - - {{ dateEnd || '结束日期' }} - + + + + + + {{ dateStart || '开始日期' }} + + + + {{ dateEnd || '结束日期' }} + + 查询 + - 查询 + + + + 订单号 + + + + 订单状态 + + {{ statusLabels[statusIndex] || '全部' }} + + + + 发货方式 + + {{ deliveryLabels[deliveryIndex] }} + + + + 订单类型 + + {{ prescriptionTypeLabels[prescriptionTypeIndex] }} + + + - - - 订单号 - - - - 订单状态 - - {{ statusLabels[statusIndex] || '全部' }} - - - - 发货方式 - - {{ deliveryLabels[deliveryIndex] }} - - - - 订单类型 - - {{ prescriptionTypeLabels[prescriptionTypeIndex] }} - - - - + @@ -607,4 +610,69 @@ $color-text-muted: #86909C; padding: 120rpx 0; font-size: 28rpx; } + + +/* ================= 核心:完美吸顶方案 ================= */ +/* 原生 sticky 结合 Vue 计算出的精确导航栏高度(top),严丝合缝拦截在导航栏正下方 */ +.native-sticky-header { + position: -webkit-sticky; + position: sticky; + z-index: 100; /* 高层级,保证滑动时覆盖在下方的卡片上 */ + background-color: $color-bg-base; /* 必须有底色用于防穿透遮挡 */ +} + +.header-solid-bg { + /* 使用 padding 将内容向内挤,防止滑动过程的透明间隙穿透问题 */ + padding: 16rpx 24rpx 16rpx; +} + +/* 筛选项 UI 美化 */ +.quick-filter { + background: #fff; + padding: 16rpx 20rpx; + border-radius: 20rpx; + box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04); +} +.filter-row { + display: flex; + align-items: center; + gap: 16rpx; + margin-bottom: 24rpx; + &:last-child { margin-bottom: 0; } +} +.date-row { + margin-bottom: 0; + justify-content: space-between; +} +.filter-label { + font-size: 28rpx; + color: $color-text-body; + min-width: 130rpx; +} +.filter-input, .filter-picker { + flex: 1; + font-size: 26rpx; + padding: 14rpx 20rpx; + background: #F7F8FA; + border-radius: 12rpx; + color: $color-text-main; +} +.date-picker { text-align: center; } +.sep { color: $color-text-muted; font-size: 24rpx; } + +/* 重新设计的紧凑型查询按钮 */ +.btn-query { + flex-shrink: 0; + background: $theme-primary; + color: #fff; + padding: 0 32rpx; + height: 60rpx; + line-height: 60rpx; + border-radius: 30rpx; /* 胶囊圆角 */ + font-size: 26rpx; + font-weight: 500; + box-shadow: 0 4rpx 12rpx rgba(106, 205, 187, 0.3); + transition: opacity 0.2s; + &:active { opacity: 0.8; } +} \ No newline at end of file