264 lines
8.2 KiB
JavaScript
264 lines
8.2 KiB
JavaScript
'use strict';
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var echarts = _interopDefault(require('echarts/lib/echarts'));
|
|
var constants = require('./constants');
|
|
var utils = require('./utils');
|
|
require('echarts/lib/chart/map');
|
|
var Core = _interopDefault(require('./core'));
|
|
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
|
|
return typeof obj;
|
|
} : function (obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
};
|
|
|
|
var _extends = Object.assign || function (target) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var source = arguments[i];
|
|
|
|
for (var key in source) {
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
function getTooltip(dataType, digit, dataStore, metrics, color, labelMap) {
|
|
return {
|
|
formatter: function formatter(item) {
|
|
var tpl = [];
|
|
if (!item.name) return '';
|
|
tpl.push(item.name + '<br>');
|
|
metrics.forEach(function (label, index) {
|
|
var title = labelMap[label] != null ? labelMap[label] : label;
|
|
tpl.push(constants.itemPoint(color[index]) + ' ' + title + ' : ');
|
|
if (dataStore[item.name]) {
|
|
tpl.push(utils.getFormated(dataStore[item.name][label], dataType[label], digit));
|
|
} else {
|
|
tpl.push('-');
|
|
}
|
|
tpl.push('<br>');
|
|
});
|
|
return tpl.join(' ');
|
|
}
|
|
};
|
|
}
|
|
|
|
function getSeries(args) {
|
|
var position = args.position,
|
|
selectData = args.selectData,
|
|
dimension = args.dimension,
|
|
metrics = args.metrics,
|
|
rows = args.rows,
|
|
label = args.label,
|
|
itemStyle = args.itemStyle,
|
|
selectedMode = args.selectedMode,
|
|
roam = args.roam,
|
|
center = args.center,
|
|
aspectScale = args.aspectScale,
|
|
boundingCoords = args.boundingCoords,
|
|
zoom = args.zoom,
|
|
labelMap = args.labelMap,
|
|
scaleLimit = args.scaleLimit,
|
|
mapGrid = args.mapGrid;
|
|
|
|
var result = [];
|
|
var mapBase = {
|
|
type: 'map',
|
|
mapType: position
|
|
};
|
|
|
|
metrics.forEach(function (itemName) {
|
|
var itemResult = _extends({
|
|
name: labelMap[itemName] != null ? labelMap[itemName] : itemName,
|
|
data: [],
|
|
selectedMode: selectedMode,
|
|
roam: roam,
|
|
center: center,
|
|
aspectScale: aspectScale,
|
|
boundingCoords: boundingCoords,
|
|
zoom: zoom,
|
|
scaleLimit: scaleLimit
|
|
}, mapBase);
|
|
|
|
if (mapGrid) {
|
|
Object.keys(mapGrid).forEach(function (key) {
|
|
itemResult[key] = mapGrid[key];
|
|
});
|
|
}
|
|
|
|
setGeoLabel(itemStyle, itemResult, 'itemStyle');
|
|
setGeoLabel(label, itemResult, 'label');
|
|
|
|
rows.forEach(function (row) {
|
|
itemResult.data.push({
|
|
name: row[dimension],
|
|
value: row[itemName],
|
|
selected: selectData
|
|
});
|
|
});
|
|
result.push(itemResult);
|
|
});
|
|
|
|
return result;
|
|
}
|
|
|
|
function setGeoLabel(value, target, label) {
|
|
if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
|
|
target[label] = value;
|
|
} else if (value) {
|
|
target[label] = {
|
|
normal: { show: true },
|
|
emphasis: { show: true }
|
|
};
|
|
}
|
|
}
|
|
|
|
function getLegendMap(args) {
|
|
var metrics = args.metrics,
|
|
legendName = args.legendName,
|
|
labelMap = args.labelMap;
|
|
|
|
if (!legendName && !labelMap) return { data: metrics };
|
|
var data = labelMap ? metrics.map(function (item) {
|
|
return labelMap[item] == null ? item : labelMap[item];
|
|
}) : metrics;
|
|
return {
|
|
data: data,
|
|
formatter: function formatter(name) {
|
|
return legendName[name] != null ? legendName[name] : name;
|
|
}
|
|
};
|
|
}
|
|
|
|
function registerMap(args, mapOrigin) {
|
|
var _once = args._once,
|
|
registerSign = args.registerSign,
|
|
beforeRegisterMap = args.beforeRegisterMap,
|
|
beforeRegisterMapOnce = args.beforeRegisterMapOnce,
|
|
registerSignOnce = args.registerSignOnce,
|
|
position = args.position,
|
|
specialAreas = args.specialAreas;
|
|
|
|
if (!_once[registerSign]) {
|
|
if (beforeRegisterMap) mapOrigin = beforeRegisterMap(mapOrigin);
|
|
if (beforeRegisterMapOnce && !_once[registerSignOnce]) {
|
|
_once[registerSignOnce] = true;
|
|
mapOrigin = beforeRegisterMapOnce(mapOrigin);
|
|
}
|
|
_once[registerSign] = true;
|
|
echarts.registerMap(position, mapOrigin, specialAreas);
|
|
}
|
|
}
|
|
|
|
var map$1 = function map$$1(columns, rows, settings, extra) {
|
|
var _settings$position = settings.position,
|
|
position = _settings$position === undefined ? 'china' : _settings$position,
|
|
_settings$selectData = settings.selectData,
|
|
selectData = _settings$selectData === undefined ? false : _settings$selectData,
|
|
selectedMode = settings.selectedMode,
|
|
_settings$label = settings.label,
|
|
label = _settings$label === undefined ? true : _settings$label,
|
|
_settings$dataType = settings.dataType,
|
|
dataType = _settings$dataType === undefined ? {} : _settings$dataType,
|
|
_settings$digit = settings.digit,
|
|
digit = _settings$digit === undefined ? 2 : _settings$digit,
|
|
_settings$dimension = settings.dimension,
|
|
dimension = _settings$dimension === undefined ? columns[0] : _settings$dimension,
|
|
roam = settings.roam,
|
|
center = settings.center,
|
|
aspectScale = settings.aspectScale,
|
|
boundingCoords = settings.boundingCoords,
|
|
zoom = settings.zoom,
|
|
scaleLimit = settings.scaleLimit,
|
|
_settings$legendName = settings.legendName,
|
|
legendName = _settings$legendName === undefined ? {} : _settings$legendName,
|
|
_settings$labelMap = settings.labelMap,
|
|
labelMap = _settings$labelMap === undefined ? {} : _settings$labelMap,
|
|
mapGrid = settings.mapGrid,
|
|
itemStyle = settings.itemStyle,
|
|
positionJsonLink = settings.positionJsonLink,
|
|
beforeRegisterMap = settings.beforeRegisterMap,
|
|
beforeRegisterMapOnce = settings.beforeRegisterMapOnce,
|
|
_settings$mapURLProfi = settings.mapURLProfix,
|
|
mapURLProfix = _settings$mapURLProfi === undefined ? 'https://unpkg.com/echarts@3.6.2/map/json/' : _settings$mapURLProfi,
|
|
_settings$specialArea = settings.specialAreas,
|
|
specialAreas = _settings$specialArea === undefined ? {} : _settings$specialArea;
|
|
|
|
var mapOrigin = settings.mapOrigin;
|
|
var metrics = columns.slice();
|
|
if (settings.metrics) {
|
|
metrics = settings.metrics;
|
|
} else {
|
|
metrics.splice(columns.indexOf(dimension), 1);
|
|
}
|
|
var tooltipVisible = extra.tooltipVisible,
|
|
legendVisible = extra.legendVisible,
|
|
color = extra.color,
|
|
_once = extra._once;
|
|
|
|
var dataStore = {};
|
|
rows.forEach(function (row) {
|
|
dataStore[row[dimension]] = row;
|
|
});
|
|
var tooltip = tooltipVisible && getTooltip(dataType, digit, dataStore, metrics, color, labelMap);
|
|
var legend = legendVisible && getLegendMap({ metrics: metrics, legendName: legendName, labelMap: labelMap });
|
|
var seriesParams = {
|
|
position: position,
|
|
selectData: selectData,
|
|
label: label,
|
|
itemStyle: itemStyle,
|
|
dimension: dimension,
|
|
metrics: metrics,
|
|
rows: rows,
|
|
selectedMode: selectedMode,
|
|
roam: roam,
|
|
center: center,
|
|
aspectScale: aspectScale,
|
|
boundingCoords: boundingCoords,
|
|
zoom: zoom,
|
|
labelMap: labelMap,
|
|
scaleLimit: scaleLimit,
|
|
mapGrid: mapGrid
|
|
};
|
|
var series = getSeries(seriesParams);
|
|
var registerOptions = {
|
|
_once: _once,
|
|
beforeRegisterMap: beforeRegisterMap,
|
|
beforeRegisterMapOnce: beforeRegisterMapOnce,
|
|
registerSign: 'MAP_REGISTER_' + position,
|
|
registerSignOnce: 'ONCE_MAP_REGISTER_' + position,
|
|
position: position,
|
|
specialAreas: specialAreas
|
|
};
|
|
if (mapOrigin) {
|
|
registerMap(registerOptions, mapOrigin);
|
|
return { series: series, tooltip: tooltip, legend: legend };
|
|
} else {
|
|
return utils.getMapJSON({
|
|
position: position,
|
|
positionJsonLink: positionJsonLink,
|
|
beforeRegisterMapOnce: beforeRegisterMapOnce,
|
|
mapURLProfix: mapURLProfix
|
|
}).then(function (json) {
|
|
registerMap(registerOptions, json);
|
|
return { series: series, tooltip: tooltip, legend: legend };
|
|
});
|
|
}
|
|
};
|
|
|
|
var index = _extends({}, Core, {
|
|
name: 'VeMap',
|
|
data: function data() {
|
|
this.chartHandler = map$1;
|
|
return {};
|
|
}
|
|
});
|
|
|
|
module.exports = index;
|