Browse Source

优化护士查看电子病历,以及优化病历质控。

xiaochan 2 years ago
parent
commit
da69ae10d4

+ 12 - 23
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/EmrControlRuleDialog.vue

@@ -1,24 +1,13 @@
 <template>
   <xc-dialog-v2 v-model="dialog" title="病历质控" width="80%" maximize>
-    <el-tabs>
-      <el-tab-pane label="时间质控">
-        <RuleSift :data="patientList" default-expand-all/>
-      </el-tab-pane>
-
-      <el-tab-pane label="质控建议">
-        <div v-for="(value,key) in suggestion">
-          <div>
-            {{ key }}
-          </div>
-          <el-table :data="value">
-            <el-table-column prop="name" label="项目" width="180"/>
-            <el-table-column prop="scoringCriteriaName" label="等级" width="40"/>
-            <el-table-column prop="remark" label="备注" show-overflow-tooltip/>
-            <el-table-column prop="numberOfDefects" label="缺陷数"/>
-          </el-table>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
+    <xc-table :local-data="suggestion" :height="80">
+      <el-table-column prop="patNo" label="住院号" width="90"/>
+      <el-table-column prop="times" label="次数" width="40"/>
+      <el-table-column prop="patName" label="患者名称"/>
+      <el-table-column prop="emrName" label="病历"/>
+      <el-table-column prop="name" label="质控意见"/>
+      <el-table-column prop="scoringCriteriaName" label="等级"/>
+    </xc-table>
   </xc-dialog-v2>
 </template>
 
@@ -28,9 +17,9 @@ import {myPatientQualityControl} from "@/api/zhu-yuan-yi-sheng/emr-control-rule"
 import RuleSift
   from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr_control_rule/RuleSift.vue";
 import {isDev} from "@/utils/public";
+import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
 
 
-const patientList = ref([])
 const suggestion = ref({})
 
 const dialog = ref(false)
