Browse Source

优化门诊补录

lighter 3 years ago
parent
commit
415ee8a312

+ 165 - 0
src/components/medical-insurance/outpatient-diagnose-supply/Index.vue

@@ -0,0 +1,165 @@
+<template>
+  <div style="margin-top: -20px; margin-bottom: 16px; background: lightgray; padding: 8px 4px; color: black">临床诊断参考:{{ mzVisit.icdText }}</div>
+  检索方法:<el-select v-model="searchMethod" style="width: 80px">
+  <el-option v-for="item in searchMethods" :key="item.code" :label="item.name" :value="item.code"></el-option> </el-select
+>&nbsp;
+  <el-autocomplete v-model="diagItem.diagName" :fetch-suggestions="searchDiag" placeholder="请输入内容" clearable @select="handleSelectDiag" style="width: 220px">
+    <template #default="{ item }">
+      <div style="height: 40px">
+        <div style="height: 16px; margin-top: 4px; font-size: 12px; color: #8492a6">
+          {{ item.code }}
+        </div>
+        <div style="height: 16px">{{ item.name }}</div>
+      </div>
+    </template>
+  </el-autocomplete>
+  <el-select v-model="diagItem.diagType" placeholder="诊断类别" style="width: 120px">
+    <el-option v-for="item in diagTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
+  </el-select>
+  <el-divider direction="vertical"></el-divider>
+  <el-button type="primary" icon="Plus" @click="addDiag">添加到诊断列表</el-button>
+  <el-button type="success" icon="Check" @click="saveDiag">保存诊断</el-button>
+  <el-table :data="diags" stripe>
+    <el-table-column prop="diagSrtNo" label="序号" width="40"></el-table-column>
+    <el-table-column prop="diagType" label="诊断类别" width="60"></el-table-column>
+    <el-table-column prop="diagCode" label="诊断编码"></el-table-column>
+    <el-table-column prop="diagName" label="诊断名称"></el-table-column>
+    <el-table-column prop="diagDept" label="诊断科室"></el-table-column>
+    <el-table-column prop="diseDorNo" label="医生编码" width="80"></el-table-column>
+    <el-table-column prop="diseDorName" label="医生姓名" width="80"></el-table-column>
+    <el-table-column prop="diagTime" label="诊断时间"></el-table-column>
+    <el-table-column label="操作">
+      <template #default="scope">
+        <el-button icon="Delete" text @click="deleteDiag(scope.$index)">删除</el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
+
+<script>
+import {reactive, ref} from "vue";
+import {increaseWeight, searchData} from "@/api/inpatient/dictionary";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {clone} from "@/utils/clone";
+import {saveSiMzDiags} from "@/api/medical-insurance/si-outpatient";
+
+export default {
+  props: {
+    mzVisit: {
+      type: Object,
+      required: true
+    },
+    medType: {
+      type: String,
+      required: true
+    }
+  },
+  emits: ['close'],
+  setup(props, ctx) {
+    const searchMethods = [
+      { code: 'alpha', name: '首拼' },
+      { code: 'code', name: '编码' },
+      { code: 'name', name: '名称' },
+    ]
+    const searchMethod = ref('alpha')
+    const diagItem = reactive({})
+    const searchDiag = (queryString, cb) => {
+      if (queryString && queryString.length > 1) {
+        const param = {
+          method: searchMethod.value,
+          content: queryString,
+          target: 'diag',
+          medType: props.medType,
+        }
+        searchData(param).then((res) => {
+          cb(res)
+        })
+      }
+    }
+    const handleSelectDiag = (item) => {
+      increaseWeight({ code: 'diag', name: item.code }).then(() => {
+        diagItem.diagCode = item.code
+        diagItem.diagName = item.name
+      })
+    }
+    const diagTypes = [
+      { code: '1', name: '西医诊断' },
+      { code: '2', name: '中医主病诊断' },
+      { code: '3', name: '中医主证诊断' },
+    ]
+    const diags = ref([])
+    const addDiag = () => {
+      if (!diagItem.diagCode) {
+        ElMessage({
+          message: '请选择诊断!',
+          type: 'warning',
+          duration: 2500,
+          showClose: true,
+        })
+        return
+      }
+      if (!diagItem.diagType) {
+        ElMessage({
+          message: '请选择诊断类别!',
+          type: 'warning',
+          duration: 2500,
+          showClose: true,
+        })
+        return
+      }
+      diagItem.patNo = props.mzVisit.patientId
+      diagItem.times = props.mzVisit.times
+      diagItem.diagSrtNo = diags.value.length + 1
+      diagItem.diagDept = props.mzVisit.visitDeptName
+      diagItem.diseDorNo = props.mzVisit.doctorCode
+      diagItem.diseDorName = props.mzVisit.doctorName
+      diagItem.diagTime = props.mzVisit.opDay
+      diagItem.valiFlag = '1'
+      diags.value.push(clone(diagItem))
+      diagItem.diagCode = ''
+      diagItem.diagName = ''
+      diagItem.diagType = ''
+    }
+    const deleteDiag = (index) => {
+      diags.value.splice(index, 1)
+      for (let i = 0; i < diags.value.length; i++) {
+        const element = diags.value[i]
+        element.diagSrtNo = i + 1
+      }
+    }
+    const saveDiag = () => {
+      if (diags.value.length === 0) {
+        ElMessage({
+          message: '没有要保存的诊断!',
+          type: 'warning',
+          duration: 2500,
+          showClose: true,
+        })
+        return
+      }
+      saveSiMzDiags(diags.value).then((res) => {
+        ElMessageBox.alert(res, '提示', {
+          type: 'success',
+          showCancelButton: false,
+        }).then(() => {
+          diags.value = []
+          ctx.emit('close')
+        })
+      })
+    }
+    
+    return {
+      searchMethod,
+      searchMethods,
+      diagTypes,
+      diagItem,
+      diags,
+      addDiag,
+      deleteDiag,
+      saveDiag,
+      searchDiag,
+      handleSelectDiag,
+    }
+  }
+}
+</script>

