|
@@ -1,33 +1,63 @@
|
|
|
<template>
|
|
|
<div class="top-right-cmp">
|
|
|
<div class="chart-name">
|
|
|
- 设备故障月趋势
|
|
|
- <dv-decoration-3 style="width:200px;height:20px;" />
|
|
|
+ 医疗分类收入(单位:{{ props.topRightData[0]?.unit }})
|
|
|
+ <dv-decoration-3 style="width:240px;height:20px;" />
|
|
|
</div>
|
|
|
- <dv-charts :option="option" />
|
|
|
+ <dv-charts :option="dsfg" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup name='TopRightCmp' lang="ts">
|
|
|
-import { reactive } from 'vue'
|
|
|
+import { reactive, ref, onUpdated, Ref, nextTick } from 'vue'
|
|
|
+import { getDayAgo } from '../../../utils/date.js'
|
|
|
|
|
|
-const option = reactive({
|
|
|
+const props = defineProps({
|
|
|
+ topRightData: {
|
|
|
+ type: Object,
|
|
|
+ default: {}
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const day7Ago = reactive([
|
|
|
+ getDayAgo(-6, '/', 0),
|
|
|
+ getDayAgo(-5, '/', 0),
|
|
|
+ getDayAgo(-4, '/', 0),
|
|
|
+ getDayAgo(-3, '/', 0),
|
|
|
+ getDayAgo(-2, '/', 0),
|
|
|
+ getDayAgo(-1, '/', 0),
|
|
|
+ getDayAgo(0, '/', 0),
|
|
|
+])
|
|
|
+
|
|
|
+interface dataType {
|
|
|
+ x: string,
|
|
|
+ y: string,
|
|
|
+}
|
|
|
+
|
|
|
+const dataArrA: Ref<Array<any>> = ref([])
|
|
|
+const dataArrB: Ref<Array<any>> = ref([])
|
|
|
+const dataArrC: Ref<Array<any>> = ref([])
|
|
|
+const dataArrD: Ref<Array<any>> = ref([])
|
|
|
+const dataArrE: Ref<Array<any>> = ref([])
|
|
|
+const dataArrX: Ref<Array<any>> = ref([])
|
|
|
+
|
|
|
+let dsfg = ref({
|
|
|
legend: {
|
|
|
data: [
|
|
|
{
|
|
|
- name: '收费系统',
|
|
|
+ name: '医疗服务收入',
|
|
|
color: '#00baff'
|
|
|
},
|
|
|
{
|
|
|
- name: '监控系统',
|
|
|
+ name: '药品收入',
|
|
|
color: '#ff5ca9'
|
|
|
},
|
|
|
{
|
|
|
- name: '通信系统',
|
|
|
+ name: '耗材收入',
|
|
|
color: '#3de7c9'
|
|
|
},
|
|
|
{
|
|
|
- name: '供配电系统',
|
|
|
+ name: '检验检查收入',
|
|
|
color: '#f5d94e'
|
|
|
}
|
|
|
],
|
|
@@ -36,13 +66,12 @@ const option = reactive({
|
|
|
}
|
|
|
},
|
|
|
xAxis: {
|
|
|
- data: [
|
|
|
- '10/01', '10/02', '10/03', '10/04', '10/05', '10/06', '10/07'
|
|
|
- ],
|
|
|
+ name: '日期',
|
|
|
+ data: day7Ago,
|
|
|
axisLine: {
|
|
|
style: {
|
|
|
stroke: '#999'
|
|
|
- }
|
|
|
+ },
|
|
|
},
|
|
|
axisLabel: {
|
|
|
style: {
|
|
@@ -53,67 +82,130 @@ const option = reactive({
|
|
|
show: false
|
|
|
}
|
|
|
},
|
|
|
- yAxis: {
|
|
|
- data: 'value',
|
|
|
- splitLine: {
|
|
|
- show: false
|
|
|
- },
|
|
|
- axisLine: {
|
|
|
- style: {
|
|
|
- stroke: '#999'
|
|
|
- }
|
|
|
- },
|
|
|
- axisLabel: {
|
|
|
- style: {
|
|
|
- fill: '#999'
|
|
|
- }
|
|
|
- },
|
|
|
- axisTick: {
|
|
|
- show: false
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ data: 'value',
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ style: {
|
|
|
+ stroke: '#999'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ style: {
|
|
|
+ fill: '#999'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ min: 0,
|
|
|
},
|
|
|
- min: 0,
|
|
|
- max: 9
|
|
|
- },
|
|
|
+ {
|
|
|
+ data: 'value',
|
|
|
+ position: 'right',
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ style: {
|
|
|
+ stroke: '#999'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ style: {
|
|
|
+ fill: '#999'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ min: 0,
|
|
|
+ max: 120,
|
|
|
+ interval: 20,
|
|
|
+ }
|
|
|
+ ],
|
|
|
series: [
|
|
|
{
|
|
|
- name: '收费系统',
|
|
|
- data: [
|
|
|
- 3.5, 4.5, 7.5, 8.5, 8.5, 7.5, 3.5
|
|
|
- ],
|
|
|
+ name: '医疗服务收入',
|
|
|
+ data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
type: 'bar',
|
|
|
label: {
|
|
|
- show: true
|
|
|
+ show: true,
|
|
|
+ position: 'top',
|
|
|
+ style: {
|
|
|
+ fill: '#00baff'
|
|
|
+ }
|
|
|
},
|
|
|
barStyle: {
|
|
|
- fill: 'rgba(0, 186, 255, 0.4)'
|
|
|
+ fill: '#00baff'
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
- name: '监控系统',
|
|
|
- data: [
|
|
|
- 2.5, 3.5, 6.5, 6.5, 7.5, 6.5, 2.5
|
|
|
- ],
|
|
|
- type: 'line',
|
|
|
+ name: '药品收入',
|
|
|
+ data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
+ type: 'bar',
|
|
|
label: {
|
|
|
- show: true
|
|
|
- },
|
|
|
- lineStyle: {
|
|
|
- stroke: '#ff5ca9'
|
|
|
- },
|
|
|
- linePoint: {
|
|
|
- radius: 4,
|
|
|
+ show: true,
|
|
|
+ position: 'top',
|
|
|
style: {
|
|
|
- fill: '#ff5ca9',
|
|
|
- stroke: 'transparent'
|
|
|
+ fill: '#ff5ca9'
|
|
|
}
|
|
|
+ },
|
|
|
+ barStyle: {
|
|
|
+ fill: '#ff5ca9'
|
|
|
}
|
|
|
},
|
|
|
+ // {
|
|
|
+ // name: '耗材收入',
|
|
|
+ // data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
+ // type: 'bar',
|
|
|
+ // label: {
|
|
|
+ // show: true
|
|
|
+ // },
|
|
|
+ // // yAxisIndex: 1,
|
|
|
+ // barStyle: {
|
|
|
+ // fill: '#00db95'
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // name: '检验检查收入',
|
|
|
+ // data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
+ // type: 'bar',
|
|
|
+ // label: {
|
|
|
+ // show: true
|
|
|
+ // },
|
|
|
+ // yAxisIndex: 1,
|
|
|
+ // barStyle: {
|
|
|
+ // fill: '#f5d94e'
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // name: '药品收入',
|
|
|
+ // data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
+ // type: 'line',
|
|
|
+ // stack: 'a',
|
|
|
+ // label: {
|
|
|
+ // show: true
|
|
|
+ // },
|
|
|
+ // lineStyle: {
|
|
|
+ // stroke: '#ff5ca9'
|
|
|
+ // },
|
|
|
+ // linePoint: {
|
|
|
+ // radius: 4,
|
|
|
+ // style: {
|
|
|
+ // fill: '#ff5ca9',
|
|
|
+ // stroke: 'transparent'
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // },
|
|
|
{
|
|
|
- name: '通信系统',
|
|
|
- data: [
|
|
|
- 1.3, 2.3, 5.3, 5.3, 6.3, 5.3, 1.3
|
|
|
- ],
|
|
|
+ name: '耗材收入',
|
|
|
+ data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
type: 'line',
|
|
|
+ yAxisIndex: 1,
|
|
|
smooth: true,
|
|
|
label: {
|
|
|
show: true
|
|
@@ -133,14 +225,14 @@ const option = reactive({
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
- data: [
|
|
|
- 0.2, 1.2, 4.2, 4.2, 5.2, 4.2, 0.2
|
|
|
- ],
|
|
|
+ name: '检验检查收入',
|
|
|
+ data: [0, 0, 0, 0, 0, 0, 0] as Array<any>,
|
|
|
type: 'line',
|
|
|
+ yAxisIndex: 1,
|
|
|
label: {
|
|
|
- show: true
|
|
|
+ show: true,
|
|
|
+ offset: [0, -16],
|
|
|
},
|
|
|
- name: '供配电系统',
|
|
|
lineArea: {
|
|
|
show: true,
|
|
|
gradient: ['rgba(245, 217, 79, 0.8)', 'rgba(245, 217, 79, 0.2)']
|
|
@@ -158,6 +250,55 @@ const option = reactive({
|
|
|
}
|
|
|
]
|
|
|
})
|
|
|
+
|
|
|
+
|
|
|
+onUpdated(async () => {
|
|
|
+ dataArrA.value = []
|
|
|
+ dataArrB.value = []
|
|
|
+ dataArrC.value = []
|
|
|
+ dataArrD.value = []
|
|
|
+ dataArrE.value = []
|
|
|
+ dataArrX.value = []
|
|
|
+
|
|
|
+ await nextTick(() => {
|
|
|
+ if (props.topRightData) {
|
|
|
+ props.topRightData[0].dataList.forEach((e: dataType) => {
|
|
|
+ dataArrX.value.push(e.x)
|
|
|
+ dataArrA.value.push(e.y)
|
|
|
+ })
|
|
|
+
|
|
|
+ props.topRightData[1].dataList.forEach((e: dataType) => {
|
|
|
+ dataArrB.value.push(e.y)
|
|
|
+ })
|
|
|
+
|
|
|
+ props.topRightData[2].dataList.forEach((e: dataType) => {
|
|
|
+ dataArrC.value.push(e.y)
|
|
|
+ })
|
|
|
+
|
|
|
+ props.topRightData[3].dataList.forEach((e: dataType) => {
|
|
|
+ dataArrD.value.push(e.y)
|
|
|
+ })
|
|
|
+
|
|
|
+ for (let i in day7Ago) {
|
|
|
+ dataArrE.value[i] = Number((dataArrA.value[i] - dataArrB.value[i] - dataArrC.value[i] - dataArrD.value[i]).toFixed(2))
|
|
|
+ }
|
|
|
+
|
|
|
+ dsfg.value.legend.data[1].name = props.topRightData[1].reportName
|
|
|
+ dsfg.value.legend.data[2].name = props.topRightData[2].reportName
|
|
|
+ dsfg.value.legend.data[3].name = props.topRightData[3].reportName
|
|
|
+ dsfg.value.xAxis.data = dataArrX.value
|
|
|
+ dsfg.value.series[0].data = dataArrE.value
|
|
|
+ dsfg.value.series[1].data = dataArrB.value
|
|
|
+ dsfg.value.series[1].name = props.topRightData[1].reportName
|
|
|
+ dsfg.value.series[2].data = dataArrC.value
|
|
|
+ dsfg.value.series[2].name = props.topRightData[2].reportName
|
|
|
+ dsfg.value.series[3].data = dataArrD.value
|
|
|
+ dsfg.value.series[3].name = props.topRightData[3].reportName
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+})
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|