import { defineComponent, watch, shallowReactive, nextTick, ref, onUnmounted } from 'vue'; // 声明类型 const PropsType = { cdata: { type: Array, require: true } } as const // 定义主体 export default defineComponent({ props: PropsType, setup(props) { // 定时器 // let intervalId = 0 // 地图选择 // let preSelectMapIndex = 0 // ref const chartRef = ref() // 配置项 let options = shallowReactive({}) // 设置点的位置(经纬度) const geoCoordMap = { 厦门市: [118.11022, 24.490474, 20], 福州市: [119.206239, 26.275302, 20], 泉州市: [118.589421, 24.908853, 20], 漳州市: [117.561801, 24.510897, 20], 龙岩市: [116.82978, 25.391603, 20], 莆田市: [119.007558, 25.591011, 20], 三明市: [117.435001, 26.465444, 20], 南平市: [118.178459, 27.535627, 20], 宁德市: [119.527082, 27.15924, 20], } const seriesData = [ { name: '厦门市', }, { name: '福州市', }, { name: '泉州市', }, { name: '漳州市', }, { name: '龙岩市', }, { name: '莆田市', }, { name: '三明市', }, { name: '南平市', }, { name: '宁德市', }, ] const convertData = function (data) { const scatterData = []; for (let i = 0; i < data.length; i++) { const geoCoord = geoCoordMap[data[i].name]; if (geoCoord) { scatterData.push({ name: data[i].name, value: geoCoord.concat(data[i].value), }); } } return scatterData; } // 重新随机选中地图区域 // const reSelectMapRandomArea = () => { // const length = 9; // nextTick(() => { // const map = chartRef.value; // let index = Math.floor(Math.random() * length); // while (index === preSelectMapIndex || index >= length) { // index = Math.floor(Math.random() * length); // } // if (map.dispatchAction) { // map.dispatchAction({ // type: 'mapUnSelect', // seriesIndex: 0, // dataIndex: preSelectMapIndex, // }); // map.dispatchAction({ // type: 'showTip', // seriesIndex: 0, // dataIndex: index, // }); // map.dispatchAction({ // type: 'mapSelect', // seriesIndex: 0, // dataIndex: index, // }); // preSelectMapIndex = index; // } // }); // } // const handleMapRandomSelect = () => { // nextTick(() => { // const map = chartRef.value; // setTimeout(() => { // reSelectMapRandomArea(); // }, 0); // // 移入区域,清除定时器、取消之前选中并选中当前 // if (map.on) { // map.on('mouseover', function (params) { // clearInterval(intervalId); // if (map.dispatchAction) { // map.dispatchAction({ // type: 'mapUnSelect', // seriesIndex: 0, // dataIndex: preSelectMapIndex, // }); // map.dispatchAction({ // type: 'mapSelect', // seriesIndex: 0, // dataIndex: params.dataIndex, // }); // preSelectMapIndex = params.dataIndex; // } // }); // } // // 移出区域重新随机选中地图区域,并开启定时器 // if (map.on) { // map.on('globalout', function () { // reSelectMapRandomArea(); // startInterval(); // }); // startInterval(); // } // }); // } // 开启定时器 // const startInterval = () => { // // 应通过接口获取配置时间,暂时写死5s // const time = 2000; // intervalId = setInterval(() => { // reSelectMapRandomArea(); // }, time); // } // 监听 watch( () => props.cdata, (val: any) => { options = { showLegendSymbol: true, tooltip: { trigger: 'item', textStyle: { fontSize: 14, lineHeight: 22, }, position: point => { // 固定在顶部 return [point[0] + 50, point[1] - 20]; }, // 如果需要自定义 tooltip样式,需要使用formatter /* formatter: params => { return `
...
` } */ }, visualMap: { min: 0, max: 10, show: false, seriesIndex: 0, // 颜色 inRange: { color: ['rgba(41,166,206, .5)', 'rgba(69,117,245, .9)'], }, }, // 底部背景 geo: { show: true, aspectScale: 0.85, //长宽比 zoom: 1.2, top: '10%', left: '16%', map: '福建', roam: false, itemStyle: { normal: { areaColor: 'rgba(0,0,0,0)', shadowColor: 'rgba(7,114,204, .8)', shadowOffsetX: 5, shadowOffsetY: 5, }, emphasis: { areaColor: '#00aeef', }, }, }, series: [ { name: '相关指数', type: 'map', aspectScale: 0.85, //长宽比 zoom: 1.2, mapType: '福建', // 自定义扩展图表类型 top: '10%', left: '16%', itemStyle: { normal: { color: 'red', areaColor: 'rgba(19,54,162, .5)', borderColor: 'rgba(0,242,252,.3)', borderWidth: 1, shadowBlur: 7, shadowColor: '#00f2fc', }, emphasis: { areaColor: '#4f7fff', borderColor: 'rgba(0,242,252,.6)', borderWidth: 2, shadowBlur: 10, shadowColor: '#00f2fc', }, }, label: { formatter: params => `${params.name}`, show: true, position: 'insideRight', textStyle: { fontSize: 14, color: '#efefef', }, emphasis: { textStyle: { color: '#fff', }, }, }, data: val, }, { type: 'effectScatter', coordinateSystem: 'geo', symbolSize: 7, effectType: 'ripple', legendHoverLink: false, showEffectOn: 'render', rippleEffect: { period: 4, scale: 2.5, brushType: 'stroke', }, zlevel: 1, itemStyle: { normal: { color: '#99FBFE', shadowBlur: 5, shadowColor: '#fff', }, }, data: convertData(seriesData), }, ], } // 重新选择区域 // handleMapRandomSelect(); }, { immediate: true, deep: true } ) // 销毁 // onUnmounted(() => { // clearInterval(intervalId) // }) return () => { const height = "360px" const width = "330px" return
} } })