7 changed files with 200 additions and 7 deletions
@ -0,0 +1,159 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<div ref="UpLow" style="width: 100%; height: 500px" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { ref, defineProps, toRef, watch } from 'vue' |
||||
|
// 按需引入 echarts |
||||
|
import * as echarts from 'echarts' |
||||
|
|
||||
|
const props = defineProps({ |
||||
|
chgContent: { |
||||
|
type: Array, |
||||
|
default () { |
||||
|
return [] |
||||
|
} |
||||
|
}, |
||||
|
chartType: { |
||||
|
type: String, |
||||
|
default: 'uplow' |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
const chgFlag = props.chartType === 'uplow' |
||||
|
|
||||
|
const chgContent = toRef(props, 'chgContent') |
||||
|
|
||||
|
const UpLow = ref() // 使用ref创建虚拟DOM引用,使用时用main.value |
||||
|
|
||||
|
watch(chgContent, (newValue) => { |
||||
|
console.log('watch 已触发', newValue) |
||||
|
init(chgContent.value) |
||||
|
}) |
||||
|
|
||||
|
const init = (chgContent) => { |
||||
|
const dateStr = chgContent.map(x => x.dateStr) |
||||
|
const upCount = chgFlag ? chgContent.map(x => x.upCount) : chgContent.map(x => x.limitUpCount) |
||||
|
const lowCount = chgFlag ? chgContent.map(x => x.lowCount) : chgContent.map(x => x.limitLowCount) |
||||
|
const myChart = echarts.init(UpLow.value) |
||||
|
// 指定图表的配置项和数据 |
||||
|
const option = { |
||||
|
title: { |
||||
|
text: chgFlag ? '涨跌家数对比' : '涨跌停家数对比', |
||||
|
left: 'center' |
||||
|
}, |
||||
|
grid: { |
||||
|
bottom: 80 |
||||
|
}, |
||||
|
toolbox: { |
||||
|
feature: { |
||||
|
dataZoom: { |
||||
|
yAxisIndex: 'none' |
||||
|
}, |
||||
|
restore: {}, |
||||
|
saveAsImage: {} |
||||
|
} |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
axisPointer: { |
||||
|
type: 'cross', |
||||
|
animation: false, |
||||
|
label: { |
||||
|
backgroundColor: '#505765' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['上涨家数', '下跌家数'], |
||||
|
left: 10 |
||||
|
}, |
||||
|
dataZoom: [ |
||||
|
{ |
||||
|
show: true, |
||||
|
realtime: true, |
||||
|
start: 0, |
||||
|
end: 100 |
||||
|
}, |
||||
|
{ |
||||
|
type: 'inside', |
||||
|
realtime: true, |
||||
|
start: 0, |
||||
|
end: 100 |
||||
|
} |
||||
|
], |
||||
|
xAxis: [ |
||||
|
{ |
||||
|
type: 'category', |
||||
|
boundaryGap: false, |
||||
|
axisLine: { onZero: false }, |
||||
|
data: dateStr |
||||
|
} |
||||
|
], |
||||
|
yAxis: [ |
||||
|
{ |
||||
|
type: 'value', |
||||
|
min: 0, |
||||
|
max: chgFlag |
||||
|
? 5200 |
||||
|
: (value) => { |
||||
|
return parseInt(value.max + 20) |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
nameLocation: 'start', |
||||
|
alignTicks: true, |
||||
|
type: 'value', |
||||
|
inverse: true |
||||
|
} |
||||
|
], |
||||
|
series: [ |
||||
|
{ |
||||
|
name: chgFlag ? '涨停家数' : '跌停家数', |
||||
|
type: 'line', |
||||
|
smooth: true, |
||||
|
areaStyle: { |
||||
|
color: '#ff0015', |
||||
|
opacity: 0.9 |
||||
|
}, |
||||
|
lineStyle: { |
||||
|
width: 1 |
||||
|
}, |
||||
|
emphasis: { |
||||
|
focus: 'series' |
||||
|
}, |
||||
|
// prettier-ignore |
||||
|
data: upCount |
||||
|
}, |
||||
|
{ |
||||
|
name: chgFlag ? '跌停家数' : '下跌家数', |
||||
|
type: 'line', |
||||
|
smooth: true, |
||||
|
yAxisIndex: 1, |
||||
|
areaStyle: { |
||||
|
color: '#13fd02', |
||||
|
opacity: 0.9 |
||||
|
}, |
||||
|
lineStyle: { |
||||
|
width: 1 |
||||
|
}, |
||||
|
emphasis: { |
||||
|
focus: 'series' |
||||
|
}, |
||||
|
// prettier-ignore |
||||
|
data: lowCount |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
|
||||
|
// 使用刚指定的配置项和数据显示图表。 |
||||
|
myChart.setOption(option) |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<style scoped lang="scss"> |
||||
|
|
||||
|
</style> |
Loading…
Reference in new issue