vue.3.0Echarts封装
一
components->echarts->2d-chart
<template>
<!-- echart -->
<div class="container">
<div :style="{ width: '100%', height: '100%' }" ref="myChart"></div>
</div>
</template>
<script lang="ts" scoped>
import { defineComponent, ref, PropType, watch } from 'vue'
import * as echarts from 'echarts'
import { EChartsOption } from 'echarts'
export default defineComponent({
props: {
option: {} as PropType<EChartsOption>
},
setup (prop) {
const myOption = ref()
const myChart = ref<HTMLElement>()
function initChart () {
if (prop.option) {
myOption.value = prop.option
echarts
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
.init(myChart.value!)
.setOption(myOption.value)
}
}
watch(prop, () => {
initChart()
})
return {
myChart
}
}
})
</script>
<style lang="less" scoped>
.container{
height: 100%;
width: 100%;
}
</style>
二
(1)
data->vepfeature-echart.data
import { vepFeatureData } from '@/data/modules/home'
import { EChartsOption } from 'echarts'
export function getVepfeatureOption (params: vepFeatureData[]): EChartsOption {
return {
xAxis: {
type: 'category',
boundaryGap: false,
data: params.map(e => { return e.x })
},
yAxis: {
type: 'value',
axisLabel: {
formatter: function (value:any) {
return value / 100
}
}
},
series: [
{
data: params.map(e => { return e.y * 100 }),
type: 'line',
areaStyle: {}
}
]
} as EChartsOption
}
(2)consussionfusion-echart.data.ts
import { vrca } from '@/protoc/processed'
import { EChartsOption } from 'echarts'
export function getConsussionFusionResulOption (params: vrca.concussion.v1.IConsussionFusionResult): EChartsOption {
return {
series: [
{
type: 'gauge',
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 12,
axisLine: {
lineStyle: {
width: 6,
color: [
[0.33, '#7CFFB2'],
[0.66, '#FDDD60'],
[1, '#FF6E76']
]
}
},
pointer: {
icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
length: '12%',
width: 20,
offsetCenter: [0, '-60%'],
itemStyle: {
color: 'auto'
}
},
axisTick: {
length: 12,
lineStyle: {
color: 'auto',
width: 2
}
},
splitLine: {
length: 20,
lineStyle: {
color: 'auto',
width: 5
}
},
axisLabel: {
color: '#464646',
fontSize: 20,
distance: -60,
formatter: function (value) {
return ''
}
},
title: {
offsetCenter: [0, '-20%'],
fontSize: 30
},
detail: {
fontSize: 50,
offsetCenter: [0, '0%'],
valueAnimation: true,
formatter: function (value) {
return Math.round(value * 100)
},
color: 'auto'
},
data: [
{
value: params.confidence,
name: 'Score'
}
]
}
]
} as EChartsOption
}
三用法
<template>
<echart2d :option="displayData"></echart2d>
</template>
<script lang='ts'>
import { defineComponent, watch, ref } from 'vue'
import { getVepFeatureData, scopeId } from '../home.data'
import echart2d from '@/components/echart/2d-chart.vue'
import { EChartsOption } from 'echarts'
import { getVepfeatureOption } from '../data/vepfeature-echart.data'
export default defineComponent({
components: {
echart2d
},
setup () {
const displayData = ref<EChartsOption>()
watch(scopeId, (val) => {
if (val?.id === undefined) return
getVepFeatureData(val?.id).then(res => {
console.log(res)
displayData.value = getVepfeatureOption(res)
})
})
return {
displayData,
echart2d
}
}
})
</script>
<style>
</style>
本文来自博客园,作者:zjxgdq,转载请注明原文链接:https://www.cnblogs.com/zjxzhj/p/15544625.html

浙公网安备 33010602011771号