Ver Fonte

病案质控审核功能优化

lighter há 1 ano atrás
pai
commit
485878bc2e

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

@@ -383,4 +383,12 @@ export function getAllSmallDept() {
         url: '/caseFrontSheet/getAllSmallDept',
         method: 'get',
     })
+}
+
+export function fetchExportData(data) {
+    return request({
+        url: '/caseFrontSheet/fetchExportData',
+        method: 'post',
+        data
+    })
 }

+ 6 - 4
src/views/examination/InspectionReportIndex.vue

@@ -168,9 +168,11 @@
               <div style="width: 75%">结果</div>
             </div>
             <div style="margin: 5px 0; border-top: 1px solid gray"></div>
-            <div style="margin: 0 30px; padding-bottom: 5px;" v-if="bacterias.length > 0"
-                 v-for="(antibioticItem,index) in bacterias"
-                 :style="index > 0 ? {borderTop: '1px dashed gray'} : {}">
+            <div
+                v-if="bacterias.length > 0"
+                style="margin: 0 30px; padding-bottom: 5px;"
+                v-for="(antibioticItem,index) in bacterias"
+                :style="index > 0 ? {borderTop: '1px dashed gray'} : {}">
               <div style="display: flex;width: 49.7%;margin: 8px 0 4px 0">
                 <div style="width: 33.33%">{{ antibioticItem.type }}</div>
                 <div style="width: 60%">{{ antibioticItem.germName }}</div>
@@ -219,7 +221,7 @@
             <div v-else>
               <div v-for="item in inspectionDetail.items" style="display: flex">
                 <div style="width: 25%">{{ item.itmName }}</div>
-                <div style="width: 75%">{{ item.itmStrValue }}</div>
+                <div style="width: 75%">{{ item.itmStrValue || item.rsltStrs}}</div>
               </div>
             </div>
           </div>

+ 22 - 26
src/views/hospitalization/case-front-sheet/DrgCoding.vue

@@ -703,20 +703,18 @@ const exportExcel = () => {
       cancelButtonText: '取消',
       inputPattern: /\S/,
       inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
+    }).then(({value}) => {
+      const data = {
+        param: {siSetlinfoTemps: selections.value},
+        url: '/setlListUpld/exportExcel',
+        fileName: `${value}.xlsx`,
+        jdt: false,
+      }
+      setTimeout(() => {
+        downloadExcel(data)
+      }, 500)
+    }).catch((e) => {
     })
