fix: 健康管理系统,统计页面功能开发。
This commit is contained in:
@@ -63,7 +63,7 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">就医次数</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.marCategoryCount }}</span
|
||||
<span class="num">{{ doctor.doctorCount }}</span
|
||||
><span class="unit">次</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -75,7 +75,7 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">就医费用</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.marCount }}</span
|
||||
<span class="num">{{ doctor.doctorCost }}</span
|
||||
><span class="unit">元 </span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -88,8 +88,7 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">常去医院</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.qingre }}</span
|
||||
><span class="unit">XXX</span>
|
||||
<span class="num" style="font-size: 16px">{{ doctor.commonHospital }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -100,25 +99,23 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">常去科室</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.zhike }}</span
|
||||
><span class="unit">XXX</span>
|
||||
<span style="font-size: 18px" class="num">{{ doctor.commonDepartments }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-con">
|
||||
<div class="img">
|
||||
<img src="@/assets/images/average.png" alt="" />
|
||||
</div>
|
||||
<div class="item-wrap">
|
||||
<div class="title">常看大夫</div>
|
||||
<div>
|
||||
<span class="num" style="font-size: 18px">{{ doctor.commonDoctor }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="summary-con" style="height: 115px">
|
||||
<div class="right-con">
|
||||
<div class="img">
|
||||
<img src="@/assets/images/average.png" alt="" />
|
||||
</div>
|
||||
<div class="item-wrap">
|
||||
<div class="title">常看大夫</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.wuhua }}</span
|
||||
><span class="unit">XXX</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-con">
|
||||
<div class="img">
|
||||
<img src="@/assets/images/average.png" alt="" />
|
||||
@@ -126,7 +123,7 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">门诊次数</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.marCategoryCount }}</span
|
||||
<span class="num">{{ doctor.clinicCount }}</span
|
||||
><span class="unit">次</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -138,7 +135,19 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">急诊次数</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.marCount }}</span
|
||||
<span class="num">{{ doctor.emergencyCount }}</span
|
||||
><span class="unit">次 </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-con">
|
||||
<div class="img">
|
||||
<img src="@/assets/images/average.png" alt="" />
|
||||
</div>
|
||||
<div class="item-wrap">
|
||||
<div class="title">输液次数</div>
|
||||
<div>
|
||||
<span class="num">{{ doctor.infusionCount }}</span
|
||||
><span class="unit">次 </span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -151,7 +160,19 @@
|
||||
<div class="item-wrap">
|
||||
<div class="title">住院次数</div>
|
||||
<div>
|
||||
<span class="num">{{ mar.qingre }}</span
|
||||
<span class="num">{{ doctor.hospitalizedCount }}</span
|
||||
><span class="unit">次</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-con">
|
||||
<div class="img">
|
||||
<img src="@/assets/images/average.png" alt="" />
|
||||
</div>
|
||||
<div class="item-wrap">
|
||||
<div class="title">线上问诊次数</div>
|
||||
<div>
|
||||
<span class="num">{{ doctor.onlineCount }}</span
|
||||
><span class="unit">次</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -161,46 +182,62 @@
|
||||
<div class="title">就医统计</div>
|
||||
<div class="operate-btn-con">
|
||||
<el-radio-group v-model="radioVal" @change="handleRadioChange">
|
||||
<el-radio-button label="就医明细统计" />
|
||||
<el-radio-button label="就诊医院统计" />
|
||||
<el-radio-button label="就诊科室统计" />
|
||||
<el-radio-button label="就诊大夫统计" />
|
||||
<el-radio-button label="就医费用柱状图" />
|
||||
<el-radio-button label="就医费用折线图" />
|
||||
<el-radio-button label="就诊医院统计" />
|
||||
<el-radio-button label="就诊大夫统计" />
|
||||
<el-radio-button label="就医明细统计" />
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-con">
|
||||
<div v-show="radioVal === '就医费用柱状图'" class="chart" id="chartBar" style="height: calc(100% - 225px); margin-top: -10px"></div>
|
||||
<div v-show="radioVal === '就医费用折线图'" class="chart" id="chartLine" style="height: calc(100% - 225px); margin-top: -10px"></div>
|
||||
<el-table v-show="radioVal === '就诊医院统计'" v-loading="loading" :data="mar.marMapList" height="calc(100% - 245px)">
|
||||
<el-table v-show="radioVal === '就诊医院统计'" v-loading="loading" :data="doctor.hospitalStaticList" height="calc(100% - 245px)">
|
||||
<el-table-column label="序号" width="50" type="index" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="医院名称" align="center" prop="time" />
|
||||
<el-table-column label="就诊次数" align="center" prop="value" />
|
||||
<el-table-column label="医院名称" align="center" prop="hospitalName" />
|
||||
<el-table-column label="就诊次数" align="center" prop="count" />
|
||||
</el-table>
|
||||
<el-table v-show="radioVal === '就诊大夫统计'" v-loading="loading" :data="mar.marMapList" height="calc(100% - 245px)">
|
||||
<el-table v-show="radioVal === '就诊科室统计'" v-loading="loading" :data="doctor.departStaticList" height="calc(100% - 245px)">
|
||||
<el-table-column label="序号" width="50" type="index" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="就诊大夫" align="center" prop="time" />
|
||||
<el-table-column label="所在医院" align="center" prop="value" />
|
||||
<el-table-column label="就诊次数" align="center" prop="dosage" />
|
||||
<el-table-column label="就诊科室" align="center" prop="departments" />
|
||||
<el-table-column label="就诊次数" align="center" prop="count" />
|
||||
</el-table>
|
||||
<el-table v-show="radioVal === '就医明细统计'" v-loading="loading" :data="mar.marMapList" height="calc(100% - 245px)">
|
||||
<el-table v-show="radioVal === '就诊大夫统计'" v-loading="loading" :data="doctor.doctorStaticList" height="calc(100% - 245px)">
|
||||
<el-table-column label="序号" width="50" type="index" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="药品名称" align="center" prop="time" />
|
||||
<el-table-column label="用药次数" align="center" prop="value" />
|
||||
<el-table-column label="用药总量" align="center" prop="dosage" />
|
||||
<el-table-column label="单位" align="center" prop="unit" />
|
||||
<el-table-column label="就诊大夫" align="center" prop="doctor" />
|
||||
<el-table-column label="所在医院" align="center" prop="hospitalName" />
|
||||
<el-table-column label="就诊次数" align="center" prop="count" />
|
||||
</el-table>
|
||||
<el-table v-show="radioVal === '就医明细统计'" v-loading="loading" :data="doctor.doctorTableList" height="calc(100% - 245px)">
|
||||
<el-table-column label="序号" width="50" type="index" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="就诊医院" align="center" width="250" prop="hospitalName" />
|
||||
<el-table-column label="就医类型" align="center" width="150" prop="type">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="doctor_type" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="就诊大夫" align="center" width="150" prop="doctor" />
|
||||
<el-table-column label="就诊时间" align="center" width="160" prop="visitingTime" />
|
||||
<el-table-column label="诊断结果" align="center" prop="diagnosis" />
|
||||
<el-table-column label="就诊费用(元)" align="center" width="150" prop="totalCost" />
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -212,14 +249,20 @@ import dayjs from 'dayjs'
|
||||
import * as echarts from 'echarts'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import yearPicker from '@/components/YearPicker/index.vue'
|
||||
import { getMarAnalysis } from '@/api/health/statisticAnalysis'
|
||||
import { getDoctorAnalysis } from '@/api/health/statisticAnalysis'
|
||||
import { listPerson, getPerson } from '@/api/health/person'
|
||||
import { listHealthRecord } from '@/api/health/healthRecord'
|
||||
const { proxy } = getCurrentInstance()
|
||||
const { deal_type, account_type, deal_category } = proxy.useDict('deal_type', 'account_type', 'deal_category')
|
||||
const personList = ref([])
|
||||
const healthRecordList = ref([])
|
||||
|
||||
const { doctor_type, cost_type, check_type, package_unit, nursing_type, mar_type } = proxy.useDict(
|
||||
'doctor_type',
|
||||
'cost_type',
|
||||
'check_type',
|
||||
'package_unit',
|
||||
'nursing_type',
|
||||
'mar_type'
|
||||
)
|
||||
const dateValue = ref({ startYear: 2000, endYear: new Date().getFullYear() })
|
||||
const showYearValue = ref({ startShowYear: '', endShowYear: '' })
|
||||
const updateStatisticYear = (startYear, endYear) => {
|
||||
@@ -234,7 +277,7 @@ const dates = [{ value: 1, label: '日' }]
|
||||
const accountsList = ref([])
|
||||
const loading = ref(true)
|
||||
const total = ref(0)
|
||||
const radioVal = ref('用药次数柱状图')
|
||||
const radioVal = ref('就医明细统计')
|
||||
const dateValidate = (rules, value, callback) => {
|
||||
const dateType = rules.dateType || 'days'
|
||||
const num = rules.num || 31
|
||||
@@ -312,9 +355,9 @@ function getPersonList() {
|
||||
}
|
||||
|
||||
const today = new Date()
|
||||
const end = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2)
|
||||
const start = dayjs(end).add(-60, 'day')
|
||||
queryParams.value.time = [start, end]
|
||||
// const end = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2)
|
||||
// const start = dayjs(end).add(-60, 'day')
|
||||
// queryParams.value.time = [start, end]
|
||||
const handleTimeChange = (type) => {
|
||||
queryParams.value.time = null
|
||||
if (type === 1) {
|
||||
@@ -362,7 +405,7 @@ const calendarChange = (val) => {
|
||||
if (val[1]) firstChooseDate.value = ''
|
||||
}
|
||||
|
||||
const mar = ref({})
|
||||
const doctor = ref({})
|
||||
const chartData = ref({
|
||||
name: [],
|
||||
value1: []
|
||||
@@ -387,16 +430,16 @@ function getList() {
|
||||
id,
|
||||
recordId
|
||||
}
|
||||
getMarAnalysis(params).then((response) => {
|
||||
getDoctorAnalysis(params).then((response) => {
|
||||
loading.value = false
|
||||
mar.value = { ...response.data }
|
||||
mar.value.marList.map((item) => {
|
||||
doctor.value = { ...response.data }
|
||||
doctor.value.doctorCostList.map((item) => {
|
||||
return {
|
||||
name: item.time,
|
||||
value: item.value
|
||||
}
|
||||
})
|
||||
response.data.marList.map((item) => {
|
||||
response.data.doctorCostList.map((item) => {
|
||||
chartData.value.name.push(item.time)
|
||||
chartData.value.value1.push(item.value)
|
||||
})
|
||||
@@ -411,10 +454,10 @@ function handleQuery() {
|
||||
function resetQuery() {
|
||||
proxy.resetForm('queryRef')
|
||||
queryParams.value.id = null
|
||||
const today = new Date()
|
||||
const end = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2)
|
||||
const start = dayjs(end).add(-60, 'day')
|
||||
queryParams.value.time = [start, end]
|
||||
// const today = new Date()
|
||||
// const end = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2)
|
||||
// const start = dayjs(end).add(-60, 'day')
|
||||
// queryParams.value.time = [start, end]
|
||||
total.value = 0
|
||||
getPersonList()
|
||||
}
|
||||
@@ -440,7 +483,7 @@ const drawBar = (data) => {
|
||||
type: 'shadow'
|
||||
},
|
||||
formatter: function (params) {
|
||||
return params[0].name + '<br>' + '用药:' + params[0].value + '次'
|
||||
return params[0].name + '<br>' + '费用:' + params[0].value + '元'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
@@ -470,7 +513,7 @@ const drawBar = (data) => {
|
||||
type: 'value',
|
||||
// min: 1, // 设置 y 轴的最小值为 0
|
||||
// max: 16, // 设置 y 轴的最大值为 100
|
||||
interval: 1, //设置y轴刻度间隔
|
||||
// interval: 1, //设置y轴刻度间隔
|
||||
axisTick: {
|
||||
show: true // 默认为true,如果要隐藏,则改为 false
|
||||
},
|
||||
@@ -491,18 +534,7 @@ const drawBar = (data) => {
|
||||
itemStyle: {
|
||||
// 此处可以是一个固定颜色值,也可以是一个回调函数根据数据动态计算颜色
|
||||
color: function (params) {
|
||||
// 这里可以根据需要设置不同的颜色,比如根据数据值
|
||||
if (params.data < 4) {
|
||||
return '#37b328'
|
||||
} else if (params.data >= 4 && params.data < 8) {
|
||||
return '#ff00ff'
|
||||
} else if (params.data >= 8 && params.data < 12) {
|
||||
return '#ff0066'
|
||||
} else if (params.data >= 12 && params.data < 15) {
|
||||
return '#ff0000'
|
||||
} else if (params.data >= 15) {
|
||||
return '#990000' // 数据在50到99之间为蓝色
|
||||
}
|
||||
return '#2283cf' // 数据在50到99之间为蓝色
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -540,7 +572,7 @@ const drawLine = (data) => {
|
||||
type: 'shadow'
|
||||
},
|
||||
formatter: function (params) {
|
||||
return params[0].name + '<br>' + '用药:' + params[0].value + '次'
|
||||
return params[0].name + '<br>' + '费用:' + params[0].value + '元'
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
@@ -559,8 +591,8 @@ const drawLine = (data) => {
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
// min: 1, // 设置 y 轴的最小值为 0
|
||||
// max: 16, // 设置 y 轴的最大值为 100
|
||||
interval: 1, //设置y轴刻度间隔
|
||||
// // max: 16, // 设置 y 轴的最大值为 100
|
||||
// interval: 1, //设置y轴刻度间隔
|
||||
axisTick: {
|
||||
show: true
|
||||
},
|
||||
@@ -582,18 +614,7 @@ const drawLine = (data) => {
|
||||
itemStyle: {
|
||||
// 此处可以是一个固定颜色值,也可以是一个回调函数根据数据动态计算颜色
|
||||
color: function (params) {
|
||||
// 这里可以根据需要设置不同的颜色,比如根据数据值
|
||||
if (params.data < 4) {
|
||||
return '#37b328'
|
||||
} else if (params.data >= 4 && params.data < 8) {
|
||||
return '#ff00ff'
|
||||
} else if (params.data >= 8 && params.data < 12) {
|
||||
return '#ff0066'
|
||||
} else if (params.data >= 12 && params.data < 15) {
|
||||
return '#ff0000'
|
||||
} else if (params.data >= 15) {
|
||||
return '#990000' // 数据在50到99之间为蓝色
|
||||
}
|
||||
return '#2283cf' // 数据在50到99之间为蓝色
|
||||
}
|
||||
},
|
||||
smooth: true,
|
||||
@@ -626,14 +647,14 @@ const drawLine = (data) => {
|
||||
myChart.setOption(option)
|
||||
}
|
||||
|
||||
const currentType = ref('用药次数柱状图')
|
||||
const currentType = ref('就医费用柱状图')
|
||||
const handleRadioChange = (type) => {
|
||||
currentType.value = type
|
||||
switch (type) {
|
||||
case '用药次数柱状图':
|
||||
case '就医费用柱状图':
|
||||
drawBar(chartData.value)
|
||||
break
|
||||
case '用药次数折线图':
|
||||
case '就医费用折线图':
|
||||
drawLine(chartData.value)
|
||||
break
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user