浏览代码

传染病统计

hsh 2 年之前
父节点
当前提交
77123d62d0
共有 3 个文件被更改,包括 213 次插入0 次删除
  1. 9 0
      src/api/medical-insurance/si-yb-util.js
  2. 5 0
      src/router/modules/dashboard.js
  3. 199 0
      src/views/reports/InfectiousDisease.vue

+ 9 - 0
src/api/medical-insurance/si-yb-util.js

@@ -35,3 +35,12 @@ export function selectAllDoctor(data) {
         data,
     })
 }
+
+// 查询下拉所有小科室
+export function selectAllDept(data) {
+    return request({
+        url: '/ybUtil/selectAllDept',
+        method: 'post',
+        data,
+    })
+}

+ 5 - 0
src/router/modules/dashboard.js

@@ -422,6 +422,11 @@ const route = [
                 component: createNameComponent(() => import('@/views/reports/MzSpecialDisease.vue')),
                 meta: {title: '门诊特殊病统计'},
             },
+            {
+                path: 'infectiousDisease',
+                component: createNameComponent(() => import('@/views/reports/InfectiousDisease.vue')),
+                meta: {title: '传染病统计'},
+            },
         ],
     },
     {

+ 199 - 0
src/views/reports/InfectiousDisease.vue

@@ -0,0 +1,199 @@
+<template>
+    <page-layer>
+        <template #header height="45px;">
+            <el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期"
+                end-placeholder="结束日期" :shortcuts="shortcuts"> </el-date-picker>
+            <el-select v-model="dept" filterable remote placeholder="科室" remote-show-suffix clearable :loading="loadingDept"
+                :remote-method="selectDeptMultiple">
+                <el-option v-for="item in deptOptions" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
+            <el-select v-model="doctor" filterable remote placeholder="医生" remote-show-suffix clearable
+                :loading="loadingDoctor" :remote-method="selectDoctorMultiple">
+                <el-option v-for="item in doctorOptions" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
+            <el-input v-model="admNo" style="width: 180px;" placeholder="请输入住院/门诊号" clearable></el-input>
+            <el-button type="primary" icon="Search" @click="query" style="margin-left: 5px">查询</el-button>
+            <el-button type="primary" icon="Download" @click="exportData" style="margin-left: 5px">导出</el-button>
+        </template>
+        <template #main>
+            <xc-table :data="returnData" localPaging :height="105">
+                <el-table-column type="index" label="序号" align="center"></el-table-column>
+                <template v-for="col in returnData.tableDisplays">
+                    <el-table-column v-if="col.prop.endsWith('-t')" :prop="col.prop" :label="col.label" :width="col.width"
+                        :align="col.align" show-overflow-tooltip>
+                        <template v-for="cell in returnData.chirdData">
+                            <el-table-column v-if="cell.pid === col.id" :prop="cell.prop" :label="cell.label"
+                                :width="cell.width" :align="cell.align" show-overflow-tooltip>
+                            </el-table-column>
+                        </template>
+                    </el-table-column>
+                    <el-table-column v-else :prop="col.prop" :label="col.label" :width="col.width" :align="col.align"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                </template>
+            </xc-table>
+        </template>
+    </page-layer>
+</template>
+<script setup name="OutHospUnsettl" >
+import PageLayer from '@/layout/PageLayer.vue'
+import { reactive, ref } from '@vue/reactivity'
+import { shortcuts, clockinShortcuts } from '@/data/shortcuts'
+import { formatDate, getDateRangeFormatDate } from '@/utils/date'
+import { ElMessage } from 'element-plus'
+import { selectReportPortalMenu, exportReportPortalData } from '@/api/reports/high-report'
+import { selectAllDept, selectAllDoctor } from '@/api/medical-insurance/si-yb-util'
+import XcTable from '@/components/xiao-chan/xc-table/XcTable.vue'
+
+const start = formatDate(clockinShortcuts[1].value[0]);
+const end = formatDate(clockinShortcuts[1].value[1]);
+const dateRange = ref([]);
+const queryTerm = reactive({
+    startTime: "",
+    endTime: "",
+    dept: "",
+    doctor: "",
+    zyh: "",
+    reportId: "zy_crbtj",
+    menuId: "201",
+    type: "1",
+});
+
+const dept = ref([])
+const doctor = ref([])
+const admNo = ref('');
+
+onMounted(() => {
+    queryTerm.startTime = start + '00:00:00';
+    queryTerm.endTime = end + " 23:59:59";
+    dateRange.value = [start, end];
+    const param = {
+        str: '',
+    }
+    selectAllDept(param).then((res) => {
+        deptOptions.value = res
+    })
+    selectAllDoctor(param).then((res) => {
+        doctorOptions.value = res
+    })
+    query()
+});
+
+const deptOptions = ref([])
+const doctorOptions = ref([])
+const loadingDept = ref(false)
+const loadingDoctor = ref(false)
+const selectDeptMultiple = (ks) => {
+    if (ks) {
+        loadingDept.value = true
+        const param = {
+            str: ks,
+        }
+        selectAllDept(param).then((res) => {
+            deptOptions.value = res
+        })
+
+        if (deptOptions.value) {
+            setTimeout(() => {
+                loadingDept.value = false
+                dept.value = deptOptions.value.filter((item) => {
+                    return item.label.toLowerCase().includes(ks.toLowerCase())
+                })
+            }, 1000)
+        } else {
+            deptOptions.value = []
+        }
+    } else {
+        deptOptions.value = []
+    }
+}
+
+const selectDoctorMultiple = (ys) => {
+    if (ys) {
+        loadingDoctor.value = true
+        let d = dept.value
+        const paramF = {
+            str: ys,
+            dept: d,
+        }
+        selectAllDoctor(paramF).then((res) => {
+            doctorOptions.value = res
+        })
+        if (doctorOptions.value) {
+            setTimeout(() => {
+                loadingDoctor.value = false
+                doctor.value = doctorOptions.value.filter((item) => {
+                    return item.label.toLowerCase().includes(ys.toLowerCase())
+                })
+            }, 1000)
+        } else {
+            doctorOptions.value = []
+        }
+    } else {
+        doctorOptions.value = []
+    }
+}
+
+const returnData = ref({
+    currentPage: 1,
+    pageSize: 30,
+    total: 0,
+    data: []
+});
+
+const query = async () => {
+    if (dateRange.value) {
+        let dateS = getDateRangeFormatDate(dateRange.value);
+        queryTerm.startTime = dateS.startTime;
+        queryTerm.endTime = dateS.endTime;
+    } else {
+        queryTerm.startTime = start;
+        queryTerm.endTime = end;
+        ElMessage({
+            type: "info",
+            message: "默认查询本月的数据",
+            duration: 2500,
+            showClose: true,
+        });
+    }
+    queryTerm.dept = dept.value;
+    queryTerm.doctor = doctor.value;
+    queryTerm.zyh = admNo.value
+    await selectReportPortalMenu(queryTerm)
+        .then((res) => {
+            let id
+            returnData.value.tableDisplays = []
+            returnData.value.chirdData = []
+            res.tableDisplays.forEach(item => {
+                if (item.prop.endsWith('-t')) {
+                    id = item.id
+                    returnData.value.tableDisplays.push(item)
+                } else {
+                    if (item.pid === id) {
+                        returnData.value.chirdData.push(item)
+                    } else {
+                        returnData.value.tableDisplays.push(item)
+                    }
+                }
+            })
+            returnData.value.data = res.dataList
+            returnData.value.total = returnData.value.data.length
+        });
+};
+const exportData = () => {
+    if (returnData.value.data.length <= 0) {
+        ElMessage({
+            message: '没有可以导出的数据!',
+            type: 'warning',
+            duration: 2500,
+            showClose: true,
+        })
+    }
+    queryTerm.dept = dept.value;
+    queryTerm.doctor = doctor.value;
+    // 导出excel表格标题
+    queryTerm.exportName = '传染病统计';
+    exportReportPortalData(queryTerm)
+}
+
+</script>