9 changed files with 1550 additions and 1463 deletions
@ -1,224 +1,261 @@ |
|||
<template> |
|||
<div> |
|||
<div class="app-container"> |
|||
<div class="dis" style="width: 100%"> |
|||
<div style="flex: 1;margin-right: 20px;"> |
|||
<el-card shadow="always"> |
|||
<div class="dis title-box"> |
|||
<span class="header-title">随访队列分布</span> |
|||
<div class="dis"></div> |
|||
</div> |
|||
<!-- 患者总数统计图 --> |
|||
<div style="height: 300px" v-loading="loading"> |
|||
<div id="follow" style="width: 100%"></div> |
|||
</div> |
|||
</el-card> |
|||
</div> |
|||
<div style="flex: 1;"> |
|||
<el-card shadow="always"> |
|||
<div class="dis title-box"> |
|||
<span class="header-title">失访原因分布</span> |
|||
<div class="dis"></div> |
|||
</div> |
|||
<!-- 患者总数统计图 --> |
|||
<div style="height: 300px" v-loading="loading"> |
|||
<div id="lossFollow" style="width: 100%"></div> |
|||
</div> |
|||
</el-card> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<div class="app-container"> |
|||
<div class="dis" style="width: 100%"> |
|||
<div style="flex: 1; margin-right: 20px"> |
|||
<el-card shadow="always"> |
|||
<div class="dis title-box"> |
|||
<span class="header-title">随访队列分布</span> |
|||
<div class="dis"></div> |
|||
</div> |
|||
<!-- 患者总数统计图 --> |
|||
<div style="height: 300px" v-loading="loading"> |
|||
<div id="follow" style="width: 100%"></div> |
|||
</div> |
|||
</el-card> |
|||
</div> |
|||
<div style="flex: 1"> |
|||
<el-card shadow="always"> |
|||
<div class="dis title-box"> |
|||
<span class="header-title">失访原因分布</span> |
|||
<div class="dis"></div> |
|||
</div> |
|||
<!-- 患者总数统计图 --> |
|||
<div style="height: 300px" v-loading="loading"> |
|||
<div id="lossFollow" style="width: 100%"></div> |
|||
</div> |
|||
</el-card> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import * as echarts from "echarts"; |
|||
require("echarts/theme/macarons"); // echarts theme |
|||
import resize from "@/views/dashboard/mixins/resize"; |
|||
import { |
|||
sffb, |
|||
sftj |
|||
} from "@/api/indexCom.js"; |
|||
import { |
|||
followEcharts, |
|||
lossFollowEcharts |
|||
} from "./index"; |
|||
export default { |
|||
name: "Post", |
|||
props: ["title"], |
|||
mixins: [resize], |
|||
data() { |
|||
return { |
|||
loading: false, |
|||
followValue: [], // |
|||
lossFollowValue: [], // |
|||
queryParams: { |
|||
param: { |
|||
startTime: "", |
|||
endTime: "", |
|||
}, |
|||
}, |
|||
}; |
|||
}, |
|||
created() { |
|||
// this.Linepatient() |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
statistics(_data, _type) { |
|||
this.initial(_data, _type); // 处理数据 |
|||
this.loading = true; |
|||
this.getData(); // 获取数据 |
|||
}, |
|||
//患者信息 |
|||
async getData() { |
|||
try { |
|||
this.followValue = {} |
|||
await sffb(this.queryParams).then((res) => { |
|||
res.data.forEach(i => { |
|||
let data = [i.dsf, i.ljsf, i.cqsf, i.zc] |
|||
this.followValue[i.queueName] = data |
|||
}) |
|||
this.handleFollow() |
|||
}); |
|||
await sftj(this.queryParams).then((res) => { |
|||
this.lossFollowValue = res.data |
|||
this.handleLossFollow() |
|||
}); |
|||
this.loading = false; |
|||
} catch (e) { |
|||
console.log('随访', e) |
|||
} |
|||
}, |
|||
import * as echarts from "echarts"; |
|||
require("echarts/theme/macarons"); // echarts theme |
|||
import resize from "@/views/dashboard/mixins/resize"; |
|||
import { sffb, sftj } from "@/api/indexCom.js"; |
|||
import { followEcharts, lossFollowEcharts } from "./index"; |
|||
export default { |
|||
name: "Post", |
|||
props: ["title"], |
|||
mixins: [resize], |
|||
data() { |
|||
return { |
|||
loading: false, |
|||
followValue: [], // |
|||
lossFollowValue: [], // |
|||
queryParams: { |
|||
param: { |
|||
startTime: "", |
|||
endTime: "", |
|||
}, |
|||
}, |
|||
}; |
|||
}, |
|||
created() { |
|||
// this.Linepatient() |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
statistics(_data, _type) { |
|||
this.initial(_data, _type); // 处理数据 |
|||
this.loading = true; |
|||
this.getData(); // 获取数据 |
|||
}, |
|||
//患者信息 |
|||
async getData() { |
|||
try { |
|||
this.followValue = {}; |
|||
await sffb(this.queryParams).then((res) => { |
|||
res.data.forEach((i) => { |
|||
let data = [i.dsf, i.ljsf, i.cqsf, i.zc]; |
|||
this.followValue[i.queueName] = data; |
|||
}); |
|||
this.handleFollow(); |
|||
}); |
|||
await sftj(this.queryParams).then((res) => { |
|||
this.lossFollowValue = res.data; |
|||
this.handleLossFollow(); |
|||
}); |
|||
this.loading = false; |
|||
} catch (e) { |
|||
console.log("随访", e); |
|||
} |
|||
}, |
|||
|
|||
// 队列 |
|||
handleFollow() { |
|||
followEcharts.series = [] |
|||
for (let key in this.followValue) { |
|||
let series = { |
|||
name: key, |
|||
data: this.followValue[key], |
|||
type: "bar", |
|||
barMaxWidth: 24, //柱图宽度 |
|||
itemStyle: { |
|||
normal: { |
|||
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角] |
|||
barBorderRadius: [50, 50, 0, 0], |
|||
}, |
|||
}, |
|||
} |
|||
followEcharts.series.push(series) |
|||
} |
|||
this.$nextTick(() => { |
|||
var myChart = echarts.init(document.getElementById("follow"), null, { |
|||
height: 300, |
|||
}); |
|||
myChart.setOption(followEcharts, true); |
|||
myChart.resize(); |
|||
window.onresize = myChart.resize; |
|||
}); |
|||
}, |
|||
// 失访 |
|||
handleLossFollow() { |
|||
lossFollowEcharts.series[0].data = this.lossFollowValue?.map((item) => { |
|||
return item.num; |
|||
}); |
|||
lossFollowEcharts.xAxis.data = this.lossFollowValue?.map((item) => { |
|||
return item.reason; |
|||
}); |
|||
this.$nextTick(() => { |
|||
var myChart = echarts.init(document.getElementById("lossFollow"), null, { |
|||
height: 300, |
|||
}); |
|||
myChart.setOption(lossFollowEcharts, true); |
|||
myChart.resize(); |
|||
window.onresize = myChart.resize; |
|||
}); |
|||
}, |
|||
// 数据处理 查询类型判断参数 |
|||
initial(_data, _type) { |
|||
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD"); |
|||
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD"); |
|||
this.queryParams.param = { |
|||
startTime: _data[0] + " " + "00:00:00", |
|||
endTime: _data[1] + " " + "23:59:59", |
|||
}; |
|||
}, |
|||
// 重新渲染图标 |
|||
getRenew() { |
|||
this.handleFollow(); |
|||
this.handleLossFollow() |
|||
}, |
|||
}, |
|||
}; |
|||
// 队列 |
|||
handleFollow() { |
|||
followEcharts.series = []; |
|||
let colorArr = [ |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
"#C7BDB1", |
|||
"#C6A268", |
|||
"#906C4A", |
|||
"#70483E", |
|||
"#582518", |
|||
]; |
|||
let index = 0; |
|||
for (let key in this.followValue) { |
|||
let series = { |
|||
name: key, |
|||
data: this.followValue[key], |
|||
type: "bar", |
|||
barMaxWidth: 24, //柱图宽度 |
|||
color: colorArr[index], |
|||
}; |
|||
followEcharts.series.push(series); |
|||
index++; |
|||
} |
|||
this.$nextTick(() => { |
|||
var myChart = echarts.init(document.getElementById("follow"), null, { |
|||
height: 300, |
|||
}); |
|||
myChart.setOption(followEcharts, true); |
|||
myChart.resize(); |
|||
window.onresize = myChart.resize; |
|||
}); |
|||
}, |
|||
// 失访 |
|||
handleLossFollow() { |
|||
lossFollowEcharts.series[0].data = this.lossFollowValue?.map((item) => { |
|||
return item.num; |
|||
}); |
|||
lossFollowEcharts.xAxis.data = this.lossFollowValue?.map((item) => { |
|||
return item.reason; |
|||
}); |
|||
this.$nextTick(() => { |
|||
var myChart = echarts.init( |
|||
document.getElementById("lossFollow"), |
|||
null, |
|||
{ |
|||
height: 300, |
|||
} |
|||
); |
|||
myChart.setOption(lossFollowEcharts, true); |
|||
myChart.resize(); |
|||
window.onresize = myChart.resize; |
|||
}); |
|||
}, |
|||
// 数据处理 查询类型判断参数 |
|||
initial(_data, _type) { |
|||
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD"); |
|||
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD"); |
|||
this.queryParams.param = { |
|||
startTime: _data[0] + " " + "00:00:00", |
|||
endTime: _data[1] + " " + "23:59:59", |
|||
}; |
|||
}, |
|||
// 重新渲染图标 |
|||
getRenew() { |
|||
this.handleFollow(); |
|||
this.handleLossFollow(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped src="@/assets/styles/common.css"></style> |
|||
<style scoped> |
|||
>>>.el-card__body { |
|||
padding: 10px 0 !important; |
|||
} |
|||
>>> .el-card__body { |
|||
padding: 10px 0 !important; |
|||
} |
|||
|
|||
.dis { |
|||
display: flex; |
|||
} |
|||
.dis { |
|||
display: flex; |
|||
} |
|||
|
|||
.header-title { |
|||
font-size: 18px; |
|||
} |
|||
.header-title { |
|||
font-size: 18px; |
|||
} |
|||
|
|||
.title-box { |
|||
padding: 10px 20px; |
|||
border-bottom: 1px solid #dfe6ec; |
|||
} |
|||
.title-box { |
|||
padding: 10px 20px; |
|||
border-bottom: 1px solid #dfe6ec; |
|||
} |
|||
|
|||
.dian-box { |
|||
align-items: center; |
|||
} |
|||
.dian-box { |
|||
align-items: center; |
|||
} |
|||
|
|||
.dian { |
|||
display: inline-block; |
|||
width: 16px; |
|||
height: 16px; |
|||
border-radius: 50%; |
|||
margin: 0 10px; |
|||
} |
|||
.dian { |
|||
display: inline-block; |
|||
width: 16px; |
|||
height: 16px; |
|||
border-radius: 50%; |
|||
margin: 0 10px; |
|||
} |
|||
|
|||
.title-box { |
|||
justify-content: space-between; |
|||
} |
|||
.title-box { |
|||
justify-content: space-between; |
|||
} |
|||
|
|||
.>>>.el-radio--small.is-bordered { |
|||
margin-right: 20px !important; |
|||
margin-left: 0 !important; |
|||
} |
|||
. >>> .el-radio--small.is-bordered { |
|||
margin-right: 20px !important; |
|||
margin-left: 0 !important; |
|||
} |
|||
|
|||
>>>.el-radio__input { |
|||
display: none; |
|||
} |
|||
>>> .el-radio__input { |
|||
display: none; |
|||
} |
|||
|
|||
>>>.el-radio__label { |
|||
padding-left: 5px; |
|||
} |
|||
>>> .el-radio__label { |
|||
padding-left: 5px; |
|||
} |
|||
|
|||
.app-container { |
|||
padding: 0; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
} |
|||
.app-container { |
|||
padding: 0; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
} |
|||
|
|||
.title { |
|||
display: flex; |
|||
align-items: center; |
|||
font-size: 20px; |
|||
font-weight: 600; |
|||
} |
|||
.title { |
|||
display: flex; |
|||
align-items: center; |
|||
font-size: 20px; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.title-bor { |
|||
display: inline-block; |
|||
height: 20px; |
|||
width: 6px; |
|||
background: #4f8bff; |
|||
margin-right: 10px; |
|||
border-radius: 8px; |
|||
} |
|||
</style> |
|||
.title-bor { |
|||
display: inline-block; |
|||
height: 20px; |
|||
width: 6px; |
|||
background: #4f8bff; |
|||
margin-right: 10px; |
|||
border-radius: 8px; |
|||
} |
|||
</style> |
|||
|
After Width: | Height: | Size: 2.5 KiB |
Loading…
Reference in new issue