Commit 540a0ebf8c22582f36562a0da8183b3a90072a92
1 parent
6fcb269e
feat(src/packages/): 高德地图新增标点点击显示弹窗信息
Showing
13 changed files
with
588 additions
and
1 deletions
... | ... | @@ -46,6 +46,7 @@ export const getPlatformInfo = () => defHttp.get({ url: Api.PLATFORM }) |
46 | 46 | export const getConfigurationList = (params: object) => { |
47 | 47 | return defHttp.get({ url: `${Api.CONFIGURATION}`, params }) |
48 | 48 | } |
49 | + | |
49 | 50 | //组态设置是否公开或私有 |
50 | 51 | export const setConfigurationIsShare = (params: string,isShare:boolean,data:object) => { |
51 | 52 | return defHttp.post({ |
... | ... | @@ -53,3 +54,15 @@ export const setConfigurationIsShare = (params: string,isShare:boolean,data:obje |
53 | 54 | data |
54 | 55 | }) |
55 | 56 | } |
57 | + | |
58 | +// 获取设备状态,在线 or 离线时间 | |
59 | +export const getDeviceActiveTime = (entityId: string) => { | |
60 | + return defHttp.get( | |
61 | + { | |
62 | + url: `/plugins/telemetry/DEVICE/${entityId}/values/attributes?keys=active`, | |
63 | + }, | |
64 | + { | |
65 | + joinPrefix: false, | |
66 | + } | |
67 | + ); | |
68 | +}; | |
\ No newline at end of file | ... | ... |
1 | +import { PublicConfigClass } from '@/packages/public' | |
2 | +import { CreateComponentType } from '@/packages/index.d' | |
3 | +import { OverrideMapAmapConfig } from './index' | |
4 | +import { chartInitConfig } from '@/settings/designSetting' | |
5 | +import cloneDeep from 'lodash/cloneDeep' | |
6 | +import dataJson from './data.json' | |
7 | + | |
8 | +export enum ThemeEnum { | |
9 | + NORMAL = 'normal', | |
10 | + DARK = 'dark', | |
11 | + LIGHT = 'light', | |
12 | + WHITES_MOKE = 'whitesmoke', | |
13 | + FRESH = 'fresh', | |
14 | + GREY = 'grey', | |
15 | + GRAFFITI = 'graffiti', | |
16 | + MACARON = 'macaron', | |
17 | + BLUE = 'blue', | |
18 | + DARKBLUE = 'darkblue', | |
19 | + WINE = 'wine', | |
20 | + WEIXIN = 'tileLayer' | |
21 | +} | |
22 | + | |
23 | +export enum LangEnum { | |
24 | + ZH_CN = 'zh_cn', | |
25 | + EN = 'en', | |
26 | + ZH_EN = 'zh_en' | |
27 | +} | |
28 | + | |
29 | +export enum ViewModeEnum { | |
30 | + PLANE = '2D', | |
31 | + STEREOSCOPIC = '3D' | |
32 | +} | |
33 | + | |
34 | +export enum FeaturesEnum { | |
35 | + BG = 'bg', | |
36 | + POINT = 'point', | |
37 | + ROAD = 'road', | |
38 | + BUILDING = 'building' | |
39 | +} | |
40 | + | |
41 | +export enum MarkerEnum { | |
42 | + // 圆圈 | |
43 | + CIRCLE_MARKER = 'CircleMarker', | |
44 | + // 定位标点 | |
45 | + MARKER = 'Marker', | |
46 | + // 暂无 | |
47 | + NONE = 'none' | |
48 | +} | |
49 | + | |
50 | +export const option = { | |
51 | + dataset: dataJson, | |
52 | + mapOptions: { | |
53 | + pitch: 60, | |
54 | + skyColor: '#53A9DE', | |
55 | + amapKey: 'd5f3e16589dbecae64d05fe90e2ba4f2', | |
56 | + amapStyleKey: ThemeEnum.DARK, | |
57 | + amapStyleKeyCustom: '', | |
58 | + amapLon: 104.108689, | |
59 | + amapLat: 30.66176, | |
60 | + amapZindex: 11, | |
61 | + marker: { | |
62 | + fillColor: '#E98984FF', | |
63 | + fillOpacity: 0.5, | |
64 | + strokeColor: 'white', | |
65 | + strokeWeight: 2, | |
66 | + strokeOpacity: 0.5, | |
67 | + zIndex: 10, | |
68 | + bubble: true, | |
69 | + cursor: 'pointer', | |
70 | + clickable: true | |
71 | + }, | |
72 | + mapMarkerType: MarkerEnum.MARKER, | |
73 | + viewMode: ViewModeEnum.PLANE, | |
74 | + lang: LangEnum.ZH_CN, | |
75 | + features: [FeaturesEnum.BG, FeaturesEnum.POINT, FeaturesEnum.ROAD, FeaturesEnum.BUILDING] | |
76 | + } | |
77 | +} | |
78 | + | |
79 | +export default class Config extends PublicConfigClass implements CreateComponentType { | |
80 | + public key = OverrideMapAmapConfig.key | |
81 | + public attr = { ...chartInitConfig, w: 1000, h: 800, zIndex: -1 } | |
82 | + public chartConfig = cloneDeep(OverrideMapAmapConfig) | |
83 | + public option = cloneDeep(option) | |
84 | +} | ... | ... |
1 | +<template> | |
2 | + <collapse-item name="基础" :expanded="true"> | |
3 | + <setting-item-box name="语言类型" :alone="true"> | |
4 | + <setting-item> | |
5 | + <n-select size="small" v-model:value="optionData.mapOptions.lang" :options="langOptions" /> | |
6 | + </setting-item> | |
7 | + </setting-item-box> | |
8 | + <setting-item-box name="Key" :alone="true"> | |
9 | + <setting-item name="请务必使用自己的高德应用 key"> | |
10 | + <n-input v-model:value="optionData.mapOptions.amapKey" size="small"></n-input> | |
11 | + </setting-item> | |
12 | + </setting-item-box> | |
13 | + <setting-item-box name="自定义地图样式ID" :alone="true"> | |
14 | + <setting-item> | |
15 | + <n-input size="small" v-model:value="optionData.mapOptions.amapStyleKeyCustom" /> | |
16 | + </setting-item> | |
17 | + </setting-item-box> | |
18 | + </collapse-item> | |
19 | + <collapse-item name="地图" :expanded="true"> | |
20 | + <setting-item-box name="主题"> | |
21 | + <setting-item> | |
22 | + <n-select size="small" v-model:value="optionData.mapOptions.amapStyleKey" :options="themeOptions" /> | |
23 | + </setting-item> | |
24 | + </setting-item-box> | |
25 | + <setting-item-box name="内容" :alone="true"> | |
26 | + <n-checkbox-group v-model:value="optionData.mapOptions.features"> | |
27 | + <n-space item-style="display: flex;"> | |
28 | + <n-checkbox :value="item.value" :label="item.label" v-for="(item, index) in featuresOptions" :key="index" /> | |
29 | + </n-space> | |
30 | + </n-checkbox-group> | |
31 | + </setting-item-box> | |
32 | + <setting-item-box name="位置"> | |
33 | + <setting-item name="经度"> | |
34 | + <n-input-number v-model:value="optionData.mapOptions.amapLon" :show-button="false" size="small"> | |
35 | + <template #suffix>°</template> | |
36 | + </n-input-number> | |
37 | + </setting-item> | |
38 | + <setting-item name="纬度"> | |
39 | + <n-input-number v-model:value="optionData.mapOptions.amapLat" :show-button="false" size="small"> | |
40 | + <template #suffix>°</template> | |
41 | + </n-input-number> | |
42 | + </setting-item> | |
43 | + <setting-item name="初始缩放"> | |
44 | + <n-input-number v-model:value="optionData.mapOptions.amapZindex" :min="0" size="small"></n-input-number> | |
45 | + </setting-item> | |
46 | + </setting-item-box> | |
47 | + <setting-item-box name="模式" :alone="true"> | |
48 | + <setting-item> | |
49 | + <n-radio-group v-model:value="optionData.mapOptions.viewMode" name="radiogroup"> | |
50 | + <n-space> | |
51 | + <n-radio v-for="song in viewModeOptions" :key="song.value" :value="song.value"> | |
52 | + {{ song.label }} | |
53 | + </n-radio> | |
54 | + </n-space> | |
55 | + </n-radio-group> | |
56 | + </setting-item> | |
57 | + </setting-item-box> | |
58 | + <template v-if="optionData.mapOptions.viewMode === '3D'"> | |
59 | + <setting-item-box> | |
60 | + <setting-item name="天空色"> | |
61 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.mapOptions.skyColor"></n-color-picker> | |
62 | + </setting-item> | |
63 | + <setting-item name="俯仰角"> | |
64 | + <n-input-number v-model:value="optionData.mapOptions.pitch" :min="0" :max="83" size="small"></n-input-number> | |
65 | + </setting-item> | |
66 | + </setting-item-box> | |
67 | + </template> | |
68 | + </collapse-item> | |
69 | + <collapse-item name="标记" :expanded="true"> | |
70 | + <setting-item-box name="样式"> | |
71 | + <setting-item name="类型"> | |
72 | + <n-select size="small" v-model:value="optionData.mapOptions.mapMarkerType" :options="MarkerOptions" /> | |
73 | + </setting-item> | |
74 | + <setting-item name="颜色"> | |
75 | + <n-color-picker v-model:value="optionData.mapOptions.marker.fillColor" size="small"></n-color-picker> | |
76 | + </setting-item> | |
77 | + </setting-item-box> | |
78 | + </collapse-item> | |
79 | +</template> | |
80 | + | |
81 | +<script setup lang="ts"> | |
82 | +import { PropType } from 'vue' | |
83 | +import { option, MarkerEnum, ThemeEnum, LangEnum, ViewModeEnum, FeaturesEnum } from './config' | |
84 | +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | |
85 | + | |
86 | +defineProps({ | |
87 | + optionData: { | |
88 | + type: Object as PropType<typeof option>, | |
89 | + required: true | |
90 | + } | |
91 | +}) | |
92 | + | |
93 | +const themeOptions = [ | |
94 | + { | |
95 | + value: ThemeEnum.NORMAL, | |
96 | + label: '标准' | |
97 | + }, | |
98 | + { | |
99 | + value: ThemeEnum.DARK, | |
100 | + label: '幻影黑' | |
101 | + }, | |
102 | + { | |
103 | + value: ThemeEnum.LIGHT, | |
104 | + label: '月光银' | |
105 | + }, | |
106 | + { | |
107 | + value: ThemeEnum.WHITES_MOKE, | |
108 | + label: '远山黛' | |
109 | + }, | |
110 | + { | |
111 | + value: ThemeEnum.FRESH, | |
112 | + label: '草色青' | |
113 | + }, | |
114 | + { | |
115 | + value: ThemeEnum.GREY, | |
116 | + label: '雅士灰' | |
117 | + }, | |
118 | + { | |
119 | + value: ThemeEnum.GRAFFITI, | |
120 | + label: '涂鸦' | |
121 | + }, | |
122 | + { | |
123 | + value: ThemeEnum.MACARON, | |
124 | + label: '马卡龙' | |
125 | + }, | |
126 | + { | |
127 | + value: ThemeEnum.BLUE, | |
128 | + label: '靛青蓝' | |
129 | + }, | |
130 | + { | |
131 | + value: ThemeEnum.DARKBLUE, | |
132 | + label: '极夜蓝' | |
133 | + }, | |
134 | + { | |
135 | + value: ThemeEnum.WINE, | |
136 | + label: '酱籽' | |
137 | + }, | |
138 | + { | |
139 | + value: ThemeEnum.WEIXIN, | |
140 | + label: '卫星' | |
141 | + } | |
142 | +] | |
143 | + | |
144 | +const langOptions = [ | |
145 | + { | |
146 | + value: LangEnum.ZH_CN, | |
147 | + label: '中文简体' | |
148 | + }, | |
149 | + { | |
150 | + value: LangEnum.EN, | |
151 | + label: '英文' | |
152 | + }, | |
153 | + { | |
154 | + value: LangEnum.ZH_EN, | |
155 | + label: '中英文对照' | |
156 | + } | |
157 | +] | |
158 | + | |
159 | +const viewModeOptions = [ | |
160 | + { | |
161 | + value: ViewModeEnum.PLANE, | |
162 | + label: '2D' | |
163 | + }, | |
164 | + { | |
165 | + value: ViewModeEnum.STEREOSCOPIC, | |
166 | + label: '3D' | |
167 | + } | |
168 | +] | |
169 | + | |
170 | +const featuresOptions = [ | |
171 | + { | |
172 | + value: FeaturesEnum.BG, | |
173 | + label: '显示地图背景' | |
174 | + }, | |
175 | + { | |
176 | + value: FeaturesEnum.POINT, | |
177 | + label: '显示标识' | |
178 | + }, | |
179 | + { | |
180 | + value: FeaturesEnum.ROAD, | |
181 | + label: '显示道路' | |
182 | + }, | |
183 | + { | |
184 | + value: FeaturesEnum.BUILDING, | |
185 | + label: '显示建筑' | |
186 | + } | |
187 | +] | |
188 | + | |
189 | +const MarkerOptions = [ | |
190 | + { | |
191 | + value: MarkerEnum.CIRCLE_MARKER, | |
192 | + label: '圆形标点' | |
193 | + }, | |
194 | + { | |
195 | + value: MarkerEnum.MARKER, | |
196 | + label: '定位标点' | |
197 | + }, | |
198 | + { | |
199 | + value: MarkerEnum.NONE, | |
200 | + label: '隐藏标点' | |
201 | + } | |
202 | +] | |
203 | +</script> | ... | ... |
1 | +{ | |
2 | + "markers": [ | |
3 | + { | |
4 | + "name": "x", | |
5 | + "value": 20, | |
6 | + "position": [103.856504, 30.687278], | |
7 | + "extraInfo": { | |
8 | + "tbDeviceId": "xxxxxxxxxxx", | |
9 | + "name": "xx", | |
10 | + "alias": "xx", | |
11 | + "organizationDTO": { | |
12 | + "name": "xx" | |
13 | + }, | |
14 | + "deviceState": "INACTIVE", | |
15 | + "deviceProfile": { | |
16 | + "transportType": "MQTT" | |
17 | + }, | |
18 | + "deviceInfo": { | |
19 | + "address": "四川省", | |
20 | + "longitude": 103.856504, | |
21 | + "latitude": 30.687278 | |
22 | + } | |
23 | + } | |
24 | + }, | |
25 | + { | |
26 | + "name": "xx", | |
27 | + "value": 30, | |
28 | + "position": [104.095368, 30.716787], | |
29 | + "extraInfo": { | |
30 | + "tbDeviceId": "xxxxxxxxxxxxxxx", | |
31 | + "name": "xxx", | |
32 | + "alias": "xx", | |
33 | + "organizationDTO": { | |
34 | + "name": "xx" | |
35 | + }, | |
36 | + "deviceState": "INACTIVE", | |
37 | + "deviceProfile": { | |
38 | + "transportType": "TCP" | |
39 | + }, | |
40 | + "deviceInfo": { | |
41 | + "address": "四川省", | |
42 | + "longitude": 104.095368, | |
43 | + "latitude": 30.716787 | |
44 | + } | |
45 | + } | |
46 | + } | |
47 | + ] | |
48 | +} | ... | ... |
851 Bytes
582 Bytes
514 Bytes
1.35 KB
1 | +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' | |
2 | +import { ChatCategoryEnum, ChatCategoryEnumName } from '@/packages/components/Charts/index.d' | |
3 | +import { useWidgetKey } from '@/packages/external/useWidgetKey' | |
4 | + | |
5 | +const { key, conKey, chartKey } = useWidgetKey('OverrideMapAmap', true) | |
6 | + | |
7 | +export const OverrideMapAmapConfig: ConfigType = { | |
8 | + key, | |
9 | + chartKey, | |
10 | + conKey, | |
11 | + title: '高德地图', | |
12 | + category: ChatCategoryEnum.MAP, | |
13 | + categoryName: ChatCategoryEnumName.MAP, | |
14 | + package: PackagesCategoryEnum.CHARTS, | |
15 | + chartFrame: ChartFrameEnum.COMMON, | |
16 | + image: 'map_amap.png' | |
17 | +} | ... | ... |
1 | +<template> | |
2 | + <div ref="vChartRef"></div> | |
3 | +</template> | |
4 | + | |
5 | +<script setup lang="ts"> | |
6 | +import { ref, PropType, toRefs, watch } from 'vue' | |
7 | +import AMapLoader from '@amap/amap-jsapi-loader' | |
8 | +import { CreateComponentType } from '@/packages/index.d' | |
9 | +import { useChartDataFetch } from '@/hooks' | |
10 | +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' | |
11 | +import { MarkerEnum, ThemeEnum } from './config' | |
12 | +import { isArray } from '@/utils' | |
13 | +import djh from './images/djh.png' | |
14 | +import online from './images/online1.png' | |
15 | +import lx1 from './images/lx1.png' | |
16 | +import { getDeviceActiveTime } from '@/api/external/common/index' | |
17 | +import dayjs from 'dayjs' | |
18 | + | |
19 | +const props = defineProps({ | |
20 | + chartConfig: { | |
21 | + type: Object as PropType<CreateComponentType>, | |
22 | + required: true | |
23 | + } | |
24 | +}) | |
25 | + | |
26 | +let { | |
27 | + amapKey, | |
28 | + amapStyleKey, | |
29 | + amapLon, | |
30 | + amapLat, | |
31 | + amapZindex, | |
32 | + mapMarkerType, | |
33 | + lang, | |
34 | + amapStyleKeyCustom, | |
35 | + features, | |
36 | + viewMode, | |
37 | + pitch, | |
38 | + skyColor, | |
39 | + marker | |
40 | +} = toRefs(props.chartConfig.option.mapOptions) | |
41 | + | |
42 | +let mapIns: any = null | |
43 | +let markers: any = [] | |
44 | +let AMapIns: any = null | |
45 | +const vChartRef = ref<HTMLElement>() | |
46 | + | |
47 | +const initMap = (newData: any) => { | |
48 | + // 初始化 | |
49 | + AMapLoader.load({ | |
50 | + key: amapKey.value, //api服务key--另外需要在public中使用安全密钥!!! | |
51 | + version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 | |
52 | + plugins: ['AMap.PlaceSearch', 'AMap.AutoComplete'] // 需要使用的的插件列表 | |
53 | + }) | |
54 | + .then(AMap => { | |
55 | + AMapIns = AMap | |
56 | + mapIns = new AMap.Map(vChartRef.value, { | |
57 | + resizeEnable: true, | |
58 | + zoom: amapZindex.value, // 地图显示的缩放级别 | |
59 | + center: [amapLon.value, amapLat.value], | |
60 | + lang: lang.value, | |
61 | + features: features.value, | |
62 | + pitch: pitch.value, // 地图俯仰角度,有效范围 0 度- 83 度 | |
63 | + skyColor: skyColor.value, | |
64 | + viewMode: viewMode.value, // 地图模式 | |
65 | + willReadFrequently: true | |
66 | + }) | |
67 | + dataHandle(props.chartConfig.option.dataset) | |
68 | + let satellite = new AMap.TileLayer.Satellite() | |
69 | + let roadNet = new AMap.TileLayer.RoadNet() | |
70 | + if (newData.amapStyleKey === ThemeEnum.WEIXIN) { | |
71 | + mapIns.add([satellite, roadNet]) | |
72 | + } else { | |
73 | + mapIns.remove([satellite, roadNet]) | |
74 | + mapIns.setMapStyle( | |
75 | + `amap://styles/${amapStyleKeyCustom.value !== '' ? amapStyleKeyCustom.value : amapStyleKey.value}` | |
76 | + ) | |
77 | + } | |
78 | + //点击地图任意地方关闭infoWindow窗体 | |
79 | + mapIns.on('click', () => { | |
80 | + mapIns.clearInfoWindow() | |
81 | + }) | |
82 | + }) | |
83 | + .catch(e => { | |
84 | + console.error(e) | |
85 | + }) | |
86 | +} | |
87 | + | |
88 | +const createInfoWindow = async (extraInfo: any) => { | |
89 | + try { | |
90 | + const { name, alias, organizationDTO, deviceState, deviceProfile, deviceInfo, tbDeviceId } = extraInfo | |
91 | + const res = await getDeviceActiveTime(tbDeviceId) | |
92 | + let { lastUpdateTs } = res[0] | |
93 | + lastUpdateTs = dayjs(lastUpdateTs).format('YYYY-MM-DD HH:mm:ss') | |
94 | + return ` | |
95 | + <div style="width:15vw;height:18vh;background-color:white;"> | |
96 | + <div style="margin:0px 10px"> | |
97 | + <div style="display:flex;justify-content:space-between; margin:20px 0px;"> | |
98 | + <div style="font-size:16px;font-weight:bold">${alias || name}</div> | |
99 | + ${ | |
100 | + deviceState === 'INACTIVE' | |
101 | + ? `<div style="display:flex;align-items:center;"><img style="width:15px;height:15px" src="${djh}" class="mr-1">待激活</div>` | |
102 | + : deviceState === 'ONLINE' | |
103 | + ? `<div style="display:flex;align-items:center; "> | |
104 | + <img style="width:15px;height:15px" src="${online}" class="mr-1">在线</div>` | |
105 | + : `<div style="display:flex;align-items:center;"><img style="width:15px;height:15px" src="${lx1}" class="mr-1">离线</div>` | |
106 | + } | |
107 | + </div> | |
108 | + <div>所属组织:${organizationDTO.name}</div> | |
109 | + <div style="margin-top:6px;">接入协议:${deviceProfile.transportType}</div> | |
110 | + <div style="margin-top:6px;"> | |
111 | + 设备位置:${!deviceInfo.address ? '该设备暂无地理位置' : deviceInfo.address} | |
112 | + </div> | |
113 | + <div style="margin-top:6px;"> | |
114 | + ${deviceState === 'ONLINE' ? '在线' : deviceState === 'INACTIVE' ? '创建' : '离线'}时间:${lastUpdateTs} | |
115 | + </div> | |
116 | + </div> | |
117 | + </div> | |
118 | + ` | |
119 | + } catch (e) { | |
120 | + console.error(e) | |
121 | + } | |
122 | +} | |
123 | + | |
124 | +const dataHandle = (newData: any) => { | |
125 | + if (!mapIns && !AMapIns) { | |
126 | + initMap(props.chartConfig.option) | |
127 | + return | |
128 | + } | |
129 | + if (isArray(newData.markers)) { | |
130 | + // 先清除旧标记 | |
131 | + mapIns.remove(markers) | |
132 | + markers = [] | |
133 | + // 记录新标记 | |
134 | + if (mapMarkerType.value === MarkerEnum.MARKER) { | |
135 | + newData.markers.forEach((markerItem: any) => { | |
136 | + const markerInstance = new AMapIns.Marker({ | |
137 | + position: [markerItem.position[0], markerItem.position[1]], | |
138 | + offset: new AMapIns.Pixel(-13, -30) | |
139 | + }) | |
140 | + // markers.push(markerInstance) 原作者这种方式添加,地图标注获取不到当前点击对象 | |
141 | + // markerInstance.setMap(mapIns) | |
142 | + markerInstance.setExtData({ | |
143 | + extraInfo: markerItem.extraInfo | |
144 | + }) | |
145 | + mapIns.add(markerInstance) | |
146 | + markerInstance.setLabel({ | |
147 | + content: markerItem.extraInfo.alias || markerItem.extraInfo.name | |
148 | + }) | |
149 | + markerInstance.on('click', async (e: any) => { | |
150 | + const { extraInfo } = e.target.getExtData() | |
151 | + let infoWindow = new AMapIns.InfoWindow({ | |
152 | + content: await createInfoWindow(extraInfo), | |
153 | + offset: new AMapIns.Pixel(0, -50) | |
154 | + }) | |
155 | + infoWindow.open(mapIns, e.target.getPosition()) | |
156 | + }) | |
157 | + }) | |
158 | + } else if (mapMarkerType.value === MarkerEnum.CIRCLE_MARKER) { | |
159 | + newData.markers.forEach((markerItem: any) => { | |
160 | + const markerInstance = new AMapIns.CircleMarker({ | |
161 | + center: [ | |
162 | + !markerItem.position[0] ? 0 : markerItem.position[0], | |
163 | + !markerItem.position[1] ? 0 : markerItem.position[1] | |
164 | + ], | |
165 | + radius: markerItem.value, | |
166 | + ...marker.value, | |
167 | + }) | |
168 | + // markers.push(markerInstance) //原作者这种方式添加,地图标注获取不到当前点击对象 | |
169 | + // markerInstance.setMap(mapIns) | |
170 | + markerInstance.setExtData({ | |
171 | + extraInfo: markerItem.extraInfo | |
172 | + }) | |
173 | + mapIns.add(markerInstance) | |
174 | + markerInstance.on('click', async (e: any) => { | |
175 | + console.log(e) | |
176 | + const { extraInfo } = e.target.getExtData() | |
177 | + let infoWindow = new AMapIns.InfoWindow({ | |
178 | + content: await createInfoWindow(extraInfo), | |
179 | + offset: new AMapIns.Pixel(0, -50) | |
180 | + }) | |
181 | + infoWindow.open(mapIns, e.target.getPosition()) | |
182 | + }) | |
183 | + }) | |
184 | + } | |
185 | + } | |
186 | +} | |
187 | + | |
188 | +const stopWatch = watch( | |
189 | + () => props.chartConfig.option.mapOptions, | |
190 | + option => { | |
191 | + initMap(option) | |
192 | + }, | |
193 | + { | |
194 | + immediate: true, | |
195 | + deep: true | |
196 | + } | |
197 | +) | |
198 | + | |
199 | +watch( | |
200 | + () => props.chartConfig.option.dataset, | |
201 | + newData => { | |
202 | + try { | |
203 | + dataHandle(newData) | |
204 | + } catch (error) { | |
205 | + console.log(error) | |
206 | + } | |
207 | + }, | |
208 | + { | |
209 | + deep: false | |
210 | + } | |
211 | +) | |
212 | + | |
213 | +// 预览 | |
214 | +useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => { | |
215 | + stopWatch() | |
216 | + dataHandle(newData) | |
217 | +}) | |
218 | +</script> | ... | ... |
... | ... | @@ -21,6 +21,7 @@ import { OverrideLineGradientsConfig } from '@/packages/components/external/Char |
21 | 21 | import { OverrideProcessConfig } from '@/packages/components/external/Charts/Mores/OverrideProcess' |
22 | 22 | import { OverridePieCircleConfig } from '@/packages/components/external/Charts/Pies/OverridePieCircle' |
23 | 23 | import { OverrideMapBaseConfig } from '@/packages/components/external/Charts/Maps/OverrideMapBase' |
24 | +import { OverrideMapAmapConfig } from '@/packages/components/external/Charts/Maps/OverrideMapAmap' | |
24 | 25 | import { OverrideVideoConfig } from '@/packages/components/external/Informations/Mores/OverrideVideo' |
25 | 26 | import { OverrideWaterPoloConfig } from '@/packages/components/external/Charts/Mores/OverrideWaterPolo' |
26 | 27 | import { OverrideDialConfig } from '@/packages/components/external/Charts/Mores/OverrideDial' |
... | ... | @@ -104,6 +105,7 @@ export function useInjectLib(packagesList: EPackagesType) { |
104 | 105 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverrideProcessConfig)//重写图表下的native ui |
105 | 106 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverridePieCircleConfig)//重写图表下的饼图 |
106 | 107 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverrideMapBaseConfig)//重写图表下的地图 |
108 | + addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverrideMapAmapConfig)//重写图表下的高德地图 | |
107 | 109 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverrideWaterPoloConfig)//重写图表下的水球图 |
108 | 110 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.CHARTS, OverrideDialConfig)//重写图表下的表盘 |
109 | 111 | // | ... | ... |
... | ... | @@ -16,7 +16,8 @@ export const hideAsideComponentsObj = { |
16 | 16 | 'VPieCircle' //饼图-环形 |
17 | 17 | ], |
18 | 18 | Maps: [ |
19 | - 'VMapBase' //地图(可选省份) | |
19 | + 'VMapBase', //地图(可选省份) | |
20 | + 'VMapAmap', //高德地图 | |
20 | 21 | ], |
21 | 22 | Mores: [ |
22 | 23 | 'VProcess', //NaiveUI-进度 |
... | ... | @@ -45,6 +46,7 @@ export const hideAsideComponentsObj = { |
45 | 46 | 'VLineGradients', //双折线渐变面积图 |
46 | 47 | 'VPieCircle', //饼图-环形 |
47 | 48 | 'VMapBase', //地图(可选省份) |
49 | + 'VMapAmap',//高德地图 | |
48 | 50 | 'VProcess', //NaiveUI-进度 |
49 | 51 | 'VTextGradient', //渐变文字 |
50 | 52 | 'VTextBarrage', //弹幕文字 | ... | ... |