From 1446994d504819c367e1ff667360eadb314f9ac6 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期日, 18 十月 2026 16:52:18 +0800
Subject: [PATCH] 修改了诊室工号
---
src/components/DoctorPageLayout/src/DoctorPageLayout.vue | 350 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 337 insertions(+), 13 deletions(-)
diff --git a/src/components/DoctorPageLayout/src/DoctorPageLayout.vue b/src/components/DoctorPageLayout/src/DoctorPageLayout.vue
index 4184c5d..51091de 100644
--- a/src/components/DoctorPageLayout/src/DoctorPageLayout.vue
+++ b/src/components/DoctorPageLayout/src/DoctorPageLayout.vue
@@ -7,13 +7,13 @@
銆屽彨鍙� / 杩囧彿 / 閲嶅彨 / 鏆傚仠 / 鎾ら攢鍙彿銆嶆尅浣忥紱
涓斿灞傚鍣ㄦ病鏈夌‘瀹氶珮搴︼紝涓棿鍖烘棤娉曚骇鐢熸粴鍔紝鍐呭鍙兘涓�璺妸椤甸潰鎾戦暱銆�
- 銆愬竷灞�濂戠害銆戔�斺�旂旱鍚戜笁娈� + 鍙充晶鏍�
+ 銆愬竷灞�濂戠害銆戔�斺�旂旱鍚戜笁娈� + 鍙充晶鏍忥紙涓棿鏈�**鍙嫋鍔ㄥ垎鐣岀嚎**锛�
鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
鈹� #header 鏍囬鏍忥紙鍥哄畾楂樺害锛屼笉婊氬姩锛� 鈹� flex: none
鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
鈹� #default 涓讳綋锛堟粴鍔ㄥ尯锛� 鈹� #aside 鈹� 浠呬腑闂村尯涓庡彸鏍忓悇鑷粴鍔�
- 鈹� 路 鎮h�呬俊鎭紙鐢卞悇闈㈡澘鍐呴儴 鈹� 锛堢嫭绔嬫粴鍔級鈹�
- 鈹� 璁句负 sticky锛岄拤鍦ㄩ《閮級 鈹� 鈹�
+ 鈹� 路 鎮h�呬俊鎭紙鐢卞悇闈㈡澘鍐呴儴 鈹� 锛堢嫭绔嬫粴鍔級鈹� 涓よ�呬箣闂寸殑绔栫嚎**鍙乏鍙虫嫋鍔�**
+ 鈹� 璁句负 sticky锛岄拤鍦ㄩ《閮級 鈹� 鈹� 浠ヨ皟鏁村彸鏍忓搴�
鈹� 路 宸插畬鎴愯褰曞垪琛紙婊氬姩锛� 鈹� 鈹�
鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹粹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
鈹� #footer 鍔熻兘鎸夐挳锛堝浐瀹氬簳閮紝姘镐笉琚伄鎸★級 鈹� flex: none
@@ -29,6 +29,7 @@
甯︿笉閫忔槑鑳屾櫙涓庝笂杈规锛屽唴瀹规案杩滀笉浼氶�忚繃鏉ユ垨鐩栦綇瀹冦��
4. 鏍瑰厓绱�**鑷甫涓嶉�忔槑鑳屾櫙**锛氬悇闈㈡澘鍐� sticky 鐨勬偅鑰呬俊鎭嫢涓嶉�忔槑锛�
婊氬姩鍐呭浼氫粠瀹冧笌杈圭紭鐨勭紳闅欓�忓嚭锛屾晠鏁撮〉缁熶竴搴曡壊銆�
+ 5. 銆愭湰娆℃柊澧炪�戝垎鐣岀嚎鍙嫋鍔紙瑙佷笅锛夛紝瀹藉害璁板湪 localStorage 閲岋紝鍒囬〉/鍒锋柊鍚庝繚鎸併��
銆愭彃妲姐��
header 鏍囬鏍忥紙鍙�夛級
@@ -37,19 +38,67 @@
footer 搴曢儴鍔熻兘鎸夐挳锛堝彲閫夛紱鍥哄畾鍦ㄩ〉闈㈠簳閮級
-->
<script setup lang="ts">
-import { onBeforeUnmount, onMounted, ref } from 'vue'
+import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
+import BedSwitchSelect from '@/views/ecg/doctor/components/BedSwitchSelect.vue'
+import { useRoomStore } from '@/store/modules/room'
defineOptions({ name: 'DoctorPageLayout' })
-withDefaults(
+/* ==================== 涓�/鍥磋锛堝彧璇绘ā寮忥級 ==================== */
+
+const roomStore = useRoomStore()
+
+/**
+ * 鏄惁鏄剧ず椤堕儴鎻愮ず鏉°��
+ *
+ * 鍒ゅ畾锛�**鍙褰撳墠涓嶅彲鎿嶄綔**灏辨彁绀� 鈥斺�� 鍚袱绉嶆儏鍐碉細
+ * 鈶� 杩樻病閫夊畾瑕佺湅鍝釜宸ヤ綅锛堟湭鍏ュ骇涔熸病鍥磋锛夛紱
+ * 鈶� 姝e湪鍥磋鍒汉鐨勫伐浣嶏紙鎴戝叆搴х殑 鈮� 鎴戞鍦ㄧ湅鐨勶級銆�
+ */
+const showReadonlyTip = computed(() => !roomStore.getCanOperate)
+const readonlyTipText = computed(() =>
+ roomStore.getViewText ? `銆�${roomStore.getViewText}銆峘 : '锛堝皻鏈�夋嫨宸ヤ綅锛�'
+)
+const readonlyTipPrefix = computed(() =>
+ roomStore.getViewText ? '鍥磋妯″紡锛堝彧璇伙級锛氭鍦ㄦ煡鐪�' : '灏氭湭閫夋嫨宸ヤ綅锛氳鐢ㄥ彸涓婅銆屽伐浣嶃�嶄笅鎷夐�夋嫨瑕佹煡鐪� / 瑕佸叆搴х殑宸ヤ綅'
+)
+
+const props = withDefaults(
defineProps<{
- /** 鍙充晶鏍忓搴� */
+ /** 鍙充晶鏍�**鍒濆/榛樿**瀹藉害锛堟嫋鍔ㄤ箣鍚庝互瀹為檯鎷栧姩鍊间负鍑嗭紱鍙屽嚮鍒嗙晫绾挎仮澶嶈鍊硷級 */
asideWidth?: string
+ /** 鍙充晶鏍忔渶灏忓搴︼紙px锛� */
+ minAsideWidth?: number
+ /** 宸︿晶鍐呭鍖烘渶灏忓搴︼紙px锛夛細宸︿晶鏄洓鍒楁偅鑰呬俊鎭〃鍗曪紝澶獎浼氭姌琛� */
+ minContentWidth?: number
+ /** 璁板繂鎷栧姩缁撴灉鐨� localStorage key锛涗紶绌哄瓧绗︿覆琛ㄧず涓嶈蹇� */
+ storageKey?: string
+ /**
+ * 銆愭湰娆¢渶姹傘�戞槸鍚﹀厑璁稿湪鏍囬鏍忓垏鎹㈠伐浣嶃��
+ * 璁惧棰嗙敤 / 瑁呮満椤典紶 `false`锛氬伐浣嶅浐瀹氾紝涓嶆彁渚涘垏鎹紙鏈叆搴ц�呭嵆鍥磋鑰咃紝鍙锛夈��
+ */
+ bedSwitchEnabled?: boolean
+ /**
+ * 銆愭湰娆¢渶姹傘�戝彲鍒囨崲宸ヤ綅鐨�**浣滀笟绫诲瀷**杩囨护锛�0妫�鏌� 1棰嗙敤 2瑁呮満锛夈��
+ * 鍙彿妫�鏌ラ〉浼� `[0]` 鈫� 涓嬫媺鍙垪妫�鏌ョ被宸ヤ綅锛涗笉浼� = 涓嶈繃婊ゃ��
+ */
+ bedSwitchOpTypes?: number[] | null
}>(),
{
- asideWidth: '400px'
+ asideWidth: '400px',
+ minAsideWidth: 280,
+ minContentWidth: 520,
+ storageKey: 'ecg.doctor.asideWidth',
+ bedSwitchEnabled: true,
+ bedSwitchOpTypes: null
}
)
+
+/** 榛樿瀹藉害锛坧x锛夛細鐢� asideWidth 瑙f瀽鑰屾潵锛岀敤浣滃垵濮嬪�间笌"鍙屽嚮澶嶄綅"鍊� */
+const defaultAsidePx = (() => {
+ const n = parseInt(props.asideWidth, 10)
+ return Number.isFinite(n) && n > 0 ? n : 400
+})()
/**
* 銆愬叧閿�戜笉渚濊禆 CSS `height: 100%` 鐨勮В鏋愶紝鏀逛负**瀹炴祴鐖跺鍣ㄥ彲鐢ㄩ珮搴�**銆�
@@ -71,6 +120,111 @@
const rootRef = ref<HTMLElement>()
const measuredHeight = ref<string | undefined>(undefined)
+// ==================== 鍙充晶鏍忓搴︼紙鍙嫋鍔ㄥ垎鐣岀嚎锛� ====================
+
+/** 涓讳綋琛屽鍣細鎷栧姩鏃剁敤瀹冪畻"鍙充晶鏍忔渶澶氳兘鏈夊瀹�" */
+const bodyRef = ref<HTMLElement>()
+
+/** 鍙充晶鏍忓綋鍓嶅搴︼紙px锛� */
+const asidePx = ref<number>(defaultAsidePx)
+
+/** 鏄惁姝e湪鎷栧姩锛堢敤浜庢崲鍏夋爣銆佺閫変腑锛� */
+const dragging = ref(false)
+
+/**
+ * 鎶婂搴﹀す鍒板悎娉曞尯闂淬��
+ *
+ * 涓婇檺 = 瀹瑰櫒瀹藉害 鈭� 宸︿晶鏈�灏忓搴︼紙淇濊瘉宸︿晶鎮h�呬俊鎭�/璁板綍鍒楄〃涓嶈鎸ゆ病锛夛紱
+ * 涓嬮檺 = minAsideWidth銆傜獥鍙f瀬绐勫鑷翠袱鑰呭啿绐佹椂锛�**浼樺厛淇濊瘉涓嬮檺**锛�
+ * 宸︿晶闈犺嚜韬殑 `min-width:0 + overflow` 浼橀泤闄嶇骇銆�
+ */
+const clampAsidePx = (px: number) => {
+ const bodyPx = bodyRef.value?.clientWidth ?? 0
+ const lower = props.minAsideWidth
+ const upper = bodyPx > 0
+ ? Math.max(lower, bodyPx - props.minContentWidth)
+ : Number.MAX_SAFE_INTEGER
+ return Math.round(Math.min(Math.max(px, lower), upper))
+}
+
+/** 璁颁綇鎷栧姩缁撴灉锛堥殣绉佹ā寮�/绂佺敤瀛樺偍鏃堕潤榛樺拷鐣ワ級 */
+const saveAsidePx = () => {
+ if (!props.storageKey) return
+ try {
+ localStorage.setItem(props.storageKey, String(asidePx.value))
+ } catch {
+ /* ignore */
+ }
+}
+
+/** 璇诲彇涓婃鎷栧姩缁撴灉锛涘繀椤荤瓑 bodyRef 鎸傝浇鍚庢墠鑳� clamp */
+const loadAsidePx = () => {
+ if (!props.storageKey) return
+ try {
+ const v = parseInt(localStorage.getItem(props.storageKey) || '', 10)
+ if (Number.isFinite(v) && v > 0) asidePx.value = clampAsidePx(v)
+ } catch {
+ /* ignore */
+ }
+}
+
+/** 鍙屽嚮鍒嗙晫绾匡細鎭㈠榛樿瀹藉害骞舵竻闄よ蹇� */
+const resetAsideWidth = () => {
+ asidePx.value = clampAsidePx(defaultAsidePx)
+ if (props.storageKey) {
+ try {
+ localStorage.removeItem(props.storageKey)
+ } catch {
+ /* ignore */
+ }
+ }
+}
+
+let startX = 0
+let startPx = 0
+
+/**
+ * 鐢� Pointer Events + setPointerCapture锛�
+ * 鎹曡幏鍚� pointermove/up 閮藉彧鍦ㄥ垎鐣岀嚎涓婅Е鍙戯紝**涓嶉渶瑕�**鍐嶅線 document 涓婃寕/鎽樼洃鍚紝
+ * 涔熷氨涓嶄細鍑虹幇"鎷栧埌 iframe 鎴栫獥鍙e鏉炬墜鍚庣洃鍚畫鐣�"鐨勮�侀棶棰樸��
+ */
+const onSplitterDown = (e: PointerEvent) => {
+ const el = e.currentTarget as HTMLElement | null
+ dragging.value = true
+ startX = e.clientX
+ startPx = asidePx.value
+ el?.setPointerCapture?.(e.pointerId)
+ e.preventDefault()
+}
+
+const onSplitterMove = (e: PointerEvent) => {
+ if (!dragging.value) return
+ // 鍒嗙晫绾垮悜鍙虫嫋锛埼攛>0锛夆啋 鍙充晶鏍忓彉绐勶紝鏁呯敤鍑忔硶
+ asidePx.value = clampAsidePx(startPx - (e.clientX - startX))
+}
+
+const onSplitterUp = (e: PointerEvent) => {
+ if (!dragging.value) return
+ dragging.value = false
+ const el = e.currentTarget as HTMLElement | null
+ el?.releasePointerCapture?.(e.pointerId)
+ saveAsidePx()
+}
+
+/** 閿洏寰皟锛堚啇/鈫� 姣忔 20px锛夛紝鏃犻紶鏍囦篃鑳借皟鏁� */
+const onSplitterKey = (e: KeyboardEvent) => {
+ const step = 20
+ if (e.key === 'ArrowLeft') {
+ asidePx.value = clampAsidePx(asidePx.value + step) // 鍒嗙晫绾垮乏绉� 鈫� 鍙充晶鍙樺
+ } else if (e.key === 'ArrowRight') {
+ asidePx.value = clampAsidePx(asidePx.value - step)
+ } else {
+ return
+ }
+ saveAsidePx()
+ e.preventDefault()
+}
+
let ro: ResizeObserver | undefined
let rafId = 0
@@ -87,6 +241,10 @@
// 鐖剁骇楂樺害涓嶅彲娴嬶紙auto/0锛夋椂淇濈暀 CSS 鍥為��锛屼笉璁惧唴鑱旈珮搴�
measuredHeight.value = inner > 0 ? `${inner}px` : undefined
+
+ // 瀹藉害鍙樺寲锛堝惈绐楀彛缂╂斁锛夋椂閲嶆柊澶逛竴娆″彸鏍忓搴︼紝
+ // 鍚﹀垯鎷栧鍚庢妸绐楀彛缂╁皬锛屽彸渚ф爮鍙兘鎶婂乏渚у唴瀹规尋娌°��
+ asidePx.value = clampAsidePx(asidePx.value)
}
/** 鐢� rAF 鍚堝苟杩炵画瑙﹀彂锛岄伩鍏� ResizeObserver 寰幆鍛婅 */
@@ -100,6 +258,7 @@
onMounted(() => {
measure()
+ loadAsidePx()
const parent = rootRef.value?.parentElement
if (parent && typeof ResizeObserver !== 'undefined') {
ro = new ResizeObserver(scheduleMeasure)
@@ -118,22 +277,65 @@
</script>
<template>
- <div ref="rootRef" class="doctor-page" :style="{ height: measuredHeight }">
- <!-- 鏍囬鏍忥細鍥哄畾楂樺害锛屼笉婊氬姩 -->
+ <div
+ ref="rootRef"
+ class="doctor-page"
+ :class="{ 'is-resizing': dragging }"
+ :style="{ height: measuredHeight }"
+ >
+ <!--
+ 鏍囬鏍忥細鍥哄畾楂樺害锛屼笉婊氬姩銆�
+ 鍙充晶鍥哄畾鏀俱�屽伐浣嶅垏鎹� / 鍥磋銆嶄笅鎷夛紙涓�/鍥磋妯″瀷鐨勫叆鍙o級鈥斺�旀斁鍦ㄥ竷灞�灞傦紝
+ 鍙彿妫�鏌� / 璁惧棰嗙敤 / 瑁呮満 涓夐〉鑷姩閮芥湁锛屼笉鐢ㄥ悇椤甸噸澶嶅姞銆�
+ -->
<div v-if="$slots.header" class="doctor-page__header">
- <slot name="header"></slot>
+ <div class="doctor-page__header-left">
+ <slot name="header"></slot>
+ </div>
+ <BedSwitchSelect :enabled="bedSwitchEnabled" :op-types="bedSwitchOpTypes" />
+ </div>
+
+ <!-- 鍥磋妯″紡锛堝彧璇伙級/ 鏈�夊伐浣� 鎻愮ず鏉★細璁╁尰鐢熶竴鐪肩煡閬�"鐜板湪鍙兘鐪嬶紝涓嶈兘鎿嶄綔" -->
+ <div v-if="showReadonlyTip" class="doctor-page__readonly-tip">
+ <Icon icon="ep:view" class="mr-4px" />
+ {{ readonlyTipPrefix }}{{ roomStore.getViewText ? readonlyTipText : '' }}<template v-if="roomStore.getViewText && roomStore.viewOwnerName">锛屼富浜� {{ roomStore.viewOwnerName }}</template><template v-if="roomStore.getViewText">锛涘闇�鎿嶄綔锛岃鍦ㄥ彸涓婅銆屽伐浣嶃�嶉噷鍏ュ骇鍒拌宸ヤ綅銆�</template>
</div>
<!-- 涓讳綋锛氬崰鎹墿浣欏叏閮ㄩ珮搴︼紱鍐呴儴鍙"鍐呭鍖�"鍜�"鍙虫爮"鍚勮嚜婊氬姩 -->
- <div class="doctor-page__body">
+ <div ref="bodyRef" class="doctor-page__body" :class="{ 'is-readonly': !roomStore.getCanOperate }">
<div class="doctor-page__content">
<slot></slot>
</div>
+ <!--
+ 鍙嫋鍔ㄥ垎鐣岀嚎锛堟湰娆¢渶姹傦級锛�
+ 路 宸﹀彸鎷栧姩 = 璋冩暣鍙充晶鎮h�呮竻鍗曠殑瀹藉害锛�
+ 路 鍙屽嚮 = 鎭㈠榛樿瀹藉害锛堝苟娓呴櫎璁板繂锛夛紱
+ 路 鑱氱劍鍚� 鈫�/鈫� = 姣忔 20px 寰皟锛�
+ 路 瀹藉害璁板繂鍦� localStorage锛屼笁涓伐浣滃彴椤甸潰鍏辩敤鍚屼竴涓� key銆�
+ -->
+ <div
+ v-if="$slots.aside"
+ class="doctor-page__splitter"
+ :class="{ 'is-dragging': dragging }"
+ role="separator"
+ aria-orientation="vertical"
+ :aria-valuenow="asidePx"
+ :aria-valuemin="minAsideWidth"
+ tabindex="0"
+ title="鎷栧姩璋冩暣鍙充晶瀹藉害锛堝弻鍑诲浣嶏級"
+ @pointerdown="onSplitterDown"
+ @pointermove="onSplitterMove"
+ @pointerup="onSplitterUp"
+ @pointercancel="onSplitterUp"
+ @dblclick="resetAsideWidth"
+ @keydown="onSplitterKey"
+ ></div>
+
<div
v-if="$slots.aside"
class="doctor-page__aside"
- :style="{ width: asideWidth, flex: `0 0 ${asideWidth}` }"
+ :style="{ width: `${asidePx}px`, flex: '0 0 auto' }"
>
<slot name="aside"></slot>
</div>
@@ -144,7 +346,7 @@
闇�姹傦細`鑷姩`銆乣鍋滄鍊欒瘖` 涓� `鍙彿/杩囧彿/閲嶅彨/鏆傚仠/鎾ら攢鍙彿` **鍚堟垚涓�缁�**锛�
涓�璧�**闈犲彸**锛堝鐫�鍙充晶鍊欒瘖琛級锛屼笉瑕佽鎷嗘暎鍒板乏杈�/涓棿銆�
-->
- <div v-if="$slots.footer" class="doctor-page__footer">
+ <div v-if="$slots.footer" class="doctor-page__footer" :class="{ 'is-readonly': !roomStore.getCanOperate }">
<div class="doctor-page__footer-right">
<slot name="footer"></slot>
</div>
@@ -168,6 +370,12 @@
background-color: var(--el-bg-color);
}
+/* 鎷栧姩鍒嗙晫绾胯繃绋嬩腑锛氬叏灞�鎹㈡垚宸﹀彸绠ご鍏夋爣锛屽苟绂佹閫変腑鏂囧瓧锛堝惁鍒欎細鎷栧嚭涓�鐗囪摑鑹查�夊尯锛� */
+.doctor-page.is-resizing {
+ cursor: col-resize;
+ user-select: none;
+}
+
/* ---------- 鏍囬鏍� ---------- */
.doctor-page__header {
flex: none;
@@ -175,6 +383,59 @@
padding: 0 12px;
overflow: hidden;
background-color: var(--el-color-primary-light-7);
+ /* 宸︿晶鏍囬锛堝悇椤典紶鍏ョ殑 TitlePanel锛�+ 鍙充晶銆屽伐浣嶅垏鎹� / 鍥磋銆嶄笅鎷� */
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+}
+
+/* 鏍囬鍖哄彲鍘嬬缉锛堝伐浣嶄笅鎷夊浐瀹氶潬鍙筹級 */
+.doctor-page__header-left {
+ flex: 1;
+ min-width: 0;
+ overflow: hidden;
+}
+
+/* ==========================================================================
+ 銆愭湰娆¢渶姹傘�戝伐浣滃彴鎸夐挳缁熶竴灏哄 / 瀛楀彿锛堟柟渚块紶鏍囧嚮涓級
+
+ 鍘熸潵娣风敤 `size="small"`锛�24px / 12px 瀛楋級涓庨粯璁わ紙32px / 14px 瀛楋級锛�
+ 鍚屼竴椤甸噷澶у皬涓嶄竴銆傝繖閲屽仛缁熶竴褰掍竴鍖栵紝**涓嶉�愪釜鏀� size 灞炴��**锛�
+ 褰掍竴鍖栧悗 `--small` 宸叉棤瑙嗚鏁堟灉锛屽悗缁柊澧炴寜閽篃浼氳嚜鍔ㄤ竴鑷淬��
+ ========================================================================== */
+.doctor-page :deep(.el-button),
+.doctor-page :deep(.el-button--small),
+.doctor-page :deep(.el-button--default) {
+ height: 32px;
+ padding: 0 14px;
+ font-size: 14px;
+}
+
+/* 琛ㄦ牸 / 闃熷垪鍒楄〃鍐呯殑琛屽唴鎸夐挳锛氬皬涓�妗o紝閬垮厤鎶婅〃鏍艰鎾戦珮 */
+.doctor-page :deep(.el-table .el-button:not(.is-link)),
+.doctor-page :deep(.queue-list .el-button:not(.is-link)) {
+ height: 28px;
+ padding: 0 10px;
+ font-size: 13px;
+}
+
+/* 閾炬帴寮忔寜閽紙琛ㄥご銆屾挙閿�銆嶃�佸�欓�夊尯銆岀珛鍗宠ˉ浜恒�嶇瓑锛夛細鍙斁澶у瓧鍙凤紝涓嶅姞楂樺害 */
+.doctor-page :deep(.el-button.is-link) {
+ height: auto;
+ padding: 0 4px;
+ font-size: 14px;
+}
+
+/* ---------- 鍥磋妯″紡锛堝彧璇伙級鎻愮ず鏉� ---------- */
+.doctor-page__readonly-tip {
+ flex: none;
+ padding: 4px 12px;
+ font-size: 13px;
+ line-height: 20px;
+ color: var(--el-color-warning);
+ background-color: var(--el-color-warning-light-9);
+ border-bottom: 1px solid var(--el-color-warning-light-7);
}
/* ---------- 涓讳綋 ---------- */
@@ -183,6 +444,20 @@
flex: 1;
/* 鈿狅笍 鍏抽敭锛氫笉鍔� min-height:0锛宖lex 瀛愰」涓嶄細鏀剁缉锛宱verflow 涓嶇敓鏁� */
min-height: 0;
+}
+
+/*
+ 鍥磋妯″紡锛堝彧璇伙級锛氬唴瀹瑰尯閲岀殑**鎸夐挳 / 寮�鍏� / 鍕鹃�夋**涓�寰嬩笉鍙偣銆�
+ 瑕嗙洊鍚勯潰鏉块噷鐨勩�屾鏌ュ畬鎴� / 鏀惧純妫�鏌� / 纭垂 / 棰嗙敤瀹屾垚 / 瑁呮満瀹屾垚 / 鏁版嵁褰曞叆 / 鎾ら攢 鈥︺�嶃��
+ 璇存槑锛�
+ 路 寮圭獥锛堟偅鑰呬俊鎭�佹墦鍗伴瑙堢瓑锛夋槸 teleport 鍑哄幓鐨勶紝涓嶅彈杩欓噷褰卞搷锛屼粛鍙甯告煡鐪嬶紱
+ 路 鏈嶅姟绔繕鏈変竴閬撶‖鏍¢獙锛堥潪宸ヤ綅涓讳汉璋冪敤鍐欐帴鍙d細琚嫆缁濓級锛岃繖閲屽彧鏄綋楠屽眰銆�
+*/
+.doctor-page__body.is-readonly :deep(.el-button),
+.doctor-page__body.is-readonly :deep(.el-switch),
+.doctor-page__body.is-readonly :deep(.el-checkbox) {
+ pointer-events: none;
+ opacity: 0.5;
}
/*
@@ -196,6 +471,9 @@
杩欓噷鐨� `overflow-y: auto` 鍙湪**绌洪棿瀹炲湪涓嶈冻**锛堟偅鑰呬俊鎭� + 鎸夐挳鎶婇珮搴﹀悆鍏夛級鏃剁敓鏁堬紝
浣滀负鍏滃簳锛涙甯告儏鍐典笉浼氬嚭鐜版粴鍔ㄦ潯銆�
娉ㄦ剰蹇呴』淇濈暀 min-height:0锛屽惁鍒� flex 瀛愰」涓嶄細鏀剁缉锛岃褰曞垪琛ㄦ嬁涓嶅埌鍙楅檺楂樺害銆�
+
+ 鈿狅笍 鍙宠竟妗嗗凡鍘绘帀锛氬垎鐣岀嚎鏀圭敱 `.doctor-page__splitter` 鎻愪緵锛�
+ 鍚﹀垯銆�3px 鍙宠竟妗� + 鍒嗙晫绾裤�嶄細骞舵帓鎴愪袱鏉$嚎銆�
*/
.doctor-page__content {
display: flex;
@@ -207,6 +485,42 @@
overflow-y: auto;
overflow-x: hidden;
border: solid var(--el-color-primary-light-7);
+ border-right: none;
+}
+
+/* ---------- 鍙嫋鍔ㄥ垎鐣岀嚎 ---------- */
+/*
+ 鍛戒腑鍖� 6px锛堝ソ鐐逛腑锛夛紝瑙嗚绾� 1px 灞呬腑锛沨over / 鎷栧姩涓姞绮楀彉涓昏壊銆�
+ 娉ㄦ剰锛氬搴︾敱瀹冭嚜宸卞崰浣嶏紝鍥犳鎷栧姩鏃�"鍐呭鍖哄搴�"鐢� flex 鑷姩璁╁嚭锛屾棤闇� JS 鏀瑰乏渚с��
+*/
+.doctor-page__splitter {
+ position: relative;
+ flex: none;
+ width: 6px;
+ cursor: col-resize;
+ background-color: transparent;
+ /* 闃叉鎷栧姩鏃舵祻瑙堝櫒鍋氬師鐢熸嫋鎷�/婊氬姩 */
+ touch-action: none;
+ outline: none;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ width: 1px;
+ transform: translateX(-50%);
+ background-color: var(--el-border-color);
+ transition: background-color 0.15s, width 0.15s;
+ }
+
+ &:hover::before,
+ &.is-dragging::before,
+ &:focus-visible::before {
+ width: 2px;
+ background-color: var(--el-color-primary);
+ }
}
/* ---------- 鍙充晶鏍� ---------- */
@@ -238,6 +552,16 @@
}
/*
+ 鍥磋妯″紡锛堝彧璇伙級锛氬簳閮ㄥ姛鑳芥寜閽暣缁勭鐢� 鈥斺��
+ pointer-events:none 鍚屾椂鎸′綇鐐瑰嚮涓庢偓鍋滐紝鍐嶅姞閫忔槑搴﹁"涓嶈兘鐐�"涓�鐪煎彲瑙併��
+ 锛堟湇鍔$鍙︽湁纭牎楠岋細闈炲伐浣嶄富浜鸿皟鐢ㄥ啓鎺ュ彛浼氳鎷掔粷锛屽墠绔鐢ㄥ彧鏄綋楠屽眰銆傦級
+*/
+.doctor-page__footer.is-readonly {
+ pointer-events: none;
+ opacity: 0.55;
+}
+
+/*
鍙充晶鎺т欢缁勶細`鑷姩` 澶嶉�夋 + 鍔熻兘鎸夐挳 + `鍋滄鍊欒瘖` 寮�鍏� **鍚堟垚涓�缁�**锛�
涓�璧烽潬鍙炽�傜敤 gap 缁熶竴闂磋窛锛堝苟娓呮帀 Element Plus 缁欑浉閭� el-button 鐨�
榛樿 margin-left:12px锛屽惁鍒欎細涓� gap 鍙犲姞瀵艰嚧闂磋窛涓嶅潎锛夈��
--
Gitblit v1.9.3