ソースを参照

在违规收费分析中查询患者住院时间

xiaochan 3 年 前
コミット
635769ad9c

+ 47 - 39
src/api/reports/illegal-charges-analysis.js

@@ -1,64 +1,72 @@
 import request from '@/utils/request'
 
 export function fetchMyTemplates() {
-  return request({
-    url: '/illegalChargesAnalysis/fetchMyTemplates',
-    method: 'get',
-  })
+    return request({
+        url: '/illegalChargesAnalysis/fetchMyTemplates',
+        method: 'get',
+    })
 }
 
 export function insertNewTemplate(data) {
-  return request({
-    url: '/illegalChargesAnalysis/insertNewTemplate',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/insertNewTemplate',
+        method: 'post',
+        data,
+    })
 }
 
 export function deleteChosenTemplate(data) {
-  return request({
-    url: '/illegalChargesAnalysis/deleteTemplate',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/deleteTemplate',
+        method: 'post',
+        data,
+    })
 }
 
 export function searchChargeItem(data) {
-  return request({
-    url: '/illegalChargesAnalysis/searchChargeItem',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/searchChargeItem',
+        method: 'post',
+        data,
+    })
 }
 
 export function saveTemplateChanges(data) {
-  return request({
-    url: '/illegalChargesAnalysis/saveTemplateChanges',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/saveTemplateChanges',
+        method: 'post',
+        data,
+    })
 }
 
 export function analyzeTargetData(data) {
-  return request({
-    url: '/illegalChargesAnalysis/analyzeTargetData',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/analyzeTargetData',
+        method: 'post',
+        data,
+    })
 }
 
 export function selectOrderPair(orderNo, conflictOrderNo) {
-  return request({
-    url: '/illegalChargesAnalysis/selectOrderPair',
-    method: 'get',
-    params: { orderNo, conflictOrderNo }
-  })
+    return request({
+        url: '/illegalChargesAnalysis/selectOrderPair',
+        method: 'get',
+        params: {orderNo, conflictOrderNo}
+    })
 }
 
 export function queryHuanZheLiangCiRuYuanRiQi(data) {
-  return request({
-    url: '/illegalChargesAnalysis/queryHuanZheLiangCiRuYuanRiQi',
-    method: 'post',
-    data,
-  })
+    return request({
+        url: '/illegalChargesAnalysis/queryHuanZheLiangCiRuYuanRiQi',
+        method: 'post',
+        data,
+    })
+}
+
+export function chaXunHuanZheZhuYuanJianGe(startTime, endTime, tianShu) {
+    return request({
+        url: '/illegalChargesAnalysis/chaXunHuanZheZhuYuanJianGe',
+        method: 'get',
+        params: {startTime, endTime, tianShu}
+    })
 }

+ 123 - 0
src/components/reports/huanZheZhuYuanTianShu.vue

