From d553a4be94d4f6ee162cc353a28b220403909cfc Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期六, 03 十月 2026 00:58:19 +0800
Subject: [PATCH] ai优化
---
src/views/ecg/doctor/components/DevInstallPanel.vue | 241 +++++++++++++++++++++++++++++++++++++++--------
1 files changed, 199 insertions(+), 42 deletions(-)
diff --git a/src/views/ecg/doctor/components/DevInstallPanel.vue b/src/views/ecg/doctor/components/DevInstallPanel.vue
index cf4b4ae..77c7038 100644
--- a/src/views/ecg/doctor/components/DevInstallPanel.vue
+++ b/src/views/ecg/doctor/components/DevInstallPanel.vue
@@ -1,54 +1,72 @@
<template>
- <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
- <el-form-item label="妫�鏌ラ」鐩�" prop="">
- {{ getCheckTypeName(formData.checkType) }}
- </el-form-item>
+ <el-form class="patient-compact-form" ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
+ <!-- ===== 缂栬緫鍖猴紙闇�瑕佸綍鍏ョ殑瀛楁锛�===== -->
<el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="妫�鏌ラ」鐩�" prop="">
+ {{ getCheckTypeName(formData.checkType) }}
+ </el-form-item>
+ </el-col>
<el-col :span="12">
<el-form-item label="鎮h�呯紪鍙�" prop="patId">
<el-input v-model="formData.patId" placeholder="璇疯緭鍏ユ偅鑰呯紪鍙�" @input="getRentInfoByPatId" />
- <!-- <Qrcode v-if="formData.patId !== undefined && formData.patId !== ''" :text="formData.patId" logo="/logo.gif" width=100 />-->
<Barcode v-if="displayBarCode" :value="displayBarCode" :width=100 />
<el-button @click="copyBarcode()">澶嶅埗</el-button>
</el-form-item>
- <el-form-item label="鎮h�呭悕绉�" prop="patName">
- <el-input v-model="formData.patName" placeholder="璇疯緭鍏ユ偅鑰呭悕绉�" />
- </el-form-item>
- <el-form-item label="鎮h�呮弿杩�" prop="patDetails">
- <dict-tag :type="DICT_TYPE.ECG_PAT_SOURCE" :value="formData.patSrc ?? formData.patDetails?.source ?? ''" />
- {{ formData.patWardDesc || formData?.patDetails?.wardDesc || '-' }} {{ formData.patBedNo || formData?.patDetails?.bedNo || '-' }}
- </el-form-item>
- <!-- 闇�姹�1锛氭偅鑰呬俊鎭� 18 椤圭粺涓�灞曠ず锛堝悗绔凡浠庨绾﹀崟骞抽摵鍥炲~锛宻etPatient 宸茶祴鍊煎埌 formData锛� -->
- <PatientInfoBlock :data="formData" check-type-field="checkType" :span="12" />
- <el-form-item label="瑁呮満鏃堕棿" prop="rentTime">
- <el-date-picker v-model="formData.rentTime" type="date" value-format="x" placeholder="閫夋嫨瑁呮満鏃堕棿" />
- </el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="6">
<el-form-item label="璁惧缂栧彿" prop="devId">
<el-input v-model="formData.devId" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" @input="getDevInfo" />
</el-form-item>
- <el-form-item label="璁惧鎻忚堪" prop="">
- {{ devInfo?.brand || '-' }} {{ devInfo?.model || '-' }} {{ tranlateDevState(devInfo?.state) }}
- </el-form-item>
- <el-form-item label="澶囨敞" prop="remark">
- <el-input v-model="formData.remark" placeholder="璇疯緭鍏ュ娉�" />
- </el-form-item>
- <el-form-item label="澶氳�愯嵂" prop="tolerance">
- <!-- 闇�姹�6锛氱粺涓�璧板瓧鍏� ecg_tolerance锛�0=鏃� 1=澶氳�� 2=澶氶噸鑰愯嵂锛夛紱NULL 鎸�"鏃�"鏄剧ず锛圦12锛� -->
- <dict-tag :type="DICT_TYPE.ECG_TOLERANCE" :value="formData.tolerance ?? 0" />
- </el-form-item>
</el-col>
</el-row>
+
+ <!-- ===== 鎮h�呬俊鎭紙闇�姹�1锛�18 椤圭粺涓�灞曠ず锛屼竴琛屽洓鍒楋級=====
+ 鍚庣 DevRentRespVO 宸蹭粠棰勭害鍗曞钩閾哄洖濉紝setPatient 宸茶祴鍊煎埌 formData -->
+ <PatientInfoBlock :data="formData" check-type-field="checkType" :span="6" />
+
+ <!-- ===== 璁惧淇℃伅锛堜竴琛屽洓鍒楋級===== -->
+ <DeviceInfoBlock :data="formData" :device="devInfo" time-label-mode="install" :span="6">
+ <template #rentTime>
+ <el-date-picker v-model="formData.rentTime" type="date" value-format="x" placeholder="閫夋嫨瑁呮満鏃堕棿" />
+ </template>
+ </DeviceInfoBlock>
+
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="formData.remark" placeholder="璇疯緭鍏ュ娉�" />
+ </el-form-item>
</el-form>
- <el-button @click="submitForm" type="primary" :disabled="formLoading">瑁呮満瀹屾垚</el-button>
- <el-button @click="resetForm()">閲� 缃�</el-button>
- <el-button @click="cancelInstall" :disabled="formLoading">鏀惧純瑁呮満</el-button>
+ <div class="patient-actions">
+ <el-button size="small" @click="submitForm" type="primary" :disabled="formLoading">瑁呮満瀹屾垚</el-button>
+ <el-button size="small" @click="resetForm()">閲� 缃�</el-button>
+ <el-button size="small" @click="cancelInstall" :disabled="formLoading">鏀惧純瑁呮満</el-button>
+ </div>
<!-- 鍖荤敓瑁呮満鍒楄〃 -->
- <ContentWrap>
- <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @row-click="onRowClick">
- <el-table-column label="id" align="center" prop="id" />
+ <div class="records-host">
+ <ContentWrap class="records-wrap">
+ <el-table
+ v-loading="loading"
+ :data="list"
+ :stripe="true"
+ :show-overflow-tooltip="true"
+ @row-click="onRowClick"
+ >
+ <!-- 闇�姹�11锛堜慨姝o級锛氥�屾挙閿�銆嶄綔涓�**宸插畬鎴愯鏈鸿褰曞垪琛ㄧ殑绗竴鍒�**锛堣〃澶存彃妲斤級锛�
+ 鍙嚭鐜颁竴娆★紝浣滅敤浜庢渶杩戜竴浣嶅凡瀹屾垚鎮h�咃紝璇箟涓庡悗绔� lastFinishedPatient 涓�鑷淬�� -->
+ <el-table-column label="鎾ら攢" align="center" width="90px" fixed="left">
+ <template #header>
+ <el-button
+ link
+ type="warning"
+ :disabled="undoDisabled"
+ :loading="undoLoading"
+ @click="$emit('event_undo_finish')"
+ >
+ 鎾ら攢
+ </el-button>
+ </template>
+ </el-table-column>
<el-table-column label="瑁呮満鎯呭喌" align="center" prop="lost">
<template #default="scope">
<span v-if="scope.row.jobType === 10">"宸茶鏈�"</span>
@@ -86,10 +104,15 @@
</template>
</el-table-column>-->
</el-table>
+ </ContentWrap>
<!-- 鍒嗛〉 -->
- <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
- @pagination="getList" />
- </ContentWrap>
+ <Pagination
+ :total="total"
+ v-model:page="queryParams.pageNo"
+ v-model:limit="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </div>
</template>
@@ -106,9 +129,11 @@
import { useCheckTypeStore } from "@/store/modules/checkType";
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { tranlateDevState } from "../../../../utils/statusFormatter";
-import { getCheckTypeName } from "../../../../utils/checkTypeFormatter";
+import { getCheckTypeName, needDevReady } from "../../../../utils/checkTypeFormatter";
+import { useRoomStore } from '@/store/modules/room'
// 闇�姹�1锛氭偅鑰呬俊鎭� 18 椤圭粺涓�灞曠ず鍧�
import PatientInfoBlock from "@/views/ecg/doctor/components/PatientInfoBlock.vue";
+import DeviceInfoBlock from "@/views/ecg/doctor/components/DeviceInfoBlock.vue";
/** 璁惧瑁呮満 琛ㄥ崟 */
defineComponent({ name: 'DevInstallPanel' })
@@ -117,8 +142,22 @@
room: {
type: Object as PropType<RoomBedVO>,
required: true
+ },
+ /** 闇�姹�11锛氳褰曞垪琛ㄧ涓�鍒椼�屾挙閿�銆嶆寜閽殑绂佺敤鎬侊紙鐢辩埗椤甸潰鎺у埗锛� */
+ undoDisabled: {
+ type: Boolean,
+ required: false,
+ default: false
+ },
+ /** 闇�姹�11锛氳褰曞垪琛ㄧ涓�鍒椼�屾挙閿�銆嶆寜閽殑 loading锛堢敱鐖堕〉闈㈡帶鍒讹級 */
+ undoLoading: {
+ type: Boolean,
+ required: false,
+ default: false
}
})
+
+const emit = defineEmits(['event_dev_install', 'event_undo_finish'])
const { t } = useI18n() // 鍥介檯鍖�
const message = useMessage() // 娑堟伅寮圭獥
@@ -154,8 +193,6 @@
patName: [{ required: true, message: '鎮h�呭悕涓嶈兘涓虹┖', trigger: 'blur' }]
})
-
-const emit = defineEmits(['event_dev_install']) // 瀹氫箟 success 浜嬩欢锛岀敤浜庢搷浣滄垚鍔熷悗鐨勫洖璋�
const checkTypeStore = useCheckTypeStore()
@@ -193,6 +230,17 @@
/** 鎻愪氦琛ㄥ崟 */
const submitForm = async () => {
+ // 銆愬畧鍗�戣鏈哄彈鐞嗙殑鏄�屽凡棰嗙敤銆嶆偅鑰咃紝鍏舵鏌ラ」鐩繀椤诲睘浜庨渶瑕佽澶囬鐢ㄧ殑娴佺▼銆�
+ // 涓� DevReadyPanel 鍚屼竴瀹堝崼锛歚check_type.need_dev_ready` 鍦ㄥ悗绔粠鏈鏍¢獙锛�
+ // 浜哄伐鎶婂父瑙勫績鐢靛浘杩欑被鎮h�呮媺杩涙潵浼氶�犳垚"妫�鏌ョ被鎮h�呭嚭鐜板湪璁惧娴佺▼"鐨勬贩涔便��
+ if (formData.value.checkType != null && !needDevReady(formData.value.checkType)) {
+ const ctName = getCheckTypeName(formData.value.checkType) || String(formData.value.checkType)
+ message.warning(
+ `銆�${ctName}銆嶄笉闇�瑕佽澶囬鐢紝涓嶈兘鍔炵悊瑁呮満銆傝纭鏄惁搴斿埌銆屽彨鍙锋鏌ャ�嶉〉闈㈠鐞嗚鎮h�呫�俙
+ )
+ return
+ }
+
// 鏍¢獙琛ㄥ崟
await formRef.value.validate()
// 鎻愪氦璇锋眰
@@ -297,7 +345,16 @@
if (data == null)
return
- formData.value = data //涓嶈兘鏁翠釜璧嬪�硷紝 榛樿瑁呮満鏃堕棿琚竻绌�
+ // 鈿狅笍 鍘熷疄鐜版槸鏁翠綋鏇挎崲 formData锛屼細鎶婃偅鑰呬俊鎭啿鎴� null锛�
+ // 瀹炴祴 GET /ecg/dev-rent/get 鐨勫搷搴旈噷锛岄櫎 patName 澶栫殑鎮h�呭瓧娈靛叏鏄� null
+ // 锛坉ev_rent 琛ㄤ笉瀛樿繖浜涘垪锛屼笖璇ヨ矾寰勬湭浠� appointment 鍥炲~锛夈��
+ // 鏁呮敼涓恒�屽彧瑕嗙洊闈炵┖瀛楁銆嶏紝淇濈暀宸插洖濉殑鎮h�呬俊鎭紙PatientInfoBlock 渚濊禆锛夈��
+ const _merged = { ...formData.value } as Record<string, any>
+ Object.keys(data as Record<string, any>).forEach((k) => {
+ const v = (data as Record<string, any>)[k]
+ if (v !== null && v !== undefined && v !== '') _merged[k] = v
+ })
+ formData.value = _merged as typeof formData.value //涓嶈兘鏁翠釜璧嬪�硷紝 榛樿瑁呮満鏃堕棿琚竻绌�
if (formData.value == null)
return
@@ -315,6 +372,10 @@
const loading = ref(true) // 鍒楄〃鐨勫姞杞戒腑
const list = ref<JobRecordVO[]>([]) // 鍒楄〃鐨勬暟鎹�
const total = ref(0) // 鍒楄〃鐨勬�婚〉鏁�
+// 褰撳墠璇婂淇℃伅锛堢敤浜庡彇璇婂寮�灞曠殑妫�鏌ラ」鐩仛鍏滃簳锛岃 syncRoomCheckTypes锛�
+const roomStore = useRoomStore()
+
+
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
@@ -327,10 +388,37 @@
jobTime: [curDayStart(), curDayEnd()],
summary: undefined,
remark: undefined,
- createTime: []
+ createTime: [],
+ // ========================================================================
+ // 鎸�**褰撳墠璇婂寮�灞曠殑妫�鏌ラ」鐩�**闅旂宸插畬鎴愯褰曘��
+ //
+ // 鑳屾櫙锛歚job_record` 琛ㄥ彧鏈� doc_id + check_type锛�**娌℃湁 room_id**锛�
+ // 鑰� /ecg/job-record/doctor-page 鏄己鍒舵寜鐧诲綍鍖荤敓鏌�"鑷繁鐨勮褰�"銆�
+ // 浜庢槸鍚屼竴鍖荤敓鍦ㄥ涓瘖瀹ゅ潗璇婃椂锛堝 1鍙烽棬璇� ct=[100,1100]銆�6鍙烽棬璇� ct=[400] 骞虫澘杩愬姩蹇冪數锛夛紝
+ // 鍙彿妫�鏌ラ〉浼氭妸**澶氫釜璇婂鐨勮褰曟贩鍦ㄤ竴璧�**鏄剧ず 鈥斺�� 姝f槸鐢ㄦ埛鍙嶉鐨勭幇璞°��
+ //
+ // 鐢卞悇椤甸潰锛圧outine.vue / index.vue / DevInstall.vue锛夊湪 onMounted 鏃�
+ // 鐢ㄥ綋鍓嶈瘖瀹ょ殑 checkTypes 璧嬪�硷紝骞跺湪姣忔鏌ヨ鍓嶅悓姝ワ紝纭繚鍒囪瘖瀹ゅ悗绔嬪嵆鐢熸晥銆�
+ // ========================================================================
+ checkTypes: undefined as number[] | undefined
})
+
+/**
+ * 鎶娿�屽綋鍓嶈瘖瀹ゅ紑灞曠殑妫�鏌ラ」鐩�嶅悓姝ュ埌鏌ヨ鏉′欢锛屽疄鐜板凡瀹屾垚璁板綍鎸夎瘖瀹ら殧绂汇��
+ * 瑙� queryParams.checkTypes 鐨勮鏄庛��
+ */
+const syncRoomCheckTypes = () => {
+ // 浼樺厛鐢ㄩ〉闈紶鍏ョ殑璇婂淇℃伅锛涗负绌烘椂鍥為��鍒� store锛堟洿鍙潬锛岃 TitlePanel 鍚屽璇存槑锛�
+ const fromProp = props.room?.checkTypes
+ const types = (Array.isArray(fromProp) && fromProp.length > 0)
+ ? fromProp
+ : roomStore.room?.checkTypes
+ queryParams.checkTypes = (Array.isArray(types) && types.length > 0) ? [...types] : undefined
+}
/** 鏌ヨ鍒楄〃 */
const getList = async () => {
+ // 鏌ヨ鍓嶅悓姝ュ綋鍓嶈瘖瀹ゅ紑灞曠殑妫�鏌ラ」鐩紝淇濊瘉鍙樉绀烘湰璇婂鐨勮褰�
+ syncRoomCheckTypes()
loading.value = true
try {
const data = await JobRecordApi.getJobRecordDoctorPage(queryParams)
@@ -415,3 +503,72 @@
})
</script>
+
+<style scoped lang="scss">
+/* ==========================================================================
+ 闇�姹傦細琛ㄥ崟鍐呭鎸ゅ崰浜嗕笅鏂硅褰曡〃鏍肩殑绌洪棿 鈥斺�� 鍘嬬缉琛岄棿璺濄��
+ Element Plus 榛樿 `.el-form-item { margin-bottom: 18px }`锛�
+ 鏈〉琛ㄥ崟鍚� 18 椤规偅鑰呬俊鎭紙4 鍒� = 5 琛岋級+ 9 椤硅澶囦俊鎭紝
+ 浠呴棿璺濆氨瑕佷笂鐧� px锛屾妸 el-table 鎸ゅ埌鐪嬩笉瑙併��
+ 杩欓噷缁熶竴鍘嬪埌 4px銆傛敞鎰� :deep 鏄繀闇�鐨勶紙el-form-item 鏄湰缁勪欢鐨勫瓙缁勪欢娓叉煋锛夈��
+ ========================================================================== */
+.patient-compact-form :deep(.el-form-item) {
+ margin-bottom: 4px;
+}
+
+/* ==========================================================================
+ 鎮h�呬俊鎭浐瀹氬湪鍐呭鍖洪《閮ㄣ��
+ 鍐呭鍖鸿嚜韬笉婊氬姩锛堟粴鍔ㄦ潯鍦ㄨ褰曡〃鏍间笂锛夛紝鍥犳**涓嶉渶瑕� position:sticky** 鈥斺��
+ 鐩存帴浣滀负 flex 鐨勫浐瀹氶」锛坒lex:none锛夊嵆鍙缁堢暀鍦ㄩ《閮ㄣ��
+ 鑳屾櫙涓嶉�忔槑锛屼繚璇佷笌涓嬫柟璁板綍琛ㄦ牸瑙嗚鍒嗙銆�
+ ========================================================================== */
+:deep(.doctor-page__content) > .patient-compact-form {
+ flex: none;
+ padding-bottom: 4px;
+ background-color: var(--el-bg-color);
+ border-bottom: 1px solid var(--el-border-color-lighter);
+}
+
+
+
+/* ==========================================================================
+ 鎮h�呬俊鎭浐瀹氬湪鍐呭鍖洪《閮ㄣ��
+ 鍐呭鍖猴紙.doctor-page__content锛夎嚜韬粴鍔紝鎵�浠ヨ繖閲屽繀椤荤敤 position:sticky
+ 鎵嶈兘璁� 18 椤规偅鑰呬俊鎭湪璁板綍鍒楄〃婊氬姩鏃朵繚鎸佸彲瑙併��
+ 鑳屾櫙涓嶉�忔槑锛岄伩鍏嶆粴鍔ㄥ唴瀹逛粠琛ㄥ崟椤归棿闅欓�忓嚭銆�
+ ========================================================================== */
+:deep(.doctor-page__content) > .patient-compact-form {
+ position: sticky;
+ top: 0;
+ z-index: 3;
+ padding-bottom: 4px;
+ background-color: var(--el-bg-color);
+ border-bottom: 1px solid var(--el-border-color-lighter);
+}
+
+/* ==========================================================================
+ 鎮h�呮搷浣滃姛鑳藉潡锛氫綅浜庛�屾偅鑰呬俊鎭�嶄笌銆屽凡瀹屾垚璁板綍鍒楄〃銆嶄箣闂达紝鐙珛鎴愬潡銆�
+ 闇�姹傦細鍚勫姛鑳芥寜閽紙妫�鏌ュ畬鎴� / 鏀惧純妫�鏌� / 閲嶇疆 / 鐭ユ儏鍚屾剰涔� 鈥︼級**鎺掑湪涓�琛�**銆�
+ 鍋氭硶锛歠lex + gap锛屽苟 **绂佹鎹㈣**锛坒lex-wrap:nowrap锛夛紱
+ 鎸夐挳鐢� size="small" 浠ュ绾冲叏閮ㄦ寜閽紱鍗充娇瀹藉害涓嶈冻涔熶笉鎶樿銆�
+ 涓婁笅杈规 + 搴曡壊锛屼娇瀹冧笌鎮h�呬俊鎭�佽褰曞垪琛ㄥ湪瑙嗚涓婂垎鍖恒��
+ ========================================================================== */
+.patient-actions {
+ display: flex;
+ flex: none;
+ flex-wrap: nowrap;
+ gap: 8px;
+ align-items: center;
+ /* 涓婁笅鐣欑櫧 + 鍒嗛殧绾匡紝褰㈡垚鐙珛鍔熻兘鍧� */
+ padding: 6px 4px;
+ margin-bottom: 6px;
+ background-color: var(--el-bg-color);
+ border-top: 1px solid var(--el-border-color-lighter);
+ border-bottom: 1px solid var(--el-border-color-lighter);
+
+ /* Element Plus 缁欑浉閭� el-button 榛樿鍔犱簡 margin-left:12px锛屼細涓� gap 鍙犲姞锛屾竻鎺� */
+ :deep(.el-button + .el-button) {
+ margin-left: 0;
+ }
+}
+</style>
--
Gitblit v1.9.3