-        .then(({value}) => {
-          const data = {
-            param: {siSetlinfoTemps: selections.value},
-            url: '/setlListUpld/exportExcel',
-            fileName: `${value}.xlsx`,
-            jdt: false,
-          }
-          setTimeout(() => {
-            downloadExcel(data)
-          }, 500)
-        })
-        .catch((e) => {
-        })
   } else {
     if (queryTerm.value.total > 0) {
       ElMessageBox.prompt('导出文件名字', '提示', {
@@ -724,20 +722,18 @@ const exportExcel = () => {
         cancelButtonText: '取消',
         inputPattern: /\S/,
         inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
+      }).then(({value}) => {
+        const data = {
+          param: queryTerm.value,
+          url: '/setlListUpld/exportExcel',
+          fileName: `${value}.xlsx`,
+          jdt: false,
+        }
+        setTimeout(() => {
+          downloadExcel(data)
+        }, 500)
+      }).catch((e) => {
       })
-          .then(({value}) => {
-            const data = {
-              param: queryTerm.value,
-              url: '/setlListUpld/exportExcel',
-              fileName: `${value}.xlsx`,
-              jdt: false,
-            }
-            setTimeout(() => {
-              downloadExcel(data)
-            }, 500)
-          })
-          .catch((e) => {
-          })
     } else {
       ElMessage.error('请先查询出数据')
     }

+ 14 - 3
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue

@@ -1020,11 +1020,22 @@
   <el-dialog v-model="showSearch" title="数据搜索" width="730px" draggable>
     检索依据:
     <el-select v-model="searchMethod" style="width: 100px">
-      <el-option v-for="item in searchMethods" :key="item.code" :label="item.name" :value="item.code"></el-option>
+      <el-option
+          v-for="item in searchMethods"
+          :key="item.code"
+          :label="item.name"
+          :value="item.code"
+      ></el-option>
     </el-select>
     &nbsp;&nbsp;&nbsp;&nbsp; 搜索内容:
-    <el-input ref="searchInput" v-model="searchContent" prefix-icon="Search" placeholder="请输入搜索内容"
-              style="width: 160px" clearable @input="executeSearch"></el-input>
+    <el-input
+        ref="searchInput"
+        v-model="searchContent"
+        prefix-icon="Search" placeholder="请输入搜索内容"
+        style="width: 160px"
+        clearable
+        @input="executeSearch"
+    ></el-input>
     <div v-if="showSurgeryRecommand" style="padding: 12px 0 4px 4px; color: gray">
       根据患者主诊断
       <el-tag

+ 143 - 9
src/views/hospitalization/case-front-sheet/FrontSheetQuality.vue

@@ -11,7 +11,7 @@
             collapse-tags-tooltip
             filterable
             clearable
-            style="width: 200px"
+            style="width: 160px"
             @change="handleStateChanged"
         >
           <el-option
@@ -24,7 +24,7 @@
         <el-select
             v-model="auditInquiryRequest.state"
             @change="handleStateChanged"
-            style="width: 90px">
+            style="width: 80px">
           <el-option label="未质控" value="INITIAL"></el-option>
           <el-option label="已通过" value="APPROVED"></el-option>
           <el-option label="已驳回" value="REJECTED"></el-option>
@@ -33,19 +33,22 @@
             v-model="auditInquiryRequest.patNo"
             clearable
             placeholder="住院号"
-            style="width: 110px"
+            style="width: 100px"
             @keyup.enter="querySearch" />
         <el-divider direction="vertical"></el-divider>
         <el-button icon="Search" type="primary" @click="querySearch">检索</el-button>
-        <el-button icon="Document" type="primary" @click="openEmr">电子病历</el-button>
+        <el-button icon="" type="primary" @click="showChargeList">费用清单</el-button>
+        <el-button type="primary" @click="openEmr">电子病历</el-button>
+        <el-button type="warning" @click="openSearch">诊断搜索</el-button>
         <span v-if="auditInquiryRequest.state === 'INITIAL'" style="margin: 0 12px">
-          <el-button icon="DataLine" type="primary" @click="basicControl">基础质控</el-button>
-          <el-button icon="Check" type="success" @click="approveAudit">审核通过</el-button>
-          <el-button icon="Close" type="danger" @click="rejectAudit">审核不通过</el-button>
+          <el-button type="primary" @click="basicControl">基础质控</el-button>
+          <el-button type="success" @click="approveAudit">审核通过</el-button>
+          <el-button type="danger" @click="rejectAudit">审核不通过</el-button>
         </span>
         <span v-if="auditInquiryRequest.state === 'APPROVED'" style="margin: 0 12px">
           <el-button icon="Refresh" type="danger" @click="beforeRevokeApprove">撤销审核</el-button>
         </span>
+        <el-button type="info" @click="exportExcel">导出审核记录</el-button>
       </div>
     </template>
     <CyFlex tab-position="vertical">
@@ -115,13 +118,65 @@
         </div>
       </div>
     </el-drawer>
+
+    <el-dialog v-model="showSearch" title="诊断搜索" width="730px" draggable>
+      检索依据:
+      <el-select v-model="searchMethod" style="width: 100px">
+        <el-option v-for="item in searchMethods" :key="item.code" :label="item.name" :value="item.code"></el-option>
+      </el-select>
+      &nbsp;&nbsp;&nbsp;&nbsp; 搜索内容:
+      <el-input
+          v-model="searchContent"
+          prefix-icon="Search"
+          placeholder="请输入搜索内容"
+          style="width: 160px"
+          clearable
+          @input="executeSearch"
+      ></el-input>
+      <div v-if="showSurgeryCommand"
+           style="padding: 12px 0 4px 4px; color: gray">
+        根据患者主诊断
+        <el-tag
+        >{{ sheet.disdiagList[0].code }} <span style="color: blue">{{ sheet.disdiagList[0].name }}</span>
+        </el-tag>
+        ,推荐以下手术操作:
+      </div>
+      <el-table
+          :data="searchResults"
+          height="400"
+          stripe
+          highlight-current-row
+      >
+        <el-table-column prop="code" label="编码" width="130"></el-table-column>
+        <el-table-column prop="name" label="名称"></el-table-column>
+        <el-table-column v-if="showSurgeryCommand" prop="ssfz" label="手术分值" width="60"></el-table-column>
+      </el-table>
+      <div style="margin-top: 15px; width: 100%; text-align: right">
+        <el-button
+            type="primary"
+            icon="ArrowLeft"
+            @click="lastPage"
+            :disabled="showSurgeryCommand || currentSRPage === 1"
+        >
+          上一页
+        </el-button>
+        <el-button
+            type="primary"
+            icon="ArrowRight"
+            @click="nextPage"
+            :disabled="showSurgeryCommand || (currentSRPage > 1 && searchResults.length < 10)"
+        >
+          下一页
+        </el-button>
+      </div>
+    </el-dialog>
     <div class="btn_right-side" @click="showMessageDrawer = !showMessageDrawer">首页基础质控结果</div>
   </CyFlex>
 
 </template>
 
 <script setup lang="ts">
-import {autopsies, haveOrNot, yesOrNo} from './common'
+import {autopsies, haveOrNot, searchMethods, yesOrNo} from './common'
 import {onMounted, reactive} from 'vue'
 import {operations} from '@/data'
 import {
@@ -130,7 +185,7 @@ import {
   fetchQualityVerifications,
   getAllDictionary,
   getSheetInfo,
-  getAllSmallDept, revokeApprovedAudit
+  getAllSmallDept, revokeApprovedAudit, getSsfzSurgeriesByIcd, sheetSearch, fetchExportData
 } from '@/api/case-front-sheet'
 import maleIcon from '@/assets/male-icon.png'
 import femaleIcon from '@/assets/female-icon.png'
@@ -142,6 +197,7 @@ import {xcMessage} from "@/utils/xiaochan-element-plus";
 import {CyMessageBox} from "@/components/cy/message-box";
 import RejectAudit from "@/components/inpatient/frontsheet-printpage/RejectAudit.vue";
 import AuditHistory from "@/components/inpatient/frontsheet-printpage/AuditHistory.vue";
+import ChargeList from '@/components/medical-insurance/charge-list/Index.vue'
 import useDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
 import {
   emrStateEnum,
@@ -149,6 +205,7 @@ import {
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 import {magicApi} from "@/utils/database/magic-api-request";
 import {useUserStore} from "@/pinia/user-store";
+import {Export} from "@/utils/ExportExcel";
 
 const userName = useUserStore().userInfo.name
 const tableHeight = window.innerHeight
@@ -221,6 +278,14 @@ const nullPatient = () => {
   return false
 }
 
+function showChargeList() {
+  if (nullPatient()) return
+  useDialogToJs(ChargeList, {
+    patNo: sheet.value.bah,
+    times: sheet.value.admissTimes
+  })
+}
+
 function openEmr() {
   if (nullPatient()) return
   magicApi({
@@ -233,6 +298,51 @@ function openEmr() {
   })
 }
 
+const currentSRPage = ref(1)
+const showSearch = ref(false)
+const searchMethod = ref('alpha')
+const searchResults = ref([])
+const searchContent = ref('')
+const showSurgeryCommand = ref(false)
+function openSearch() {
+  showSearch.value = true
+}
+const lastPage = () => {
+  currentSRPage.value--
+  fetchSearchData()
+}
+const nextPage = () => {
+  currentSRPage.value++
+  fetchSearchData()
+}
+const fetchSearchData = () => {
+  const param = {
+    patNo: sheet.value.bah,
+    times: sheet.value.admissTimes,
+    method: searchMethod.value,
+    target: 'diag',
+    content: searchContent.value,
+    medType: sheet.value.medType,
+    page: currentSRPage.value,
+  }
+  sheetSearch(param).then((res) => {
+    searchResults.value = res
+  })
+}
+const executeSearch = () => {
+  showSurgeryCommand.value = false
+  if (searchContent.value === '' && sheet.value.disdiagList[0].code) {
+    getSsfzSurgeriesByIcd(sheet.value.bah, sheet.value.admissTimes, sheet.value.disdiagList[0].code).then((res) => {
+      searchResults.value = res
+      showSurgeryCommand.value = true
+    })
+    return
+  }
+  if (searchContent.value.length < 2) return
+  currentSRPage.value = 1
+  fetchSearchData()
+}
+
 const showMessageDrawer = ref(false)
 const basicControl = () => {
   if (nullPatient()) return
@@ -316,6 +426,30 @@ function viewAuditHistory(row) {
   useDialogToJs(AuditHistory, { patinfo: row })
 }
 
+function exportExcel() {
+  fetchExportData(dateRange.value).then(res => {
+    if (!res || res.length === 0) {
+      xcMessage.warning('没有找到可以导出的数据。')
+      return
+    }
+    const field = {
+      patNo: '住院号',
+      times: '住院次数',
+      patName: '患者姓名',
+      genderName: '患者性别',
+      doctorName: '医生姓名',
+      disDeptName: '出院科室',
+      applicationTime: '申请时间',
+      auditStaffName: '审核人',
+      auditTime: '审核时间',
+      stateName: '审核状态',
+      auditRemark: '审核备注',
+      coderNote: '编码员备注'
+    }
+    Export(res, field, '审核记录')
+  })
+}
+
 onMounted(() => {
   getAllSmallDept().then(res=> {
     allSmallDept.value = res