+ 3 - 140
src/views/medical-insurance/outpatient/MzRegister.vue

@@ -194,41 +194,7 @@
       </el-table>
     </el-dialog>
     <el-dialog title="普门诊断补录" v-model="showInputDiags" width="60%" :close-on-click-modal="false" :close-on-press-escape="false">
-      <div style="margin-top: -20px; margin-bottom: 16px; background: lightgray; padding: 8px 4px; color: black">临床诊断参考:{{ mzVisit.icdText }}</div>
-      检索方法:<el-select v-model="searchMethod" style="width: 80px">
-        <el-option v-for="item in searchMethods" :key="item.code" :label="item.name" :value="item.code"></el-option> </el-select
-      >&nbsp;
-      <el-autocomplete v-model="diagItem.diagName" :fetch-suggestions="searchDiag" placeholder="请输入内容" clearable @select="handleSelectDiag" style="width: 220px">
-        <template #default="{ item }">
-          <div style="height: 40px">
-            <div style="height: 16px; margin-top: 4px; font-size: 12px; color: #8492a6">
-              {{ item.code }}
-            </div>
-            <div style="height: 16px">{{ item.name }}</div>
-          </div>
-        </template>
-      </el-autocomplete>
-      <el-select v-model="diagItem.diagType" placeholder="诊断类别" style="width: 120px">
-        <el-option v-for="item in diagTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
-      </el-select>
-      <el-divider direction="vertical"></el-divider>
-      <el-button type="primary" icon="Plus" @click="addDiag">添加到诊断列表</el-button>
-      <el-button type="success" icon="Check" @click="saveDiag">保存诊断</el-button>
-      <el-table :data="diags" stripe>
-        <el-table-column prop="diagSrtNo" label="序号" width="40"></el-table-column>
-        <el-table-column prop="diagType" label="诊断类别" width="60"></el-table-column>
-        <el-table-column prop="diagCode" label="诊断编码"></el-table-column>
-        <el-table-column prop="diagName" label="诊断名称"></el-table-column>
-        <el-table-column prop="diagDept" label="诊断科室"></el-table-column>
-        <el-table-column prop="diseDorNo" label="医生编码" width="80"></el-table-column>
-        <el-table-column prop="diseDorName" label="医生姓名" width="80"></el-table-column>
-        <el-table-column prop="diagTime" label="诊断时间"></el-table-column>
-        <el-table-column label="操作">
-          <template #default="scope">
-            <el-button icon="Delete" text @click="deleteDiag(scope.$index)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
+      <outpatient-diagnose-supply :med-type="medType" :mz-visit="mzVisit" @close="showInputDiags = false"></outpatient-diagnose-supply>
     </el-dialog>
   </el-container>
 </template>
