|  | @@ -84,3 +84,164 @@ function getListData(queryParam = {}) {
 | 
	
		
			
				|  |  |                              step: Math.PI / 20
 | 
	
		
			
				|  |  |                          },
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                        x: function(u, v) {
 | 
	
		
			
				|  |  | +                            if (u < startRadian) {
 | 
	
		
			
				|  |  | +                                return offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            if (u > endRadian) {
 | 
	
		
			
				|  |  | +                                return offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        y: function(u, v) {
 | 
	
		
			
				|  |  | +                            if (u < startRadian) {
 | 
	
		
			
				|  |  | +                                return offsetY + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            if (u > endRadian) {
 | 
	
		
			
				|  |  | +                                return offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        z: function(u, v) {
 | 
	
		
			
				|  |  | +                            if (u < -Math.PI * 0.5) {
 | 
	
		
			
				|  |  | +                                return Math.sin(u);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            if (u > Math.PI * 2.5) {
 | 
	
		
			
				|  |  | +                                return Math.sin(u);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            return Math.sin(v) > 0 ? 1 : -1;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    };
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 生成模拟 3D 饼图的配置项
 | 
	
		
			
				|  |  | +                function getPie3D(pieData, internalDiameterRatio) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    let series = [];
 | 
	
		
			
				|  |  | +                    let sumValue = 0;
 | 
	
		
			
				|  |  | +                    let startValue = 0;
 | 
	
		
			
				|  |  | +                    let endValue = 0;
 | 
	
		
			
				|  |  | +                    let legendData = [];
 | 
	
		
			
				|  |  | +                    let k = typeof internalDiameterRatio !== 'undefined' ? (1 - internalDiameterRatio) / (1 + internalDiameterRatio) : 1 / 3;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // 为每一个饼图数据,生成一个 series-surface 配置
 | 
	
		
			
				|  |  | +                    for (let i = 0; i < pieData.length; i++) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        sumValue += pieData[i].value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        let seriesItem = {
 | 
	
		
			
				|  |  | +                            name: typeof pieData[i].name === 'undefined' ? `series${i}` : pieData[i].name,
 | 
	
		
			
				|  |  | +                            type: 'surface',
 | 
	
		
			
				|  |  | +                            parametric: true,
 | 
	
		
			
				|  |  | +                            wireframe: {
 | 
	
		
			
				|  |  | +                                show: false
 | 
	
		
			
				|  |  | +                            },
 | 
	
		
			
				|  |  | +                            pieData: pieData[i],
 | 
	
		
			
				|  |  | +                            pieStatus: {
 | 
	
		
			
				|  |  | +                                selected: false,
 | 
	
		
			
				|  |  | +                                hovered: false,
 | 
	
		
			
				|  |  | +                                k: k
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if (typeof pieData[i].itemStyle != 'undefined') {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            let itemStyle = {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            typeof pieData[i].itemStyle.color != 'undefined' ? itemStyle.color = pieData[i].itemStyle.color : null;
 | 
	
		
			
				|  |  | +                            typeof pieData[i].itemStyle.opacity != 'undefined' ? itemStyle.opacity = pieData[i].itemStyle.opacity : null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            seriesItem.itemStyle = itemStyle;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        series.push(seriesItem);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
 | 
	
		
			
				|  |  | +                    // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
 | 
	
		
			
				|  |  | +                    for (let i = 0; i < series.length; i++) {
 | 
	
		
			
				|  |  | +                        endValue = startValue + series[i].pieData.value;
 | 
	
		
			
				|  |  | +                        // console.log(series[i]);
 | 
	
		
			
				|  |  | +                        series[i].pieData.startRatio = startValue / sumValue;
 | 
	
		
			
				|  |  | +                        series[i].pieData.endRatio = endValue / sumValue;
 | 
	
		
			
				|  |  | +                        series[i].parametricEquation = getParametricEquation(series[i].pieData.startRatio, series[i].pieData.endRatio, false, false, k, series[i].pieData.value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        startValue = endValue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        legendData.push(series[i].name);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // 准备待返回的配置项,把准备好的 legendData、series 传入。
 | 
	
		
			
				|  |  | +                    let option = {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        tooltip: {
 | 
	
		
			
				|  |  | +                            backgroundColor: '#12DFE0',
 | 
	
		
			
				|  |  | +                            formatter: params => {
 | 
	
		
			
				|  |  | +                                if (params.seriesName !== 'mouseoutSeries') {
 | 
	
		
			
				|  |  | +                                    // return `${params.seriesName}<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>${option.series[params.seriesIndex].pieData.value}%`;
 | 
	
		
			
				|  |  | +                                    return `${params.seriesName}: ${option.series[params.seriesIndex].pieData.value}%`;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        xAxis3D: {
 | 
	
		
			
				|  |  | +                            min: -1,
 | 
	
		
			
				|  |  | +                            max: 1
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +                        yAxis3D: {
 | 
	
		
			
				|  |  | +                            min: -1,
 | 
	
		
			
				|  |  | +                            max: 1
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +                        zAxis3D: {
 | 
	
		
			
				|  |  | +                            min: -1,
 | 
	
		
			
				|  |  | +                            max: 1
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +                        grid3D: {
 | 
	
		
			
				|  |  | +                            show: false,
 | 
	
		
			
				|  |  | +                            boxHeight: 40,
 | 
	
		
			
				|  |  | +                            top: '-10%',
 | 
	
		
			
				|  |  | +                            // bottom: '80%',
 | 
	
		
			
				|  |  | +                            // environment: '../images/3d-bg.png', //aa背景色
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            viewControl: {
 | 
	
		
			
				|  |  | +                                distance: 170, //aa距离
 | 
	
		
			
				|  |  | +                                alpha: 21, //aa角度
 | 
	
		
			
				|  |  | +                                beta: 60, //aa角度
 | 
	
		
			
				|  |  | +                                zoomSensitivity: false //是否开启缩放和平移
 | 
	
		
			
				|  |  | +                            },
 | 
	
		
			
				|  |  | +                        },
 | 
	
		
			
				|  |  | +                        series: series
 | 
	
		
			
				|  |  | +                    };
 | 
	
		
			
				|  |  | +                    return option;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 传入数据生成 option
 | 
	
		
			
				|  |  | +                var option = getPie3D([{
 | 
	
		
			
				|  |  | +                    name: '已处理率',
 | 
	
		
			
				|  |  | +                    value: data_statistics.treatment_rate,
 | 
	
		
			
				|  |  | +                    itemStyle: {
 | 
	
		
			
				|  |  | +                        opacity: 0.5,
 | 
	
		
			
				|  |  | +                        color: 'rgba(0,127,244,.8)',
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }, {
 | 
	
		
			
				|  |  | +                    name: '未处理率',
 | 
	
		
			
				|  |  | +                    value: data_statistics.untreated_rate,
 | 
	
		
			
				|  |  | +                    itemStyle: {
 | 
	
		
			
				|  |  | +                        opacity: 0.5,
 | 
	
		
			
				|  |  | +                        color: 'rgba(209,126,23,.8)',
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }], 2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 把配置给实例对象
 | 
	
		
			
				|  |  | +                myChart.setOption(option);
 | 
	
		
			
				|  |  | +                window.addEventListener("resize", function() {
 | 
	
		
			
				|  |  | +                    myChart.resize();
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            })();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 折线图定制 (数据离散率挖掘)
 | 
	
		
			
				|  |  | +            (function() {
 |