mkl_power_box/components/labour-migrate-china-map.js

321 lines
13 KiB
JavaScript

/**
* 顶部header
*/
Vue.component("labour-migrate-china-map", {
template: `
<div :style="{'height': height+'px'}" ref="map"></div>
`,
props: {
data:{
type:Object
},
height:{
type:Number
}
},
data() {
return {
option:{},
}
},
mounted(){
this.loadMap(this.data)
},
methods: {
loadMap(outdata) {
console.log(outdata)
/**
* Created by User on 2020/2/24.
*/
var province = {
'黑龙江': [127.9688, 45.368],
'内蒙古': [110.3467, 41.4899],
"吉林": [125.8154, 44.2584],
'北京市': [116.4551, 40.2539],
"辽宁": [123.1238, 42.1216],
"河北": [114.4995, 38.1006],
"天津": [117.4219, 39.4189],
"山西": [112.3352, 37.9413],
"陕西": [109.1162, 34.2004],
"甘肃": [103.5901, 36.3043],
"宁夏": [106.3586, 38.1775],
"青海": [101.4038, 36.8207],
"新疆": [87.9236, 43.5883],
"西藏": [91.11, 29.97],
"四川": [103.9526, 30.7617],
"重庆": [108.384366, 30.439702],
"山东": [117.1582, 36.8701],
"河南": [113.4668, 34.6234],
"江苏": [118.8062, 31.9208],
"安徽": [117.29, 32.0581],
"湖北": [114.3896, 30.6628],
"浙江": [119.5313, 29.8773],
"福建": [119.4543, 25.9222],
"江西": [116.0046, 28.6633],
"湖南": [113.0823, 28.2568],
"贵州": [106.6992, 26.7682],
"云南": [102.9199, 25.4663],
"广东": [113.12244, 23.009505],
"广西": [108.479, 23.1152],
"海南": [110.3893, 19.8516],
'上海': [121.4648, 31.2891]
};
var points = []
var jionData=[]
var valueData = []
var names = []
if(outdata.chinaDatas) {
for (let i = 0; i < outdata.chinaDatas.length; i++) {
var name = outdata.chinaDatas[i][0].name == "北京"?"北京市":outdata.chinaDatas[i][0].name;
valueData.push(outdata.chinaDatas[i][0].value)
names.push(outdata.chinaDatas[i][0].name)
points.push({
value:province[name],
})
jionData.push(
{
name:outdata.chinaDatas[i][0].name,
data:outdata.chinaDatas[i][0].value,
attacked:outdata.toCity,
coords: [
province[name],
outdata.toCityJW,
],
},
)
}
}
points.push({
name:outdata.toCity,
value:outdata.toCityJW,
itemStyle: {
color: "#db8f08", //被攻击点的颜色
},
})
var myChart = echarts.init(this.$refs.map);
echarts.getMap('china').geoJson.features;
this.option = {
tooltip: {
trigger: 'item',
borderColor: '#FFFFCC',
showDelay: 0,
hideDelay: 0,
enterable: true,
transitionDuration: 0,
extraCssText: 'z-index:100',
formatter: function(params, ticket, callback) {
var res = "";
if(params.componentSubType=="effectScatter") {
var name = names[params.dataIndex];
var value = valueData[params.dataIndex];
if(points[points.length-1].name != params.name){
res = "<div style='color:#fff;'>地址:" + name+"<br/>人数:"+value+"(人)</div>";
}else {
res = "<div style='color:#fff;'>地址:" + points[points.length-1].name+"</div>";
}
return res;
}else if(params.componentSubType=="lines"){
var name = params.data.name;
var value = params.data.data;
var toname =params.data.attacked
res = "<div style='color:#fff;'>地址:" + name+">"+toname+"<br/>人数:"+value+"(人)</div>";
return res;
}
// else{
// var name = params.name;
// return name;
// }
//根据业务自己拓展要显示的内容
}
},
geo: {
map: 'china',
show: true,
roam: false,
zoom: 1.17,
label: {
emphasis: {
show: false,
}
},
layoutSize: "100%",
itemStyle: {
// normal: {
// areaColor: '#000', //背景颜色
// borderColor: '#8ac2fb', //省划分边线
// borderWidth: 10, //边线的粗细
// },
// emphasis: {
// areaColor: '#002d90' , //指上背景限色
// },
areaColor: "#86c2f8",
borderColor: "#86c2f8",
shadowColor: "#86c2f8",
shadowBlur: 25,
borderWidth: 5,
},
},
series: [
{
type: "lines",
zlevel: 2,
effect: {
show: true,
period: 4, //箭头指向速度,值越小速度越快
trailLength: 0.4, //特效尾迹长度[0,1]值越大,尾迹越长重
symbol: "arrow", //箭头图标
symbolSize: 10, //图标大小
},
lineStyle: {
normal: {
color: "#db8f08", //攻击线条的颜色
/* function (value){ //随机颜色
['#f21347','#f3243e','#f33736','#f34131','#f34e2b',
'#f56321','#f56f1c','#f58414','#f58f0e','#f5a305',
'#e7ab0b','#dfae10','#d5b314','#c1bb1f','#b9be23',
'#a6c62c','#96cc34','#89d23b','#7ed741','#77d64c',
'#71d162','#6bcc75','#65c78b','#5fc2a0','#5abead',
'#52b9c7','#4fb6d2','#4ab2e5']
return "#"+("00000"+((Math.random()*16777215+0.5)>>0).toString(16)).slice(-6);
}*/
width: 2, //线条宽度
opacity: 0.1, //尾迹线条透明度
curveness: 0.3, //尾迹线条曲直度
},
},
data: jionData
},
{
type: 'map',
roam: false,
zoom: 1.15,
map: 'china', //使用
label: {
normal: {
show: true,
fontSize:14, //省会字体大小
textStyle: {
color: '#eeeeee',
}
},
emphasis: {
show: false,
color: '#ffffff', //指上省会字体颜色
}
},
itemStyle: {
normal: {
areaColor: {
type: "radial",
x: 0.5,
y: 0.5,
r: 0.8,
colorStops: [
{
offset: 0,
color: "#1c2a4c", // 0% 处的颜色
},
{
offset: 1,
color: "#1f335e", // 100% 处的颜色
},
],
globalCoord: true, // 缺省为 false
},
shadowColor: "rgb(58,115,192)",
borderColor: '#8ac2fb'
},
// normal: {
// areaColor: '#141e37', //背景颜色
// borderColor: '#8ac2fb', //省划分边线
// borderWidth: 1, //边线的粗细
// },
emphasis: {
areaColor: '#22578b' , //指上背景限色
textStyle: {
color: '#ffffff',
}
}
},
// points.push({
// name:outdata.toCity,
data: jionData.map(function(dataItem) {
return {
name: dataItem.name,
value: dataItem.data,
seriesName:points[points.length-1].name
};
}),
},
{
type: "effectScatter",
coordinateSystem: "geo",
showEffectOn: "render",
zlevel: 1,
rippleEffect: {
period: 15,
scale: 4,
brushType: "fill",
},
hoverAnimation: true,
label: {
normal: {
formatter: "{b}",
position: "right",
offset: [15, 0],
color: "#4575ff",
show: true,
},
},
itemStyle: {
normal: {
color: "#4575ff",
/* function (value){ //随机颜色
return "#"+("00000"+((Math.random()*16777215+0.5)>>0).toString(16)).slice(-6);
}*/
shadowBlur: 10,
shadowColor: "#333",
},
},
symbolSize: 12,
data: points,
}, //地图线的动画效果
],
};
myChart.setOption(this.option, true);
var currentIndex = -1;
var timeTicket = setInterval(function() {
var dataLen = jionData.length;
currentIndex = (currentIndex + 1) % dataLen;
// 显示 tooltip
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 2,
dataIndex: currentIndex
});
}, 3000);
},
},
watch: {
data:function () {
this.loadMap(this.data)
}
},
})