Selaa lähdekoodia

扩展结算统计功能

lighter 3 vuotta sitten
vanhempi
commit
75f0ae6115

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

@@ -158,3 +158,11 @@ export function selectSetlinfoStatistics(data) {
     data,
   })
 }
+
+export function selectSetldetailStatistics(data) {
+  return request({
+    url: '/siQuery/selectSetldetailStatistics',
+    method: 'post',
+    data,
+  })
+}

+ 1 - 1
src/router/modules/dashboard.js

@@ -121,7 +121,7 @@ const route = [
           {
             path: 'setlStatistics',
             component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SetlStatistics.vue')),
-            meta: { title: '异地结算统计', icon: 'iconfont icon-zhuyuanqingdan' },
+            meta: { title: '结算统计', icon: 'iconfont icon-zhuyuanqingdan' },
           },
         ],
       },

+ 155 - 19
src/views/medical-insurance/allpatient/SetlStatistics.vue

@@ -2,18 +2,18 @@
   <el-container>
     <el-header style="height: 35px; margin-top: 10px">
       <el-date-picker v-model="setlConditon.month" type="month" style="width: 110px" placeholder="请选择" :clearable="false"></el-date-picker>
+      <el-select v-model="setlConditon.admdvsType" placeholder="参保地归属" style="width: 120px">
+        <el-option v-for="item in insuOptins" :key="item.code" :value="item.code" :label="item.name"></el-option>
+      </el-select>
       <el-select v-model="setlConditon.insutype" placeholder="险种类型" filterable style="width: 200px">
         <el-option v-for="item in insutypes" :key="item.code" :value="item.code" :label="item.name"></el-option>
       </el-select>
-      <el-select v-model="setlConditon.admdvs" placeholder="参保地" style="width: 120px">
-        <el-option v-for="item in insuOptins" :key="item.code" :value="item.code" :label="item.name"></el-option>
-      </el-select>
       <el-divider direction="vertical"></el-divider>
       <el-button type="success" icon="el-icon-search" @click="fetchSetlinfos">查询</el-button>
-      <el-button type="primary" icon="el-icon-download" @click="exportExcel">导出Excel</el-button>
+      <el-button type="primary" icon="el-icon-download" @click="exportSetlinfoExcel">导出Excel</el-button>
     </el-header>
     <el-main>
-      <el-table :data="setlinfos" stripe :max-height="tableHeight" highlight-current-row border show-summary>
+      <el-table :data="setlinfos" stripe :max-height="tableHeight" highlight-current-row border show-summary @row-dblclick="fetchSetldetails">
         <el-table-column type="index" label="序号"></el-table-column>
         <el-table-column prop="admdvsName" label="参保地名称"></el-table-column>
         <el-table-column prop="psnSumamt" label="人次"></el-table-column>
@@ -22,23 +22,63 @@
         <el-table-column prop="bigDssFundpaySumamt" label="大病基金"></el-table-column>
         <el-table-column prop="clvFundpaySumamt" label="公务员基金支付"></el-table-column>
         <el-table-column prop="othFundpaySumamt" label="其他基金"></el-table-column>
-        <el-table-column prop="acctpaySumamt" label="个人账户基金"></el-table-column>
         <el-table-column prop="fundpaySumamt" label="全部基金"></el-table-column>
       </el-table>