@@ -246,7 +212,6 @@ import {
   revokeOutpatientFeeDetails,
   revokeOutpatientRegistration,
   uploadOutpatientFeeDetails,
-  saveSiMzDiags,
   outpatientSettlement,
   revokeOutpatientSettlement,
 } from '@/api/medical-insurance/si-outpatient'
@@ -255,14 +220,14 @@ import { ElMessage, ElMessageBox } from 'element-plus'
 import store from '@/store'
 import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation, queryMzMatnDises } from '@/api/medical-insurance/si-query'
 import { getMedTypesByFlag } from '@/api/medical-insurance/si-dict'
-import { increaseWeight, searchData } from '@/api/inpatient/dictionary'
-import { clone } from '@/utils/clone'
 import ReadCard from '@/components/medical-insurance/readcard/Index.vue'
 import mzSettled from '@/assets/mz-settled.png'
+import OutpatientDiagnoseSupply from '@/components/medical-insurance/outpatient-diagnose-supply/Index.vue'
 
 export default {
   components: {
     ReadCard,
+    OutpatientDiagnoseSupply,
   },
   setup() {
     //todo 完成业务后清除原读卡数据
@@ -278,7 +243,6 @@ export default {
       height: tableHeight - 280 + 'px',
       overflowY: 'auto',
     }
-
     const unPaidReceipts = ref([])
     const showInsuinfo = ref(false)
     const psnBaseinfo = ref({})
@@ -295,97 +259,6 @@ export default {
     const matnDises = ref([])
     const showMatnDises = ref(false)
     const showInputDiags = ref(false)
-    const searchMethods = [
-      { code: 'alpha', name: '首拼' },
-      { code: 'code', name: '编码' },
-      { code: 'name', name: '名称' },
-    ]
-    const searchMethod = ref('alpha')
-    const diagItem = reactive({})
-    const searchDiag = (queryString, cb) => {
-      if (queryString && queryString.length > 1) {
-        const param = {
-          method: searchMethod.value,
-          content: queryString,
-          target: 'diag',
-          medType: medType.value,
-        }
-        searchData(param).then((res) => {
-          cb(res)
-        })
-      }
-    }
-    const handleSelectDiag = (item) => {
-      increaseWeight({ code: 'diag', name: item.code }).then(() => {
-        diagItem.diagCode = item.code
-        diagItem.diagName = item.name
-      })
-    }
-    const diagTypes = [
-      { code: '1', name: '西医诊断' },
-      { code: '2', name: '中医主病诊断' },
-      { code: '3', name: '中医主证诊断' },
-    ]
-    const diags = ref([])
-    const addDiag = () => {
-      if (!diagItem.diagCode) {
-        ElMessage({
-          message: '请选择诊断!',
-          type: 'warning',
-          duration: 2500,
-          showClose: true,
-        })
-        return
-      }
-      if (!diagItem.diagType) {
-        ElMessage({
-          message: '请选择诊断类别!',
-          type: 'warning',
-          duration: 2500,
-          showClose: true,
-        })
-        return
-      }
-      diagItem.patNo = patientId.value
-      diagItem.times = times.value
-      diagItem.diagSrtNo = diags.value.length + 1
-      diagItem.diagDept = mzVisit.value.visitDeptName
-      diagItem.diseDorNo = mzVisit.value.doctorCode
-      diagItem.diseDorName = mzVisit.value.doctorName
-      diagItem.diagTime = mzVisit.value.opDay
-      diagItem.valiFlag = '1'
-      diags.value.push(clone(diagItem))
-      diagItem.diagCode = ''
-      diagItem.diagName = ''
-      diagItem.diagType = ''
-    }
-    const deleteDiag = (index) => {
-      diags.value.splice(index, 1)
-      for (let i = 0; i < diags.value.length; i++) {
-        const element = diags.value[i]
-        element.diagSrtNo = i + 1
-      }
-    }
-    const saveDiag = () => {
-      if (diags.value.length === 0) {
-        ElMessage({
-          message: '没有要保存的诊断!',
-          type: 'warning',
-          duration: 2500,
-          showClose: true,
-        })
-        return
-      }
-      saveSiMzDiags(diags.value).then((res) => {
-        ElMessageBox.alert(res, '提示', {
-          type: 'success',
-          showCancelButton: false,
-        }).then(() => {
-          diags.value = []
-          showInputDiags.value = false
-        })
-      })
-    }
 
     const nullPatientId = () => {
       if (!patientId.value) {
@@ -802,18 +675,8 @@ export default {
       matnDises,
       showMatnDises,
       showInputDiags,
-      searchMethod,
-      searchMethods,
-      diagTypes,
-      diagItem,
-      diags,
       mzSettled,
       afterReadCard,
-      addDiag,
-      deleteDiag,
-      saveDiag,
-      searchDiag,
-      handleSelectDiag,
       clickTimes,
       colorStatus,
       clickOrderNo,

+ 80 - 7
src/views/medical-insurance/outpatient/MzSpltryRcrd.vue

@@ -27,6 +27,7 @@
           <el-dropdown-menu>
             <el-dropdown-item icon="CreditCard" command="execute">医保登记</el-dropdown-item>
             <el-dropdown-item icon="RefreshLeft" command="revoke">取消登记</el-dropdown-item>
+            <el-dropdown-item divided icon="Edit" command="diags">普门诊断补录</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -61,7 +62,6 @@
     </el-header>
     <el-container>
       <el-aside width="300px">
-        <el-tag>历史处方目录</el-tag>
         <el-table :height="tableHeight" :data="historyReceipts" stripe highlight-current-row @row-click="fetchHistoryReceiptDetail">
           <el-table-column property="patNo" label="Id号" width="70">
             <template #default="scope">
@@ -74,7 +74,28 @@
         </el-table>
       </el-aside>
       <el-main>
-        <el-tag>历史处方明细</el-tag>
+        <img v-if="mzVisit.settledFlag === 1" :src="mzSettled" alt="" style="z-index: 999; width: 230px;
+            position: absolute; top: 160px; left: 260px; background: rgba(255,255,255,.5)">
+        <div class="receipt-title">长沙泰和医院处方笺</div>
+        <el-divider></el-divider>
+        <div class="receipt-head">
+          <div>姓名:{{ mzVisit.name }}</div>
+          <div>性别:{{ mzVisit.sex }}</div>
+          <div>年龄:{{ mzVisit.age }} 岁</div>
+        </div>
+        <div class="receipt-head">
+          <div>门诊号:{{ mzVisit.patientId }}</div>
+          <div>科别:{{ mzVisit.visitDeptName }}</div>
+          <div class="ellipsis-text" :title="mzVisit.icdText">临床诊断:{{ mzVisit.icdText }}</div>
+        </div>
+        <div class="receipt-head">
+          <div>开具日期:{{ mzVisit.opDay }}</div>
+          <div class="ellipsis-text">
+            地址:<span :title="mzVisit.address">{{ mzVisit.address }}</span>
+          </div>
+          <div>电话:{{ mzVisit.phoneNo }}</div>
+        </div>
+        <el-divider></el-divider>
         <div :style="receiptBoxStyle">
           <div v-for="(item, index) in currentReceipts" :key="index">
             <div>
@@ -85,6 +106,14 @@
             <div style="margin-bottom: 16px"></div>
           </div>
         </div>
+        <el-divider></el-divider>
+        <div class="receipt-head">
+          <div style="font-size: 15px; width: 70%">医师:{{ mzVisit.doctorName }} / {{ mzVisit.doctorCode }} /
+            <span v-html="highlightYbCode(mzVisit.doctorCode,mzVisit.doctorYbCode)"></span></div>
+          <div style="font-size: 15px">
+            总金额:<span style="font-size: 18px; font-weight: bold">¥{{ currentRow.chargeFee }}</span>
+          </div>
+        </div>
         <el-dialog title="个人参保信息" v-model="showInsuinfo" width="65%">
           <el-table :data="insuinfo" @row-click="handleClickInsuinfo">
             <el-table-column property="balc" label="余额"></el-table-column>
@@ -115,6 +144,9 @@
             <el-table-column property="limitAmt" label="疾病限额"></el-table-column>
           </el-table>
         </el-dialog>
+        <el-dialog title="普门诊断补录" v-model="showInputDiags" width="60%" :close-on-click-modal="false" :close-on-press-escape="false">
+          <outpatient-diagnose-supply :med-type="medType" :mz-visit="mzVisit" @close="showInputDiags = false"></outpatient-diagnose-supply>
+        </el-dialog>
       </el-main>
     </el-container>
   </el-container>
@@ -142,16 +174,19 @@ import { getMedTypesByFlag } from '@/api/medical-insurance/si-dict'
 import { shortcuts } from '@/data/shortcuts'
 import { getDateRangeFormatDate } from '@/utils/date'
 import ReadCard from '@/components/medical-insurance/readcard/Index.vue'
+import OutpatientDiagnoseSupply from '@/components/medical-insurance/outpatient-diagnose-supply/Index.vue'
+import mzSettled from '@/assets/mz-settled.png'
+
 export default {
   components: {
     ReadCard,
+    OutpatientDiagnoseSupply,
   },
   setup() {
     const windowSize = store.state.app.windowSize
     const tableHeight = windowSize.h - 70
     const receiptBoxStyle = {
-      height: tableHeight - 8 + 'px',
-      marginTop: '8px',
+      height: tableHeight - 280 + 'px',
       overflowY: 'auto',
     }
     const patNo = ref('')
@@ -159,7 +194,9 @@ export default {
     const medTypes = ref([])
     const historyReceipts = ref([])
     const currentRow = ref({})
+    const mzVisit = ref({})
     const currentReceipts = ref([])
+    const showInputDiags = ref(false)
     const dateRange = ref(shortcuts[2].value)
     const colorStatus = (row) => {
       return row.status > 0 ? `<span style="color: green">${row.patNo}</span>` : `<span style="color: red">${row.patNo}</span>`
@@ -216,7 +253,8 @@ export default {
     const fetchHistoryReceiptDetail = (row) => {
       currentRow.value = row
       getHistoryReceiptDetail(row).then((res) => {
-        currentReceipts.value = res
+        mzVisit.value = res.mzVisit
+        currentReceipts.value = res.mzReceipts
       })
     }
 
@@ -243,7 +281,7 @@ export default {
           insuinfo.value = res.insuinfo
           showInsuinfo.value = true
         })
-      } else {
+      } else if (command === 'revoke') {
         revokeOutpatientRegistration(param).then((res) => {
           ElMessage({
             message: res,
@@ -252,6 +290,8 @@ export default {
             showClose: true,
           })
         })
+      } else {
+        showInputDiags.value = true
       }
     }
 
@@ -367,11 +407,13 @@ export default {
           matnDises.value = res
           showMatnDises.value = true
         })
-      } else {
+      } else if (medType.value === '14') {
         querySpecialChronicDiseasesAccreditation(param).then((res) => {
           spcChrDiseAccts.value = res
           showSpcChrAccts.value = true
         })
+      } else {
+        uploadFees(param)
       }
     }
 
@@ -534,6 +576,13 @@ export default {
       currentReceipts.value = []
     }
 
+    const highlightYbCode = (hisCode, ybCode) => {
+      if (!hisCode) {
+        return ''
+      }
+      return ybCode ? `<span>${ybCode}</span>` : '<span style="color: red">医师无医保编码</span>'
+    }
+
     onMounted(() => {
       getMedTypesByFlag('clinic').then((res) => {
         medTypes.value = res
@@ -557,6 +606,9 @@ export default {
       showSpcChrAccts,
       shortcuts,
       dateRange,
+      mzVisit,
+      showInputDiags,
+      mzSettled,
       afterReadCard,
       colorStatus,
       fetchHistoryReceipts,
@@ -568,7 +620,28 @@ export default {
       settlement,
       revokeMzSettle,
       clearinfo,
+      highlightYbCode,
     }
   },
 }
 </script>
+
+<style scoped>
+.receipt-title {
+  width: 100%;
+  text-align: center;
+  font-weight: bold;
+  font-size: 20px;
+  height: 32px;
+  line-height: 32px;
+}
+.receipt-head {
+  display: flex;
+  height: 22px;
+  line-height: 22px;
+}
+.receipt-head > div {
+  width: 33%;
+  padding-right: 20px;
+}
+</style>