|
@@ -1,94 +1,132 @@
|
|
|
<template>
|
|
|
<el-container>
|
|
|
- <el-header style="height: 35px; margin-top: 10px">
|
|
|
- <el-date-picker v-model="setlCondition.month" :clearable="false" placeholder="请选择" style="width: 110px" type="month"></el-date-picker>
|
|
|
-
|
|
|
- <el-cascader
|
|
|
- v-model="setlCondition.dataInfo"
|
|
|
- :options="setlCondition.options"
|
|
|
- :props="{ expandTrigger: 'hover' }"
|
|
|
- @change="handleChange"
|
|
|
- :clearable="true"
|
|
|
- :filterable="true"
|
|
|
- placeholder="请选择险种"
|
|
|
- >
|
|
|
+ <el-header style="height: 35px; margin-top: 5px; padding: 0 5px">
|
|
|
+ <el-date-picker v-model="dateRange" type="monthrange" range-separator="至" start-placeholder="开始月份"
|
|
|
+ end-placeholder="结束月份" style="width: 220px">
|
|
|
+ </el-date-picker>
|
|
|
+ <el-cascader v-model="setlCondition.dataInfo" :options="setlCondition.options" :props="{ expandTrigger: 'hover' }"
|
|
|
+ @change="handleChange" :clearable="true" :filterable="true" placeholder="请选择险种">
|
|
|
</el-cascader>
|
|
|
<el-divider direction="vertical"></el-divider>
|
|
|
<el-button icon="Search" type="success" @click="fetchSetlinfos">查询</el-button>
|
|
|
<el-button icon="Download" type="primary" @click="exportSetlinfoExcel">导出Excel</el-button>
|
|
|
</el-header>
|
|
|
<el-main>
|
|
|
- <el-table :data="setlinfos" :max-height="tableHeight" border highlight-current-row row-key="childKey" show-summary :summary-method="getSummaries1">
|
|
|
- <el-table-column label="险种类型" prop="insurName" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="住院人次" prop="psnCount" align="center" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="住院天数" prop="inDays" align="center" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="平均住院日" prop="avgInDays" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="总费用" prop="totalFee" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="药品费用" prop="drugFee" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="药品占比(%)" prop="drugFeeRatio" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="耗材费用" prop="matFee" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="耗材占比(%)" prop="matFeeRatio" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="基本医疗统筹金额" prop="fundPooling" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="大病基金" prop="bigIllFundPooling" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="公务员基金支付" prop="civilServiceFund" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="其他基金" prop="otherFunds" align="right" header-align="center"></el-table-column>
|
|
|
- <el-table-column label="全部基金" prop="allFunds" align="right" header-align="center"></el-table-column>
|
|
|
- </el-table>
|
|
|
- <el-pagination
|
|
|
- :current-page="currentPage"
|
|
|
- :page-size="pageSize"
|
|
|
- :page-sizes="[15, 30, 45, 60]"
|
|
|
- :total="setldetails.length"
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
- style="margin-top: 5px"
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- ></el-pagination>
|
|
|
+ <el-tabs type="border-card" v-model="setlCondition.selectType" @tab-click="handleClick">
|
|
|
+ <el-tab-pane label="数据" name="first">
|
|
|
+ <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
|
|
|
+ :summary-method="getSummaries1" stripe>
|
|
|
+ <el-table-column label="险种类型" prop="insurName" fixed header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="住院人次" prop="psnCount" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="住院天数" prop="inDays" align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="平均住院日" prop="avgInDays" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="总费用" prop="totalFee" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="药品费用" prop="drugFee" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="药品占比(%)" prop="drugFeeRatio" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="耗材费用" prop="matFee" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="耗材占比(%)" prop="matFeeRatio" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="基本医疗统筹金额" prop="fundPooling" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="大病基金" prop="bigIllFundPooling" align="right" header-align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="公务员基金支付" prop="civilServiceFund" align="right" header-align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="其他基金" prop="otherFunds" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="全部基金" prop="allFunds" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="同比" name="second">
|
|
|
+ <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
|
|
|
+ :summary-method="getSummaries1">
|
|
|
+ <el-table-column label="月份" prop="month" fixed align="center" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="总费用" prop="zfy" header-align="center">
|
|
|
+ <el-table-column label="今年" prop="zfy_jn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="去年" prop="zfy_qn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="同比" prop="zfy_tb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="全部基金" prop="zjj" header-align="center">
|
|
|
+ <el-table-column label="今年" prop="zjj_jn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="去年" prop="zjj_qn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="同比" prop="zjj_tb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="药品费用" prop="ypf" header-align="center">
|
|
|
+ <el-table-column label="今年" prop="ypf_jn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="去年" prop="ypf_qn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="同比" prop="ypf_tb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="耗材费用" prop="clf" header-align="center">
|
|
|
+ <el-table-column label="今年" prop="clf_jn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="去年" prop="clf_qn" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="同比" prop="clf_tb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="环比" name="third">
|
|
|
+ <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
|
|
|
+ :summary-method="getSummaries1">
|
|
|
+ <el-table-column label="月份" prop="month" align="center" fixed header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="总费用" prop="zfys" header-align="center">
|
|
|
+ <el-table-column label="费用" prop="zfy" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="环比" prop="zfy_hb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="全部基金" prop="zjjs" header-align="center">
|
|
|
+ <el-table-column label="费用" prop="zjj" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="环比" prop="zjj_hb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="药品费用" prop="ypfs" header-align="center">
|
|
|
+ <el-table-column label="费用" prop="ypf" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="环比" prop="ypf_hb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="耗材费用" prop="clfs" header-align="center">
|
|
|
+ <el-table-column label="费用" prop="clf" align="right" header-align="center"></el-table-column>
|
|
|
+ <el-table-column label="环比" prop="clf_hb" align="right" header-align="center"></el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
</el-main>
|
|
|
</el-container>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import { computed, onMounted, reactive, ref } from 'vue'
|
|
|
-import { formatMonth } from '@/utils/date'
|
|
|
import { useStore } from 'vuex'
|
|
|
-import { selectYbStatInfo } from '@/api/medical-insurance/si-ybkf'
|
|
|
+import store from '@/store'
|
|
|
+import { getDateRangeFormatDate, formatDatetime } from '@/utils/date'
|
|
|
+import {
|
|
|
+ selectYbStatInfo, selectYbStatRatio
|
|
|
+} from '@/api/medical-insurance/si-ybkf'
|
|
|
import { clone } from '@/utils/clone'
|
|
|
import { Export } from '@/utils/ExportExcel'
|
|
|
-import { ElMessage } from 'element-plus'
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+import { downloadExcel } from '@/utils/excel'
|
|
|
|
|
|
export default {
|
|
|
- components: {},
|
|
|
+ components: {
|
|
|
+
|
|
|
+ },
|
|
|
setup() {
|
|
|
- const store = useStore()
|
|
|
- const windowSize = store.state.app.windowSize
|
|
|
- const tableHeight = windowSize.h - 55
|
|
|
+ const storeU = useStore()
|
|
|
+ const windowSize = storeU.state.app.windowSize
|
|
|
+ const tableHeight = windowSize.h - 120
|
|
|
+ const dateRange = ref([])
|
|
|
+ const dateS = getDateRangeFormatDate(dateRange.value)
|
|
|
|
|
|
const setlCondition = reactive({
|
|
|
- month: formatMonth(new Date()),
|
|
|
+ startTime: dateS.startTime,
|
|
|
+ endTime: dateS.endTime,
|
|
|
setlType: '21',
|
|
|
+ selectType: 'first',
|
|
|
insurType: null,
|
|
|
dataInfo: null,
|
|
|
options: initInsurOptions(),
|
|
|
})
|
|
|
|
|
|
const setlinfos = ref([])
|
|
|
- const setldetails = ref([])
|
|
|
- const showSetldetails = ref(false)
|
|
|
-
|
|
|
- const admdvsNameStyle = (children, isChildren) => {
|
|
|
- return {
|
|
|
- position: 'absolute',
|
|
|
- top: '6px',
|
|
|
- left: children || isChildren ? '24px' : '10px',
|
|
|
- width: '110px',
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
const fetchSetlinfos = () => {
|
|
|
- if (!setlCondition.month) {
|
|
|
+ if (!dateRange.value) {
|
|
|
ElMessage({
|
|
|
- message: '请选择年月!',
|
|
|
+ message: '请选择时间范围!',
|
|
|
type: 'warning',
|
|
|
duration: 2500,
|
|
|
showClose: true,
|
|
@@ -109,47 +147,174 @@ export default {
|
|
|
setlCondition.setlType = setlCondition.dataInfo[0]
|
|
|
setlCondition.insurType = setlCondition.dataInfo[1]
|
|
|
|
|
|
- setlCondition.month = formatMonth(setlCondition.month)
|
|
|
- selectYbStatInfo(setlCondition)
|
|
|
- .then((res) => {
|
|
|
- setlinfos.value = res
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- setlinfos.value = []
|
|
|
+ setlCondition.startTime = formatDatetime(dateRange.value[0])
|
|
|
+ setlCondition.endTime = formatDatetime(dateRange.value[1])
|
|
|
+
|
|
|
+ let yearL = setlCondition.startTime.substr(0, 4)
|
|
|
+ let yearR = setlCondition.endTime.substr(0, 4)
|
|
|
+
|
|
|
+ if (yearL != yearR) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择同一年份!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
})
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (setlCondition.selectType === "first") {
|
|
|
+ selectYbStatInfo(setlCondition)
|
|
|
+ .then((res) => {
|
|
|
+ setlinfos.value = res
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ setlinfos.value = []
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ selectYbStatRatio(setlCondition)
|
|
|
+ .then((res) => {
|
|
|
+ setlinfos.value = res
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ setlinfos.value = []
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
const handleChange = (value) => {
|
|
|
- console.log(value)
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- const getSummaries = () => {
|
|
|
- let sums = {
|
|
|
- psnCount: 0,
|
|
|
- inDays: 0,
|
|
|
- avgInDays: 0,
|
|
|
- totalFee: 0,
|
|
|
- drugFee: 0,
|
|
|
- drugFeeRatio: 0,
|
|
|
- matFee: 0,
|
|
|
- matFeeRatio: 0,
|
|
|
- fundPooling: 0,
|
|
|
- bigIllFundPooling: 0,
|
|
|
- civilServiceFund: 0,
|
|
|
- otherFunds: 0,
|
|
|
- allFunds: 0,
|
|
|
+ const handleClick = (tab, event) => {
|
|
|
+
|
|
|
+ if (!dateRange.value) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择时间范围!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return
|
|
|
}
|
|
|
- setlinfos.value.forEach((itm) => {
|
|
|
- for (let k in sums) {
|
|
|
- sums[k] = Number(sums[k]) + Number(itm[k])
|
|
|
+
|
|
|
+ if (!setlCondition.dataInfo) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择险种!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ setlCondition.setlType = setlCondition.dataInfo[0]
|
|
|
+ setlCondition.insurType = setlCondition.dataInfo[1]
|
|
|
+
|
|
|
+ setlCondition.startTime = formatDatetime(dateRange.value[0])
|
|
|
+ setlCondition.endTime = formatDatetime(dateRange.value[1])
|
|
|
+
|
|
|
+ // 查询哪个tab页面
|
|
|
+ setlCondition.selectType = tab.props.name
|
|
|
+
|
|
|
+ if (setlCondition.selectType === "first") {
|
|
|
+ selectYbStatInfo(setlCondition)
|
|
|
+ .then((res) => {
|
|
|
+ setlinfos.value = res
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ setlinfos.value = []
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ selectYbStatRatio(setlCondition)
|
|
|
+ .then((res) => {
|
|
|
+ setlinfos.value = res
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ setlinfos.value = []
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const getSummaries = () => {
|
|
|
+ if (setlCondition.selectType === 'first') {
|
|
|
+ let sums1 = {
|
|
|
+ psnCount: 0,
|
|
|
+ inDays: 0,
|
|
|
+ avgInDays: 0,
|
|
|
+ totalFee: 0,
|
|
|
+ drugFee: 0,
|
|
|
+ drugFeeRatio: 0,
|
|
|
+ matFee: 0,
|
|
|
+ matFeeRatio: 0,
|
|
|
+ fundPooling: 0,
|
|
|
+ bigIllFundPooling: 0,
|
|
|
+ civilServiceFund: 0,
|
|
|
+ otherFunds: 0,
|
|
|
+ allFunds: 0,
|
|
|
}
|
|
|
- })
|
|
|
- sums.insurName = '合计'
|
|
|
- sums.avgInDays = (sums.inDays / sums.psnCount).toFixed(2)
|
|
|
- sums.drugFeeRatio = ((sums.drugFee / sums.totalFee) * 100).toFixed(2)
|
|
|
- sums.matFeeRatio = ((sums.matFee / sums.totalFee) * 100).toFixed(2)
|
|
|
+ setlinfos.value.forEach((itm) => {
|
|
|
+ for (let k in sums1) {
|
|
|
+ sums1[k] = Number(sums1[k]) + Number(itm[k])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ sums1.insurName = '合计'
|
|
|
+ sums1.avgInDays = (sums1.inDays / sums1.psnCount).toFixed(2)
|
|
|
+ sums1.drugFeeRatio = (sums1.drugFee / sums1.totalFee * 100).toFixed(2)
|
|
|
+ sums1.matFeeRatio = (sums1.matFee / sums1.totalFee * 100).toFixed(2)
|
|
|
+
|
|
|
+ return sums1
|
|
|
+ } else if (setlCondition.selectType === 'second') {
|
|
|
+ let sums2 = {
|
|
|
+ zfy_jn: 0,
|
|
|
+ zfy_qn: 0,
|
|
|
+ zfy_tb: 0,
|
|
|
+ zjj_jn: 0,
|
|
|
+ zjj_qn: 0,
|
|
|
+ zjj_tb: 0,
|
|
|
+ ypf_jn: 0,
|
|
|
+ ypf_qn: 0,
|
|
|
+ ypf_tb: 0,
|
|
|
+ clf_jn: 0,
|
|
|
+ clf_qn: 0,
|
|
|
+ clf_tb: 0,
|
|
|
+ }
|
|
|
+ setlinfos.value.forEach((itm) => {
|
|
|
+ for (let k in sums2) {
|
|
|
+ sums2[k] = Number(sums2[k]) + Number(itm[k])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ sums2.month = '合计'
|
|
|
+ sums2.zfy_tb = ((sums2.zfy_jn - sums2.zfy_qn) / sums2.zfy_qn * 100).toFixed(2) + '%'
|
|
|
+ sums2.zjj_tb = ((sums2.zjj_jn - sums2.zjj_qn) / sums2.zjj_qn * 100).toFixed(2) + '%'
|
|
|
+ sums2.ypf_tb = ((sums2.ypf_jn - sums2.ypf_qn) / sums2.ypf_qn * 100).toFixed(2) + '%'
|
|
|
+ sums2.clf_tb = ((sums2.clf_jn - sums2.clf_qn) / sums2.clf_qn * 100).toFixed(2) + '%'
|
|
|
+ return sums2
|
|
|
+ } else {
|
|
|
+ let sums3 = {
|
|
|
+ zfy: 0,
|
|
|
+ zfy_hb: 0,
|
|
|
+ zjj: 0,
|
|
|
+ zjj_hb: 0,
|
|
|
+ ypf: 0,
|
|
|
+ ypf_hb: 0,
|
|
|
+ clf: 0,
|
|
|
+ clf_hb: 0,
|
|
|
+ }
|
|
|
+ setlinfos.value.forEach((itm) => {
|
|
|
+ for (let k in sums3) {
|
|
|
+ sums3[k] = Number(sums3[k]) + Number(itm[k])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ sums3.month = '合计'
|
|
|
+ sums3.zfy_hb = ''
|
|
|
+ sums3.zjj_hb = ''
|
|
|
+ sums3.ypf_hb = ''
|
|
|
+ sums3.clf_hb = ''
|
|
|
+ return sums3
|
|
|
+ }
|
|
|
|
|
|
- return sums
|
|
|
}
|
|
|
|
|
|
const getSummaries1 = (param) => {
|
|
@@ -165,6 +330,22 @@ export default {
|
|
|
let ypfIndex = 0
|
|
|
// 材料费下标
|
|
|
let clfIndex = 0
|
|
|
+ // 今年总费用下标
|
|
|
+ let jn_zfy = 0
|
|
|
+ // 去年总费用下标
|
|
|
+ let qn_zfy = 0
|
|
|
+ // 今年总基金下标
|
|
|
+ let jn_zjj = 0
|
|
|
+ // 去年总基金下标
|
|
|
+ let qn_zjj = 0
|
|
|
+ // 今年药品费下标
|
|
|
+ let jn_ypf = 0
|
|
|
+ // 去年药品费下标
|
|
|
+ let qn_ypf = 0
|
|
|
+ // 今年耗材费下标
|
|
|
+ let jn_clf = 0
|
|
|
+ // 去年耗材费下标
|
|
|
+ let qn_clf = 0
|
|
|
columns.forEach((column, index) => {
|
|
|
if (index === 0) {
|
|
|
sums[index] = '合计'
|
|
@@ -185,22 +366,78 @@ export default {
|
|
|
if (column.property === 'matFee') {
|
|
|
clfIndex = index
|
|
|
}
|
|
|
- const values = data.map((item) => Number(item[column.property]))
|
|
|
+ if (column.property === 'jn_zfy') {
|
|
|
+ jn_zfy = index
|
|
|
+ }
|
|
|
+ if (column.property === 'qn_zfy') {
|
|
|
+ qn_zfy = index
|
|
|
+ }
|
|
|
+ if (column.property === 'jn_zjj') {
|
|
|
+ jn_zjj = index
|
|
|
+ }
|
|
|
+ if (column.property === 'qn_zjj') {
|
|
|
+ qn_zjj = index
|
|
|
+ }
|
|
|
+ if (column.property === 'jn_ypf') {
|
|
|
+ jn_ypf = index
|
|
|
+ }
|
|
|
+ if (column.property === 'qn_ypf') {
|
|
|
+ qn_ypf = index
|
|
|
+ }
|
|
|
+ if (column.property === 'jn_clf') {
|
|
|
+ jn_clf = index
|
|
|
+ }
|
|
|
+ if (column.property === 'qn_clf') {
|
|
|
+ qn_clf = index
|
|
|
+ }
|
|
|
+ const values = data.map(item => Number(item[column.property]))
|
|
|
if (column.property === 'avgInDays') {
|
|
|
sums[index] = (sums[inDaysIndex] / sums[psnCountIndex]).toFixed(2)
|
|
|
} else if (column.property === 'drugFeeRatio') {
|
|
|
if (sums[zfyIndex] > 0) {
|
|
|
- sums[index] = ((sums[ypfIndex] / sums[zfyIndex]) * 100).toFixed(2)
|
|
|
+ sums[index] = (sums[ypfIndex] / sums[zfyIndex] * 100).toFixed(2)
|
|
|
} else {
|
|
|
- sums[index] = 0.0
|
|
|
+ sums[index] = 0.00
|
|
|
}
|
|
|
} else if (column.property === 'matFeeRatio') {
|
|
|
if (sums[zfyIndex] > 0) {
|
|
|
- sums[index] = ((sums[clfIndex] / sums[zfyIndex]) * 100).toFixed(2)
|
|
|
+ sums[index] = (sums[clfIndex] / sums[zfyIndex] * 100).toFixed(2)
|
|
|
} else {
|
|
|
- sums[index] = 0.0
|
|
|
+ sums[index] = 0.00
|
|
|
}
|
|
|
- } else if (!values.every((value) => isNaN(value))) {
|
|
|
+ } else if (column.property === 'zfy_tb') {
|
|
|
+ if (sums[qn_zfy] > 0) {
|
|
|
+ sums[index] = ((sums[jn_zfy] - sums[qn_zfy]) / sums[qn_zfy] * 100).toFixed(2) + '%'
|
|
|
+ } else {
|
|
|
+ sums[index] = 0.00 + '%'
|
|
|
+ }
|
|
|
+ } else if (column.property === 'zjj_tb') {
|
|
|
+ if (sums[qn_zjj] > 0) {
|
|
|
+ sums[index] = ((sums[jn_zjj] - sums[qn_zjj]) / sums[qn_zjj] * 100).toFixed(2) + '%'
|
|
|
+ } else {
|
|
|
+ sums[index] = 0.00 + '%'
|
|
|
+ }
|
|
|
+ } else if (column.property === 'ypf_tb') {
|
|
|
+ if (sums[qn_ypf] > 0) {
|
|
|
+ sums[index] = ((sums[jn_ypf] - sums[qn_ypf]) / sums[qn_ypf] * 100).toFixed(2) + '%'
|
|
|
+ } else {
|
|
|
+ sums[index] = 0.00 + '%'
|
|
|
+ }
|
|
|
+ } else if (column.property === 'clf_tb') {
|
|
|
+ if (sums[qn_clf] > 0) {
|
|
|
+ sums[index] = ((sums[jn_clf] - sums[qn_clf]) / sums[qn_clf] * 100).toFixed(2) + '%'
|
|
|
+ } else {
|
|
|
+ sums[index] = 0.00 + '%'
|
|
|
+ }
|
|
|
+ } else if (column.property === 'zfy_hb') {
|
|
|
+ sums[index] = ''
|
|
|
+ } else if (column.property === 'zjj_hb') {
|
|
|
+ sums[index] = ''
|
|
|
+ } else if (column.property === 'ypf_hb') {
|
|
|
+ sums[index] = ''
|
|
|
+ } else if (column.property === 'clf_hb') {
|
|
|
+ sums[index] = ''
|
|
|
+ } else if (!values.every(value => isNaN(value))) {
|
|
|
sums[index] = values.reduce((prev, curr) => {
|
|
|
const value = Number(curr)
|
|
|
if (!isNaN(value)) {
|
|
@@ -221,14 +458,14 @@ export default {
|
|
|
})
|
|
|
|
|
|
sums.avgInDays = (sums.inDays / sums.psnCount).toFixed(2)
|
|
|
- sums.drugFeeRatio = ((sums.drugFee / sums.totalFee) * 100).toFixed(2)
|
|
|
- sums.matFeeRatio = ((sums.matFee / sums.totalFee) * 100).toFixed(2)
|
|
|
+ sums.drugFeeRatio = (sums.drugFee / sums.totalFee * 100).toFixed(2)
|
|
|
+ sums.matFeeRatio = (sums.matFee / sums.totalFee * 100).toFixed(2)
|
|
|
|
|
|
return sums
|
|
|
}
|
|
|
|
|
|
const filterSetlTypeName = () => {
|
|
|
- if ('21' === setlCondition.setlType) {
|
|
|
+ if ("21" === setlCondition.setlType) {
|
|
|
return setlCondition.options[0].label
|
|
|
} else {
|
|
|
return setlCondition.options[1].label
|
|
@@ -238,7 +475,7 @@ export default {
|
|
|
}
|
|
|
|
|
|
const filterInsurTypeName = () => {
|
|
|
- if ('21' === setlCondition.setlType) {
|
|
|
+ if ("21" === setlCondition.setlType) {
|
|
|
for (let i = 0; i < setlCondition.options[0].children.length; i++) {
|
|
|
if (setlCondition.options[0].children[i].value === setlCondition.insurType) {
|
|
|
return setlCondition.options[0].children[i].label
|
|
@@ -256,6 +493,7 @@ export default {
|
|
|
}
|
|
|
|
|
|
const exportSetlinfoExcel = () => {
|
|
|
+ let year = setlCondition.startTime.substr(0, 4) + '年'
|
|
|
if (setlinfos.value.length === 0) {
|
|
|
ElMessage({
|
|
|
message: '没有可以导出的数据!',
|
|
@@ -266,53 +504,121 @@ export default {
|
|
|
} else {
|
|
|
const data = clone(setlinfos.value)
|
|
|
data.push(getSummaries())
|
|
|
- const title = {
|
|
|
- insurName: '险种类型',
|
|
|
- psnCount: '住院人次',
|
|
|
- inDays: '住院天数',
|
|
|
- avgInDays: '平均住院日',
|
|
|
- totalFee: '总费用',
|
|
|
- drugFee: '药品费用',
|
|
|
- drugFeeRatio: '药品占比(%)',
|
|
|
- matFee: '耗材费用',
|
|
|
- matFeeRatio: '耗材占比(%)',
|
|
|
- fundPooling: '基本医疗统筹金额',
|
|
|
- bigIllFundPooling: '大病基金',
|
|
|
- civilServiceFund: '公务员基金支付',
|
|
|
- otherFunds: '其他基金',
|
|
|
- allFunds: '全部基金',
|
|
|
+
|
|
|
+ // 增加导出正在进行中状态
|
|
|
+ store.commit('app/setLoading', true)
|
|
|
+
|
|
|
+ if (setlCondition.selectType === 'first') {
|
|
|
+ const title = {
|
|
|
+ insurName: '险种类型',
|
|
|
+ psnCount: '住院人次',
|
|
|
+ inDays: '住院天数',
|
|
|
+ avgInDays: '平均住院日',
|
|
|
+ totalFee: '总费用',
|
|
|
+ drugFee: '药品费用',
|
|
|
+ drugFeeRatio: '药品占比(%)',
|
|
|
+ matFee: '耗材费用',
|
|
|
+ matFeeRatio: '耗材占比(%)',
|
|
|
+ fundPooling: '基本医疗统筹金额',
|
|
|
+ bigIllFundPooling: '大病基金',
|
|
|
+ civilServiceFund: '公务员基金支付',
|
|
|
+ otherFunds: '其他基金',
|
|
|
+ allFunds: '全部基金',
|
|
|
+ }
|
|
|
+ const setlTypeName = filterSetlTypeName()
|
|
|
+ const insurTypeName = filterInsurTypeName()
|
|
|
+ Export(data, title, `【${year}】【${setlTypeName}】【${insurTypeName}】`)
|
|
|
+ } else if (setlCondition.selectType === 'second') {
|
|
|
+ const setlTypeName = filterSetlTypeName()
|
|
|
+ const exportName = year + setlTypeName + "同比"
|
|
|
+ if (setlinfos.value.length <= 0) {
|
|
|
+ ElMessage({
|
|
|
+ message: '没有可以导出的数据!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ ElMessageBox.prompt('导出文件名字', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ inputPattern: /\S/,
|
|
|
+ inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
|
|
|
+ })
|
|
|
+ .then(({ value }) => {
|
|
|
+ const data = {
|
|
|
+ param: {
|
|
|
+ startTime: setlCondition.startTime,
|
|
|
+ endTime: setlCondition.endTime,
|
|
|
+ setlType: setlCondition.setlType,
|
|
|
+ insurType: setlCondition.insurType,
|
|
|
+ selectType: setlCondition.selectType,
|
|
|
+ exportName: exportName,
|
|
|
+ },
|
|
|
+ url: '/ybQuery/exportYbStatRatioExcel',
|
|
|
+ fileName: value + '.xlsx',
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ downloadExcel(data)
|
|
|
+ }, 500)
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ const setlTypeName = filterSetlTypeName()
|
|
|
+ const exportName = year + setlTypeName + "环比"
|
|
|
+ if (setlinfos.value.length <= 0) {
|
|
|
+ ElMessage({
|
|
|
+ message: '没有可以导出的数据!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ ElMessageBox.prompt('导出文件名字', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ inputPattern: /\S/,
|
|
|
+ inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
|
|
|
+ })
|
|
|
+ .then(({ value }) => {
|
|
|
+ const data = {
|
|
|
+ param: {
|
|
|
+ startTime: setlCondition.startTime,
|
|
|
+ endTime: setlCondition.endTime,
|
|
|
+ setlType: setlCondition.setlType,
|
|
|
+ insurType: setlCondition.insurType,
|
|
|
+ selectType: setlCondition.selectType,
|
|
|
+ exportName: exportName,
|
|
|
+ },
|
|
|
+ url: '/ybQuery/exportYbStatRatioExcel',
|
|
|
+ fileName: value + '.xlsx',
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ downloadExcel(data)
|
|
|
+ }, 500)
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ })
|
|
|
}
|
|
|
- const setlTypeName = filterSetlTypeName()
|
|
|
- const insurTypeName = filterInsurTypeName()
|
|
|
- Export(data, title, `【${setlCondition.month}】【${setlTypeName}】【${insurTypeName}】`)
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- const pageSize = ref(30)
|
|
|
- const currentPage = ref(1)
|
|
|
- const handleSizeChange = (val) => {
|
|
|
- pageSize.value = val
|
|
|
- }
|
|
|
- const handleCurrentChange = (val) => {
|
|
|
- currentPage.value = val
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- onMounted(() => {})
|
|
|
+ onMounted(() => {
|
|
|
+ // 初始化数据
|
|
|
+ setlCondition.selectType = 'first'
|
|
|
+ })
|
|
|
|
|
|
return {
|
|
|
tableHeight,
|
|
|
+ dateRange,
|
|
|
setlCondition,
|
|
|
setlinfos,
|
|
|
- setldetails,
|
|
|
- showSetldetails,
|
|
|
- pageSize,
|
|
|
- currentPage,
|
|
|
getSummaries1,
|
|
|
exportSetlinfoExcel,
|
|
|
handleChange,
|
|
|
- admdvsNameStyle,
|
|
|
- handleCurrentChange,
|
|
|
- handleSizeChange,
|
|
|
+ handleClick,
|
|
|
fetchSetlinfos,
|
|
|
}
|
|
|
},
|
|
@@ -408,7 +714,7 @@ function initInsurOptions() {
|
|
|
value: 4399012102,
|
|
|
label: '省内单病种',
|
|
|
},
|
|
|
- ],
|
|
|
+ ]
|
|
|
},
|
|
|
{
|
|
|
value: '11',
|
|
@@ -434,10 +740,12 @@ function initInsurOptions() {
|
|
|
value: 51,
|
|
|
label: '生育门诊',
|
|
|
},
|
|
|
- ],
|
|
|
+ ]
|
|
|
},
|
|
|
+
|
|
|
]
|
|
|
}
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
@@ -458,4 +766,8 @@ function initInsurOptions() {
|
|
|
color: white;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
+
|
|
|
+:deep(.el-main) {
|
|
|
+ padding: 0 5px;
|
|
|
+}
|
|
|
</style>
|