分段饼图

描述:当前是关于Echarts图表中的 饼图 示例。
 
            const data = [
   {name: 'XSS跨站', value: 259, block: 1, monitor: 258,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        },},
   {name: '频率限制', value: 197, block: 181, monitor: 16,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        }},
   {name: 'SQL注入', value: 193, block: 48, monitor: 145,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        }},
   {name: 'CSRF', value: 54, block: 53, monitor: 1,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        }},
   {name: '恶意广告检测', value: 18, block: 0, monitor: 18,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        }},
   {name: '其他防护', value: 49, block: 0, monitor: 0,itemStyle: {
                            borderWidth: 3, // 设置border宽度
                            borderColor: '#fff',
                        }},
]

let totalNum = 0
data.map(item => totalNum += item.value)

option = {
   
   tooltip: {
      backgroundColor: '#fff',
      extraCssText: 'box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.15);',
      padding: [12, 16, 12, 16],
      textStyle: {
         color: 'rgba(0,0,0,0.65)'
      },
      formatter: (param) => {
         let {marker, name, value, data} = param
         let result = `<div>${marker}${name}</div>`
         result += `<div>攻击请求数:${value} 次</div>`
         result += `<div>拦截请求数:${data.block} 次</div>`
         result += `<div>监控请求数:${data.monitor} 次</div>`
         return result
      },
   },
   legend: {
      orient: 'vertial',
      itemWidth: 8,
      itemHeight: 8,
      right: 200,
      bottom: '40%',
      data: data,
      textStyle: {
         color: 'rgba(0,0,0,0.65)'
      },
      formatter: (name) => {
         for (var i = 0; i < data.length; i++) {
            if (name == data[i].name) {
               return '{name|' + name + '}{num|' + data[i].value + '项}{value|' + data[i].monitor + '%}'
            }
         }
      },
      textStyle: {
         rich: {
            name: {
               fontSize: 14,
               fontWeight: 400,
               width: 100,
               height: 20,
               padding: [0, 0, 0, 5],
               color: 'rgba(0, 0, 0, 0.85)',
               fontFamily: 'Source Han Sans CN-Regular',
            },
            num: {
               fontSize: 14,
               fontWeight: 500,
               height: 20,
               width: 50,
               align: 'left',
               color: 'rgba(0, 0, 0, 0.65)',
               fontFamily: 'Source Han Sans CN-Regular',
            },
            value: {
               fontSize: 14,
               fontWeight: 500,
               height: 20,
               width: 50,
               align: 'left',
               color: 'rgba(0, 0, 0, 0.65)',
               fontFamily: 'Source Han Sans CN-Regular',
            }
         }
      }
   },
   color: ['#4168FF', '#47CBFF', '#FF7A33', '#45DE7F', '#FFAC34', '#5AD7D8', '#8163E9', '#FF5F45', '#01C581', '#B754F6', '#FCDA0F', '#9B501B', '#A0D911', '#2998FF', '#938BF8'],
   series: [{
      name: '攻击总数',
      type: 'pie',
      radius: ['30%', '40%'],
      center: ['30%', '50%'], // 图形位置
      label: { // 鼠标悬浮具体数据显示
         show: false
      },
      data: data
   }]
};