父组件:
< pieChartNormal : opt= "contractStatics" style= "width: 100%;height: 100%;" / >
import pieChartNormal from "./components/pieChartNormal" ;
data ( ) {
return {
contractStatics : {
seriesData : [ {
name : '技术服务类' ,
value : 30.5 ,
itemStyle : {
color : '#3562D4' ,
} ,
} ,
{
name : '监理监测类' ,
value : 41.4 ,
itemStyle : {
color : '#2BC4CD' ,
} ,
} ,
{
name : '工程总承包类' ,
value : 21.1 ,
itemStyle : {
color : '#E68B29' ,
} ,
} ] ,
}
}
}
子组件:
< template>
< div style= "width: 100%;height: 100%;" >
< ChartPanel ref= "chart" : option= "options" : style= "opt.yAxisName ? 'height:calc(100% - 16px)' : ''" > < / ChartPanel>
< / div>
< / template>
< script>
import * as echarts from 'echarts'
import ChartPanel from '@/components/ChartPanel' ;
export default {
components : {
ChartPanel
} ,
props : {
opt : {
type : Object,
default ( ) {
return { }
}
}
} ,
data ( ) {
return {
options : null
}
} ,
watch : {
opt : {
deep : true ,
immediate : true ,
handler ( val ) {
this . getOpt ( val)
}
}
} ,
methods : {
getOpt ( val ) {
let {
seriesData
} = val
let color = [ '#3666E0' , '#26D7E0' , '#F0922E' ]
this . options = {
animation : true ,
legend : {
orient : 'vertical' ,
show : true ,
x : '40%' ,
y : 'center' ,
itemWidth : 0 ,
itemHeight : 0 ,
textStyle : {
color : '#595D64' ,
fontSize : 14 ,
lineHeight : 20 ,
rich : {
percent0 : {
color : color[ 0 ] ,
fontSize : 14 ,
fontWeight : 700
} ,
percent1 : {
color : color[ 1 ] ,
fontSize : 14 ,
fontWeight : 700
} ,
percent2 : {
color : color[ 2 ] ,
fontSize : 14 ,
fontWeight : 700
} ,
} ,
} ,
formatter : name => {
let dataIndex = 0
let obj = ( seriesData. filter ( ( item, index ) => {
if ( item. name == name) {
dataIndex = index
return item
}
} ) ) [ 0 ]
return obj. name + ' {percent' + dataIndex + '|' + obj. value + '亿元} ' +
' {percent' + dataIndex + '|30%}'
} ,
} ,
tooltip : {
borderWidth : 0 ,
show : true ,
formatter : params => {
if ( params. seriesName != '内边线' ) {
return ` <div style="font-weight:700"> ${ params. name} </div>
<div>
<span style="color: ${ params. color} ;font-weight:700"> ${ params. value} 亿元 ${ params. percent} %</span>
</div>
`
}
}
} ,
series : [
{
type : 'pie' ,
roseType : 'area' ,
radius : [ '45%' , '90%' ] ,
center : [ '15%' , '50%' ] ,
hoverAnimation : false ,
z : 10 ,
color : color,
label : {
show : false ,
} ,
data : seriesData,
labelLine : {
show : false ,
} ,
} ,
{
type : "pie" ,
name : '内边线' ,
center : [ "15%" , "50%" ] ,
radius : [ "89%" , "90%" ] ,
label : {
show : false
} ,
hoverAnimation : false ,
data : [ {
value : 1 ,
itemStyle : {
normal : {
color : 'rgba(242, 244, 247, 1)'
}
}
} ]
} ,
] ,
} ;
this . $nextTick ( ( ) => {
this . $refs. chart. initChart ( echarts, chart => {
this . options && chart. setOption ( this . options, true ) ;
} ) ;
} )
}
}
}
< / script>