10 changed files with 258 additions and 56 deletions
@ -0,0 +1,212 @@ |
|||||
|
<template> |
||||
|
<div v-loading="loading"> |
||||
|
<div :id="idName" ref="yanyaRef" :style="{ height: height, width: width }" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import moment from 'moment/moment' |
||||
|
|
||||
|
export default { |
||||
|
name: 'EyeAxis', |
||||
|
props: { |
||||
|
idName: { type: String, default: 'chart' }, |
||||
|
width: { type: String, default: '100%' }, |
||||
|
height: { type: String, default: '200px' }, |
||||
|
desc: { type: String, default: '' }, |
||||
|
patientId: { |
||||
|
type: String |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
loading: false, |
||||
|
date: [], |
||||
|
typeList: { |
||||
|
OD: [], |
||||
|
OS: [], |
||||
|
typeNull: [] |
||||
|
}, |
||||
|
chartData: [], |
||||
|
legendData: [], |
||||
|
seriesData: [], |
||||
|
disabled: false |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.queryAxisData() |
||||
|
}, |
||||
|
methods: { |
||||
|
queryAxisData() { |
||||
|
this.loading = true |
||||
|
this.$http.get('hospital/notice/getAllSecDiagInfoByPid', { params: { |
||||
|
patientId: this.patientId |
||||
|
}}).then(res => { |
||||
|
this.loading = false |
||||
|
this.chartData = res.data.data.slAndYzList |
||||
|
this.initFun() |
||||
|
}) |
||||
|
}, |
||||
|
initFun() { |
||||
|
this.date = [] |
||||
|
this.typeList = { |
||||
|
OD: [], |
||||
|
OS: [], |
||||
|
typeNull: [] |
||||
|
} |
||||
|
this.legendData = [] |
||||
|
this.seriesData = [] |
||||
|
if (this.chartData && this.chartData.length > 0) { |
||||
|
this.disabled = false |
||||
|
this.chartData.forEach(item => { |
||||
|
item.osIol = item.osIol.replace('mm', '') |
||||
|
item.odIol = item.odIol.replace('mm', '') |
||||
|
this.date.push(moment(item.examTime).format('l')) |
||||
|
this.typeList.OD.push([item.examTime, item.odIol]) |
||||
|
this.legendData[0] = 'OD' |
||||
|
this.typeList.OS.push([item.examTime, item.osIol]) |
||||
|
this.legendData[1] = 'OS' |
||||
|
}) |
||||
|
} else { |
||||
|
this.disabled = true |
||||
|
} |
||||
|
this.$nextTick(() => { |
||||
|
this.visionFun() |
||||
|
}) |
||||
|
}, |
||||
|
visionFun() { |
||||
|
// 基于准备好的dom,初始化echarts实例 |
||||
|
const yanya = this.$echarts.init(document.getElementById(this.idName)) |
||||
|
var colors = ['#4462FF', '#0DB760', '#000000'] |
||||
|
Object.keys(this.typeList).forEach((item, index) => { |
||||
|
if (this.typeList[item].length > 0) { |
||||
|
this.seriesData.push({ |
||||
|
name: item, |
||||
|
type: 'line', |
||||
|
// stack: index, |
||||
|
data: this.typeList[item], |
||||
|
label: { |
||||
|
show: true, |
||||
|
position: item === 'OD' ? [-25, -30] : [10, -5], |
||||
|
backgroundColor: item === 'OD' ? '#4a6bff' : '#0db760', |
||||
|
padding: [6, 6], |
||||
|
color: '#ffffff', |
||||
|
// color: 'rgba(24, 24, 24, 0.1)', |
||||
|
borderRadius: 10 |
||||
|
}, |
||||
|
smooth: true, |
||||
|
itemStyle: { |
||||
|
color: colors[index] |
||||
|
}, |
||||
|
symbolSize: 10 |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
// 基于准备好的dom,初始化echarts实例 |
||||
|
yanya.setOption({ |
||||
|
title: { |
||||
|
text: this.desc, |
||||
|
textStyle: { |
||||
|
'color': '#000000' |
||||
|
}, |
||||
|
left: 10 |
||||
|
}, |
||||
|
tooltip: { |
||||
|
// trigger: 'axis' |
||||
|
backgroundColor: '#ece6e6', |
||||
|
textStyle: { |
||||
|
color: '#000000' // 设置文字颜色 |
||||
|
}, |
||||
|
formatter(params) { |
||||
|
return params.seriesName + '<br/>' + params.data[0] + '   ' + params.data[1] |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
legend: { |
||||
|
data: this.legendData, |
||||
|
icon: 'pin', |
||||
|
textStyle: { |
||||
|
color: '#000000' |
||||
|
}, |
||||
|
right: 30 |
||||
|
}, |
||||
|
dataZoom: [ |
||||
|
{ |
||||
|
type: 'inside', |
||||
|
disabled: this.disabled, |
||||
|
start: 0, |
||||
|
end: 100 |
||||
|
} |
||||
|
], |
||||
|
grid: { |
||||
|
top: 55, |
||||
|
left: 50, |
||||
|
right: 50, |
||||
|
bottom: 30, |
||||
|
containLabel: false |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'time', |
||||
|
boundaryGap: false, |
||||
|
axisLabel: { |
||||
|
show: true, |
||||
|
showMaxLabel: true, |
||||
|
textStyle: { |
||||
|
color: '#000000' |
||||
|
}, |
||||
|
formatter: function(value, index) { |
||||
|
const showD = moment(value).format('YYYY/M/D') |
||||
|
return showD |
||||
|
} |
||||
|
}, |
||||
|
axisLine: { |
||||
|
lineStyle: { |
||||
|
color: 'rgba(24, 24, 24, 0.1)' |
||||
|
} |
||||
|
}, |
||||
|
// 显示网格线 |
||||
|
splitLine: { |
||||
|
show: true |
||||
|
} |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
min: function(value) { // 取最小值向下取整为最小刻度 |
||||
|
return Math.floor(value.min) |
||||
|
}, |
||||
|
max: function(value) { // 取最大值向上取整为最大刻度 |
||||
|
return Math.ceil(value.max) |
||||
|
}, |
||||
|
splitNumber: 1, // 分割刻度 |
||||
|
axisLabel: { |
||||
|
show: true, |
||||
|
textStyle: { |
||||
|
color: '#000000' |
||||
|
} |
||||
|
}, |
||||
|
axisLine: { |
||||
|
lineStyle: { |
||||
|
color: 'rgba(24, 24, 24, 0.1)' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
series: [ |
||||
|
...this.seriesData |
||||
|
] |
||||
|
}) |
||||
|
// 随窗口变化 |
||||
|
window.addEventListener('resize', () => { yanya.resize() }) |
||||
|
// 随外层div的大小变化自适应 |
||||
|
this.$erd.listenTo(this.$refs.yanyaRef, () => { |
||||
|
this.$nextTick(() => { |
||||
|
yanya.resize() |
||||
|
}) |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
|
||||
|
</style> |
Loading…
Reference in new issue