大屏接入地图

This commit is contained in:
aixianling
2024-09-19 18:20:04 +08:00
parent 6a1d86b88a
commit 573349f864
2 changed files with 485 additions and 71 deletions

View File

@@ -1,6 +1,7 @@
<template>
<div class="AiEchartMap" v-resize="onDomResize">
<div class="chart-map" ref="dvMap"/>
<slot v-if="$slots.default"/>
</div>
</template>
@@ -9,6 +10,19 @@ import http from "dui/lib/js/request";
import {mapState} from "vuex";
import "../../lib/cdn/turf.min.js";
const assign = (target, source = {}) => {
Object.entries(source).forEach(([key, value]) => {
if (typeof value === 'object') {
if (target[key] && typeof target[key] === 'object') {
assign(target[key], value)
} else {
target[key] = value
}
} else {
target[key] = value
}
})
}
export default {
name: 'AiEchartMap',
props: {
@@ -68,51 +82,41 @@ export default {
}
return Promise.all([getGeo])
},
initChart() {
handleMapOps(geoJson, ops) {
const {echarts, turf} = window
const boundary = geoJson.features?.length > 1 ? turf.union(geoJson) : this.$copy(geoJson.features[0])
boundary.properties = {...boundary.properties}
boundary.properties.name = "boundary"
geoJson.features.unshift(boundary)
echarts.registerMap('customMap', geoJson)
const option = {
geo: {
map: 'customMap', roam: true, emphasis: {disabled: true},
itemStyle: {areaColor: "transparent", borderColor: '#97CAE6'},
silent: true,
label: {show: true, color: '#fff'},
regions: [
{
name: "boundary", itemStyle: {
areaColor: "rgba(2,188,255,0.16)", shadowColor: "#02F0FF21", shadowOffsetY: 20, shadowBlur: 20,
borderColor: '#02F0FF', borderWidth: 3
}, label: {show: false}
}
],
},
}
assign(option, ops)
return option
},
initChart() {
const {echarts} = window
this.chart = echarts.init(this.$refs.dvMap)
this.chart.showLoading({
text: "数据加载中...", textColor: "#fff",
maskColor: 'rgba(0, 0, 0, 0.2)'
})
this.loadLibs().then(() => {
const geoJson = this.geo
const boundary = geoJson.features?.length > 1 ? turf.union(geoJson) : this.$copy(geoJson.features[0])
boundary.properties = {...boundary.properties}
boundary.properties.name = "boundary"
geoJson.features.unshift(boundary)
echarts.registerMap('customMap', geoJson)
const option = {
geo: {
map: 'customMap', roam: true, emphasis: {disabled: true},
itemStyle: {areaColor: "transparent", borderColor: '#97CAE6'},
silent: true,
label: {show: true, color: '#fff'},
regions: [
{
name: "boundary", itemStyle: {
areaColor: "rgba(2,188,255,0.16)", shadowColor: "#02F0FF21", shadowOffsetY: 20, shadowBlur: 20,
borderColor: '#02F0FF', borderWidth: 3
}, label: {show: false}
}
],
},
}
const assign = (target, source) => {
Object.entries(source).forEach(([key, value]) => {
if (typeof value === 'object') {
if (target[key] && typeof target[key] === 'object') {
assign(target[key], value)
} else {
target[key] = value
}
} else {
target[key] = value
}
})
}
assign(option, this.ops)
this.chart.setOption(option)
this.chart.setOption(this.handleMapOps(this.geo, this.ops))
}).finally(() => {
this.$emit('map', this.chart)
this.chart.hideLoading()