|
@@ -0,0 +1,169 @@
|
|
|
+<template>
|
|
|
+ <div class="home-map w-full h-full">
|
|
|
+ <ECharts
|
|
|
+ id="home-map-echarts"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ ref="echartsRef"
|
|
|
+ :loading="loading"
|
|
|
+ :fullOptions="fullOptions"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+ import { chartOptions } from '@/components/ECharts/optionsConfig'
|
|
|
+ import { useOutsideHomeStore } from '@/stores/modules/home'
|
|
|
+ import { $mitt } from '@/utils'
|
|
|
+
|
|
|
+ const { API_GET_GEO_JSON_GET } = useRequest()
|
|
|
+ const useHomeStore = useOutsideHomeStore()
|
|
|
+ const loading = ref(true)
|
|
|
+ const echartsRef = ref()
|
|
|
+
|
|
|
+ var data = [
|
|
|
+ { name: '北京', value: 5 },
|
|
|
+ { name: '天津', value: 14 },
|
|
|
+ { name: '河北', value: 157 },
|
|
|
+ { name: '山西', value: 110 },
|
|
|
+ { name: '内蒙古', value: 40 },
|
|
|
+ { name: '辽宁', value: 40 },
|
|
|
+ { name: '吉林', value: 40 },
|
|
|
+ { name: '黑龙江', value: 60 },
|
|
|
+ { name: '上海', value: 10 },
|
|
|
+ { name: '江苏', value: 60 },
|
|
|
+ { name: '浙江', value: 50 },
|
|
|
+ { name: '安徽', value: 151 },
|
|
|
+ { name: '福建', value: 60 },
|
|
|
+ { name: '江西', value: 74 },
|
|
|
+ { name: '山东', value: 200 },
|
|
|
+ { name: '河南', value: 100 },
|
|
|
+ { name: '湖北', value: 40 },
|
|
|
+ { name: '湖南', value: 50 },
|
|
|
+ { name: '重庆', value: 40 },
|
|
|
+ { name: '四川', value: 120 },
|
|
|
+ { name: '贵州', value: 135 },
|
|
|
+ { name: '云南', value: 90 },
|
|
|
+ { name: '西藏', value: 25 },
|
|
|
+ { name: '陕西', value: 100 },
|
|
|
+ { name: '甘肃', value: 60 },
|
|
|
+ { name: '青海', value: 20 },
|
|
|
+ { name: '宁夏', value: 110 },
|
|
|
+ { name: '新疆', value: 32 },
|
|
|
+ { name: '广东', value: 10 },
|
|
|
+ { name: '广西', value: 100 },
|
|
|
+ { name: '海南', value: 40 }
|
|
|
+ ]
|
|
|
+
|
|
|
+ var toolTipData = [
|
|
|
+ {
|
|
|
+ name: '湖南',
|
|
|
+ value: 5,
|
|
|
+ areas: ['长沙', '株洲', '益阳']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '安徽',
|
|
|
+ value: 3,
|
|
|
+ areas: ['合肥', '芜湖']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '山东',
|
|
|
+ value: 80,
|
|
|
+ areas: ['济南', '青岛', '淄博', '烟台', '威海', '临沂']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '四川',
|
|
|
+ value: 35,
|
|
|
+ areas: ['成都', '攀枝花', '乐山', '泸州']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '云南',
|
|
|
+ value: 27,
|
|
|
+ areas: ['昆明', '玉溪', '丽江', '普洱', '临沧']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '黑龙江',
|
|
|
+ value: 13,
|
|
|
+ areas: ['哈尔滨', '鹤岗', '黑河', '绥化', '大庆', '佳木斯']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '甘肃',
|
|
|
+ value: 42,
|
|
|
+ areas: ['兰州', '嘉峪关', '天水', '酒泉']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '西藏',
|
|
|
+ value: 74,
|
|
|
+ areas: []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ var geoCoordMap = {
|
|
|
+ 黑龙江: [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.611053, 43.828171],
|
|
|
+ 西藏: [91.117212, 29.646922],
|
|
|
+ 四川: [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],
|
|
|
+ 台湾: [120.702967, 24.123621],
|
|
|
+ 上海: [121.4648, 31.2891]
|
|
|
+ }
|
|
|
+
|
|
|
+ const fullOptions = ref({ options: {} })
|
|
|
+
|
|
|
+ const setData = async (code = 100000) => {
|
|
|
+ const geoJSON = await API_GET_GEO_JSON_GET({ code })
|
|
|
+ console.log(geoJSON)
|
|
|
+ loading.value = false
|
|
|
+ fullOptions.value.options = chartOptions.setMapOption(data, geoJSON, toolTipData, geoCoordMap)
|
|
|
+ }
|
|
|
+ const init = async () => {
|
|
|
+ setData()
|
|
|
+ echartsRef.value.myChart.on('click', async function (params) {
|
|
|
+ if (params.data) {
|
|
|
+ const { adcode, name, level } = params.data
|
|
|
+ if (level === 'district' || useHomeStore.codes[useHomeStore.codes.length - 1] === adcode) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ console.log(adcode, name, level)
|
|
|
+ useHomeStore.setCode(adcode)
|
|
|
+ setData(adcode)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ // $mitt.on('onPreLevel', () => {
|
|
|
+ // useHomeStore.codes.pop()
|
|
|
+ // setData(useHomeStore.codes[useHomeStore.codes.length - 1])
|
|
|
+ // })
|
|
|
+ }
|
|
|
+ onMounted(() => {
|
|
|
+ init()
|
|
|
+ })
|
|
|
+ onUnmounted(() => {
|
|
|
+ echartsRef.value.myChart.off('click')
|
|
|
+ echartsRef.value.myChart.dispose()
|
|
|
+ })
|
|
|
+</script>
|