@@ -39,10 +28,10 @@ onMounted(() => {
 
   myPatientQualityControl().then((res) => {
 
-    patientList.value = res.timeQualityControl.details
-    suggestion.value = res.emrSuggestion
+    suggestion.value = res
 
-    if (patientList.value.length > 0) {
+    console.log(res)
+    if (suggestion.value.length > 0) {
       dialog.value = true
     }
 

+ 1 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue

@@ -729,6 +729,7 @@ const editJudgment = async () => {
       }).catch(() => {
   })
   // 不能编辑 不锁柱
+  console.log(emrConfig.value.editor)
   if (!emrConfig.value.editor) {
     return
   }

+ 12 - 3
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrAudit.vue

@@ -102,6 +102,7 @@ import EmrAuditDialog
 import {BizException, ExceptionEnum} from "@/utils/BizException";
 import {uuid} from "@/utils/getUuid";
 import {scoringCriteriaList} from "@/data";
+import {ElMessageBox} from "element-plus";
 
 const elTableRef = ref(null)
 
@@ -240,10 +241,18 @@ const addAudit = () => {
 }
 
 const finalControl = () => {
-  updateFinalControl(emrInfo.value.patNo, emrInfo.value.times).then(res => {
-    emrMitt.emit('setPatInfo', 'finalControl', 1)
-    queryAudit(emrInfo.value)
+
+  ElMessageBox.confirm('是否标记此患者为终末质控。', '提示', {
+    type: 'warning'
+  }).then(() => {
+    updateFinalControl(emrInfo.value.patNo, emrInfo.value.times).then(res => {
+      emrMitt.emit('setPatInfo', 'finalControl', 1)
+      queryAudit(emrInfo.value)
+    })
+  }).catch(() => {
+
   })
+
 }
 
 onMounted(() => {

+ 0 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init.js

@@ -436,7 +436,6 @@ export const unlockEnum = {
  * @returns {boolean}
  */
 export function canIUnlockIt(val) {
-    console.log(applicationData.value)
     if (applicationData.value === null) {
         return false
     }

+ 82 - 79
src/views/medical-insurance/inpatient/Home.vue

@@ -1,37 +1,37 @@
 <template>
-    <page-layer>
-        <template #header>
-            <el-select v-model="search.current" style="width: 70px" @change="handleSelectSearchMehtod">
-                <el-option v-for="item in search.methods" :key="item.code" :value="item.code"
-                           :label="item.name"></el-option>
-            </el-select>
-            <span v-if="permission < 10" style="margin-left: 8px">
+  <page-layer>
+    <template #header>
+      <el-select v-model="search.current" style="width: 70px" @change="handleSelectSearchMehtod">
+        <el-option v-for="item in search.methods" :key="item.code" :value="item.code"
+                   :label="item.name"></el-option>
+      </el-select>
+      <span v-if="permission < 10" style="margin-left: 8px">
             <el-input v-model="search.zyh" style="width: 100px" clearable @keyup.enter="searchPatient"
                       placeholder="住院号"></el-input>
             <el-button type="primary" icon="Search" @click="searchPatient">检索</el-button>
           </span>
-            <el-button type="primary" icon="Postcard" @click="checkIdCard" style="margin-left: 8px">身份信息</el-button>
-            <el-button style="margin-left: 10px" type="success" icon="Document" @click="getRegInfo">登记信息</el-button>
-            <el-button style="margin-left: 10px" type="danger" icon="MagicStick" @click="toEmpiView">360视图</el-button>
-            <el-button style="margin-left: 10px" icon="Document" @click="openEmr">电子病历</el-button>
-            <bloodSugar :pat-no="patient.inpatientNo" :times="patient.admissTimes" :old-button="false"/>
-        </template>
-        <template #aside>
-            <Overview ref="overview" :showSelection="isUploadPage"/>
-        </template>
-        <template #main>
-            <router-view v-slot="{ Component }">
-                <transition name="fade-transform" mode="out-in">
-                    <keep-alive>
-                        <component :is="Component"/>
-                    </keep-alive>
-                </transition>
-            </router-view>
-            <Registinfo v-if="showRegisterInfo" :params="patient" @close="showRegisterInfo = false"></Registinfo>
-            <IdentifyImage v-if="showIdCardImg" :pat-no="patient.inpatientNo" :times="patient.admissTimes"
-                           @close="showIdCardImg = false"></IdentifyImage>
-        </template>
-    </page-layer>
+      <el-button type="primary" icon="Postcard" @click="checkIdCard" style="margin-left: 8px">身份信息</el-button>
+      <el-button style="margin-left: 10px" type="success" icon="Document" @click="getRegInfo">登记信息</el-button>
+      <el-button style="margin-left: 10px" type="danger" icon="MagicStick" @click="toEmpiView">360视图</el-button>
+      <el-button style="margin-left: 10px" icon="Document" @click="openEmr">电子病历</el-button>
+      <bloodSugar :pat-no="patient.inpatientNo" :times="patient.admissTimes" :old-button="false"/>
+    </template>
+    <template #aside>
+      <Overview ref="overview" :showSelection="isUploadPage"/>
+    </template>
+    <template #main>
+      <router-view v-slot="{ Component }">
+        <transition name="fade-transform" mode="out-in">
+          <keep-alive>
+            <component :is="Component"/>
+          </keep-alive>
+        </transition>
+      </router-view>
+      <Registinfo v-if="showRegisterInfo" :params="patient" @close="showRegisterInfo = false"></Registinfo>
+      <IdentifyImage v-if="showIdCardImg" :pat-no="patient.inpatientNo" :times="patient.admissTimes"
+                     @close="showIdCardImg = false"></IdentifyImage>
+    </template>
+  </page-layer>
 </template>
 
 <script setup>
@@ -45,91 +45,94 @@ import Overview from '../../../components/medical-insurance/patient-overview/Ind
 import IdentifyImage from '../../../components/inpatient/IdentifyImage.vue'
 import Registinfo from '../../../components/medical-insurance/registinfo/Index.vue'
 import PageLayer from "@/layout/PageLayer";
-import {getEmrUrl} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
+import {
+  emrStateEnum,
+  getEmrUrl
+} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 import BloodSugar from "@/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/components/BloodSugar.vue";
 
 
 const search = initSearchParam()
 const permission = getGreatestRole()
 const handleSelectSearchMehtod = (val) => {
-    store.commit('ptnt/setSearchMethod', val)
+  store.commit('ptnt/setSearchMethod', val)
 }
 const patient = computed(() => {
-    return baseinfo()
+  return baseinfo()
 })
 const isUploadPage = computed(() => {
-    return store.state.app.currentPageName === 'inHospFeeUpload' && !store.state.ptnt.injuryMode
+  return store.state.app.currentPageName === 'inHospFeeUpload' && !store.state.ptnt.injuryMode
 })
 
 const overview = ref(null)
 
 const searchPatient = () => {
-    if (!search.zyh) {
-        overview.value.fetchOverviews()
-        setBaseinfo({})
-    } else {
-        if (permission < 10) {
-            overview.value.overviews = []
-            store.commit('ptnt/setBaseinfo', {totalCharge: '0.00', chargeYb: '0.00'})
-            getPatientInfo(search.zyh).then((res) => {
-                overview.value.currentWard = res.admissWard
-                store.commit('user/wardChange', res.admissWard)
-                store.commit('ptnt/setCurrentMedType', res.medType)
-                setBaseinfo(res)
-                overview.value.overviews.push(makeOverview(res))
-            })
-        }
+  if (!search.zyh) {
+    overview.value.fetchOverviews()
+    setBaseinfo({})
+  } else {
+    if (permission < 10) {
+      overview.value.overviews = []
+      store.commit('ptnt/setBaseinfo', {totalCharge: '0.00', chargeYb: '0.00'})
+      getPatientInfo(search.zyh).then((res) => {
+        overview.value.currentWard = res.admissWard
+        store.commit('user/wardChange', res.admissWard)
+        store.commit('ptnt/setCurrentMedType', res.medType)
+        setBaseinfo(res)
+        overview.value.overviews.push(makeOverview(res))
+      })
     }
+  }
 }
 
 const showRegisterInfo = ref(false)
 const getRegInfo = () => {
-    if (nullPatient()) return
-    showRegisterInfo.value = true
+  if (nullPatient()) return
+  showRegisterInfo.value = true
 }
 
 const toEmpiView = () => {
-    if (nullPatient()) return
-    getEmpiViewUrl(patient.value.inpatientNo).then((res) => {
-        window.open(res, '_blank')
-    })
+  if (nullPatient()) return
+  getEmpiViewUrl(patient.value.inpatientNo).then((res) => {
+    window.open(res, '_blank')
+  })
 }
 
 const showIdCardImg = ref(false)
 const checkIdCard = () => {
-    if (nullPatient()) return
-    showIdCardImg.value = true
+  if (nullPatient()) return
+  showIdCardImg.value = true
 }
 
 function initSearchParam() {
-    return reactive({
-        current: 'alpha',
-        methods: [
-            {code: 'alpha', name: '拼音'},
-            {code: 'code', name: '编码'},
-            {code: 'name', name: '名称'},
-        ],
-        zyh: '',
-    })
+  return reactive({
+    current: 'alpha',
+    methods: [
+      {code: 'alpha', name: '拼音'},
+      {code: 'code', name: '编码'},
+      {code: 'name', name: '名称'},
+    ],
+    zyh: '',
+  })
 }
 
 const openEmr = () => {
-    if (nullPatient()) return
-    window.open(getEmrUrl(patient.value.inpatientNo, patient.value.admissTimes, 4), '_blank')
+  if (nullPatient()) return
+  window.open(getEmrUrl(patient.value.inpatientNo, patient.value.admissTimes, emrStateEnum.在院只读), '_blank')
 }
 
 function makeOverview(val) {
-    return {
-        bedNo: val.bedNo,
-        inpatientNo: val.inpatientNo,
-        admissTimes: val.admissTimes,
-        name: val.name,
-        sex: val.sex,
-        medType: val.medType,
-        dismissOrder: val.dismissOrder,
-        mdtrtId: val.mdtrtId,
-        injurySerialNo: val.injurySerialNo,
-        status: val.mdtrtId || val.injurySerialNo ? 1 : 0,
-    }
+  return {
+    bedNo: val.bedNo,
+    inpatientNo: val.inpatientNo,
+    admissTimes: val.admissTimes,
+    name: val.name,
+    sex: val.sex,
+    medType: val.medType,
+    dismissOrder: val.dismissOrder,
+    mdtrtId: val.mdtrtId,
+    injurySerialNo: val.injurySerialNo,
+    status: val.mdtrtId || val.injurySerialNo ? 1 : 0,
+  }
 }
 </script>