+      <el-dialog v-model="showSetldetails" :close-on-click-modal="false" :close-on-press-escape="false" :title="filterDialogTitle" width="70%">
+        <div style="width: 130px; height: 36px; position: absolute; top: 16px; right: 60px">
+          <el-button type="primary" icon="el-icon-download" @click="exportSetldetailExcel">导出Excel</el-button>
+        </div>
+        <el-table :data="setldetails.slice(pageSize * (currentPage - 1), pageSize * currentPage)" stripe highlight-current-row height="360" @row-dblclick="openSetlinfoComponent">
+          <el-table-column type="index" label="序号" fixed width="40"></el-table-column>
+          <el-table-column prop="psnName" label="姓名" fixed width="60"></el-table-column>
+          <el-table-column prop="patNo" label="住院号" width="70"></el-table-column>
+          <el-table-column prop="times" label="次数" width="40"></el-table-column>
+          <el-table-column prop="gendName" label="性别" width="50"></el-table-column>
+          <el-table-column prop="brdy" label="出生日期"></el-table-column>
+          <el-table-column prop="insuplcAdmdvsName" label="参保地区"></el-table-column>
+          <el-table-column prop="insutypeName" label="险种类型"></el-table-column>
+          <el-table-column prop="psnTypeName" label="人员类别"></el-table-column>
+          <el-table-column prop="mdtrtId" label="就诊ID"></el-table-column>
+          <el-table-column prop="setlId" label="结算ID"></el-table-column>
+          <el-table-column prop="setlTime" label="结算时间"></el-table-column>
+          <el-table-column prop="medTypeName" label="医疗类别"></el-table-column>
+          <el-table-column prop="medfeeSumamt" label="总费用"></el-table-column>
+          <el-table-column prop="fundPaySumamt" label="报销金额"></el-table-column>
+          <el-table-column prop="acctPay" label="个人账户支出"></el-table-column>
+          <el-table-column prop="psnCashPay" label="个人现金支出"></el-table-column>
+        </el-table>
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[15, 30, 45, 60]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="setldetails.length"
+          style="margin-top: 5px"
+        ></el-pagination>
+      </el-dialog>
+      <el-dialog v-model="showSetlinfoComponent" title="结算信息" :close-on-click-modal="false" width="70%">
+        <Setlinfo :setlinfo="currentSetldetail" />
+      </el-dialog>
     </el-main>
   </el-container>
 </template>
 
 <script>
-import { onMounted, reactive, ref } from 'vue'
+import { computed, onMounted, reactive, ref } from 'vue'
 import { formatMonth } from '../../../utils/date'
 import { getInsutypes } from '@/api/medical-insurance/si-dict'
 import { useStore } from 'vuex'
-import { selectSetlinfoStatistics } from '@/api/medical-insurance/si-query'
+import { selectSetlinfoStatistics, selectSetldetailStatistics, querySettlementInfo } from '@/api/medical-insurance/si-query'
 import { ElMessage } from 'element-plus'
 import { Export } from '@/utils/ExportExcel'
 import { clone } from '../../../utils/clone'
