|  | @@ -1,239 +1,274 @@
 | 
	
		
			
				|  |  |  <template>
 | 
	
		
			
				|  |  |    <div class="layout_container">
 | 
	
		
			
				|  |  |      <header style="margin: 0">
 | 
	
		
			
				|  |  | -      <EmrHeader/>
 | 
	
		
			
				|  |  | +      <EmrHeader />
 | 
	
		
			
				|  |  |        <div style="padding: 5px">
 | 
	
		
			
				|  |  | -        <EmrSelectPat v-if="emrConfig.editor"
 | 
	
		
			
				|  |  | -                      :overViewList
 | 
	
		
			
				|  |  | -        />
 | 
	
		
			
				|  |  | +        <EmrSelectPat v-if="emrConfig.editor" :overViewList />
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <el-input v-model="queryPatNo"
 | 
	
		
			
				|  |  | -                  placeholder="住院号"
 | 
	
		
			
				|  |  | -                  style="width: 100px"
 | 
	
		
			
				|  |  | -                  @blur="queryPatNo = $event.target.value.trim()"/>
 | 
	
		
			
				|  |  | -        <el-divider direction="vertical"/>
 | 
	
		
			
				|  |  | +        <el-input
 | 
	
		
			
				|  |  | +          v-model="queryPatNo"
 | 
	
		
			
				|  |  | +          placeholder="住院号"
 | 
	
		
			
				|  |  | +          style="width: 100px"
 | 
	
		
			
				|  |  | +          @blur="queryPatNo = $event.target.value.trim()"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +        <el-divider direction="vertical" />
 | 
	
		
			
				|  |  |          <el-button-group>
 | 
	
		
			
				|  |  |            <el-button
 | 
	
		
			
				|  |  | -              @click="allPatientsInTheHospital"
 | 
	
		
			
				|  |  | -              :disabled="query.state === 4">
 | 
	
		
			
				|  |  | +            @click="allPatientsInTheHospital"
 | 
	
		
			
				|  |  | +            :disabled="query.state === 4"
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  |              在院
 | 
	
		
			
				|  |  |            </el-button>
 | 
	
		
			
				|  |  |            <EmrLeaveHospitalPatient
 | 
	
		
			
				|  |  | -              :patNo="queryPatNo"
 | 
	
		
			
				|  |  | -              @rowClick="disPatients"/>
 | 
	
		
			
				|  |  | +            :patNo="queryPatNo"
 | 
	
		
			
				|  |  | +            @rowClick="disPatients"
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  |          </el-button-group>
 | 
	
		
			
				|  |  | -        <el-divider direction="vertical"/>
 | 
	
		
			
				|  |  | +        <el-divider direction="vertical" />
 | 
	
		
			
				|  |  |          {{ patientInfo.name }}
 | 
	
		
			
				|  |  | -        性别:<span style="color:red;">{{ cptSex(patientInfo.sex) }}</span>
 | 
	
		
			
				|  |  | -        年龄:<span style="color:red;">{{ XEUtils.addUnit(patientInfo.age, '岁') }}</span>
 | 
	
		
			
				|  |  | -        住院天数:<span style="color:red;">{{ XEUtils.addUnit(patientInfo.actIptDays, '天') }}</span>
 | 
	
		
			
				|  |  | -        入院时间:<span style="color:red;">{{ patientInfo.admissDate }}</span>
 | 
	
		
			
				|  |  | -        <el-divider direction="vertical"/>
 | 
	
		
			
				|  |  | -        <el-button-group v-if="query.state === emrStateEnum.在院编辑 || query.state === emrStateEnum.在院只读 ">
 | 
	
		
			
				|  |  | +        性别:<span style="color: red">{{ cptSex(patientInfo.sex) }}</span>
 | 
	
		
			
				|  |  | +        年龄:<span style="color: red">{{
 | 
	
		
			
				|  |  | +          XEUtils.addUnit(patientInfo.age, "岁")
 | 
	
		
			
				|  |  | +        }}</span>
 | 
	
		
			
				|  |  | +        住院天数:<span style="color: red">{{
 | 
	
		
			
				|  |  | +          XEUtils.addUnit(patientInfo.actIptDays, "天")
 | 
	
		
			
				|  |  | +        }}</span>
 | 
	
		
			
				|  |  | +        入院时间:<span style="color: red">{{ patientInfo.admissDate }}</span>
 | 
	
		
			
				|  |  | +        <el-divider direction="vertical" />
 | 
	
		
			
				|  |  | +        <el-button-group
 | 
	
		
			
				|  |  | +          v-if="
 | 
	
		
			
				|  |  | +            query.state === emrStateEnum.在院编辑 ||
 | 
	
		
			
				|  |  | +            query.state === emrStateEnum.在院只读
 | 
	
		
			
				|  |  | +          "
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  |            <el-button type="primary" @click="clickPatientNext">上一位</el-button>
 | 
	
		
			
				|  |  | -          <el-button type="primary" @click="clickPatientNext(false)">下一位</el-button>
 | 
	
		
			
				|  |  | +          <el-button type="primary" @click="clickPatientNext(false)"
 | 
	
		
			
				|  |  | +            >下一位
 | 
	
		
			
				|  |  | +          </el-button>
 | 
	
		
			
				|  |  |          </el-button-group>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      </header>
 | 
	
		
			
				|  |  |      <div class="layout_main">
 | 
	
		
			
				|  |  | -      <emr-main
 | 
	
		
			
				|  |  | -          v-if="show"
 | 
	
		
			
				|  |  | -          ref="emrMainRef"/>
 | 
	
		
			
				|  |  | +      <emr-main v-if="show" ref="emrMainRef" />
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  <LoadingProgress :describes="describes"
 | 
	
		
			
				|  |  | -                   loading-name="病历加载中"
 | 
	
		
			
				|  |  | -                   ref="progressRef"/>
 | 
	
		
			
				|  |  | +  <LoadingProgress
 | 
	
		
			
				|  |  | +    :describes="describes"
 | 
	
		
			
				|  |  | +    loading-name="病历加载中"
 | 
	
		
			
				|  |  | +    ref="progressRef"
 | 
	
		
			
				|  |  | +  />
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script setup lang="tsx">
 | 
	
		
			
				|  |  | -import {getDisPatient, getPatientInfo} from "@/api/zhu-yuan-yi-sheng/emr-patient";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  getDisPatient,
 | 
	
		
			
				|  |  | +  getPatientInfo,
 | 
	
		
			
				|  |  | +} from "@/api/zhu-yuan-yi-sheng/emr-patient";
 | 
	
		
			
				|  |  |  import router from "@/router";
 | 
	
		
			
				|  |  | -import {BizException, ExceptionEnum} from "@/utils/BizException";
 | 
	
		
			
				|  |  | -import {getServerDateApi} from "@/api/public-api";
 | 
	
		
			
				|  |  | -import {subtractTime} from "@/utils/date";
 | 
	
		
			
				|  |  | +import { BizException, ExceptionEnum } from "@/utils/BizException";
 | 
	
		
			
				|  |  | +import { getServerDateApi } from "@/api/public-api";
 | 
	
		
			
				|  |  | +import { subtractTime } from "@/utils/date";
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    applicationData,
 | 
	
		
			
				|  |  |    canIUnlockIt,
 | 
	
		
			
				|  |  |    emrConfig,
 | 
	
		
			
				|  |  |    emrMitt,
 | 
	
		
			
				|  |  | +  emrStateEnum,
 | 
	
		
			
				|  |  | +  patientInfo,
 | 
	
		
			
				|  |  |    query,
 | 
	
		
			
				|  |  |    resolveRoute,
 | 
	
		
			
				|  |  |    unlockEnum,
 | 
	
		
			
				|  |  | -  patientInfo, emrStateEnum, useLiftingRestrictions,
 | 
	
		
			
				|  |  | +  useLiftingRestrictions,
 | 
	
		
			
				|  |  |  } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 | 
	
		
			
				|  |  | -import {getMyUnlockByPatNo} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 | 
	
		
			
				|  |  | -import {ElMessage, ElMessageBox, ElNotification} from "element-plus";
 | 
	
		
			
				|  |  | +import { getMyUnlockByPatNo } from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  ElButton,
 | 
	
		
			
				|  |  | +  ElMessage,
 | 
	
		
			
				|  |  | +  ElMessageBox,
 | 
	
		
			
				|  |  | +  ElNotification,
 | 
	
		
			
				|  |  | +} from "element-plus";
 | 
	
		
			
				|  |  |  import LoadingProgress from "@/components/loading-progress/LoadingProgress.vue";
 | 
	
		
			
				|  |  | -import {ref, onMounted, nextTick} from 'vue'
 | 
	
		
			
				|  |  | -import {CyMessageBox} from "@/components/cy/message-box";
 | 
	
		
			
				|  |  | +import { defineAsyncComponent, nextTick, onMounted, ref } from "vue";
 | 
	
		
			
				|  |  | +import { CyMessageBox } from "@/components/cy/message-box";
 | 
	
		
			
				|  |  |  import sleep from "@/utils/sleep";
 | 
	
		
			
				|  |  | -import {isDev, windowBtoaAndAtob} from "@/utils/public";
 | 
	
		
			
				|  |  | -import {useUserStore} from "@/pinia/user-store";
 | 
	
		
			
				|  |  | +import { isDev, windowBtoaAndAtob } from "@/utils/public";
 | 
	
		
			
				|  |  | +import { useUserStore } from "@/pinia/user-store";
 | 
	
		
			
				|  |  |  import useCompRef from "@/utils/useCompRef";
 | 
	
		
			
				|  |  | -import {defineAsyncComponent} from 'vue';
 | 
	
		
			
				|  |  | -import {cptSex} from "@/utils/computed";
 | 
	
		
			
				|  |  | -import {getOverView} from "@/api/inpatient/patient";
 | 
	
		
			
				|  |  | +import { cptSex } from "@/utils/computed";
 | 
	
		
			
				|  |  | +import { getOverView } from "@/api/inpatient/patient";
 | 
	
		
			
				|  |  |  import XEUtils from "xe-utils";
 | 
	
		
			
				|  |  | -import {ElButton} from "element-plus";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const EmrLeaveHospitalPatient = defineAsyncComponent(() =>
 | 
	
		
			
				|  |  | -    import('@/components/zhu-yuan-yi-sheng/emr/EmrLeaveHospitalPatient.vue'));
 | 
	
		
			
				|  |  | -const EmrSelectPat = defineAsyncComponent(() => import('@/components/zhu-yuan-yi-sheng/EmrSelectPat.vue'));
 | 
	
		
			
				|  |  | -const EmrMain = defineAsyncComponent(() =>
 | 
	
		
			
				|  |  | -    import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue'));
 | 
	
		
			
				|  |  | -const EmrHeader = defineAsyncComponent(() => import('./EmrHeader.vue'))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const emrMainRef = useCompRef(EmrMain)
 | 
	
		
			
				|  |  | +const EmrLeaveHospitalPatient = defineAsyncComponent(
 | 
	
		
			
				|  |  | +  () => import("@/components/zhu-yuan-yi-sheng/emr/EmrLeaveHospitalPatient.vue")
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +const EmrSelectPat = defineAsyncComponent(
 | 
	
		
			
				|  |  | +  () => import("@/components/zhu-yuan-yi-sheng/EmrSelectPat.vue")
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +const EmrMain = defineAsyncComponent(
 | 
	
		
			
				|  |  | +  () =>
 | 
	
		
			
				|  |  | +    import(
 | 
	
		
			
				|  |  | +      "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue"
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +const EmrHeader = defineAsyncComponent(() => import("./EmrHeader.vue"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const emrMainRef = useCompRef(EmrMain);
 | 
	
		
			
				|  |  |  // 是否显示页面
 | 
	
		
			
				|  |  | -const show = ref(false)
 | 
	
		
			
				|  |  | +const show = ref(false);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const queryPatNo = ref('')
 | 
	
		
			
				|  |  | +const queryPatNo = ref("");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 点击查询出院患者
 | 
	
		
			
				|  |  |  const disPatients = async () => {
 | 
	
		
			
				|  |  |    if (query.value.times === 0 || !query.value.patNo) {
 | 
	
		
			
				|  |  | -    BizException(ExceptionEnum.MESSAGE_ERROR, '请输入住院号,住院次数不能为 0 ')
 | 
	
		
			
				|  |  | +    BizException(
 | 
	
		
			
				|  |  | +      ExceptionEnum.MESSAGE_ERROR,
 | 
	
		
			
				|  |  | +      "请输入住院号,住院次数不能为 0 "
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  query.value.state = 2
 | 
	
		
			
				|  |  | -  let te = JSON.stringify(query.value)
 | 
	
		
			
				|  |  | -  await router.push('/myEmrEditor/' + window.btoa(te))
 | 
	
		
			
				|  |  | -  location.reload()
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  query.value.state = 2;
 | 
	
		
			
				|  |  | +  let te = JSON.stringify(query.value);
 | 
	
		
			
				|  |  | +  await router.push("/myEmrEditor/" + window.btoa(te));
 | 
	
		
			
				|  |  | +  location.reload();
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const noPatient = () => {
 | 
	
		
			
				|  |  |    CyMessageBox({
 | 
	
		
			
				|  |  |      showInput: true,
 | 
	
		
			
				|  |  | -    cancelButtonText: '出院',
 | 
	
		
			
				|  |  | -    confirmButtonText: '在院',
 | 
	
		
			
				|  |  | +    cancelButtonText: "出院",
 | 
	
		
			
				|  |  | +    confirmButtonText: "在院",
 | 
	
		
			
				|  |  |      closeOnPressEscape: false,
 | 
	
		
			
				|  |  |      closeOnClickModal: false,
 | 
	
		
			
				|  |  | -    message: '住院号',
 | 
	
		
			
				|  |  | +    message: "住院号",
 | 
	
		
			
				|  |  |      showIcon: false,
 | 
	
		
			
				|  |  | -    beforeClose: (inputValue) => {
 | 
	
		
			
				|  |  | +    beforeClose: inputValue => {
 | 
	
		
			
				|  |  |        if (inputValue.length === 0) {
 | 
	
		
			
				|  |  | -        ElMessage.error('请输入住院号')
 | 
	
		
			
				|  |  | -        return false
 | 
	
		
			
				|  |  | +        ElMessage.error("请输入住院号");
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      return true
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }).then(({action, value}) => {
 | 
	
		
			
				|  |  | -    query.value.patNo = value
 | 
	
		
			
				|  |  | -    allPatientsInTheHospital()
 | 
	
		
			
				|  |  | -  }).catch(({action, value}) => {
 | 
	
		
			
				|  |  | -    if (action === 'cancel') {
 | 
	
		
			
				|  |  | -      query.value.patNo = value
 | 
	
		
			
				|  |  | -      emrMitt.emit('queryDischarge')
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +      return true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  | +    .then(({ action, value }) => {
 | 
	
		
			
				|  |  | +      query.value.patNo = value;
 | 
	
		
			
				|  |  | +      allPatientsInTheHospital();
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    .catch(({ action, value }) => {
 | 
	
		
			
				|  |  | +      if (action === "cancel") {
 | 
	
		
			
				|  |  | +        query.value.patNo = value;
 | 
	
		
			
				|  |  | +        emrMitt.emit("queryDischarge");
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    sleep(500).then(() => {
 | 
	
		
			
				|  |  | -    progressRef.value.close()
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    progressRef.value.close();
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 解析路由数据
 | 
	
		
			
				|  |  |  const routerFunc = async () => {
 | 
	
		
			
				|  |  | -  emrMainRef.value?.closeWebSocket()
 | 
	
		
			
				|  |  | -  show.value = false
 | 
	
		
			
				|  |  | +  emrMainRef.value?.closeWebSocket();
 | 
	
		
			
				|  |  | +  show.value = false;
 | 
	
		
			
				|  |  |    if (!router.currentRoute.value.params.pat) {
 | 
	
		
			
				|  |  | -    noPatient()
 | 
	
		
			
				|  |  | -    return
 | 
	
		
			
				|  |  | +    noPatient();
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    try {
 | 
	
		
			
				|  |  | -    resolveRoute(router.currentRoute.value.params.pat)
 | 
	
		
			
				|  |  | +    resolveRoute(router.currentRoute.value.params.pat);
 | 
	
		
			
				|  |  |    } catch (e) {
 | 
	
		
			
				|  |  | -    console.error(e)
 | 
	
		
			
				|  |  | -    noPatient()
 | 
	
		
			
				|  |  | -    return
 | 
	
		
			
				|  |  | +    console.error(e);
 | 
	
		
			
				|  |  | +    noPatient();
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // @ts-ignore
 | 
	
		
			
				|  |  | -  let reqUnlock = await getMyUnlockByPatNo(query.value.patNo, query.value.times).catch(e => {
 | 
	
		
			
				|  |  | +  let reqUnlock = await getMyUnlockByPatNo(
 | 
	
		
			
				|  |  | +    query.value.patNo,
 | 
	
		
			
				|  |  | +    query.value.times
 | 
	
		
			
				|  |  | +  ).catch(e => {
 | 
	
		
			
				|  |  |      return null;
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |    if (reqUnlock != null) {
 | 
	
		
			
				|  |  | -    reqUnlock.unlockJson = JSON.parse(reqUnlock.unlockJson)
 | 
	
		
			
				|  |  | -    applicationData.value = reqUnlock
 | 
	
		
			
				|  |  | +    reqUnlock.unlockJson = JSON.parse(reqUnlock.unlockJson);
 | 
	
		
			
				|  |  | +    applicationData.value = reqUnlock;
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      // @ts-ignore
 | 
	
		
			
				|  |  | -    applicationData.value = null
 | 
	
		
			
				|  |  | +    applicationData.value = null;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // 在院编辑病历
 | 
	
		
			
				|  |  |    if (query.value.state === 1) {
 | 
	
		
			
				|  |  | -    await getPatientInfo(query.value.patNo).then(res => {
 | 
	
		
			
				|  |  | -      patientInfo.value.$inOutFlag = 1;
 | 
	
		
			
				|  |  | -      patientInfo.value = res
 | 
	
		
			
				|  |  | -      show.value = true
 | 
	
		
			
				|  |  | -    }).catch(() => {
 | 
	
		
			
				|  |  | -      progressRef.value.close()
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | +    await getPatientInfo(query.value.patNo)
 | 
	
		
			
				|  |  | +      .then(res => {
 | 
	
		
			
				|  |  | +        patientInfo.value.$inOutFlag = 1;
 | 
	
		
			
				|  |  | +        patientInfo.value = res;
 | 
	
		
			
				|  |  | +        show.value = true;
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      .catch(() => {
 | 
	
		
			
				|  |  | +        progressRef.value.close();
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  |    } else if (query.value.state === 2) {
 | 
	
		
			
				|  |  |      // 出院编辑病历,
 | 
	
		
			
				|  |  | -    await queryDisPatient()
 | 
	
		
			
				|  |  | +    await queryDisPatient();
 | 
	
		
			
				|  |  |    } else if (query.value.state === 4) {
 | 
	
		
			
				|  |  |      // 在院只读病历
 | 
	
		
			
				|  |  |      patientInfo.value = await getPatientInfo(query.value.patNo);
 | 
	
		
			
				|  |  |      patientInfo.value.$inOutFlag = 1;
 | 
	
		
			
				|  |  | -    await queryAllPatients(false)
 | 
	
		
			
				|  |  | +    await queryAllPatients(false);
 | 
	
		
			
				|  |  |    } else if (query.value.state === 5) {
 | 
	
		
			
				|  |  |      // 出院只读病历
 | 
	
		
			
				|  |  | -    await queryDisPatient()
 | 
	
		
			
				|  |  | -    emrConfig.value.editor = false
 | 
	
		
			
				|  |  | +    await queryDisPatient();
 | 
	
		
			
				|  |  | +    emrConfig.value.editor = false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 查询出院患者信息
 | 
	
		
			
				|  |  |  const queryDisPatient = async () => {
 | 
	
		
			
				|  |  | -  patientInfo.value = await getDisPatient(query.value.patNo, query.value.times)
 | 
	
		
			
				|  |  | -  patientInfo.value.$inOutFlag = 2
 | 
	
		
			
				|  |  | -  patientInfo.value.dischargeDays = subtractTime(await getServerDateApi(), patientInfo.value.disDate)
 | 
	
		
			
				|  |  | +  patientInfo.value = await getDisPatient(query.value.patNo, query.value.times);
 | 
	
		
			
				|  |  | +  patientInfo.value.$inOutFlag = 2;
 | 
	
		
			
				|  |  | +  patientInfo.value.dischargeDays = subtractTime(
 | 
	
		
			
				|  |  | +    await getServerDateApi(),
 | 
	
		
			
				|  |  | +    patientInfo.value.disDate
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 如果患者的出院时间大于 7 天就只能看病历和打印病历了
 | 
	
		
			
				|  |  |    emrConfig.value.editor = (patientInfo.value!.dischargeDays as number) <= 7;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 如果超过了七天就去查看是否有申请编辑
 | 
	
		
			
				|  |  |    if (!emrConfig.value.editor) {
 | 
	
		
			
				|  |  | -    emrConfig.value.editor = canIUnlockIt(unlockEnum.出院编辑)
 | 
	
		
			
				|  |  | +    emrConfig.value.editor = canIUnlockIt(unlockEnum.出院编辑);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (!emrConfig.value.editor) {
 | 
	
		
			
				|  |  | -    const message = '患者出院超7天,无法编辑病历,如需编辑请点击【解锁限制】,待审核完成后刷新页面即可。'
 | 
	
		
			
				|  |  | +    const message =
 | 
	
		
			
				|  |  | +      "患者出院超7天,无法编辑病历,如需编辑请点击【解锁限制】,待审核完成后刷新页面即可。";
 | 
	
		
			
				|  |  |      const notification = ElNotification({
 | 
	
		
			
				|  |  |        message: (
 | 
	
		
			
				|  |  | -          <div>
 | 
	
		
			
				|  |  | -            <div>
 | 
	
		
			
				|  |  | -              {message}
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <div style={{textAlign: 'end'}}>
 | 
	
		
			
				|  |  | -              <ElButton
 | 
	
		
			
				|  |  | -                  text
 | 
	
		
			
				|  |  | -                  type="danger"
 | 
	
		
			
				|  |  | -                  onClick={() => notification.close()}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                {{
 | 
	
		
			
				|  |  | -                  default: () => '关闭'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              </ElButton>
 | 
	
		
			
				|  |  | -              <ElButton
 | 
	
		
			
				|  |  | -                  text
 | 
	
		
			
				|  |  | -                  type="primary"
 | 
	
		
			
				|  |  | -                  onClick={() => {
 | 
	
		
			
				|  |  | -                    useLiftingRestrictions()
 | 
	
		
			
				|  |  | -                    notification.close()
 | 
	
		
			
				|  |  | -                  }}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                {{
 | 
	
		
			
				|  |  | -                  default: () => '解锁限制'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              </ElButton>
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | +        <div>
 | 
	
		
			
				|  |  | +          <div>{message}</div>
 | 
	
		
			
				|  |  | +          <div style={{ textAlign: "end" }}>
 | 
	
		
			
				|  |  | +            <ElButton text type="danger" onClick={() => notification.close()}>
 | 
	
		
			
				|  |  | +              {{
 | 
	
		
			
				|  |  | +                default: () => "关闭",
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +            </ElButton>
 | 
	
		
			
				|  |  | +            <ElButton
 | 
	
		
			
				|  |  | +              text
 | 
	
		
			
				|  |  | +              type="primary"
 | 
	
		
			
				|  |  | +              onClick={() => {
 | 
	
		
			
				|  |  | +                useLiftingRestrictions();
 | 
	
		
			
				|  |  | +                notification.close();
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +            >
 | 
	
		
			
				|  |  | +              {{
 | 
	
		
			
				|  |  | +                default: () => "解锁限制",
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +            </ElButton>
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  |        ),
 | 
	
		
			
				|  |  |        duration: 1000 * 10,
 | 
	
		
			
				|  |  | -      type: 'warning',
 | 
	
		
			
				|  |  | -      position: 'bottom-right'
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | +      type: "warning",
 | 
	
		
			
				|  |  | +      position: "bottom-right",
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (isDev) {
 | 
	
	
		
			
				|  | @@ -241,121 +276,127 @@ const queryDisPatient = async () => {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    show.value = true;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 点击全院患者数据
 | 
	
		
			
				|  |  |  const allPatientsInTheHospital = async () => {
 | 
	
		
			
				|  |  |    if (!queryPatNo.value) {
 | 
	
		
			
				|  |  | -    BizException(ExceptionEnum.MESSAGE_ERROR, '请输入住院号。 ')
 | 
	
		
			
				|  |  | +    BizException(ExceptionEnum.MESSAGE_ERROR, "请输入住院号。 ");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  query.value.patNo = queryPatNo.value
 | 
	
		
			
				|  |  | -  query.value.state = 1
 | 
	
		
			
				|  |  | -  const te = windowBtoaAndAtob.btoa(query.value)
 | 
	
		
			
				|  |  | -  await router.push('/myEmrEditor/' + te)
 | 
	
		
			
				|  |  | -  location.reload()
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const queryAllPatients = async (flag) => {
 | 
	
		
			
				|  |  | -  query.value.times = patientInfo.value!.admissTimes as number
 | 
	
		
			
				|  |  | -  show.value = true
 | 
	
		
			
				|  |  | -  emrConfig.value.editor = flag
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const channel = new BroadcastChannel('login-channel');
 | 
	
		
			
				|  |  | -channel.addEventListener('message', (event) => {
 | 
	
		
			
				|  |  | -  if (navigator.userAgent.indexOf("Firefox") !== -1 || navigator.userAgent.indexOf("Chrome") !== -1) {
 | 
	
		
			
				|  |  | -    emrMainRef.value!.changeClear()
 | 
	
		
			
				|  |  | +  query.value.patNo = queryPatNo.value;
 | 
	
		
			
				|  |  | +  query.value.state = 1;
 | 
	
		
			
				|  |  | +  const te = windowBtoaAndAtob.btoa(query.value);
 | 
	
		
			
				|  |  | +  await router.push("/myEmrEditor/" + te);
 | 
	
		
			
				|  |  | +  location.reload();
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const queryAllPatients = async flag => {
 | 
	
		
			
				|  |  | +  query.value.times = patientInfo.value!.admissTimes as number;
 | 
	
		
			
				|  |  | +  show.value = true;
 | 
	
		
			
				|  |  | +  emrConfig.value.editor = flag;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const channel = new BroadcastChannel("login-channel");
 | 
	
		
			
				|  |  | +channel.addEventListener("message", event => {
 | 
	
		
			
				|  |  | +  if (
 | 
	
		
			
				|  |  | +    navigator.userAgent.indexOf("Firefox") !== -1 ||
 | 
	
		
			
				|  |  | +    navigator.userAgent.indexOf("Chrome") !== -1
 | 
	
		
			
				|  |  | +  ) {
 | 
	
		
			
				|  |  | +    emrMainRef.value!.changeClear();
 | 
	
		
			
				|  |  |      window.location.href = "about:blank";
 | 
	
		
			
				|  |  |      window.close();
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  | -    emrMainRef.value!.changeClear()
 | 
	
		
			
				|  |  | +    emrMainRef.value!.changeClear();
 | 
	
		
			
				|  |  |      window.opener = null;
 | 
	
		
			
				|  |  |      window.open("", "_self");
 | 
	
		
			
				|  |  |      window.close();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -})
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const whetherKickedOut = () => {
 | 
	
		
			
				|  |  | -  const data = localStorage.getItem("强制刷新")
 | 
	
		
			
				|  |  | +  const data = localStorage.getItem("强制刷新");
 | 
	
		
			
				|  |  |    if (data) {
 | 
	
		
			
				|  |  | -    const {userInfo, saveSuccess} = JSON.parse(data)
 | 
	
		
			
				|  |  | +    const { userInfo, saveSuccess } = JSON.parse(data);
 | 
	
		
			
				|  |  |      // @ts-ignore
 | 
	
		
			
				|  |  | -    ElMessageBox.alert(`您已经被强制踢出,操作人:【${userInfo.name}】,您的病历保存【${saveSuccess ? '成功' : '失败'}】。`, '提示', {
 | 
	
		
			
				|  |  | -      type: 'warning',
 | 
	
		
			
				|  |  | -    }).then(() => {
 | 
	
		
			
				|  |  | -    }).catch(() => {
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | +    ElMessageBox.alert(
 | 
	
		
			
				|  |  | +      `您已经被强制踢出,操作人:【${userInfo.name}】,您的病历保存【${saveSuccess ? "成功" : "失败"}】。`,
 | 
	
		
			
				|  |  | +      "提示",
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +        type: "warning",
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +      .then(() => {})
 | 
	
		
			
				|  |  | +      .catch(() => {});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    localStorage.removeItem("强制刷新")
 | 
	
		
			
				|  |  | +    localStorage.removeItem("强制刷新");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const progressRef = useCompRef(LoadingProgress)
 | 
	
		
			
				|  |  | +const progressRef = useCompRef(LoadingProgress);
 | 
	
		
			
				|  |  |  const describes = [
 | 
	
		
			
				|  |  | -  '被删除的病历可在回收站恢复,(如果出院了需要先召回)',
 | 
	
		
			
				|  |  | -  '粘贴内容时,鼠标右键文本粘贴或使用(ctrl + shift + v)',
 | 
	
		
			
				|  |  | -  '如果写错了尝试使用(ctrl + z / ctrl + y)',
 | 
	
		
			
				|  |  | -  '假的进度条,长时间未加载完成,按下F5',
 | 
	
		
			
				|  |  | +  "被删除的病历可在回收站恢复,(如果出院了需要先召回)",
 | 
	
		
			
				|  |  | +  "粘贴内容时,鼠标右键文本粘贴或使用(ctrl + shift + v)",
 | 
	
		
			
				|  |  | +  "如果写错了尝试使用(ctrl + z / ctrl + y)",
 | 
	
		
			
				|  |  | +  "假的进度条,长时间未加载完成,按下F5",
 | 
	
		
			
				|  |  |    "在管理员导入病历时,此页面无法使用,可以稍后刷新(大约 5 - 10 分钟)",
 | 
	
		
			
				|  |  | -  "在患者列表中打开的患者,都是只读模式"
 | 
	
		
			
				|  |  | -]
 | 
	
		
			
				|  |  | +  "在患者列表中打开的患者,都是只读模式",
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const overViewList = ref([])
 | 
	
		
			
				|  |  | +const overViewList = ref([]);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  async function clickPatientNext(upper: boolean = true) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  let index = XEUtils.findIndexOf(overViewList.value, (item) => {
 | 
	
		
			
				|  |  | -    return item.inpatientNo === patientInfo.value.inpatientNo
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | +  let index = XEUtils.findIndexOf(overViewList.value, item => {
 | 
	
		
			
				|  |  | +    return item.inpatientNo === patientInfo.value.inpatientNo;
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (index === -1) {
 | 
	
		
			
				|  |  | -    return
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    if (upper) {
 | 
	
		
			
				|  |  |      if (index === 0) {
 | 
	
		
			
				|  |  | -      index = overViewList.value.length - 1
 | 
	
		
			
				|  |  | +      index = overViewList.value.length - 1;
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -      index -= 1
 | 
	
		
			
				|  |  | +      index -= 1;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      if (index === overViewList.value.length - 1) {
 | 
	
		
			
				|  |  | -      index = 0
 | 
	
		
			
				|  |  | +      index = 0;
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -      index += 1
 | 
	
		
			
				|  |  | +      index += 1;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    const item = overViewList.value[index];
 | 
	
		
			
				|  |  |    const data = {
 | 
	
		
			
				|  |  |      patNo: item.inpatientNo,
 | 
	
		
			
				|  |  |      times: item.admissTimes,
 | 
	
		
			
				|  |  | -    state: query.value.state
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  const te = windowBtoaAndAtob.btoa(data)
 | 
	
		
			
				|  |  | -  await router.push('/myEmrEditor/' + te)
 | 
	
		
			
				|  |  | -  window.location.reload()
 | 
	
		
			
				|  |  | +    state: query.value.state,
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +  const te = windowBtoaAndAtob.btoa(data);
 | 
	
		
			
				|  |  | +  await router.push("/myEmrEditor/" + te);
 | 
	
		
			
				|  |  | +  window.location.reload();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -watch(() => router.currentRoute.value, () => {
 | 
	
		
			
				|  |  | -  window.location.reload()
 | 
	
		
			
				|  |  | -}, {deep: true})
 | 
	
		
			
				|  |  | +watch(
 | 
	
		
			
				|  |  | +  () => router.currentRoute.value,
 | 
	
		
			
				|  |  | +  () => {
 | 
	
		
			
				|  |  | +    window.location.reload();
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  { deep: true }
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  onMounted(async () => {
 | 
	
		
			
				|  |  | -  await useUserStore().getUserInfo
 | 
	
		
			
				|  |  | -  whetherKickedOut()
 | 
	
		
			
				|  |  | -  emrMitt.on('closeProgress', () => {
 | 
	
		
			
				|  |  | -    progressRef.value!.close()
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | +  await useUserStore().getUserInfo;
 | 
	
		
			
				|  |  | +  whetherKickedOut();
 | 
	
		
			
				|  |  | +  emrMitt.on("closeProgress", () => {
 | 
	
		
			
				|  |  | +    progressRef.value!.close();
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |    if (!isDev) {
 | 
	
		
			
				|  |  | -    progressRef.value!.start()
 | 
	
		
			
				|  |  | +    progressRef.value!.start();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    await nextTick();
 | 
	
		
			
				|  |  |    await routerFunc();
 | 
	
		
			
				|  |  | -  getOverView(patientInfo.value.ward).then((res) => {
 | 
	
		
			
				|  |  | -    overViewList.value = res
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -})
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  getOverView(patientInfo.value.ward).then(res => {
 | 
	
		
			
				|  |  | +    overViewList.value = res;
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  |  </script>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 |