소스 검색

efAnalysisdataVisualization eleFire.js 韩正义 commit at 2020-09-28

韩正义 4 년 전
부모
커밋
76f36d0c3b
1개의 변경된 파일188개의 추가작업 그리고 0개의 파일을 삭제
  1. 188 0
      efAnalysisdataVisualization/externalJs/eleFire.js

+ 188 - 0
efAnalysisdataVisualization/externalJs/eleFire.js

@@ -93,3 +93,191 @@ function getListData(queryParam = {}) {
                     // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
                     k = typeof k !== 'undefined' ? k : 1 / 3;
 
+                    // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
+                    let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
+                    let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
+
+                    // 计算高亮效果的放大比例(未高亮,则比例为 1)
+                    let hoverRate = isHovered ? 1.05 : 1;
+
+                    // 返回曲面参数方程
+                    return {
+
+                        u: {
+                            min: -Math.PI,
+                            max: Math.PI * 3,
+                            step: Math.PI / 32
+                        },
+
+                        v: {
+                            min: 0,
+                            max: Math.PI * 2,
+                            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() {
+