Browse Source

病案首页优化与添加新功能

lighter 1 year ago
parent
commit
eb9f58c292

+ 24 - 0
src/api/case-front-sheet/index.js

@@ -251,3 +251,27 @@ export function getConsultingDoctorInfo(searchCondition) {
         params: {searchCondition},
     })
 }
+
+export function markDuplicate(data) {
+    return request({
+        url: '/caseFrontSheet/markDuplicate',
+        method: 'post',
+        data,
+    })
+}
+
+export function markClosedown(data) {
+    return request({
+        url: '/caseFrontSheet/markClosedown',
+        method: 'post',
+        data,
+    })
+}
+
+export function signedByDateCount(signDate) {
+    return request({
+        url: '/caseFrontSheet/signedByDateCount',
+        method: 'get',
+        params: {signDate},
+    })
+}

BIN
src/assets/case-frontsheet/ba-closedown.png


BIN
src/assets/case-frontsheet/ba-duplicated.png


BIN
src/assets/case-frontsheet/patient-dead.png


+ 187 - 6
src/views/hospitalization/case-front-sheet/AllCaseFrontSheet.vue

@@ -33,12 +33,16 @@
           <el-dropdown-menu>
             <el-dropdown-item command="unSign" icon="Link">解除签收</el-dropdown-item>
             <el-dropdown-item command="dismissCount" divided icon="OfficeBuilding">出院患者统计</el-dropdown-item>
+            <el-dropdown-item command="signedByDay" icon="Edit">签收统计</el-dropdown-item>
             <el-dropdown-item command="exportLateData" icon="Clock">导出迟交病案</el-dropdown-item>
             <el-dropdown-item command="exportUnsignedData" icon="Files">导出未签收病案</el-dropdown-item>
             <el-dropdown-item command="print1" divided icon="Printer">打印正面</el-dropdown-item>
             <el-dropdown-item command="print2" icon="Printer">打印反面</el-dropdown-item>
             <el-dropdown-item command="print3" icon="Printer">导出PDF</el-dropdown-item>
             <el-dropdown-item command="quality" divided icon="DataLine">病案质控</el-dropdown-item>
+            <el-dropdown-item command="duplicate" divided icon="MessageBox">标记已复印</el-dropdown-item>
+            <el-dropdown-item command="closedown" icon="Paperclip">标记已封存</el-dropdown-item>
+
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -72,6 +76,15 @@
       <div :style="mainInfo">
         <div id="headpage">
           <HeadPage :dics="dics" :patient="sheet"/>
+          <div style="position: fixed; top: 180px; left: 1230px">
+            <img v-if="sheet.zyDismissWay === '4'" :src="patientdead" alt="">
+            <div v-if="sheet.duplicated">
+              <img :src="baduplicated" alt="">
+            </div>
+            <div v-if="sheet.closedown">
+              <img :src="baclosedown" alt="">
+            </div>
+          </div>
         </div>
         <div id="tailpage" style="margin-left: 70px">
           <TailPage :dics="dics" :patient="sheet"/>
@@ -249,6 +262,79 @@
       <el-dialog v-model="showSheetQuality" title="病案质控" width="70%">
         <SheetQuality/>
       </el-dialog>
