181 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
<template>
 | 
						|
	<view class="content">
 | 
						|
		<view class="themapdiv">
 | 
						|
			<view class="chart pt-10">
 | 
						|
				<view id="mapChart2" class="mapChart2"></view>
 | 
						|
			</view>
 | 
						|
		</view>
 | 
						|
	</view>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
	import {
 | 
						|
		getMyMarketColor
 | 
						|
	} from "@/config/mine.js";
 | 
						|
	import {
 | 
						|
		_debounce
 | 
						|
	} from "@/config/common.js";
 | 
						|
	import axios from "axios";
 | 
						|
	export default {
 | 
						|
		data() {
 | 
						|
			return {
 | 
						|
				countryList: [],
 | 
						|
				myChart: null,
 | 
						|
				chinaCode: "world",
 | 
						|
				curMapName: "China", // 当前地图名
 | 
						|
				colorList: [],
 | 
						|
			}
 | 
						|
		},
 | 
						|
		onShow() {
 | 
						|
			this.getMapData(this.chinaCode);
 | 
						|
			window.addEventListener("resize", this.resizeCharts);
 | 
						|
		},
 | 
						|
		beforeDestroy() {
 | 
						|
			window.addEventListener("resize", this.resizeCharts);
 | 
						|
		},
 | 
						|
		methods: {
 | 
						|
			async drawMapChart(mapName, mapJSON) {
 | 
						|
				if (
 | 
						|
					this.myChart != null &&
 | 
						|
					this.myChart != "" &&
 | 
						|
					this.myChart != undefined
 | 
						|
				) {
 | 
						|
					this.myChart.dispose();
 | 
						|
				}
 | 
						|
				this.myChart = this.$echarts.init(document.getElementById("mapChart2"));
 | 
						|
				this.$echarts.registerMap(mapName, mapJSON);
 | 
						|
				// 获取颜色列表
 | 
						|
				const res = await getMyMarketColor();
 | 
						|
				const thecolorJson = res.data;
 | 
						|
 | 
						|
				// 修改颜色列表
 | 
						|
				thecolorJson.forEach((item) => {
 | 
						|
					item.itemStyle = {
 | 
						|
						normal: {
 | 
						|
							areaColor: "#005BAC", // 选中区域的颜色
 | 
						|
						},
 | 
						|
					};
 | 
						|
				});
 | 
						|
 | 
						|
 | 
						|
				this.myChart.setOption({
 | 
						|
					series: [{
 | 
						|
						type: "map",
 | 
						|
						map: mapName,
 | 
						|
						roam: false, // 是否开启鼠标缩放和平移漫游
 | 
						|
						zoom: 2,
 | 
						|
						selectedMode: "false", // 是否允许选中多个区域
 | 
						|
						label: {
 | 
						|
							show: false, //地图上地区文字的现实
 | 
						|
							color: "#a8e6e1",
 | 
						|
						},
 | 
						|
						zoom: 1, // 设置初始缩放级别
 | 
						|
						zoomLimit: {
 | 
						|
							// 设置缩放级别的限制范围
 | 
						|
							min: 1, // 最小缩放级别
 | 
						|
							max: 1, // 最大缩放级别
 | 
						|
						},
 | 
						|
 | 
						|
						emphasis: {
 | 
						|
							label: {
 | 
						|
								show: true,
 | 
						|
								color: "#ffffff",
 | 
						|
							},
 | 
						|
						},
 | 
						|
						itemStyle: {
 | 
						|
							normal: {
 | 
						|
								areaColor: "#14517c",
 | 
						|
								borderColor: "#14517c",
 | 
						|
								borderWidth: 1,
 | 
						|
							},
 | 
						|
							//鼠标悬浮区域上的背景颜色
 | 
						|
							emphasis: {
 | 
						|
								show: true,
 | 
						|
								areaColor: "#005BAC",
 | 
						|
							},
 | 
						|
						},
 | 
						|
						tooltip: {
 | 
						|
							trigger: "item",
 | 
						|
							show: true,
 | 
						|
							backgroundColor: "transparent",
 | 
						|
 | 
						|
							textStyle: {
 | 
						|
								width: 300,
 | 
						|
								height: 300,
 | 
						|
							},
 | 
						|
						},
 | 
						|
 | 
						|
						// data: this.initMapData(mapJSON),
 | 
						|
						data: thecolorJson, // 使用修改后的颜色列表作为地图数据
 | 
						|
					}, ],
 | 
						|
				});
 | 
						|
 | 
						|
 | 
						|
			},
 | 
						|
			initMapData(mapJson) {
 | 
						|
				var thecolorJson = this.colorList;
 | 
						|
				thecolorJson.map((item) => {
 | 
						|
					item.itemStyle = {
 | 
						|
						normal: {
 | 
						|
							areaColor: "#005BAC", //选中区域的颜色
 | 
						|
						},
 | 
						|
					};
 | 
						|
				});
 | 
						|
				let mapData = [];
 | 
						|
				for (let i = 0; i < mapJson.features.length; i++) {
 | 
						|
					mapData.push({
 | 
						|
						name: mapJson.features[i].properties.name
 | 
						|
					});
 | 
						|
				}
 | 
						|
				// console.log("🌈thecolorJson", thecolorJson);
 | 
						|
				return thecolorJson;
 | 
						|
			},
 | 
						|
 | 
						|
			// 浏览器窗口大小改变时,重新加载图表以自适应
 | 
						|
			resizeCharts: _debounce(function() {
 | 
						|
				this.$echarts.init(document.getElementById("mapChart2")).resize();
 | 
						|
			}, 500),
 | 
						|
			// 获取地图数据
 | 
						|
			getMapData(map) {
 | 
						|
				axios
 | 
						|
					.get(`/static/map/${map}.json`)
 | 
						|
					.then((res) => {
 | 
						|
						if (res.status == 200) {
 | 
						|
							const mapJSON = res.data;
 | 
						|
							this.drawMapChart(this.curMapName, mapJSON);
 | 
						|
						}
 | 
						|
					})
 | 
						|
					.catch((err) => {
 | 
						|
						this.$message({
 | 
						|
							message: err,
 | 
						|
							type: "error",
 | 
						|
							showClose: true
 | 
						|
						});
 | 
						|
					});
 | 
						|
			},
 | 
						|
		}
 | 
						|
	}
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
.content{
 | 
						|
	background-color: #ffffff;
 | 
						|
	height: 100vh;
 | 
						|
	.chart{
 | 
						|
		 #mapChart2 {
 | 
						|
		    width: 100%;
 | 
						|
		    height: 580rpx;
 | 
						|
		    position: relative;
 | 
						|
		  }
 | 
						|
	}
 | 
						|
	 .themapdiv {
 | 
						|
	    width: 100%;
 | 
						|
	    background: #ffffff;
 | 
						|
	    //   height: 952px;
 | 
						|
	    img {
 | 
						|
	      width: 100%;
 | 
						|
	      height: 100%;
 | 
						|
	    }
 | 
						|
	  }
 | 
						|
}
 | 
						|
</style> |