@@ -0,0 +1,123 @@
+<template>
+  <el-button @click="dialog = true">患者住院天数</el-button>
+  <el-dialog v-model="dialog" title="患者住院天数">
+    <el-date-picker
+        v-model="dateRange"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        :shortcuts="shortcuts"
+        style="width: 260px"
+    ></el-date-picker>
+    <el-input-number v-model="tianShu" :precision="0" @keyup.enter="dianJiChaXun"></el-input-number>
+    <el-divider direction="vertical"></el-divider>
+    <el-button @click="dianJiChaXun" type="primary" icon="el-icon-search">查询</el-button>
+    <el-divider direction="vertical"></el-divider>
+    <el-button type="primary" icon="el-icon-upload" @click="exportExcelHuanZhe">导出Excel</el-button>
+    <el-table
+        :data="huanZheShuJu.data.slice((huanZheShuJu.currentPage - 1) *
+        huanZheShuJu.pageSize , huanZheShuJu.pageSize * huanZheShuJu.currentPage)"
+        :height="windowSize.h / 2.1">
+      <el-table-column prop="inpatientNo" label="住院号"></el-table-column>
+      <el-table-column prop="name" label="姓名"></el-table-column>
+      <el-table-column prop="deptName" label="科室"></el-table-column>
+      <el-table-column prop="admissDate" label="住院时间" width="70"></el-table-column>
+      <el-table-column prop="disDate" label="出院时间" width="70"></el-table-column>
+      <el-table-column prop="differDate" label="住院天数"></el-table-column>
+    </el-table>
+    <el-pagination
+        :page-size="huanZheShuJu.pageSize"
+        layout="total,  prev, pager, next"
+        :total="huanZheShuJu.data.length"
+        @current-change="handleCurrentChange"
+        :current-page="huanZheShuJu.currentPage"
+    >
+    </el-pagination>
+  </el-dialog>
+</template>
+
+<script>
+import {computed, ref, watch} from "vue";
+import {shortcuts} from '@/data/shortcuts'
+import {chaXunHuanZheZhuYuanJianGe} from "../../api/reports/illegal-charges-analysis";
+import {getDateRangeFormatDate} from "../../utils/date";
+import {stringIsBlank} from "../../utils/blank-utils";
+import {ElMessage} from "element-plus";
+import store from "../../store"
+import {ExcelName} from "../../utils/ExportExcel";
+
+export default {
+  props: {
+    dateRange: {
+      default: []
+    }
+  },
+  name: "huanZheZhuYuanTianShu",
+  setup(props, ctx) {
+    const dialog = ref(false)
+    const dateRange = ref([])
+    const tianShu = ref(1)
+    const windowSize = computed(() => {
+      return store.state.app.windowSize
+    })
+
+
+    const huanZheShuJu = ref({
+      currentPage: 1,
+      pageSize: 30,
+      data: []
+    })
+
+    const dianJiChaXun = () => {
+      let dateS = getDateRangeFormatDate(dateRange.value)
+      if (stringIsBlank(dateS.startTime)) {
+        return ElMessage.error("请输入日期")
+      }
+      chaXunHuanZheZhuYuanJianGe(dateS.startTime, dateS.endTime, tianShu.value).then((res) => {
+        console.log(res)
+        huanZheShuJu.value.data = res
+        huanZheShuJu.value.currentPage = 1
+      })
+    }
+
+    const handleCurrentChange = (val) => {
+      huanZheShuJu.value.currentPage = val
+    }
+
+    const exportExcelHuanZhe = () => {
+      let title = {
+        inpatientNo: '住院号',
+        name: '姓名',
+        deptName: '科室',
+        admissDate: '住院时间',
+        disDate: '出院时间',
+        differDate: '住院天数',
+      }
+      ExcelName(huanZheShuJu.value.data, title)
+    }
+
+    watch(() => props.dateRange, () => {
+      dateRange.value = props.dateRange
+      console.log(props.dateRange)
+    })
+
+
+    return {
+      dialog,
+      dateRange,
+      shortcuts,
+      tianShu,
+      dianJiChaXun,
+      huanZheShuJu,
+      windowSize,
+      handleCurrentChange,
+      exportExcelHuanZhe
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 80 - 57
src/views/reports/IllegalChargesAnalysis.vue

@@ -24,22 +24,24 @@
     <el-header height="36px" style="margin-top: 8px">
       日期范围:
       <el-date-picker
-        v-model="dateRange"
-        type="daterange"
-        range-separator="至"
-        start-placeholder="开始日期"
-        end-placeholder="结束日期"
-        :shortcuts="shortcuts"
-        style="width: 260px"
+          v-model="dateRange"
+          type="daterange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :shortcuts="shortcuts"
+          style="width: 260px"
       ></el-date-picker>
       &nbsp;&nbsp;医疗类别:
-      <el-select v-model="selectedMedtypes" style="width: 180px" multiple clearable collapse-tags placeholder="不选默认为全部类别">
+      <el-select v-model="selectedMedtypes" style="width: 180px" multiple clearable collapse-tags
+                 placeholder="不选默认为全部类别">
         <el-option v-for="item in medtypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
       </el-select>
       <el-divider direction="vertical"></el-divider>
       <el-button type="primary" icon="el-icon-search" @click="fetchTargetData">检索</el-button>
       <el-button type="primary" icon="el-icon-upload" @click="exportExcel">导出Excel</el-button>
       <el-button type="success" icon="el-icon-search" @click="queryHuanZheRuYuanJianGe">患者入院间隔</el-button>
+      <huan-zhe-zhu-yuan-tian-shu :date-range="dateRange"></huan-zhe-zhu-yuan-tian-shu>
     </el-header>
     <el-container>
       <el-aside>
@@ -48,14 +50,14 @@
         </el-input>
         <div style="height: 4px"></div>
         <el-tree
-          ref="tree"
-          :data="templates"
-          :props="defaultProps"
-          @node-click="handleNodeClick"
-          @node-contextmenu="handleNodeRightClick"
-          :style="{ height: treeHeight + 'px', overflowY: 'scroll' }"
-          :filter-node-method="filterNode"
-          highlight-current
+            ref="tree"
+            :data="templates"
+            :props="defaultProps"
+            @node-click="handleNodeClick"
+            @node-contextmenu="handleNodeRightClick"
+            :style="{ height: treeHeight + 'px', overflowY: 'scroll' }"
+            :filter-node-method="filterNode"
+            highlight-current
         >
           <template #default="{ node }">
             <span class="custom-tree-node">{{ node.label }}</span>
@@ -63,7 +65,8 @@
         </el-tree>
       </el-aside>
       <el-main>
-        <el-table :data="targetData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" stripe :height="treeHeight">
+        <el-table :data="targetData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" stripe
+                  :height="treeHeight">
           <el-table-column prop="name" label="姓名" width="50"></el-table-column>
           <el-table-column prop="inpatientNo" label="住院号"></el-table-column>
           <el-table-column prop="admissTimes" label="次数" width="50"></el-table-column>
@@ -96,14 +99,14 @@
           <el-table-column prop="conflictChargeAmount" label="冲突收费数量" v-if="nowAttribute === 1"></el-table-column>
         </el-table>
         <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="currentPage"
-          :page-sizes="[15, 30, 45, 70, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="targetData.length"
-          style="margin-top: 5px"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[15, 30, 45, 70, 100]"
+            :page-size="pageSize"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="targetData.length"
+            style="margin-top: 5px"
         ></el-pagination>
       </el-main>
     </el-container>
@@ -132,7 +135,8 @@
           </div>
           <el-row :gutter="5">
             <el-col :span="12">
-              <el-autocomplete v-model="mainCharge" :fetch-suggestions="fetchChargeItem" placeholder="请输入内容" clearable @select="handleSelectMainCharge">
+              <el-autocomplete v-model="mainCharge" :fetch-suggestions="fetchChargeItem" placeholder="请输入内容" clearable
+                               @select="handleSelectMainCharge">
                 <template #prepend>收费主体</template>
                 <template #default="{ item }">
                   <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
@@ -151,7 +155,8 @@
               </el-table>
             </el-col>
             <el-col :span="12" v-show="currentTemplate.attribute === 1">
-              <el-autocomplete v-model="conflictCharge" :fetch-suggestions="fetchChargeItem" placeholder="请输入内容" clearable @select="handleSelectConflictCharge">
+              <el-autocomplete v-model="conflictCharge" :fetch-suggestions="fetchChargeItem" placeholder="请输入内容"
+                               clearable @select="handleSelectConflictCharge">
                 <template #prepend>冲突收费</template>
                 <template #default="{ item }">
                   <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
@@ -164,7 +169,8 @@
                 <el-table-column prop="name" label="收费名称"></el-table-column>
                 <el-table-column label="操作">
                   <template #default="scope">
-                    <el-button type="text" icon="el-icon-delete" @click="removeConflictCharge(scope.$index)">删除</el-button>
+                    <el-button type="text" icon="el-icon-delete" @click="removeConflictCharge(scope.$index)">删除
+                    </el-button>
                   </template>
                 </el-table-column>
               </el-table>
@@ -189,9 +195,9 @@
     <el-dialog v-model="ruYuanJianGeDialog" title="查询入院间隔" width="1200px">
       <el-button type="primary" icon="el-icon-upload" @click="exportExcelHuanZhe">导出Excel</el-button>
       <el-table
-        :data="huoQuHuanZheShuJu.slice((queryHuanZhe.currentPage - 1) * queryHuanZhe.pageSize, queryHuanZhe.currentPage * queryHuanZhe.pageSize)"
-        stripe
-        :height="treeHeight - 200"
+          :data="huoQuHuanZheShuJu.slice((queryHuanZhe.currentPage - 1) * queryHuanZhe.pageSize, queryHuanZhe.currentPage * queryHuanZhe.pageSize)"
+          stripe
+          :height="treeHeight - 200"
       >
         <el-table-column label="姓名" prop="name"></el-table-column>
         <el-table-column label="住院号" prop="inpatientNo"></el-table-column>
@@ -205,14 +211,14 @@
         <el-table-column label="医保类型" prop="responceTypeName"></el-table-column>
       </el-table>
       <el-pagination
-        @size-change="handleSizeChangeHuanZhe"
-        @current-change="handleCurrentChangeHuanZhe"
-        :current-page="queryHuanZhe.currentPage"
-        :page-sizes="[20, 30, 40, 50, 100]"
-        :page-size="queryHuanZhe.pageSize"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="huoQuHuanZheShuJu.length"
-        style="margin-top: 5px"
+          @size-change="handleSizeChangeHuanZhe"
+          @current-change="handleCurrentChangeHuanZhe"
+          :current-page="queryHuanZhe.currentPage"
+          :page-sizes="[20, 30, 40, 50, 100]"
+          :page-size="queryHuanZhe.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="huoQuHuanZheShuJu.length"
+          style="margin-top: 5px"
       ></el-pagination>
     </el-dialog>
     <el-dialog v-model="showOrders" title="医嘱详情" width="60%">
@@ -232,10 +238,10 @@
 </template>
 
 <script>
-import { ref } from 'vue'
+import {ref} from 'vue'
 import store from '@/store'
-import { onMounted, watchEffect } from 'vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
+import {onMounted, watchEffect} from 'vue'
+import {ElMessage, ElMessageBox} from 'element-plus'
 import {
   analyzeTargetData,
   deleteChosenTemplate,
@@ -246,11 +252,14 @@ import {
   searchChargeItem,
   selectOrderPair,
 } from '@/api/reports/illegal-charges-analysis'
-import { shortcuts } from '@/data/shortcuts'
-import { getGreatestRole } from '@/utils/permission'
-import { formatDate, getDateRangeFormatDate } from '@/utils/date'
-import { createWorkSheet, writeExcelFile } from '@/utils/excel'
+import {shortcuts} from '@/data/shortcuts'
+import {getGreatestRole} from '@/utils/permission'
+import {formatDate, getDateRangeFormatDate} from '@/utils/date'
+import {createWorkSheet, writeExcelFile} from '@/utils/excel'
+import HuanZheZhuYuanTianShu from "../../components/reports/huanZheZhuYuanTianShu.vue";
+
 export default {
+  components: {HuanZheZhuYuanTianShu},
   setup() {
     const medtypes = initMedtypes()
     const selectedMedtypes = ref([])
@@ -312,7 +321,7 @@ export default {
         confirmButtonText: '添加',
         cancelButtonText: '取消',
         type: 'warning',
-      }).then(({ value }) => {
+      }).then(({value}) => {
         const parentId = rightClickData.value.id
         const childrenLength = rightClickData.value.children.length
         const template = {
@@ -370,7 +379,13 @@ export default {
     }
 
     const showEditRule = ref(false)
-    const currentTemplate = ref({ children: [], mainCharges: [], conflictCharges: [], maxChargeNum: null, maxChargeUnit: 'day' })
+    const currentTemplate = ref({
+      children: [],
+      mainCharges: [],
+      conflictCharges: [],
+      maxChargeNum: null,
+      maxChargeUnit: 'day'
+    })
     const editTemplateRule = () => {
       if (!rightClickData.value.parent) {
         ElMessage({
@@ -381,7 +396,7 @@ export default {
         })
         return
       }
-      currentTemplate.value = { ...rightClickData.value }
+      currentTemplate.value = {...rightClickData.value}
       showEditRule.value = true
     }
 
@@ -436,7 +451,7 @@ export default {
       }
 
       saveTemplateChanges(currentTemplate.value).then(() => {
-        rightClickNode.value.data = { ...currentTemplate.value }
+        rightClickNode.value.data = {...currentTemplate.value}
         ElMessage({
           message: '保存成功。',
           type: 'success',
@@ -679,13 +694,13 @@ function initMedtypes() {
     // { code: '04', name: '新农合' },
     // { code: '09', name: '市城职医保' },
     // { code: '10', name: '省医保-异地' },
-    { code: '2101', name: '普通住院' },
-    { code: '2102', name: '单病种住院' },
-    { code: '2106', name: '生育平产(居民)' },
-    { code: '2107', name: '生育剖宫产(居民)' },
-    { code: '22', name: '外伤住院' },
-    { code: '52', name: '生育住院(职工)' },
-    { code: '42', name: '工伤住院' },
+    {code: '2101', name: '普通住院'},
+    {code: '2102', name: '单病种住院'},
+    {code: '2106', name: '生育平产(居民)'},
+    {code: '2107', name: '生育剖宫产(居民)'},
+    {code: '22', name: '外伤住院'},
+    {code: '52', name: '生育住院(职工)'},
+    {code: '42', name: '工伤住院'},
   ]
 }
 </script>
@@ -694,15 +709,18 @@ function initMedtypes() {
 :deep() .el-tree-node {
   white-space: normal;
 }
+
 :deep() .el-tree-node__content {
   padding: 8px 4px 0 0;
   height: 100%;
   align-items: start;
 }
+
 .node-label {
   margin: 5px 0;
   width: 220px;
 }
+
 .overlay {
   position: absolute;
   top: 0;
@@ -712,6 +730,7 @@ function initMedtypes() {
   z-index: 3000;
   background-color: transparent;
 }
+
 .menu-box {
   position: fixed;
   border: 1px solid #409eff;
@@ -719,13 +738,16 @@ function initMedtypes() {
   background-color: white;
   width: 120px;
 }
+
 .menu-item {
   padding: 8px;
   cursor: pointer;
 }
+
 .menu-item:hover {
   color: #409eff;
 }
+
 .menu-title {
   padding: 4px;
   background-color: #409eff;
@@ -737,6 +759,7 @@ function initMedtypes() {
   white-space: nowrap;
   overflow: hidden;
 }
+
 .edit-line-title {
   font-size: 14px;
   font-weight: bold;