From e54cd52d2621189e9a192e2fe47ecc241cfc69fd Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期六, 12 十月 2024 11:42:18 +0800 Subject: [PATCH] 装机界面 step 1 --- src/views/ecg/doctor/DevInstall.vue | 450 +++++++++++++++++++++---------------------------------- 1 files changed, 175 insertions(+), 275 deletions(-) diff --git a/src/views/ecg/doctor/DevInstall.vue b/src/views/ecg/doctor/DevInstall.vue index bfa5146..970f8af 100644 --- a/src/views/ecg/doctor/DevInstall.vue +++ b/src/views/ecg/doctor/DevInstall.vue @@ -1,294 +1,194 @@ -<template> - <el-form - ref="formRef" - :model="formData" - :rules="formRules" - label-width="100px" - v-loading="formLoading" - > - <el-row :gutter="20"> - <el-col :span="12"> - <el-form-item label="鎮h�呯紪鍙�" prop="patId"> - <el-input v-model="formData.patId" placeholder="璇疯緭鍏ユ偅鑰呯紪鍙�" @input="getRentInfoByPatId" /> - </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="patDeptDesc"> - 绉戝: {{formData.patDeptDesc}} 鐥呭尯: {{formData.patWardDesc}} 搴婁綅: {{formData.patBedNo}} - </el-form-item> - <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-form-item label="璁惧缂栧彿" prop="devId"> - <el-input v-model="formData.devId" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" @input="getDevInfo"/> - </el-form-item> - <el-form-item label="璁惧鎻忚堪" prop=""> - <span v-if="formData.brand !== null"> {{formData.brand}} </span> - {{" "}} - <span v-if="formData.model !== null"> {{formData.model}} </span> - </el-form-item> - <el-form-item label="澶囨敞" prop="remark"> - <el-input v-model="formData.remark" placeholder="璇疯緭鍏ュ娉�" /> - </el-form-item> - </el-col> - </el-row> - </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> - - <!-- 鍖荤敓瑁呮満鍒楄〃 --> - <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" /> - <el-table-column label="瑁呮満鎯呭喌" align="center" prop="lost" > - <template #default="scope"> - <span v-if="scope.row.jobType === 10">"宸茶鏈�"</span> - <span v-if="scope.row.jobType === 35">"宸叉斁寮�"</span> - </template> - </el-table-column> -<!-- <el-table-column label="浣滀笟绫诲瀷" align="center" prop="jobType" />--> -<!-- <el-table-column label="鍖荤敓缂栧彿" align="center" prop="docId" />--> - <el-table-column label="鍖荤敓鍚嶇О" align="center" prop="docName" /> - <el-table-column label="璁惧缂栧彿" align="center" prop="devId" /> - <el-table-column label="鎮h�呯紪鍙�" align="center" prop="patId" /> - <el-table-column label="鎮h�呭悕绉�" align="center" prop="patName" /> - <el-table-column - label="浣滀笟鏃堕棿" - align="center" - prop="jobTime" - :formatter="dateFormatter" - width="180px" - /> - <el-table-column label="浣滀笟姒傝" align="center" prop="summary" /> - <el-table-column label="澶囨敞" align="center" prop="remark" /> - <el-table-column - label="鍒涘缓鏃堕棿" - align="center" - prop="createTime" - :formatter="dateFormatter" - width="180px" - /> - <el-table-column label="鎿嶄綔" align="center" min-width="120px"> - <template #default="scope"> - <el-button - link - type="primary" - @click="openForm('update', scope.row.id)" - v-hasPermi="['ecg:job-record:update']" - > - 缂栬緫 - </el-button> - <el-button - link - type="danger" - @click="handleDelete(scope.row.id)" - v-hasPermi="['ecg:job-record:delete']" - > - 鍒犻櫎 - </el-button> - </template> - </el-table-column> - </el-table> - <!-- 鍒嗛〉 --> - <Pagination - :total="total" - v-model:page="queryParams.pageNo" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> - </ContentWrap> - -</template> - <script setup lang="ts"> -import { DevRentApi, DevRentVO } from '@/api/ecg/devrent' -import {dateFormatter} from "@/utils/formatTime"; -import {JobRecordApi, JobRecordVO} from "@/api/ecg/jobrecord"; -import {isStringEmpty} from "@/utils/stringUtil"; -import {curDayEnd, curDayStart} from "@/utils/dateUtil"; -import {DeviceApi} from "@/api/ecg/devmanage"; +import TitleInstallPanel from "@/views/ecg/doctor/components/TitleInstallPanel.vue"; +import DevInstallPanel from "@/views/ecg/doctor/components/DevInstallPanel.vue"; +import QueuePanel from "@/views/ecg/doctor/components/QueuePanel.vue"; +import {DoctorApi, PatientStatisticVO, RoomBedVO} from '@/api/ecg/doctor'; +import {useUserStore} from "@/store/modules/user"; +import {QueueVO} from "@/api/ecg/queue"; +import {ElNotification} from "element-plus"; -/** 瑁呮満 琛ㄥ崟 */ -defineOptions({ name: 'DevrInstall' }) +const userStore = useUserStore(); -const emit = defineEmits(['success-install']) // 瀹氫箟 success 浜嬩欢锛岀敤浜庢搷浣滄垚鍔熷悗鐨勫洖璋� - -const { t } = useI18n() // 鍥介檯鍖� -const message = useMessage() // 娑堟伅寮圭獥 - -const dialogVisible = ref(false) // 寮圭獥鐨勬槸鍚﹀睍绀� - -const formLoading = ref(false) // 琛ㄥ崟鐨勫姞杞戒腑锛�1锛変慨鏀规椂鐨勬暟鎹姞杞斤紱2锛夋彁浜ょ殑鎸夐挳绂佺敤 - -const formData = ref({}) - -const formRules = reactive({ - // devId: [{ required: true, message: '璁惧缂栧彿涓嶈兘涓虹┖', trigger: 'blur' }], - rentTime: [{ required: true, message: '璇烽�夋嫨瑁呮満鏃ユ湡', trigger: 'blur' }], +const roomBedVO = ref<RoomBedVO>({ + roomId: null, + roomName: null, + bedNo: null }) -const formRef = ref() // 琛ㄥ崟 Ref -/** 鎻愪氦琛ㄥ崟 */ -const submitForm = async () => { - // 鏍¢獙琛ㄥ崟 - await formRef.value.validate() - // 鎻愪氦璇锋眰 - formLoading.value = true - try { - const data = formData.value as unknown as DevRentVO - //await DevRentApi.updateDevRent(data) - await DevRentApi.devInstall(data) - message.success(t('鎿嶄綔鎴愬姛')) - dialogVisible.value = false - // 鍙戦�佹搷浣滄垚鍔熺殑浜嬩欢 - emit('success-install') - resetForm() - getList() - } finally { - formLoading.value = false - } -} - -/** 閲嶇疆琛ㄥ崟 */ -const resetForm = () => { - formData.value = { - id: undefined, - devId: undefined, - patId: undefined, - patName: undefined, - patDeptCode: undefined, - patDeptDesc: undefined, - patWardCode: undefined, - patWardDesc: undefined, - patBedNo: undefined, - rentTime: new Date().getTime(), - returnTime: undefined, - interference: undefined, - baseline: undefined, - detachment: undefined, - remark: undefined, - category: '', - brand: '', - model: '', - } - formRef.value?.resetFields() -} - -const getDevInfo = async () => { - if (isStringEmpty(formData.value.devId)) { - formData.value.category = "" - formData.value.brand = "" - formData.value.model = "" - return - } - - const data = await DeviceApi.getDeviceByDevId(formData.value.devId!) - console.info( data ) - formData.value.category = data === null ? "" : data.category - formData.value.brand = data === null ? "" : data.brand - formData.value.model = data === null ? "" : data.model -} - -/* -const getRentInfoByDevId = () => { - const tempDevId = formData.value.devId; - resetForm() - if (isStringEmpty(tempDevId)) - return - - formData.value.devId = tempDevId; - getRentInfo() -} -*/ - -const getRentInfoByPatId = () => { - const tempPatId = formData.value.patId; - resetForm() - if (isStringEmpty(tempPatId)) - return - - formData.value.patId = tempPatId; - getRentInfo() -} - -const getRentInfo = async () => { - const data = await DevRentApi.getReadyRent(formData.value) - if (null === data) - return - - formData.value = data - if (data.returnTime === null) - data.returnTime = new Date().getTime() -} - - -const loading = ref(true) // 鍒楄〃鐨勫姞杞戒腑 -const list = ref<JobRecordVO[]>([]) // 鍒楄〃鐨勬暟鎹� -const total = ref(0) // 鍒楄〃鐨勬�婚〉鏁� -const queryParams = reactive({ - pageNo: 1, - pageSize: 10, - jobType: [10, 35], - docId: undefined, - docName: undefined, - devId: undefined, - patId: undefined, - patName: undefined, - jobTime: [curDayStart(), curDayEnd()], - summary: undefined, - remark: undefined, - createTime: [] +const onStagePatient = ref<QueueVO>({ + bedNo: "", bookCheckType: 0, bookTimeslot: 0, expired: 0, id: 0, jumpFlag: 0, passed: 0, + patGender: 0, patId: "", patName: "", roomId: 0, roomName: "", seqNum: 0, status: 0 }) -/** 鏌ヨ鍒楄〃 */ -const getList = async () => { - loading.value = true + +const patientStat = ref<PatientStatisticVO>({ + finishedNum: 0, + readyNum: 0, + passedNum: 0, + queuingNum: 0 +}) + +const state = ref<boolean>() + +const patientList = ref<QueueVO[]>([]) + +let timerRunFlag : boolean = false +const bedControlFlag = ref<boolean>(true); +const finishFlag = ref<boolean>(true); +const passFlag = ref<boolean>(true); + +const finishNextPatient = async () => { + finishFlag.value = true try { - const data = await JobRecordApi.getJobRecordDoctorPage(queryParams) - list.value = data.list - total.value = data.total + patientList.value = await DoctorApi.finishInstallNextPatient(roomBedVO.value) + patientStat.value = await DoctorApi.getPatientStatistic(roomBedVO.value) + getOnstagePatient() } finally { - loading.value = false + finishFlag.value = false } } -const onRowClick = (cur) => { - if (cur !== null) - getSelectedRent( cur.rentId ) -} - -const getSelectedRent = async (rentId) => { - formData.value = await DevRentApi.getDevRent(rentId) -} - -const cancelInstall = async () => { - const data = formData.value as unknown as DevRentVO - if (formData.value.id === null || formData.value.id === undefined) { - const result = await DevRentApi.devInstallCancel(data) - formData.value.id = result - message.success(t('鎿嶄綔鎴愬姛')) - } else { - await DevRentApi.devInstallCancel(data) - message.success(t('鎿嶄綔鎴愬姛')) +const passNextPatient = async () => { + passFlag.value = true + try { + patientList.value = await DoctorApi.passNextPatient(roomBedVO.value) + patientStat.value = await DoctorApi.getPatientStatistic(roomBedVO.value) + getOnstagePatient() + } finally { + passFlag.value = false } - // 鍙戦�佹搷浣滄垚鍔熺殑浜嬩欢 - emit('success-install') - resetForm() - getList() +} + +const callAgain = async () => { + await DoctorApi.callAgainPatient(roomBedVO.value) +} + +const getOnstagePatient = () => { + const tempPatient : QueueVO | undefined = patientList.value.find(item => item.status === 30) + if (undefined === tempPatient) { + setOnStagePatient(undefined) + } else if (tempPatient.patId !== onStagePatient.value.patId) { + onStagePatient.value= tempPatient + setOnStagePatient(tempPatient) + } +} + +const initLoad = async () => { + if (roomBedVO.value.roomId == null) { + ElNotification.error({ + message: '璇烽噸鏂板氨搴�!', + type: 'info', + duration: 3000 // 鑷姩鍏抽棴鏃堕棿锛岄粯璁や负3000ms + }) + return + } + + patientList.value = await DoctorApi.getReceivedPatientList(roomBedVO.value) + getOnstagePatient() + patientStat.value = await DoctorApi.getPatientStatistic(roomBedVO.value) + const queueVO2 = await DoctorApi.bedDoctorGet(roomBedVO.value) + if (queueVO2.status === 20) + state.value = true + else if (queueVO2.status === 30) + state.value = false +} + +const bedControl = async () => { + bedControlFlag.value = true + try { + if (state.value) { + await DoctorApi.bedDoctorPause(roomBedVO.value) + state.value = false + } else { + await DoctorApi.bedDoctorResume(roomBedVO.value) + state.value = true + } + } finally { + bedControlFlag.value = false + } +} + +const doctorTimer = () => { + console.log('doctorTimer ...') + initLoad() + if (timerRunFlag) + setTimeout(doctorTimer, 5000) // five seconds } /** 鍒濆鍖� **/ onMounted(() => { - resetForm() - getList() + timerRunFlag = false + bedControlFlag.value = true + finishFlag.value = true + passFlag.value = true + + if (userStore.isSetRoom) { + roomBedVO.value.roomId = userStore.room!.roomId + roomBedVO.value.roomName = userStore.room!.roomName + roomBedVO.value.bedNo = userStore.room!.bedNo + + timerRunFlag = true + doctorTimer() + } else { + roomBedVO.value.roomId = null + roomBedVO.value.bedNo = null + } + + bedControlFlag.value = false + finishFlag.value = false + passFlag.value = false + + console.info( roomBedVO.value ) }) +onUnmounted( () =>{ + timerRunFlag = false +}) + +const onEventDevInstall = () => { + //console.info("onDevInstallPanelEvent...") +} + +const onEventRecallFinish = () => { + initLoad() +} + +/** 鎮h�呭彉鏇存搷浣� */ +const devInstallPanelRef = ref() +const setOnStagePatient = (tempPatient: QueueVO | undefined) => { + devInstallPanelRef.value.setPatient(tempPatient) +} + </script> + +<template> + <el-container> + <el-header style="background-color: var(--el-color-primary-light-7); font-size: 24px"> + <TitleInstallPanel :room="roomBedVO" :patientStatistic="patientStat" /> + </el-header> + <el-container style="height: 100%;"> + <el-main style="border: solid var(--el-color-primary-light-7)"> + <DevInstallPanel ref="devInstallPanelRef" @event_dev_install="onEventDevInstall"/> + </el-main> + <el-aside width="400px" style="border: solid var(--el-color-primary-light-7)"> + <QueuePanel :queue="patientList" @event_RecallFinish="onEventRecallFinish"/> + </el-aside> + </el-container> + <el-container class="right-bottom"> + <el-button :disabled="finishFlag" type="primary" @click="finishNextPatient">鍙彿</el-button> + <el-button :disabled="passFlag" type="primary" @click="passNextPatient">杩囧彿</el-button> + <el-button type="primary" @click="callAgain">閲嶅彨</el-button> + <el-button :disabled="bedControlFlag" type="primary" @click="bedControl">{{state?'鏆傚仠':'鎭㈠'}}</el-button> + </el-container> + </el-container> +</template> + +<style scoped lang="scss"> +.right-bottom { + position: absolute; + bottom: 50px; + right: 100px; + //background-color: #f00; + //color: #fff; + //padding: 10px; +} +</style> -- Gitblit v1.9.3