+
+      <el-dialog v-model="showSignedByDay" title="签收统计" width="450px" height="500px" @close="currentSignStaff = ''">
+        <div style="margin-top: 12px">
+          签收日期:
+          <el-button icon="ArrowLeft" @click="dateOffset(-1)"></el-button>
+          <el-date-picker style="width: 110px" :clearable="false" v-model="signDate"
+                          @change="handleSignDateChange"></el-date-picker>
+          <el-button icon="ArrowRight" @click="dateOffset(1)"></el-button>
+        </div>
+        <div style="margin: 12px 0; border-top: 1px solid lightgray"></div>
+        <div >
+          <div style="display: flex; margin-bottom: 12px">
+            <div style="flex: 1">签收人</div>
+            <div style="flex: 1">签收数量</div>
+            <div style="width: 35px"></div>
+          </div>
+          <div v-for="(val, key) in signData">
+            <div style="display: flex; line-height: 32px; color: #0079ff; font-weight: bold">
+              <div style="flex: 1">
+                {{key}}
+              </div>
+              <div style="flex: 1">
+                {{val.length}}
+              </div>
+              <div style="width: 35px">
+                <el-button icon="Pointer" circle @click="clickSignStaff(key)"></el-button>
+              </div>
+            </div>
+            <div v-if="key === currentSignStaff">
+              <el-table :data="val" :max-height="300">
+                <el-table-column prop="bah" label="住院号"></el-table-column>
+                <el-table-column prop="times" label="住院次数"></el-table-column>
+                <el-table-column prop="name" label="姓名"></el-table-column>
+                <el-table-column prop="genderName" label="性别"></el-table-column>
+                <el-table-column prop="signTime" label="签收时间"></el-table-column>
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </el-dialog>
+
+      <el-dialog v-model="showMarkStateDialog" :title="markStateTitle" width="450px">
+        <div style="margin-top: 30px;display: flex">
+          <div style="width: 80px">
+            住院号:
+          </div>
+          <el-input style="width: 300px" v-model="markStateRequest.bah" disabled></el-input>
+        </div>
+        <div style="margin-top: 12px;display: flex">
+          <div style="width: 80px">
+            住院次数:
+          </div>
+          <el-input style="width: 300px" v-model="markStateRequest.times" disabled></el-input>
+        </div>
+        <div style="margin-top: 12px;display: flex">
+          <div style="width: 80px">
+            来访人员:
+          </div>
+          <el-input style="width: 300px" v-model="markStateRequest.visitStaff"></el-input>
+        </div>
+        <div style="margin-top: 12px;display: flex">
+          <div style="width: 80px">
+            备注:
+          </div>
+          <el-input type="textarea" style="width: 300px" v-model="markStateRequest.remark"></el-input>
+        </div>
+        <template #footer>
+          <div>
+            <el-button type="primary" @click="executeDuplicateOrClosedown">提交</el-button>
+            <el-button @click="printMarkStateRequest">打印</el-button>
+          </div>
+        </template>
+      </el-dialog>
     </template>
   </page-layer>
 </template>
@@ -267,14 +353,14 @@ import {
   executeUnArchiveBa,
   getAllDictionary,
   getAllWards,
-  getSheetInfo,
-  sheetSearch,
+  getSheetInfo, markClosedown, markDuplicate,
+  sheetSearch, signedByDateCount,
 } from '@/api/case-front-sheet'
 import maleIcon from '@/assets/male-icon.png'
 import femaleIcon from '@/assets/female-icon.png'
 import {ElMessage, ElMessageBox} from 'element-plus'
 import {maxHalfYear} from '@/data/shortcuts'
-import {formatDate, formatMonth, getOneMonthOffset} from '@/utils/date'
+import {formatDate, formatDatetime, formatMonth, getOneMonthOffset} from '@/utils/date'
 import {getLodop, initLodop} from '@/utils/c-lodop'
 import HeadPage from '../../../components/inpatient/frontsheet-printpage/HeadPage.vue'
 import TailPage from '../../../components/inpatient/frontsheet-printpage/TailPage.vue'
@@ -282,6 +368,9 @@ import FullPage from "@/components/inpatient/frontsheet-printpage/FullPage.vue";
 import {Export} from '@/utils/ExportExcel'
 import SheetQuality from '@/components/inpatient/CaseFrontSheetQuality.vue'
 import PageLayer from "@/layout/PageLayer";
+import patientdead from '@/assets/case-frontsheet/patient-dead.png'
+import baduplicated from '@/assets/case-frontsheet/ba-duplicated.png'
+import baclosedown from '@/assets/case-frontsheet/ba-closedown.png'
 
 const showSheetQuality = ref(false)
 const currentPage = ref(1)
