|
@@ -6,214 +6,252 @@
|
|
|
var year = $('#chooseTime').val().slice(0, 4);
|
|
|
var month = $('#chooseTime').val().slice(5, 7);
|
|
|
|
|
|
-// 环状饼图定制 (数据统计及时)
|
|
|
-(function() {
|
|
|
- // 实例化对象
|
|
|
- var myChart = echarts.init(document.querySelector(".bar-3d .chart"));
|
|
|
|
|
|
- // 生成扇形的曲面参数方程,用于 series-surface.parametricEquation
|
|
|
- function getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, height) {
|
|
|
|
|
|
- // 计算
|
|
|
- let midRatio = (startRatio + endRatio) / 2;
|
|
|
+// ajax请求数据
|
|
|
+function getListData(queryParam = {}) {
|
|
|
|
|
|
- let startRadian = startRatio * Math.PI * 2;
|
|
|
- let endRadian = endRatio * Math.PI * 2;
|
|
|
- let midRadian = midRatio * Math.PI * 2;
|
|
|
+ ajaxRequest(STATISTICS, "POST", queryParam, function(result) {
|
|
|
+ console.log(result.RESULT[0].data_statistics)
|
|
|
+ var data_statistics = result.RESULT[0].data_statistics;
|
|
|
|
|
|
- // 如果只有一个扇形,则不实现选中效果。
|
|
|
- if (startRatio === 0 && endRatio === 1) {
|
|
|
- isSelected = false;
|
|
|
- }
|
|
|
+ $('.total').html(data_statistics.alarm_number);
|
|
|
+ $('.solved').html(data_statistics.processing_number);
|
|
|
+ $('.unsolve').html(data_statistics.unprocessed_number);
|
|
|
|
|
|
- // 通过扇形内径/外径的值,换算出辅助参数 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;
|
|
|
+ // 环状饼图定制 (数据统计及时)
|
|
|
+ (function() {
|
|
|
+ // 实例化对象
|
|
|
+ var myChart = echarts.init(document.querySelector(".bar-3d .chart"));
|
|
|
|
|
|
- // 返回曲面参数方程
|
|
|
- return {
|
|
|
+ // 生成扇形的曲面参数方程,用于 series-surface.parametricEquation
|
|
|
+ function getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, height) {
|
|
|
|
|
|
- u: {
|
|
|
- min: -Math.PI,
|
|
|
- max: Math.PI * 3,
|
|
|
- step: Math.PI / 32
|
|
|
- },
|
|
|
+ // 计算
|
|
|
+ let midRatio = (startRatio + endRatio) / 2;
|
|
|
|
|
|
- v: {
|
|
|
- min: 0,
|
|
|
- max: Math.PI * 2,
|
|
|
- step: Math.PI / 20
|
|
|
- },
|
|
|
+ let startRadian = startRatio * Math.PI * 2;
|
|
|
+ let endRadian = endRatio * Math.PI * 2;
|
|
|
+ let midRadian = midRatio * Math.PI * 2;
|
|
|
|
|
|
- x: function(u, v) {
|
|
|
- if (u < startRadian) {
|
|
|
- return offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
|
|
|
+ // 如果只有一个扇形,则不实现选中效果。
|
|
|
+ if (startRatio === 0 && endRatio === 1) {
|
|
|
+ isSelected = false;
|
|
|
}
|
|
|
- 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;
|
|
|
+ // 通过扇形内径/外径的值,换算出辅助参数 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') {
|
|
|
+ // 生成模拟 3D 饼图的配置项
|
|
|
+ function getPie3D(pieData, internalDiameterRatio) {
|
|
|
|
|
|
- let itemStyle = {};
|
|
|
+ let series = [];
|
|
|
+ let sumValue = 0;
|
|
|
+ let startValue = 0;
|
|
|
+ let endValue = 0;
|
|
|
+ let legendData = [];
|
|
|
+ let k = typeof internalDiameterRatio !== 'undefined' ? (1 - internalDiameterRatio) / (1 + internalDiameterRatio) : 1 / 3;
|
|
|
|
|
|
- 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;
|
|
|
+ // 为每一个饼图数据,生成一个 series-surface 配置
|
|
|
+ for (let i = 0; i < pieData.length; i++) {
|
|
|
|
|
|
- seriesItem.itemStyle = itemStyle;
|
|
|
- }
|
|
|
- series.push(seriesItem);
|
|
|
- }
|
|
|
+ sumValue += pieData[i].value;
|
|
|
|
|
|
- // 使用上一次遍历时,计算出的数据和 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);
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- startValue = endValue;
|
|
|
+ if (typeof pieData[i].itemStyle != 'undefined') {
|
|
|
|
|
|
- legendData.push(series[i].name);
|
|
|
- }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
|
|
|
- // 准备待返回的配置项,把准备好的 legendData、series 传入。
|
|
|
- let option = {
|
|
|
+ // 使用上一次遍历时,计算出的数据和 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);
|
|
|
|
|
|
- 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}%`;
|
|
|
+ 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)',
|
|
|
}
|
|
|
}
|
|
|
- },
|
|
|
|
|
|
- xAxis3D: {
|
|
|
- min: -1,
|
|
|
- max: 1
|
|
|
- },
|
|
|
- yAxis3D: {
|
|
|
- min: -1,
|
|
|
- max: 1
|
|
|
- },
|
|
|
- zAxis3D: {
|
|
|
- min: -1,
|
|
|
- max: 1
|
|
|
- },
|
|
|
- grid3D: {
|
|
|
+ ], 2);
|
|
|
+
|
|
|
+ // 把配置给实例对象
|
|
|
+ myChart.setOption(option);
|
|
|
+ window.addEventListener("resize", function() {
|
|
|
+ myChart.resize();
|
|
|
+ });
|
|
|
+
|
|
|
+ })();
|
|
|
+
|
|
|
+ }, function(errorMsg) {
|
|
|
+ alert("请求数据失败!");
|
|
|
+ }, 2)
|
|
|
+};
|
|
|
+
|
|
|
+getListData(getSearchParamObj());
|
|
|
+
|
|
|
+function getSearchParamObj() {
|
|
|
+ let queryParam = {};
|
|
|
+ let buildingVal = $('#building').val();
|
|
|
+ let chooseTime = $('#chooseTime').val();
|
|
|
+ queryParam.company_code = buildingVal;
|
|
|
+ queryParam.generation_time = chooseTime;
|
|
|
+ return queryParam;
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
|
|
|
- show: false,
|
|
|
- boxHeight: 40,
|
|
|
- top: '-10%',
|
|
|
- // bottom: '80%',
|
|
|
- // environment: '../images/3d-bg.png', //aa背景色
|
|
|
|
|
|
- viewControl: {
|
|
|
- distance: 170, //aa距离
|
|
|
- alpha: 21, //aa角度
|
|
|
- beta: 10, //aa角度
|
|
|
- zoomSensitivity: false //是否开启缩放和平移
|
|
|
- },
|
|
|
- },
|
|
|
- series: series
|
|
|
- };
|
|
|
- return option;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 传入数据生成 option
|
|
|
- var option = getPie3D([{
|
|
|
- name: '已处理率',
|
|
|
- value: 80,
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5,
|
|
|
- color: 'rgba(0,127,244,.8)',
|
|
|
- }
|
|
|
- }, {
|
|
|
- name: '未处理率',
|
|
|
- value: 20,
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5,
|
|
|
- color: 'rgba(209,126,23,.8)',
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- ], 2);
|
|
|
|
|
|
- // 把配置给实例对象
|
|
|
- myChart.setOption(option);
|
|
|
- window.addEventListener("resize", function() {
|
|
|
- myChart.resize();
|
|
|
- });
|
|
|
|
|
|
-})();
|
|
|
|
|
|
// 折线图定制 (数据离散率挖掘)
|
|
|
(function() {
|