+import Setlinfo from '../../../components/medical-insurance/setlinfo/Index.vue'
 export default {
+  components: {
+    Setlinfo,
+  },
   setup() {
     const store = useStore()
     const windowSize = store.state.app.windowSize
@@ -47,12 +87,19 @@ export default {
     const setlConditon = reactive({
       month: formatMonth(new Date()),
       insutype: null,
-      admdvs: null,
+      admdvsType: null,
+      insuplcAdmdvs: null,
     })
 
     const insutypes = ref([])
     const insuOptins = initInsuOptions()
     const setlinfos = ref([])
+    const setldetails = ref([])
+    const showSetldetails = ref(false)
+
+    const filterDialogTitle = computed(() => {
+      return `【${setlConditon.month}】【${filterAdmdvsName()}】【${filterInsutypeName()}】结算明细`
+    })
 
     const fetchSetlinfos = () => {
       if (!setlConditon.month) {
@@ -73,9 +120,9 @@ export default {
         })
         return
       }
-      if (!setlConditon.admdvs) {
+      if (!setlConditon.admdvsType) {
         ElMessage({
-          message: '请选择参保地!',
+          message: '请选择参保地归属!',
           type: 'warning',
           duration: 2500,
           showClose: true,
@@ -100,7 +147,6 @@ export default {
         bigDssFundpaySumamt: 0,
         clvFundpaySumamt: 0,
         othFundpaySumamt: 0,
-        acctpaySumamt: 0,
         fundpaySumamt: 0,
       }
       setlinfos.value.forEach((itm) => {
@@ -122,13 +168,15 @@ export default {
     }
 
     const filterAdmdvsName = () => {
-      if (setlConditon.admdvs === 1) {
-        return '省内异地'
+      for (let i = 0; i < insuOptins.length; i++) {
+        if (insuOptins[i].code === setlConditon.admdvsType) {
+          return insuOptins[i].name
+        }
       }
-      return '省外异地'
+      return ''
     }
 
-    const exportExcel = () => {
+    const exportSetlinfoExcel = () => {
       if (setlinfos.value.length === 0) {
         ElMessage({
           message: '没有可以导出的数据!',
@@ -147,7 +195,6 @@ export default {
           bigDssFundpaySumamt: '大病基金',
           clvFundpaySumamt: '公务员基金支付',
           othFundpaySumamt: '其他基金',
-          acctpaySumamt: '个人账户基金',
           fundpaySumamt: '全部基金',
         }
         const admdvsName = filterAdmdvsName()
@@ -156,6 +203,71 @@ export default {
       }
     }
 
+    const pageSize = ref(30)
+    const currentPage = ref(1)
+    const handleSizeChange = (val) => {
+      pageSize.value = val
+    }
+    const handleCurrentChange = (val) => {
+      currentPage.value = val
+    }
+
+    const fetchSetldetails = (row) => {
+      setlConditon.insuplcAdmdvs = row.insuplcAdmdvs
+      selectSetldetailStatistics(setlConditon)
+        .then((res) => {
+          setldetails.value = res
+          showSetldetails.value = true
+        })
+        .catch(() => {
+          setldetails.value = []
+        })
+    }
+
+    const showSetlinfoComponent = ref(false)
+    const currentSetldetail = ref({})
+    const openSetlinfoComponent = (row) => {
+      const param = {
+        psnNo: row.psnNo,
+        mdtrtId: row.mdtrtId,
+      }
+      querySettlementInfo(param).then((res) => {
+        currentSetldetail.value = res
+        showSetlinfoComponent.value = true
+      })
+    }
+
+    const exportSetldetailExcel = () => {
+      if (setldetails.value.length === 0) {
+        ElMessage({
+          message: '没有可以导出的数据!',
+          type: 'warning',
+          duration: 2500,
+          showClose: true,
+        })
+      } else {
+        const title = {
+          patNo: '住院号',
+          times: '住院次数',
+          psnName: '姓名',
+          gendName: '性别',
+          brdy: '出生日期',
+          insuplcAdmdvsName: '参保地名称',
+          insutypeName: '险种类型',
+          medTypeName: '医疗类别',
+          psnTypeName: '人员类别',
+          mdtrtId: '就诊ID',
+          setlId: '结算ID',
+          setlTime: '结算时间',
+          medfeeSumamt: '医疗总费用',
+          fundPaySumamt: '报销金额',
+          acctPay: '个人账户支出',
+          psnCashPay: '个人现金支出',
+        }
+        Export(setldetails.value, title, filterDialogTitle.value)
+      }
+    }
+
     onMounted(() => {
       getInsutypes().then((res) => {
         insutypes.value = res
@@ -168,8 +280,20 @@ export default {
       insutypes,
       insuOptins,
       setlinfos,
+      setldetails,
+      showSetldetails,
+      filterDialogTitle,
+      pageSize,
+      currentPage,
+      showSetlinfoComponent,
+      currentSetldetail,
+      handleCurrentChange,
+      handleSizeChange,
       fetchSetlinfos,
-      exportExcel,
+      exportSetlinfoExcel,
+      fetchSetldetails,
+      openSetlinfoComponent,
+      exportSetldetailExcel,
     }
   },
 }
@@ -178,12 +302,24 @@ function initInsuOptions() {
   return [
     {
       code: 1,
-      name: '省内异地',
+      name: '省本级',
     },
     {
       code: 2,
+      name: '市本级',
+    },
+    {
+      code: 3,
+      name: '省内异地',
+    },
+    {
+      code: 4,
       name: '省外异地',
     },
+    {
+      code: 99,
+      name: '全部',
+    },
   ]
 }
 </script>

+ 0 - 1
src/views/medical-insurance/allpatient/SetllistReconciliation.vue

@@ -232,7 +232,6 @@ export default {
     const setlinfo = ref({})
     const showSetlinfo = ref(false)
     const getSetlinfo = (row) => {
-      console.log(row)
       const param = {
         psnNo: row.psnNo,
         mdtrtId: row.mdtrtId,