@@ -318,9 +407,9 @@ const searchPatient = () => {
   basOutPatients(overviewParam).then((res) => {
     isLateDataMode.value = overviewParam.lateFlag === '1'
     isUnsignedMode.value = overviewParam.fileStatus === '0'
-    overview.value = res.list
-    if (res.list.length === 1) {
-      fetchSheetInfo(res.list[0])
+    overview.value = res
+    if (res.length === 1) {
+      fetchSheetInfo(res[0])
     }
   })
 }
@@ -448,11 +537,41 @@ const exportDismissCount = () => {
   const fileName = `【${disCountParams.month}】${name}`
   Export(dismissCountdata.value, title, fileName)
 }
+
+const showSignedByDay = ref(false)
+const signDate = ref(new Date())
+const signData = ref({})
+const currentSignStaff = ref('')
+
+const dateOffset = (val) => {
+  let currentTime = new Date(signDate.value).getTime()
+  signDate.value = new Date(currentTime + (3600 * 24 * val * 1000) )
+  handleSignDateChange(signDate.value)
+}
+
+const handleSignDateChange = (val) => {
+  signedByDateCount(formatDate(val)).then(res => {
+    signData.value = res
+  })
+}
+
+const clickSignStaff = (key) => {
+  if (currentSignStaff.value === key) {
+    currentSignStaff.value = ''
+  } else {
+    currentSignStaff.value = key
+  }
+}
+
 const handleCommand = (val) => {
   switch (val) {
     case 'dismissCount':
       showDismissCount.value = true
       break
+    case 'signedByDay':
+      showSignedByDay.value = true
+      handleSignDateChange(signDate.value)
+      break;
     case 'exportLateData':
       exportSpecialDataExel(1)
       break
@@ -474,6 +593,12 @@ const handleCommand = (val) => {
     case 'quality':
       showSheetQuality.value = true
       break
+    case 'duplicate':
+      beforeDuplicateOrClosedown('DUPLICATE')
+      break
+    case 'closedown':
+      beforeDuplicateOrClosedown('CLOSEDOWN')
+      break
   }
 }
 
@@ -522,6 +647,7 @@ const exportSpecialDataExel = (flag) => {
   if (flag === 1) {
     fields.lateDays = '迟交天数'
     fields.signDate = '签收日期'
+    fields.zyDismissWayName = '是否死亡'
   }
   Export(overview.value, fields, flag === 1 ? '迟交病案' : '未签收病案')
 }
@@ -709,6 +835,61 @@ const handleCurrentDismissCountPageChange = (val) => {
   currentDismissCountPage.value = val
 }
 
+
+
+
+
+const showMarkStateDialog = ref(false)
+const markStateType = ref('')
+const markStateTitle = computed(() => {
+  return markStateType.value === 'DUPLICATE' ? '复印' : '封存'
+})
+const markStateRequest = reactive({
+  bah: null,
+  times: null,
+  visitStaff: null,
+  remark: null,
+})
+
+const beforeDuplicateOrClosedown = (type) => {
+  if (!sheet.value.bah) {
+    ElMessage({
+      message: '请先选择病案'
+    })
+    return
+  }
+  markStateType.value = type
+  markStateRequest.bah = sheet.value.bah
+  markStateRequest.times = sheet.value.admissTimes
+  showMarkStateDialog.value = true
+}
+
+const executeDuplicateOrClosedown = () => {
+  if (markStateType.value === 'DUPLICATE') {
+    markDuplicate(markStateRequest).then(res => {
+      ElMessage({
+        message: '操作成功',
+        type: 'success'
+      })
+      sheet.value.duplicated += 1
+      showMarkStateDialog.value = false
+    })
+  } else {
+    markClosedown(markStateRequest).then(res => {
+      ElMessage({
+        message: '操作成功',
+        type: 'success'
+      })
+      sheet.value.closedown += 1
+      showMarkStateDialog.value = false
+    })
+  }
+}
+
+const printMarkStateRequest = () => {
+  window.print()
+}
+
 onActivated(() => {
   initLodop()
 })

+ 1 - 9
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue

@@ -17,7 +17,6 @@
       <el-button type="primary" icon="Upload" @click="saveVerify(1)">保存首页</el-button>
       <el-button type="success" icon="Printer" @click="beforePrint(1)">打印正面</el-button>
       <el-button type="success" icon="Printer" @click="beforePrint(2)">打印反面</el-button>
-      <el-button type="danger" icon="Refresh" @click="renewSheet">重新生成病案</el-button>
       <el-button type="primary" icon="PieChart" @click="setlUplaodClick" v-if="inOutStatus === 2">结算清单质控
       </el-button>
     </template>
@@ -1127,19 +1126,12 @@ const fetchSheetInfo = (row) => {
   }
   row.inOutFlag = inOutStatus.value
   getSheetInfo(row).then((res) => {
-    currentRow.value.renew = false
     patient.value = res
     patient.value.bedNo = row.bedNo
     patient.value.sex = row.sex
   })
 }
 
-const renewSheet = () => {
-  patient.value = {}
-  currentRow.value.renew = true
-  fetchSheetInfo(currentRow.value)
-}
-
 const currentSRPage = ref(1)
 const showSearch = ref(false)
 const insertDiag = ref(false)
@@ -1738,7 +1730,7 @@ const beforePrint = (page) => {
     page: page
   }
   executePrintVerify(param).then(() => {
-        execPrint(page)
+    execPrint(page)
   }).catch((e) => {
     forceVerifies.value = e.data.force
     adviceVerifies.value = e.data.advice