|
@@ -0,0 +1,264 @@
|
|
|
+<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-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>
|
|
|
+ <el-table :data="returnData" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
|
|
|
+ stripe :summary-method="getSummaries">
|
|
|
+ <el-table-column type="index" label="序号" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="科室收入" prop="kssr" align="center" header-align="center">
|
|
|
+ <el-table-column label="科室" prop="ks_sr" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="全部" prop="all_sr" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="门诊" prop="mz_sr" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="住院" prop="zy_sr" align="center" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="药占比" prop="yzb" align="center" header-align="center">
|
|
|
+ <el-table-column label="科室" prop="ks_yzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="全部" prop="all_yzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="门诊" prop="mz_yzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="住院" prop="zy_yzb" align="center" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="耗占比" prop="hzb" align="center" header-align="center">
|
|
|
+ <el-table-column label="科室" prop="ks_hzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="全部" prop="all_hzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="门诊" prop="mz_hzb" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="住院" prop="zy_hzb" align="center" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </template>
|
|
|
+ </page-layer>
|
|
|
+</template>
|
|
|
+<script setup name="OutHospUnsettl" >
|
|
|
+import PageLayer from '@/layout/PageLayer.vue'
|
|
|
+import Dig from "@/utils/math";
|
|
|
+import { useStore } from 'vuex'
|
|
|
+import { clone } from '@/utils/clone'
|
|
|
+import { reactive, ref } from '@vue/reactivity'
|
|
|
+import { shortcuts } from '@/data/shortcuts'
|
|
|
+import { formatDate, getDateRangeFormatDate } from '@/utils/date'
|
|
|
+import { ElMessage } from 'element-plus'
|
|
|
+import { selectIncomeStatistics } from '@/api/reports/incomeStatistics'
|
|
|
+import { Export } from '@/utils/ExportExcel'
|
|
|
+
|
|
|
+let nowDay = new Date()
|
|
|
+nowDay.setTime(nowDay.getTime() - 24 * 60 * 60 * 1000)
|
|
|
+let yf, inday
|
|
|
+if (nowDay.getMonth() < 9) {
|
|
|
+ yf = '0' + (nowDay.getMonth() + 1)
|
|
|
+} else {
|
|
|
+ yf = nowDay.getMonth() + 1
|
|
|
+}
|
|
|
+if (nowDay.getDate() < 10) {
|
|
|
+ inday = '0' + nowDay.getDate()
|
|
|
+} else {
|
|
|
+ inday = nowDay.getDate()
|
|
|
+}
|
|
|
+let s1 = nowDay.getFullYear() + "-" + yf + "-" + inday
|
|
|
+const start = formatDate(s1);
|
|
|
+const end = formatDate(s1);
|
|
|
+const dateRange = ref([]);
|
|
|
+const queryTerm = reactive({
|
|
|
+ startTime: "",
|
|
|
+ endTime: "",
|
|
|
+ reportId: "all_srltj",
|
|
|
+ menuId: "169",
|
|
|
+ type: "1",
|
|
|
+});
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ queryTerm.startTime = start + '00:00:00';
|
|
|
+ queryTerm.endTime = end + " 23:59:59";
|
|
|
+ dateRange.value = [start, end];
|
|
|
+ query()
|
|
|
+});
|
|
|
+
|
|
|
+const storeU = useStore()
|
|
|
+const windowSize = storeU.state.app.windowSize
|
|
|
+const tableHeight = windowSize.h - 20
|
|
|
+
|
|
|
+const returnData = ref([])
|
|
|
+const totalData = ref({
|
|
|
+ mz_zfy: 0,
|
|
|
+ mz_ypf: 0,
|
|
|
+ mz_hcf: 0,
|
|
|
+ zy_zfy: 0,
|
|
|
+ zy_ypf: 0,
|
|
|
+ zy_hcf: 0,
|
|
|
+})
|
|
|
+
|
|
|
+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,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ await selectIncomeStatistics(queryTerm)
|
|
|
+ .then((res) => {
|
|
|
+ returnData.value = res.resultData
|
|
|
+
|
|
|
+ // 计算合计
|
|
|
+ returnData.value.forEach((item) => {
|
|
|
+ if (item.mz_zfy) {
|
|
|
+ const value = Number(item.mz_zfy)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.mz_zfy = Dig.add(totalData.value.mz_zfy, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.mz_ypf) {
|
|
|
+ const value = Number(item.mz_ypf)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.mz_ypf = Dig.add(totalData.value.mz_ypf, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.mz_hcf) {
|
|
|
+ const value = Number(item.mz_hcf)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.mz_hcf = Dig.add(totalData.value.mz_hcf, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.zy_zfy) {
|
|
|
+ const value = Number(item.zy_zfy)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.zy_zfy = Dig.add(totalData.value.zy_zfy, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.zy_ypf) {
|
|
|
+ const value = Number(item.zy_ypf)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.zy_ypf = Dig.add(totalData.value.zy_ypf, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.zy_hcf) {
|
|
|
+ const value = Number(item.zy_hcf)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ totalData.value.zy_hcf = Dig.add(totalData.value.zy_hcf, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ totalData.value.mz_zfy = Number(totalData.value.mz_zfy.toFixed(2))
|
|
|
+ totalData.value.mz_ypf = Number(totalData.value.mz_ypf.toFixed(2))
|
|
|
+ totalData.value.mz_hcf = Number(totalData.value.mz_hcf.toFixed(2))
|
|
|
+ totalData.value.zy_zfy = Number(totalData.value.zy_zfy.toFixed(2))
|
|
|
+ totalData.value.zy_ypf = Number(totalData.value.zy_ypf.toFixed(2))
|
|
|
+ totalData.value.zy_hcf = Number(totalData.value.zy_hcf.toFixed(2))
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 存储合计数据
|
|
|
+const hjInfo = ref({
|
|
|
+ ks_sr: '合计',
|
|
|
+ all_sr: 0,
|
|
|
+ mz_sr: 0,
|
|
|
+ zy_sr: 0,
|
|
|
+ ks_yzb: '',
|
|
|
+ all_yzb: 0,
|
|
|
+ mz_yzb: 0,
|
|
|
+ zy_yzb: 0,
|
|
|
+ ks_hzb: '',
|
|
|
+ all_hzb: 0,
|
|
|
+ mz_hzb: 0,
|
|
|
+ zy_hzb: 0
|
|
|
+})
|
|
|
+
|
|
|
+const getSummaries = (param) => {
|
|
|
+ const { columns, data } = param
|
|
|
+ const sums = []
|
|
|
+
|
|
|
+ columns.forEach((column, index) => {
|
|
|
+ if (index === 0) {
|
|
|
+ sums[index] = '合计'
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (column.property.includes('ks')) {
|
|
|
+ sums[index] = ''
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const values = data.map((item) => Number(item[column.property]))
|
|
|
+ if (column.property === 'mz_yzb') {
|
|
|
+ sums[index] = (Dig.division(totalData.value.mz_ypf, totalData.value.mz_zfy) * 100).toFixed(2)
|
|
|
+ hjInfo.value.mz_yzb = sums[index]
|
|
|
+ } else if (column.property === 'zy_yzb') {
|
|
|
+ sums[index] = (Dig.division(totalData.value.zy_ypf, totalData.value.zy_zfy) * 100).toFixed(2)
|
|
|
+ hjInfo.value.zy_yzb = sums[index]
|
|
|
+ } else if (column.property === 'all_yzb') {
|
|
|
+ sums[index] = (Dig.division(Dig.add(totalData.value.mz_ypf, totalData.value.zy_ypf), Dig.add(totalData.value.mz_zfy, totalData.value.zy_zfy)) * 100).toFixed(2)
|
|
|
+ hjInfo.value.all_yzb = sums[index]
|
|
|
+ } else if (column.property === 'mz_hzb') {
|
|
|
+ sums[index] = (Dig.division(totalData.value.mz_hcf, totalData.value.mz_zfy) * 100).toFixed(2)
|
|
|
+ hjInfo.value.mz_hzb = sums[index]
|
|
|
+ } else if (column.property === 'zy_hzb') {
|
|
|
+ sums[index] = (Dig.division(totalData.value.zy_hcf, totalData.value.zy_zfy) * 100).toFixed(2)
|
|
|
+ hjInfo.value.zy_hzb = sums[index]
|
|
|
+ } else if (column.property === 'all_hzb') {
|
|
|
+ sums[index] = (Dig.division(Dig.add(totalData.value.mz_hcf, totalData.value.zy_hcf), Dig.add(totalData.value.mz_zfy, totalData.value.zy_zfy)) * 100).toFixed(2)
|
|
|
+ hjInfo.value.all_hzb = sums[index]
|
|
|
+ } else if (!values.every((value) => isNaN(value))) {
|
|
|
+ sums[index] = values.reduce((prev, curr) => {
|
|
|
+ const value = Number(curr)
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ return prev + curr
|
|
|
+ } else {
|
|
|
+ return prev
|
|
|
+ }
|
|
|
+ }, 0).toFixed(2)
|
|
|
+
|
|
|
+ if(column.property === 'all_sr'){
|
|
|
+ hjInfo.value.all_sr = sums[index]
|
|
|
+ } else if(column.property === 'mz_sr'){
|
|
|
+ hjInfo.value.mz_sr = sums[index]
|
|
|
+ } else if(column.property === 'zy_sr'){
|
|
|
+ hjInfo.value.zy_sr = sums[index]
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ sums[index] = 0
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return sums
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const exportData = () => {
|
|
|
+ if (returnData.value.length <= 0) {
|
|
|
+ ElMessage({
|
|
|
+ message: '没有可以导出的数据!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ const data = clone(returnData.value)
|
|
|
+ data.push(hjInfo.value)
|
|
|
+
|
|
|
+ const title = {
|
|
|
+ ks_sr: '收入科室',
|
|
|
+ all_sr: '全部收入',
|
|
|
+ mz_sr: '门诊收入',
|
|
|
+ zy_sr: '住院收入',
|
|
|
+ ks_yzb: '药占比科室',
|
|
|
+ all_yzb: '全部药占比',
|
|
|
+ mz_yzb: '门诊药占比',
|
|
|
+ zy_yzb: '住院药占比',
|
|
|
+ ks_hzb: '耗占比科室',
|
|
|
+ all_hzb: '全部耗占比',
|
|
|
+ mz_hzb: '门诊耗占比',
|
|
|
+ zy_hzb: '住院耗占比'
|
|
|
+ }
|
|
|
+
|
|
|
+ Export(data, title, `收入量统计`)
|
|
|
+}
|
|
|
+
|
|
|
+</script>
|