var loadGeoJson = {}; var element; var table; var slider; var dom = document.getElementById("container"); var myChart = echarts.init(dom); var option; var myCharts = {}; var myTables = {}; myChart.showLoading(); var msurl = './json/市级_山西.json'; var qxurl = './json/县级_山西.json'; var namefield = "name"; var valuefield = "Shape_Area"; var codefield = "CODE"; var statisticsInfoByXZQ; var xzqSlider; var resertEchartsParams = {}; $(".loading").css("line-height", $(".loading").height() + "px"); window.onload = function () { setTimeout(function () { layui.use(['form', 'layer', 'element', 'slider', 'table'], function () { element = layui.element; table = layui.table; slider = layui.slider; init(); }); $(".xzqBtn").click(function (e) { onTabClick(e); }); }, 5); } function getGeoJson(url) { $.ajaxSettings.async = false; var geojson = null; $.get(url, function (results) { geojson = results; }); return geojson; } function getXZQData() { var resultData; $.ajax({ type: globleConfig.ajaxType, async: false, url: globleConfig.ajax, data: { "mtype": globleConfig.mtype, "dataBaseSelected": globleConfig.dataBaseSelected, // 所选数据库名称, "tableTypeSelected": globleConfig.tableTypeSelected, "tableDataSelected": XZQConfig.tableDataSelected, "dimensionSelected": JSON.stringify(XZQConfig.dimensionSelected), "measureSelected": JSON.stringify(XZQConfig.measureSelected), "aggregate": XZQConfig.aggregate, "filterdata": XZQConfig.filterdata, "queryFields": "" }, datatype: 'json', success: function (res) { var resArr = res.split('||'); if (resArr.length == 0) { console.log("数据请求失败!"); } else if (resArr.length == 3) { if (resArr[2].split("^_^")[0] && resArr[2].split("^_^")[0] != "{}") { resultData = JSON.parse(resArr[2].split("^_^")[0]); } } else { if (resArr[0]) { resultData = JSON.parse(resArr[0]); } } }, error: function (err) { console.log(err); if (err.status == 405) top.location.href = '/login/LoginNew.aspx'; } }); return resultData; } function init() { // var userinfo = getUserInfo(); // if (!userinfo) { // console.error("专项统计模块获取登陆信息失败!"); // return; // } windowResizeFun(); var list = {}; for (var attr in TDYTDM.classify) { var item = TDYTDM.classify[attr]; for (var i = 0 ; i < item.length ; i++) { list[item[i]] = attr; } } TDYTDM["handle"] = list; resertEcharts("", "1"); myChart.on('click', function (params) { if (params.name) { $(".loading").show(); setTimeout(function () { resertEcharts(params.data.code, (parseInt(params.seriesName) + 1).toString(), params.name); },100); } }); myChart.hideLoading(); } function resertEcharts(xzq, type, name, year) { if (!year) { resertEchartsParams = { xzq: xzq, type: type, name: name } } if (!statisticsInfoByXZQ) { statisticsInfoByXZQ = getXZQData(); if (statisticsInfoByXZQ) { var years = []; for (var attr in statisticsInfoByXZQ) { years.push(parseInt(attr)); } years.sort(function (a,b){ return a - b; }); statisticsInfoByXZQ["years"] = years; } xzqSlider = slider.render({ elem: '#' + XZQConfig.container, min: years[0], max: years[years.length - 1], theme: '#5470c6', //type: 'vertical', //垂直滑块 showstep: true, change: function (data) { resertEcharts(null, null, null, data); } }); statisticsInfoByXZQ["curYear"] = statisticsInfoByXZQ["years"][0]; } var curYear = year ? year : statisticsInfoByXZQ["curYear"]; $(".yearSpan").html(curYear + "年"); statisticsInfoByXZQ["curYear"] = curYear; var list = []; var chartType = ""; switch (resertEchartsParams.type) { case "1": //盟市 var html = "山西省"; elementTemplate(html); chartType = "MS"; if (!loadGeoJson[chartType]) { loadGeoJson[chartType] = getGeoJson(msurl); } for (var i = 0; i < loadGeoJson[chartType].features.length; i++) { var info = loadGeoJson[chartType].features[i]["properties"]; var code = info[codefield].substr(0, 4); var value = 0; for (var attr in statisticsInfoByXZQ[curYear]) { if (attr.toString().indexOf(code) == 0) { value += parseFloat(statisticsInfoByXZQ[curYear][attr]); } } list.push({ name: info[namefield], value: value ? Math.round(value * 100) / 100 : 0, code: info[codefield] }); } echarts.registerMap('MS', loadGeoJson[chartType]); break; case "2": //旗县 var html = "山西省"; html += "" + resertEchartsParams.name + ""; elementTemplate(html); chartType = resertEchartsParams.xzq.length == 6 ? resertEchartsParams.xzq.substr(0, 4) : resertEchartsParams.xzq; if (!loadGeoJson["QX"]) { loadGeoJson["QX"] = getGeoJson(qxurl); } var list = []; var json = { type: "FeatureCollection", features: [] }; for (var i = 0; i < loadGeoJson["QX"].features.length; i++) { var info = loadGeoJson["QX"].features[i]["properties"]; if (info[codefield].indexOf(chartType) > -1) { list.push({ name: info[namefield], value: statisticsInfoByXZQ[curYear][info[codefield]] ? Math.round(parseFloat(statisticsInfoByXZQ[curYear][info[codefield]]) * 100) / 100 : 0, code: info[codefield] }); json.features.push(loadGeoJson["QX"].features[i]); } } echarts.registerMap(chartType, json); break; case "3": //旗县 var html = $(".layui-breadcrumb").text().split(">")[1]; html = "山西省" + html + ""; html += "" + resertEchartsParams.name + ""; elementTemplate(html); chartType = resertEchartsParams.xzq; if (!loadGeoJson["QX"]) { loadGeoJson["QX"] = getGeoJson(qxurl); } var list = []; var json = { type: "FeatureCollection", features: [] }; for (var i = 0; i < loadGeoJson["QX"].features.length; i++) { var info = loadGeoJson["QX"].features[i]["properties"]; if (info[codefield] == chartType) { list.push({ name: info[namefield], value: statisticsInfoByXZQ[curYear][info[codefield]] ? Math.round(parseFloat(statisticsInfoByXZQ[curYear][info[codefield]]) * 100) / 100 : 0, code: info[codefield] }); json.features.push(loadGeoJson["QX"].features[i]); break; } } echarts.registerMap(chartType, json); break; default: return $(".loading").hide(); break; } list.sort(function (a, b) { return a.value - b.value }); option = { title: { text: '{A| ' + XZQConfig.chartTitle + '}', x: 'left', //padding: [5, 5, 5, 5], textStyle: { align: 'center', rich: { A: { backgroundColor: { image: XZQConfig.titleImage.image, }, width: XZQConfig.titleImage.width, height: XZQConfig.titleImage.height, color: "#5470c6", fontSize: 17, fontWeight: 'bold', verticalAlign: "middle", lineHeight: 50, left: 15 } } }, left: 15 }, tooltip: { trigger: 'item', show: true, formatter: function (data) { var total = 0; for (var i = 0 ; i < myChart.getOption().series[0].data.length ; i++) { total += myChart.getOption().series[0].data[i].value; } //return data.name + '
' + XZQConfig.title + data.value + XZQConfig.unit; var per = Math.round(data.value / total * 10000) / 100; return data.name + '
' + XZQConfig.title + data.value + XZQConfig.unit + '
占比:' + per + "%"; } }, toolbox: { show: false, orient: 'vertical', left: 'right', top: 'center', feature: { saveAsImage: {} } }, visualMap: { min: list[0].value, max: list[list.length - 1].value, text: ['高', '低'], realtime: false, calculable: true, inRange: { //color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] //color: globleConfig.color color: ['#0000ff30', '#0000ff'] }, orient: 'vertical', right: 'right', bottom: 'bottom', }, series: [{ name: resertEchartsParams.type, type: 'map', roam: true, mapType: chartType, // 自定义扩展图表类型 label: { show: true, //color: "blue", //fontStyle: 'normal', //fontWeight: 'normal', textBorderColor: "white", textBorderWidth: 1 }, itemStyle: { normal: { borderWidth:1, borderColor: '#ddd',//区域边框色 //areaColor: '#FFDAB9',//区域背景色 label: { show: true, //textBorderColor: "white", //textBorderWidth: 1, textStyle: { color: '#ffffff',//文字颜色 fontSize:12 //文字大小 } } }, emphasis: { // 选中样式 borderWidth:1, borderColor:'#00ffff', color: '#ffffff', label: { show: true, textStyle: { color: '#ff0000' } } } }, data: list }] }; myChart.clear(); myChart.setOption(option); if (year) { var data = filterArray(myTables["myChartTable2"].config.dataStore, [{ field: "QDRQ", value: year, type: "like" }]); myTables["myChartTable2"].reload({ data: data }, false); } else { createVisualizationCharts(resertEchartsParams.xzq ? chartType : "") } } function elementTemplate(html) { $(".layui-breadcrumb").html(html); element ? element.render() : null; $(".xzqBtn").click(function (e) { onTabClick(e); }); } function onTabClick(e) { $(".loading").show(); setTimeout(function () { resertEcharts($(e.target).attr("value"), $(e.target).attr("type"), $(e.target).html()); },50); } function createVisualizationCharts(xzq) { for (var attr in chartsConfig) { var params = chartsConfig[attr]; if (!params.able) { continue; } var queryFields = ""; if (params.queryFields) { for (var k = 0 ; k < params.queryFields.length ; k++) { queryFields += params.queryFields[k].name + ","; } queryFields = queryFields.substring(0, queryFields.length - 1); } var resultData; var where = globleConfig.XZQFIELD + " like '" + xzq + "%'" $.ajax({ type: globleConfig.ajaxType, async: false, url: globleConfig.ajax, data: { "mtype": globleConfig.mtype, "dataBaseSelected": globleConfig.dataBaseSelected, // 所选数据库名称, "tableTypeSelected": globleConfig.tableTypeSelected, "tableDataSelected": params.tableDataSelected, "dimensionSelected": params.dimensionSelected ? JSON.stringify(params.dimensionSelected) : "", "measureSelected": params.measureSelected ? JSON.stringify(params.measureSelected) : "", "aggregate": params.aggregate, "filterdata": xzq ? (params.filterdata ? params.filterdata + " and " + where : where) : params.filterdata, "queryFields": queryFields }, datatype: 'json', success: function (res) { var resArr = res.split('||'); if (resArr.length == 0) { console.log("数据请求失败!"); } else if (resArr.length == 3) { if (resArr[2].split("^_^")[0] && resArr[2].split("^_^")[0] != "{}") { resultData = JSON.parse(resArr[2].split("^_^")[0]); } } else { if (resArr[0]) { resultData = JSON.parse(resArr[0]); } } }, error: function (err) { console.log(err); if (err.status == 405) top.location.href = '/login/LoginNew.aspx'; } }); if (resultData) { createVisualizationChartsHandle(params, resultData); } else { //$("#" + params.container).html(params.noText); alert(params.noText); } } $(".loading").hide(); } function createVisualizationChartsHandle(params, resultData) { var id = params.container; var chartType = params.chartType; var field = params.dimensionSelected && params.dimensionSelected[0].FIELDNAME; var measure = params.measureSelected && params.measureSelected[0].FIELDNAME; var legend = params.dimensionSelected && params.dimensionSelected[0].COLUMN_NAME; var chartOption; switch (chartType) { case "bar": var xAxis = []; var series = []; for (var i = 0 ; i < resultData.length ; i++) { xAxis.push(resultData[i][field]); series.push({ value: Math.round(parseFloat(resultData[i][measure]) * 100) / 100, itemStyle: { color: globleConfig.color[i] ? globleConfig.color[i] : randomColor() } }) } chartOption = { title: { text: '{A| ' + params.title + '}', left: 10, textStyle: { rich: { A: { backgroundColor: { image: params.titleImage.image, }, width: params.titleImage.width, height: params.titleImage.height, color: "#5470c6", fontSize: 16, fontWeight: 'bold', verticalAlign: "middle", lineHeight: 26, left: 15 } } } }, tooltip: { trigger: 'axis' }, legend: { data: [legend], top: 35 }, toolbox: { show: true, orient: 'vertical', left: 'right', top: 'center', feature: { mark: { show: true }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, calculable: true, xAxis: [ { type: 'category', data: xAxis } ], yAxis: [ { type: 'value', name: params.unit, axisLine: { show: true }, axisTick: { show: true } } ], grid: { top: 90, bottom: 30 }, series: [ { name: legend, type: 'bar', data: series, markPoint: { data: [ { type: 'max', name: '最大值' }, { type: 'min', name: '最小值' } ] }, markLine: { data: [ { type: 'average', name: '平均值' } ] } } ] }; break; case "line": if (params.dimensionSelected.length == 2) {//二维 var years = []; var data = {}; for (var attr in resultData) { years.push(attr); data[attr] = {}; var item = resultData[attr]; for (var e in item) { var key = TDYTDM.handle[e]; if (!data[attr][key]) { data[attr][key] = 0; } data[attr][key] += Math.round(parseFloat(item[e]) * 100) / 100 } for (var param in TDYTDM.classify) { if (!data[attr][param]) { data[attr][param] = 0; } else { data[attr][param] = Math.round(data[attr][param] * 100) / 100; } } } var seriesList = []; var legendList = []; for (var item in TDYTDM.classify) { legendList.push(item); var list = []; for (var i = 0 ; i < years.length ; i++) { list.push(data[years[i]][item]); } seriesList.push({ name: item, type: 'line', data: list }); } chartOption = { title: { text: '{A| ' + params.title + '}', left: 10, textStyle: { color: "#5470c6", fontSize: 16, verticalAlign: "middle", lineHeight: 26, rich: { A: { backgroundColor: { image: params.titleImage.image, }, width: params.titleImage.width, height: params.titleImage.height, color: "#5470c6", fontSize: 16, fontWeight: 'bold', verticalAlign: "middle", lineHeight: 26, left: 15 } } } }, color: globleConfig.color, tooltip: { trigger: 'axis' }, grid: { top: 90, left: 200, bottom: 30 }, legend: { data: legendList, orient: 'vertical', left: 'left', top: 'center', }, toolbox: { show: true, orient: 'vertical', left: 'right', top: 'center', feature: { mark: { show: true }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, calculable: true, xAxis: [ { type: 'category', boundaryGap: false, data: years } ], yAxis: [ { type: 'value', name: params.unit, axisLine: { show: true }, axisTick: { show: true } } ], series: seriesList }; } else { var xAxis = []; var series = []; for (var i = 0 ; i < resultData.length ; i++) { xAxis.push(resultData[i][field]); series.push(Math.round(parseFloat(resultData[i][measure]) * 100) / 100); } chartOption = { title: { text: '{A| ' + params.title + '}', left: 10, textStyle: { color: "#5470c6", fontSize: 16, verticalAlign: "middle", lineHeight: 26, rich: { A: { backgroundColor: { image: params.titleImage.image, }, width: params.titleImage.width, height: params.titleImage.height, color: "#5470c6", fontSize: 16, fontWeight: 'bold', verticalAlign: "middle", lineHeight: 26, left: 15 } } } }, tooltip: { trigger: 'axis' }, color: globleConfig.color, legend: { data: [legend] }, toolbox: { show: true, orient: 'vertical', left: 'right', top: 'center', feature: { mark: { show: true }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, grid: { top: 90, left: 200, bottom: 30 }, calculable: true, xAxis: [ { type: 'category', boundaryGap: false, data: xAxis } ], yAxis: [ { type: 'value', name: params.unit, axisLine: { show: true }, axisTick: { show: true } } ], series: [ { name: legend, type: 'line', data: series, markPoint: { data: [ { type: 'max', name: '最大值' }, { type: 'min', name: '最小值' } ] }, markLine: { data: [ { type: 'average', name: '平均值' } ] } } ] }; } break; case "table": var cols = []; for (var k = 0 ; k < params.queryFields.length ; k++) { var name = params.queryFields[k].name; if (name.indexOf(" as ") > 0) { name = name.split(" as ")[1].replace(" ","") } cols.push({ field: name, title: params.queryFields[k].alias, fixed: true, sort: true, minWidth: 120 }); } myTables[id] = table.render({ elem: '#' + id, height: $($('#' + id).parent()).height(), toolbar: '#toolbarDemo', defaultToolbar: ['filter', 'exports', 'print'], data: resultData, dataStore: resultData, page: true, //开启分页 cols: [cols], text: { none: '暂无数据' } }); table.on('toolbar(' + id + ')', function (obj) { switch (obj.event) { case 'queryData': var fieldsList = []; for (var i = 0 ; i < $(".queryInput").length ; i++) { if ($($(".queryInput")[i]).val().replace(" ", "")) { fieldsList.push({ field: $($(".queryInput")[i]).attr("field"), value: $($(".queryInput")[i]).val().replace(" ", ""), type: "like" }); } } var data = filterArray(obj.config.dataStore, fieldsList); myTables[obj.config.id].reload({ data: data }, false); for (var i = 0 ; i < fieldsList.length ; i++) { $(".queryInput[field$='" + fieldsList[i].field + "']").val(fieldsList[i].value); } break; default: break; }; }); table.on('row(' + id + ')', function (obj) { console.log(obj); }); break; } if (chartOption) { if (!myCharts[id]) { myCharts[id] = echarts.init(document.getElementById(id)); } else { myCharts[id].clear(); } myCharts[id].setOption(chartOption); myCharts[id].on('click', function (params) { console.log(params); resertEcharts(null, null, null, parseInt(params.name)); }); } $(".loading").hide(); } function randomColor() {//得到随机的颜色值 var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb(" + r + "," + g + "," + b + ")"; }