qianming 3 years ago
parent 45aee04d6f
commit 92d1c07554

@ -1,544 +0,0 @@
<template>
<div :style="styleObj">
<v-chart :options="options" autoresize/>
</div>
</template>
<script>
import echarts from 'echarts';
let geoMap = {
'上海': '/assets/map/上海市.json',
'云南': '/assets/map/云南省.json',
'内蒙古': '/assets/map/内蒙古自治区.json',
'北京': '/assets/map/北京市.json',
'台湾': '/assets/map/台湾省.json',
'吉林': '/assets/map/吉林省.json',
'天津': '/assets/map/天津市.json',
'宁夏': '/assets/map/宁夏回族自治区.json',
'安徽': '/assets/map/安徽省.json',
'山东': '/assets/map/山东省.json',
'山西': '/assets/map/山西省.json',
'广东': '/assets/map/广东省.json',
'广西': '/assets/map/广西壮族自治区.json',
'新疆': '/assets/map/新疆维吾尔自治区.json',
'江苏': '/assets/map/江苏省.json',
'江西': '/assets/map/江西省.json',
'河北': '/assets/map/河北省.json',
'河南': '/assets/map/河南省.json',
'海南': '/assets/map/海南省.json',
'湖北': '/assets/map/湖北省.json',
'湖南': '/assets/map/湖南省.json',
'澳门': '/assets/map/澳门特别行政区.json',
'甘肃': '/assets/map/甘肃省.json',
'福建': '/assets/map/福建省.json',
'西藏': '/assets/map/西藏自治区.json',
'贵州': '/assets/map/贵州省.json',
'辽宁': '/assets/map/辽宁省.json',
'重庆': '/assets/map/重庆市.json',
'陕西': '/assets/map/陕西省.json',
'青海': '/assets/map/青海省.json',
'香港': '/assets/map/香港特别行政区.json',
'黑龙江': '/assets/map/黑龙江省.json',
};
export default {
name: 'allMap',
data() {
return {
myCharts: null,
geo: {
map: "china",
show: true,
roam: false,
label: {
emphasis: {
show: false
}
},
layoutSize: "80%",
itemStyle: {
normal: {
borderColor: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "#00F6FF"
},
{
offset: 1,
color: "#53D9FF"
}
],
false
),
borderWidth: 3,
shadowColor: "rgba(10,76,139,1)",
shadowOffsetY: 0,
shadowBlur: 60
}
}
},
series:[],
}
},
mounted() {
this.getGeoJson(100000)
},
methods: {
getGeoJson(adcode) {
let that = this;
AMapUI.loadUI(["geo/DistrictExplorer"], DistrictExplorer => {
var districtExplorer = new DistrictExplorer();
districtExplorer.loadAreaNode(adcode, function (error, areaNode) {
if (error) {
console.error(error);
return;
}
let Json = areaNode.getSubFeatures();
if (Json.length > 0) {
that.geoJson.features = Json;
} else if (Json.length === 0) {
that.geoJson.features = that.geoJson.features.filter(
item => item.properties.adcode == adcode
);
if (that.geoJson.features.length === 0) return;
}
that.getMapData();
});
});
},
//
getMapData() {
let mapData = {},
pointData = {},
sum = {}
this.timeTitle.forEach(item => {
mapData[item] = []
pointData[item] = []
sum[item] = 0
this.geoJson.features.forEach(j => {
let value = Math.random() * 3000
mapData[item].push({
name: j.properties.name,
value: value,
cityCode: j.properties.adcode
})
pointData[item].push({
name: j.properties.name,
value: [j.properties.center[0], j.properties.center[1], value],
cityCode: j.properties.adcode
})
sum[item] += value
})
mapData[item] = mapData[item].sort(function (a, b) {
return b.value - a.value
});
})
this.initEcharts(mapData, pointData, sum)
},
initEcharts(mapData, pointData, sum) {
this.myChart = echarts.init(this.$refs.allMap)
if (this.parentInfo.length === 1) {
echarts.registerMap('china', this.geoJson); //
} else {
echarts.registerMap('map', this.geoJson); //
}
var option = {
timeline: {
data: this.timeTitle,
axisType: 'category',
autoPlay: true,
playInterval: 3000,
left: '10%',
right: '10%',
bottom: '2%',
width: '80%',
label: {
normal: {
textStyle: {
color: 'rgb(179, 239, 255)'
}
},
emphasis: {
textStyle: {
color: '#fff'
}
}
},
symbolSize: 10,
lineStyle: {
color: '#8df4f4'
},
checkpointStyle: {
borderColor: '#8df4f4',
color: '#53D9FF',
borderWidth: 2,
},
controlStyle: {
showNextBtn: true,
showPrevBtn: true,
normal: {
color: '#53D9FF',
borderColor: '#53D9FF'
},
emphasis: {
color: 'rgb(58,115,192)',
borderColor: 'rgb(58,115,192)'
}
},
},
baseOption: {
animation: true,
animationDuration: 900,
animationEasing: 'cubicInOut',
animationDurationUpdate: 900,
animationEasingUpdate: 'cubicInOut',
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
},
grid: {
right: '2%',
top: '12%',
bottom: '8%',
width: '20%'
},
toolbox: {
feature: {
restore: {
show: false
},
dataView: {
optionToContent: function (opt) {
let series = opt.series[0].data //线
let tdHeads =
'<th style="padding: 0 20px">所在地区</th><th style="padding: 0 20px">销售额</th>' //
let tdBodys = '' //
let table =
`<table border="1" style="margin-left:20px;border-collapse:collapse;font-size:14px;text-align:left;"><tbody><tr>${tdHeads} </tr>`
for (let i = 0; i < series.length; i++) {
table += `<tr>
<td style="padding: 0 50px">${series[i].name}</td>
<td style="padding: 0 50px">${series[i].value.toFixed(2)}</td>
</tr>`
}
table += '</tbody></table>'
return table
}
},
saveAsImage: {
name: this.parentInfo[this.parentInfo.length - 1].cityName + '销售额统计图'
},
dataZoom: {
show: false
},
magicType: {
show: false
}
},
iconStyle: {
normal: {
borderColor: '#1990DA'
}
},
top: 15,
right: 35
},
geo: {
map: this.parentInfo.length === 1 ? 'china' : 'map',
zoom: 1.1,
roam: true,
center: this.parentInfo.length === 1 ? ['118.83531246', '32.0267395887'] : false,
tooltip: {
trigger: 'item',
formatter: (p) => {
let val = p.value[2];
if (window.isNaN(val)) {
val = 0;
}
let txtCon =
"<div style='text-align:left'>" + p.name + ":<br />销售额:" + val.toFixed(
2) + '万</div>';
return txtCon;
}
},
label: {
normal: {
show: true,
color: "rgb(249, 249, 249)", //
formatter: p => {
switch (p.name) {
case '内蒙古自治区':
p.name = "内蒙古"
break;
case '西藏自治区':
p.name = "西藏"
break;
case '新疆维吾尔自治区':
p.name = "新疆"
break;
case '宁夏回族自治区':
p.name = "宁夏"
break;
case '广西壮族自治区':
p.name = "广西"
break;
case '香港特别行政区':
p.name = "香港"
break;
case '澳门特别行政区':
p.name = "澳门"
break;
default:
break;
}
return p.name;
}
},
emphasis: {
show: true,
color: '#f75a00',
}
},
itemStyle: {
normal: {
areaColor: '#24CFF4',
borderColor: '#53D9FF',
borderWidth: 1.3,
shadowBlur: 15,
shadowColor: 'rgb(58,115,192)',
shadowOffsetX: 7,
shadowOffsetY: 6,
},
emphasis: {
areaColor: '#8dd7fc',
borderWidth: 1.6,
shadowBlur: 25,
}
},
},
},
options: []
}
this.timeTitle.forEach(item => {
var xData = [],
yData = []
var min = mapData[item][mapData[item].length - 1].value
var max = mapData[item][0].value
if (mapData[item].length === 1) {
min = 0
}
mapData[item].forEach(c => {
xData.unshift(c.name)
yData.unshift(c.value)
})
option.options.push({
title: [{
left: 'center',
top: 10,
text: item + this.parentInfo[this.parentInfo.length - 1].cityName +
'年' +
'销售额统计图(可点击下钻到县)',
textStyle: {
color: 'rgb(179, 239, 255)',
fontSize: 16
},
},
{
text: "销售总额:" + sum[item].toFixed(2) + '万',
left: 'center',
top: '6.5%',
textStyle: {
color: '#FFAC50',
fontSize: 26
}
}
],
visualMap: {
min: min,
max: max,
left: '3%',
bottom: '5%',
calculable: true,
seriesIndex: [0],
inRange: {
color: ['#24CFF4', '#2E98CA', '#1E62AC']
},
textStyle: {
color: '#24CFF4'
}
},
xAxis: {
type: 'value',
scale: true,
position: 'top',
boundaryGap: false,
splitLine: {
show: false
},
axisLine: {
show: true,
lineStyle: {
color: '#455B77'
}
},
axisTick: {
show: false
},
axisLabel: {
margin: 2,
textStyle: {
fontSize: 12,
color: '#c0e6f9'
}
},
},
yAxis: {
type: 'category',
nameGap: 16,
axisLine: {
show: true,
lineStyle: {
color: '#455B77'
}
},
axisTick: {
show: false,
},
axisLabel: {
interval: 0,
textStyle: {
color: '#c0e6f9'
}
},
data: xData
},
series: [{
name: item + '销售额度',
type: 'map',
geoIndex: 0,
map: this.parentInfo.length === 1 ? 'china' : 'map',
roam: true,
zoom: 1.3,
tooltip: {
trigger: "item",
formatter: p => {
let val = p.value;
if (p.name == '南海诸岛') return
if (window.isNaN(val)) {
val = 0;
}
let txtCon =
"<div style='text-align:left'>" + p.name +
":<br />销售额:" + val.toFixed(2) + '万</div>';
return txtCon;
}
},
label: {
normal: {
show: false,
},
emphasis: {
show: false,
}
},
data: mapData[item],
}, {
name: '散点',
type: 'effectScatter',
coordinateSystem: 'geo',
rippleEffect: {
brushType: 'fill'
},
itemStyle: {
normal: {
color: '#F4E925',
shadowBlur: 10,
shadowColor: '#333'
}
},
data: pointData[item],
// symbolSize: 8,
symbolSize: function (val) {
let value = val[2]
if (value == max) {
return 27
}
return 10
},
showEffectOn: 'render', //
},
{
type: 'bar',
barGap: '-100%',
barCategoryGap: '55%',
itemStyle: {
normal: {
barBorderRadius: 30,
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
offset: 0,
color: 'rgb(57,89,255,1)'
}, {
offset: 1,
color: 'rgb(46,200,207,1)'
}]),
},
emphasis: {
show: false
}
},
data: yData
}
]
})
})
this.myChart.setOption(option, true)
this.myChart.off('click');
this.myChart.on('click', this.echartsMapClick);
},
//
echartsMapClick(params) {
if (!params.data) {
return
}
if (
this.parentInfo[this.parentInfo.length - 1].code ==
params.data.cityCode
) {
return;
}
let data = params.data;
this.parentInfo.push({
cityName: data.name,
code: data.cityCode
});
this.getGeoJson(data.cityCode);
},
//
chooseArea(val, index) {
if (this.parentInfo.length === index + 1) {
return
}
this.parentInfo.splice(index + 1)
this.getGeoJson(this.parentInfo[this.parentInfo.length - 1].code);
}
}
}
</script>
<style lang="scss" scoped>
.echartMap {
width: 100%;
height: 100%;
}
.echarts {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
Loading…
Cancel
Save