Ver código fonte

恢复批量上传功能。

lighter 2 anos atrás
pai
commit
d94e387b7c

+ 0 - 17
src/api/inpatient/yibao.js

@@ -1,17 +0,0 @@
-import request from '../../utils/request'
-
-export function proofread(data) {
-  return request({
-    url: '/yibao/proofread',
-    method: 'post',
-    data,
-  })
-}
-
-export function multipleUpload(data) {
-  return request({
-    url: '/yibao/multipleUpload',
-    method: 'post',
-    data,
-  })
-}

+ 8 - 0
src/api/medical-insurance/si-inpatient.js

@@ -40,6 +40,14 @@ export function uploadFeeDetail(data) {
   })
 }
 
+export function multipleUpload(data) {
+  return request({
+    url: '/siZy/multipleUpload',
+    method: 'post',
+    data,
+  })
+}
+
 export function revokeUploadFees(data) {
   return request({
     url: '/siZy/revokeUploadFees',

+ 8 - 2
src/components/medical-insurance/patient-overview/Index.vue

@@ -4,7 +4,7 @@
     <el-select v-model="currentWard" :clearable="wardsClearable" style="width: 90px" @change="fetchOverviews">
       <el-option v-for="item in allWards" :key="item.code" :label="item.name" :value="item.code"></el-option>
     </el-select>
-    <el-select v-model="currentMedType" clearable style="width: 90px">
+    <el-select v-model="currentMedType" clearable style="width: 90px" @change="handleMedTypeChange">
       <el-option v-for="item in trueMedTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
     </el-select>
     <el-select v-model="currentStatus" clearable style="width: 90px">
@@ -83,6 +83,7 @@ export default {
         store.commit('ptnt/setBaseinfo', {totalCharge: '0.00', chargeYb: '0.00'})
       },
     })
+
     const currentStatus = ref('')
     const allWards = ref([])
     const overviews = ref([])
@@ -128,7 +129,11 @@ export default {
     }
 
     const handleSelectionChange = (val) => {
-      store.commit('SET_SELECTIONS', val)
+      store.commit('ptnt/setSelections', val)
+    }
+
+    const handleMedTypeChange = (val) => {
+      store.commit('ptnt/setInjuryMode', val === '42')
     }
 
     onMounted(() => {
@@ -160,6 +165,7 @@ export default {
       fetchOverviews,
       handleClickOverview,
       handleSelectionChange,
+      handleMedTypeChange,
       visibleWindowSize
     }
   },

+ 1 - 33
src/views/medical-insurance/inpatient/Home.vue

@@ -27,38 +27,6 @@
       <IdentifyImage v-if="showIdCardImg" :pat-no="patient.inpatientNo" :times="patient.admissTimes" @close="showIdCardImg = false"></IdentifyImage>
     </template>
   </page-layer>
-<!--  <el-container>-->
-<!--    <el-aside width="260px">-->
-<!--      <Overview ref="overview" :showSelection="isUploadPage" />-->
-<!--    </el-aside>-->
-<!--    <el-main>-->
-<!--      <el-container>-->
-<!--        <el-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">-->
-<!--            <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">身份信息</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-header>-->
-<!--        <el-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>-->
-<!--        </el-main>-->
-<!--      </el-container>-->
-<!--    </el-main>-->
-<!--  </el-container>-->
 </template>
 
 <script>
@@ -91,7 +59,7 @@ export default {
       return baseinfo()
     })
     const isUploadPage = computed(() => {
-      return store.state.app.currentPageName === 'inHospFeeUpload'
+      return store.state.app.currentPageName === 'inHospFeeUpload' && !store.state.ptnt.injuryMode
     })
 
     const overview = ref(null)

+ 136 - 131
src/views/medical-insurance/inpatient/InHospFeeUpload.vue

@@ -1,98 +1,98 @@
 <template>
-    <div>
-      <el-button type="success" @click="feeDtle">费用明细</el-button>
-      <el-button type="success" @click="preCalculateCost">医保试算</el-button>
-      <el-button type="success" @click="uploadFees">费用上传</el-button>
-      <el-button type="warning" :disabled="!isAdmin" @click="cancelFees">取消上传</el-button>
-      <el-button type="primary" @click="weiGuiTuiFeiFenXiDialogOpen(true)">违规费用分析</el-button>
-      <el-popover placement="left" width="730" trigger="click">
-        <template #reference>
-          <el-button type="warning" icon="CircleClose" plain>错误信息 ({{ errorMessages.length }})</el-button>
-        </template>
-        <el-tag type="info">错误信息</el-tag>
-        <el-divider direction="vertical"></el-divider>
-        <el-button type="warning" @click="clearErrorMessages">清除内容</el-button>
-        <el-table width="700" max-height="300" class="errTable" :data="errorMessages">
-          <el-table-column width="80" property="patNo" label="住院号"></el-table-column>
-          <el-table-column width="80" property="patName" label="姓名"></el-table-column>
-          <el-table-column width="450" property="message" label="错误详情"></el-table-column>
-        </el-table>
-      </el-popover>
-      &nbsp;&nbsp;
-      <el-tag type="info" size="small">
-        <span style="color: black">¥ {{ patient.totalCharge }}</span>
-        <span style="color: orangered">¥ {{ patient.chargeYb }}</span>
-      </el-tag>
-    </div>
-    <div style="margin-top: 4px">
-      <el-tag type="info">治疗明细</el-tag>
-      <el-tag>合计:¥ {{ fees.xmSum }}</el-tag>
-      <el-table :data="fees.xm" stripe :height="feeTableHeight">
-        <el-table-column prop="detailSn" label="流水号" width="80"></el-table-column>
-        <el-table-column prop="chargeCodeMx" label="院内码" width="100"></el-table-column>
-        <el-table-column prop="chargeAmount" label="数量" sortable width="80"></el-table-column>
-        <el-table-column prop="chargeFee" label="金额" width="80"></el-table-column>
-        <el-table-column prop="chargeDate" label="收费日期"></el-table-column>
-        <el-table-column prop="ybCode" label="医保码"></el-table-column>
-        <el-table-column prop="chargeName" label="项目名称"></el-table-column>
-        <el-table-column prop="ybSelfFlag" label="是否报销" width="80"></el-table-column>
-      </el-table>
-      <el-pagination
-          @size-change="handleXmSizeChange"
-          @current-change="handleCurrentXmChange"
-          :current-page="page.xmPage"
-          :page-sizes="[10, 30, 50, 70, 100, 300]"
-          :page-size="page.xmPageSize"
-          layout="total, sizes, prev, pager, next"
-          :total="fees.xmTotal"
-      >
-      </el-pagination>
-      <div style="height: 5px"></div>
-      <el-tag type="info">药品明细</el-tag>
-      <el-tag>合计:¥ {{ fees.ypSum }}</el-tag>
-      <el-table :data="fees.yp" stripe :height="feeTableHeight">
-        <el-table-column prop="detailSn" label="流水号" width="80"></el-table-column>
-        <el-table-column prop="chargeCodeMx" label="院内码" width="100"></el-table-column>
-        <el-table-column prop="chargeAmount" label="数量" sortable width="80"></el-table-column>
-        <el-table-column prop="chargeFee" label="金额" width="80"></el-table-column>
-        <el-table-column prop="chargeDate" label="收费日期"></el-table-column>
-        <el-table-column prop="ybCode" label="医保码"></el-table-column>
-        <el-table-column prop="chargeName" label="项目名称"></el-table-column>
-        <el-table-column prop="ybSelfFlag" label="是否报销" width="80"></el-table-column>
+  <div>
+    <el-button type="success" @click="feeDtle">费用明细</el-button>
+    <el-button type="success" @click="preCalculateCost">医保试算</el-button>
+    <el-button type="success" @click="uploadFees">费用上传</el-button>
+    <el-button type="warning" :disabled="!isAdmin" @click="cancelFees">取消上传</el-button>
+    <el-button type="primary" @click="weiGuiTuiFeiFenXiDialogOpen(true)">违规费用分析</el-button>
+    <el-popover placement="left" width="730" trigger="click">
+      <template #reference>
+        <el-button type="warning" icon="CircleClose" plain>错误信息 ({{ errorMessages.length }})</el-button>
+      </template>
+      <el-tag type="info">错误信息</el-tag>
+      <el-divider direction="vertical"></el-divider>
+      <el-button type="warning" @click="clearErrorMessages">清除内容</el-button>
+      <el-table width="700" max-height="300" class="errTable" :data="errorMessages">
+        <el-table-column width="80" property="patNo" label="住院号"></el-table-column>
+        <el-table-column width="80" property="patName" label="姓名"></el-table-column>
+        <el-table-column width="450" property="message" label="错误详情"></el-table-column>
       </el-table>
-      <el-pagination
-          @size-change="handleYpSizeChange"
-          @current-change="handleCurrentYpChange"
-          :current-page="page.ypPage"
-          :page-sizes="[10, 30, 50, 70, 100, 300]"
-          :page-size="page.ypPageSize"
-          layout="total, sizes, prev, pager, next"
-          :total="fees.ypTotal"
-      >
-      </el-pagination>
-      <div class="m-wrapper" v-show="showProgress">
-        <div class="dj-center-box-wrapper">
-          <div class="el-message-box" style="font-size: 13px">
-            <div style="background: #409eff; color: white; padding: 7px 10px; font-weight: bold">
-              <i class="el-icon-loading"></i>
-              上传进度
-            </div>
-            <div style="padding: 10px">
-              <div style="margin-bottom: 10px">{{ uploadIndexText }} ...</div>
-              <div style="margin-bottom: 10px" v-show="percentage === 100">上传结束,正在进行费用计算 ...</div>
-              <el-progress :text-inside="true" :stroke-width="22" :percentage="percentage"
-                           status="success"></el-progress>
-              <div style="height: 5px"></div>
-            </div>
+    </el-popover>
+    &nbsp;&nbsp;
+    <el-tag type="info" size="small">
+      <span style="color: black">¥ {{ patient.totalCharge }}</span>
+      <span style="color: orangered">¥ {{ patient.chargeYb }}</span>
+    </el-tag>
+  </div>
+  <div style="margin-top: 4px">
+    <el-tag type="info">治疗明细</el-tag>
+    <el-tag>合计:¥ {{ fees.xmSum }}</el-tag>
+    <el-table :data="fees.xm" stripe :height="feeTableHeight">
+      <el-table-column prop="detailSn" label="流水号" width="80"></el-table-column>
+      <el-table-column prop="chargeCodeMx" label="院内码" width="100"></el-table-column>
+      <el-table-column prop="chargeAmount" label="数量" sortable width="80"></el-table-column>
+      <el-table-column prop="chargeFee" label="金额" width="80"></el-table-column>
+      <el-table-column prop="chargeDate" label="收费日期"></el-table-column>
+      <el-table-column prop="ybCode" label="医保码"></el-table-column>
+      <el-table-column prop="chargeName" label="项目名称"></el-table-column>
+      <el-table-column prop="ybSelfFlag" label="是否报销" width="80"></el-table-column>
+    </el-table>
+    <el-pagination
+        @size-change="handleXmSizeChange"
+        @current-change="handleCurrentXmChange"
+        :current-page="page.xmPage"
+        :page-sizes="[10, 30, 50, 70, 100, 300]"
+        :page-size="page.xmPageSize"
+        layout="total, sizes, prev, pager, next"
+        :total="fees.xmTotal"
+    >
+    </el-pagination>
+    <div style="height: 5px"></div>
+    <el-tag type="info">药品明细</el-tag>
+    <el-tag>合计:¥ {{ fees.ypSum }}</el-tag>
+    <el-table :data="fees.yp" stripe :height="feeTableHeight">
+      <el-table-column prop="detailSn" label="流水号" width="80"></el-table-column>
+      <el-table-column prop="chargeCodeMx" label="院内码" width="100"></el-table-column>
+      <el-table-column prop="chargeAmount" label="数量" sortable width="80"></el-table-column>
+      <el-table-column prop="chargeFee" label="金额" width="80"></el-table-column>
+      <el-table-column prop="chargeDate" label="收费日期"></el-table-column>
+      <el-table-column prop="ybCode" label="医保码"></el-table-column>
+      <el-table-column prop="chargeName" label="项目名称"></el-table-column>
+      <el-table-column prop="ybSelfFlag" label="是否报销" width="80"></el-table-column>
+    </el-table>
+    <el-pagination
+        @size-change="handleYpSizeChange"
+        @current-change="handleCurrentYpChange"
+        :current-page="page.ypPage"
+        :page-sizes="[10, 30, 50, 70, 100, 300]"
+        :page-size="page.ypPageSize"
+        layout="total, sizes, prev, pager, next"
+        :total="fees.ypTotal"
+    >
+    </el-pagination>
+    <div class="m-wrapper" v-show="showProgress">
+      <div class="dj-center-box-wrapper">
+        <div class="el-message-box" style="font-size: 13px">
+          <div style="background: #409eff; color: white; padding: 7px 10px; font-weight: bold">
+            <i class="el-icon-loading"></i>
+            上传进度
+          </div>
+          <div style="padding: 10px">
+            <div style="margin-bottom: 10px">{{ uploadIndexText }} ...</div>
+            <div style="margin-bottom: 10px" v-show="percentage === 100">上传结束,正在进行费用计算 ...</div>
+            <el-progress :text-inside="true" :stroke-width="22" :percentage="percentage"
+                         status="success"></el-progress>
+            <div style="height: 5px"></div>
           </div>
         </div>
       </div>
     </div>
-    <el-dialog v-model="weiGuiTuiFeiFenXiDialog" title="违规费用分析" :fullscreen="true">
-      <wei-gui-fei-yong-fen-xi :init="weiGuiTuiFeiInit" @open="weiGuiTuiFeiOpenDialog" ref="weiGui"
-                               :patient="weiGuiJiBenXinXi"></wei-gui-fei-yong-fen-xi>
-    </el-dialog>
-    <MedfeeAnalyse v-if="showFeeDetl" type="unsettled" :mdtrt-id="patient.mdtrtId" @close="showFeeDetl = false"/>
+  </div>
+  <el-dialog v-model="weiGuiTuiFeiFenXiDialog" title="违规费用分析" :fullscreen="true">
+    <wei-gui-fei-yong-fen-xi :init="weiGuiTuiFeiInit" @open="weiGuiTuiFeiOpenDialog" ref="weiGui"
+                             :patient="weiGuiJiBenXinXi"></wei-gui-fei-yong-fen-xi>
+  </el-dialog>
+  <MedfeeAnalyse v-if="showFeeDetl" type="unsettled" :mdtrt-id="patient.mdtrtId" @close="showFeeDetl = false"/>
 </template>
 
 <script>
@@ -101,14 +101,14 @@ import {computed, onActivated, onDeactivated, onMounted, reactive, ref, watch} f
 import {fetchNotUploadedFees} from '@/api/inpatient/patient'
 import {ElMessage, ElMessageBox, ElNotification} from 'element-plus'
 import {nullPatient} from '@/utils/validate'
-import {multipleUpload} from '@/api/inpatient/yibao'
-import {hospitalizationPreSettlement, uploadFeeDetail, revokeUploadFees} from '@/api/medical-insurance/si-inpatient'
-import {uploadInjuryFees, cancelInjuryFee, injuryPrecal} from '@/api/medical-insurance/si-injury'
+import {hospitalizationPreSettlement, revokeUploadFees, uploadFeeDetail, multipleUpload} from '@/api/medical-insurance/si-inpatient'
+import {cancelInjuryFee, injuryPrecal, uploadInjuryFees} from '@/api/medical-insurance/si-injury'
 import {setCallback} from '@/utils/websocket'
 import {getGreatestRole} from '@/utils/permission'
 import {baseinfo} from '@/data/inpatient'
 import WeiGuiFeiYongFenXi from '@/components/inpatient/WeiGuiFeiYongFenXi.vue'
 import MedfeeAnalyse from '../../../components/medical-insurance/medfee-analyse/Index.vue'
+import {clone} from "@/utils/clone";
 
 export default {
   components: {WeiGuiFeiYongFenXi, MedfeeAnalyse},
@@ -242,58 +242,43 @@ export default {
     })
 
     const uploadFees = () => {
-      if (selections.value.length === 0) {
-        if (nullPatient()) return
-      }
-      showProgress.value = true
-      if (injuryMode.value) {
-        const sid = store.getters['user/sid']
-        patient.value.sid = sid
-        uploadInjuryFees(patient.value)
-            .then((res) => {
-              fetchProjectFees()
-              fetchMedicineFees()
-              showProgress.value = false
-              percentage.value = 0
-              patient.value.chargeYb = res.fundPay
-              ElMessageBox.alert(res, '成功', {
-                type: 'success',
-                confirmButtonText: '确定',
-              })
-            })
-            .catch(() => {
-              showProgress.value = false
-              percentage.value = 0
-              fetchProjectFees()
-              fetchMedicineFees()
-            })
+      if (selections.value.length > 0) {
+        showProgress.value = true
+        doMultipleUpload()
       } else {
-        doSingleUpload()
+        if (nullPatient()) return
+        showProgress.value = true
+        if (injuryMode.value) {
+          doSingleInjuryUpload()
+        } else {
+          doSingleNormalUpload()
+        }
       }
     }
 
-    const doMultipleUpload = () => {
-      selections.value.forEach((item) => {
-        item.sid = store.getters['user/sid']
-      })
-      multipleUpload(selections.value)
+    const doSingleInjuryUpload = () => {
+      patient.value.sid = store.getters['user/sid']
+      uploadInjuryFees(patient.value)
           .then((res) => {
-            ElMessage({
-              message: '处理完成。',
-              type: 'success',
-              duration: 2500,
-              showClose: true,
-            })
+            fetchProjectFees()
+            fetchMedicineFees()
             showProgress.value = false
             percentage.value = 0
+            patient.value.chargeYb = res.fundPay
+            ElMessageBox.alert(res, '成功', {
+              type: 'success',
+              confirmButtonText: '确定',
+            })
           })
           .catch(() => {
             showProgress.value = false
             percentage.value = 0
+            fetchProjectFees()
+            fetchMedicineFees()
           })
     }
 
-    const doSingleUpload = () => {
+    const doSingleNormalUpload = () => {
       const param = {
         inpatientNo: patient.value.inpatientNo,
         admissTimes: patient.value.admissTimes,
@@ -320,6 +305,26 @@ export default {
           })
     }
 
+    const doMultipleUpload = () => {
+      let list = clone(selections.value)
+      list.forEach((item) => {
+        item.sid = store.getters['user/sid']
+      })
+      multipleUpload(list).then((res) => {
+        ElMessage({
+          message: '处理完成。',
+          type: 'success',
+          duration: 2500,
+          showClose: true,
+        })
+        showProgress.value = false
+        percentage.value = 0
+      }).catch(() => {
+        showProgress.value = false
+        percentage.value = 0
+      })
+    }
+
     const socketCallback = (data) => {
       if (typeof data === 'string') {
         data = JSON.parse(data)
@@ -329,7 +334,7 @@ export default {
           errorMessages.value.push(data)
           break
         case 'updatePatientIndex':
-          patientIndex.value = data.val
+          patientIndex.value = data.patientIndex
           percentage.value = 0
           break
         case 'updateProgress':