123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814 |
- 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 = "<a class='xzqBtn' value='' type='1' >山西省</a>";
- 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 = "<a class='xzqBtn' value='' type='1' >山西省</a>";
- html += "<a class='xzqBtn' value='" + resertEchartsParams.xzq + "' type='2' >" + resertEchartsParams.name + "</a>";
- 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 = "<a class='xzqBtn' value='' type='1' >山西省</a><a class='xzqBtn' value='" + resertEchartsParams.xzq.substr(0, 4) + "' type='2' >" + html + "</a>";
- html += "<a class='xzqBtn' value='" + resertEchartsParams.xzq + "' type='3' >" + resertEchartsParams.name + "</a>";
- 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 + '<br/>' + XZQConfig.title + data.value + XZQConfig.unit;
- var per = Math.round(data.value / total * 10000) / 100;
- return data.name + '<br/>' + XZQConfig.title + data.value + XZQConfig.unit + '<br/>占比:' + 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 + ")";
- }
|