...
|
...
|
@@ -19,28 +19,16 @@ |
19
|
19
|
</SettingItemBox>
|
20
|
20
|
<SettingItemBox name="图标距离">
|
21
|
21
|
<SettingItem name="距右">
|
22
|
|
- <n-input-number
|
23
|
|
- v-model:value="optionData.iconDistanceRight"
|
24
|
|
- :min="1"
|
25
|
|
- size="small"
|
26
|
|
- placeholder="请输入"
|
27
|
|
- ></n-input-number>
|
|
22
|
+ <n-input-number v-model:value="optionData.iconDistanceRight" :min="1" size="small"
|
|
23
|
+ placeholder="请输入"></n-input-number>
|
28
|
24
|
</SettingItem>
|
29
|
25
|
<SettingItem name="距上">
|
30
|
|
- <n-input-number
|
31
|
|
- v-model:value="optionData.iconDistanceTop"
|
32
|
|
- :min="1"
|
33
|
|
- size="small"
|
34
|
|
- placeholder="请输入"
|
35
|
|
- ></n-input-number>
|
|
26
|
+ <n-input-number v-model:value="optionData.iconDistanceTop" :min="1" size="small"
|
|
27
|
+ placeholder="请输入"></n-input-number>
|
36
|
28
|
</SettingItem>
|
37
|
29
|
</SettingItemBox>
|
38
|
|
- <SelectCity
|
39
|
|
- ref="SelectCityRef"
|
40
|
|
- :optionData="optionData"
|
41
|
|
- :drillingIn="optionData.drillingIn"
|
42
|
|
- @submit="onHandleSelectValues"
|
43
|
|
- />
|
|
30
|
+ <SelectCity ref="SelectCityRef" :optionData="optionData" :drillingIn="optionData.drillingIn"
|
|
31
|
+ @submit="onHandleSelectValues" />
|
44
|
32
|
<div style="height: 30px"></div>
|
45
|
33
|
<n-tag type="primary">若配置无响应,请在预览页面查看效果</n-tag>
|
46
|
34
|
<SettingItemBox name="地图配置">
|
...
|
...
|
@@ -48,35 +36,20 @@ |
48
|
36
|
<n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].itemStyle.color"></n-color-picker>
|
49
|
37
|
</SettingItem>
|
50
|
38
|
<SettingItem name="边框颜色">
|
51
|
|
- <n-color-picker
|
52
|
|
- size="small"
|
53
|
|
- :modes="['hex']"
|
54
|
|
- v-model:value="seriesList[0].itemStyle.borderColor"
|
55
|
|
- ></n-color-picker>
|
|
39
|
+ <n-color-picker size="small" :modes="['hex']"
|
|
40
|
+ v-model:value="seriesList[0].itemStyle.borderColor"></n-color-picker>
|
56
|
41
|
</SettingItem>
|
57
|
42
|
<SettingItem name="边框大小">
|
58
|
|
- <n-input-number
|
59
|
|
- v-model:value="seriesList[0].itemStyle.borderWidth"
|
60
|
|
- :min="0"
|
61
|
|
- size="small"
|
62
|
|
- placeholder="请输入"
|
63
|
|
- ></n-input-number>
|
|
43
|
+ <n-input-number v-model:value="seriesList[0].itemStyle.borderWidth" :min="0" size="small"
|
|
44
|
+ placeholder="请输入"></n-input-number>
|
64
|
45
|
</SettingItem>
|
65
|
46
|
<SettingItem name="透明度">
|
66
|
|
- <n-input-number
|
67
|
|
- v-model:value="seriesList[0].itemStyle.opacity"
|
68
|
|
- :min="0"
|
69
|
|
- size="small"
|
70
|
|
- placeholder="请输入"
|
71
|
|
- ></n-input-number>
|
|
47
|
+ <n-input-number v-model:value="seriesList[0].itemStyle.opacity" :min="0" size="small"
|
|
48
|
+ placeholder="请输入"></n-input-number>
|
72
|
49
|
</SettingItem>
|
73
|
50
|
<SettingItem name="厚度">
|
74
|
|
- <n-input-number
|
75
|
|
- v-model:value="seriesList[0].regionHeight"
|
76
|
|
- :min="0"
|
77
|
|
- size="small"
|
78
|
|
- placeholder="请输入"
|
79
|
|
- ></n-input-number>
|
|
51
|
+ <n-input-number v-model:value="seriesList[0].regionHeight" :min="0" size="small"
|
|
52
|
+ placeholder="请输入"></n-input-number>
|
80
|
53
|
</SettingItem>
|
81
|
54
|
</SettingItemBox>
|
82
|
55
|
<SettingItemBox name="标题配置">
|
...
|
...
|
@@ -84,19 +57,12 @@ |
84
|
57
|
<n-switch v-model:value="seriesList[0].label.show" size="small"></n-switch>
|
85
|
58
|
</SettingItem>
|
86
|
59
|
<SettingItem name="颜色">
|
87
|
|
- <n-color-picker
|
88
|
|
- size="small"
|
89
|
|
- :modes="['hex']"
|
90
|
|
- v-model:value="seriesList[0].label.textStyle.color"
|
91
|
|
- ></n-color-picker>
|
|
60
|
+ <n-color-picker size="small" :modes="['hex']"
|
|
61
|
+ v-model:value="seriesList[0].label.textStyle.color"></n-color-picker>
|
92
|
62
|
</SettingItem>
|
93
|
63
|
<SettingItem name="大小">
|
94
|
|
- <n-input-number
|
95
|
|
- v-model:value="seriesList[0].label.textStyle.fontSize"
|
96
|
|
- :min="0"
|
97
|
|
- size="small"
|
98
|
|
- placeholder="请输入"
|
99
|
|
- ></n-input-number>
|
|
64
|
+ <n-input-number v-model:value="seriesList[0].label.textStyle.fontSize" :min="0" size="small"
|
|
65
|
+ placeholder="请输入"></n-input-number>
|
100
|
66
|
</SettingItem>
|
101
|
67
|
</SettingItemBox>
|
102
|
68
|
<SettingItemBox name="高亮配置">
|
...
|
...
|
@@ -104,69 +70,40 @@ |
104
|
70
|
<n-switch v-model:value="seriesList[0].emphasis.label.show" size="small"></n-switch>
|
105
|
71
|
</SettingItem>
|
106
|
72
|
<SettingItem name="颜色">
|
107
|
|
- <n-color-picker
|
108
|
|
- size="small"
|
109
|
|
- :modes="['hex']"
|
110
|
|
- v-model:value="seriesList[0].emphasis.label.textStyle.color"
|
111
|
|
- ></n-color-picker>
|
|
73
|
+ <n-color-picker size="small" :modes="['hex']"
|
|
74
|
+ v-model:value="seriesList[0].emphasis.label.textStyle.color"></n-color-picker>
|
112
|
75
|
</SettingItem>
|
113
|
76
|
<SettingItem name="大小">
|
114
|
|
- <n-input-number
|
115
|
|
- v-model:value="seriesList[0].emphasis.label.textStyle.fontSize"
|
116
|
|
- :min="0"
|
117
|
|
- size="small"
|
118
|
|
- placeholder="请输入"
|
119
|
|
- ></n-input-number>
|
|
77
|
+ <n-input-number v-model:value="seriesList[0].emphasis.label.textStyle.fontSize" :min="0" size="small"
|
|
78
|
+ placeholder="请输入"></n-input-number>
|
120
|
79
|
</SettingItem>
|
121
|
80
|
<SettingItem name="区块颜色">
|
122
|
|
- <n-color-picker
|
123
|
|
- size="small"
|
124
|
|
- :modes="['hex']"
|
125
|
|
- v-model:value="seriesList[0].emphasis.itemStyle.color"
|
126
|
|
- ></n-color-picker>
|
|
81
|
+ <n-color-picker size="small" :modes="['hex']"
|
|
82
|
+ v-model:value="seriesList[0].emphasis.itemStyle.color"></n-color-picker>
|
127
|
83
|
</SettingItem>
|
128
|
84
|
</SettingItemBox>
|
129
|
85
|
<SettingItemBox name="柱状配置">
|
130
|
86
|
<SettingItem name="最小高度">
|
131
|
|
- <n-input-number
|
132
|
|
- v-model:value="seriesList[1].minHeight"
|
133
|
|
- :min="0"
|
134
|
|
- :step="1"
|
135
|
|
- size="small"
|
136
|
|
- placeholder="请输入"
|
137
|
|
- ></n-input-number>
|
|
87
|
+ <n-input-number v-model:value="seriesList[1].minHeight" :min="0" :step="1" size="small"
|
|
88
|
+ placeholder="请输入"></n-input-number>
|
138
|
89
|
</SettingItem>
|
139
|
90
|
<SettingItem name="大小">
|
140
|
|
- <n-input-number
|
141
|
|
- v-model:value="seriesList[1].barSize"
|
142
|
|
- :min="0"
|
143
|
|
- :step="1"
|
144
|
|
- size="small"
|
145
|
|
- placeholder="请输入"
|
146
|
|
- ></n-input-number>
|
|
91
|
+ <n-input-number v-model:value="seriesList[1].barSize" :min="0" :step="1" size="small"
|
|
92
|
+ placeholder="请输入"></n-input-number>
|
147
|
93
|
</SettingItem>
|
148
|
94
|
<SettingItem name="倒角尺寸">
|
149
|
|
- <n-input-number
|
150
|
|
- v-model:value="seriesList[1].bevelSize"
|
151
|
|
- :min="0"
|
152
|
|
- :max="1"
|
153
|
|
- :step="0.1"
|
154
|
|
- size="small"
|
155
|
|
- placeholder="请输入"
|
156
|
|
- ></n-input-number>
|
|
95
|
+ <n-input-number v-model:value="seriesList[1].bevelSize" :min="0" :max="1" :step="0.1" size="small"
|
|
96
|
+ placeholder="请输入"></n-input-number>
|
157
|
97
|
</SettingItem>
|
158
|
98
|
</SettingItemBox>
|
159
|
99
|
</CollapseItem>
|
160
|
100
|
<CollapseItem name="地区配置" :expanded="true">
|
161
|
101
|
<SettingItemBox name="地区配置" :alone="true">
|
162
|
102
|
<template v-for="(item, map3DIndex) in optionData.dataset.map3D" :key="map3DIndex">
|
163
|
|
- <setting-item name="省份名称" v-if="mapRegionCache.adcode=='china'">
|
|
103
|
+ <setting-item name="省份名称" v-if="mapRegionCache.adcode == 'china'">
|
164
|
104
|
<n-select
|
165
|
|
- @change="(v:number,o:Recordable,w:Recordable,s1:number)=> onHandleSelectProvince(v,o,item, map3DIndex)"
|
166
|
|
- placeholder="请选择省份"
|
167
|
|
- v-model:value="item.name"
|
168
|
|
- :options="item.provinceOptions"
|
169
|
|
- />
|
|
105
|
+ @change="(v: number, o: Recordable, w: Recordable, s1: number) => onHandleSelectProvince(v, o, item, map3DIndex)"
|
|
106
|
+ placeholder="请选择省份" v-model:value="item.name" :options="item.provinceOptions" />
|
170
|
107
|
</setting-item>
|
171
|
108
|
<setting-item name="城市名称">
|
172
|
109
|
<n-select placeholder="请选择城市" v-model:value="item.city_name" :options="item.cityOptions" />
|
...
|
...
|
@@ -187,6 +124,8 @@ |
187
|
124
|
</template>
|
188
|
125
|
<div class="h-space"></div>
|
189
|
126
|
<n-button size="small" @click="handleAddRegion"> + </n-button>
|
|
127
|
+ <div class="h-space"></div>
|
|
128
|
+ <n-button type="primary" @click="handleAreaSubmit">确定</n-button>
|
190
|
129
|
</SettingItemBox>
|
191
|
130
|
</CollapseItem>
|
192
|
131
|
<CollapseItem name="柱状配置" :expanded="true">
|
...
|
...
|
@@ -212,13 +151,12 @@ |
212
|
151
|
</setting-item>
|
213
|
152
|
</template>
|
214
|
153
|
<div class="h-space"></div>
|
215
|
|
- <n-button
|
216
|
|
- style="float: right"
|
217
|
|
- size="small"
|
218
|
|
- @click="optionData.dataset.bar3D.push(cloneDeep(STATIC_SCATTER_CONFIG))"
|
219
|
|
- >
|
|
154
|
+ <n-button style="float: right" size="small"
|
|
155
|
+ @click="optionData.dataset.bar3D.push(cloneDeep(STATIC_SCATTER_CONFIG))">
|
220
|
156
|
+
|
221
|
157
|
</n-button>
|
|
158
|
+ <div class="h-space"></div>
|
|
159
|
+ <n-button type="primary" @click="handleAreaSubmit">确定</n-button>
|
222
|
160
|
</SettingItemBox>
|
223
|
161
|
</CollapseItem>
|
224
|
162
|
</template>
|
...
|
...
|
@@ -253,7 +191,7 @@ const datasetMap3DList = computed(() => { |
253
|
191
|
const STATIC_SCATTER_CONFIG = {
|
254
|
192
|
name: null,
|
255
|
193
|
adcode: 510000,
|
256
|
|
- city_name:null,
|
|
194
|
+ city_name: null,
|
257
|
195
|
value: [0, 0, 0],
|
258
|
196
|
height: 2,
|
259
|
197
|
itemStyle: {
|
...
|
...
|
@@ -277,7 +215,7 @@ onMounted(async () => { |
277
|
215
|
datasetMap3DList.value.forEach(async (item: Recordable) => {
|
278
|
216
|
item.provinceOptions = await getAreaLists()
|
279
|
217
|
item.cityOptions = await getAreaLists(areaEnum.CITY, !item.adcode ? mapRegionCache.value.adcode : item.adcode)
|
280
|
|
- item.adcode = !item.adcode ? mapRegionCache.value.adcode : item.adcode
|
|
218
|
+ item.adcode = !item.adcode ? mapRegionCache.value.adcode : item.adcode
|
281
|
219
|
})
|
282
|
220
|
})
|
283
|
221
|
|
...
|
...
|
@@ -288,13 +226,28 @@ const onHandleSelectProvince = async (value: number, option: Recordable, item: R |
288
|
226
|
datasetMap3DList.value[findIndex].cityOptions = await getAreaLists(areaEnum.CITY, option.adcode)
|
289
|
227
|
}
|
290
|
228
|
|
291
|
|
-const handleAddRegion = () => {
|
|
229
|
+const handleAddRegion =async () => {
|
292
|
230
|
props.optionData.dataset.map3D.push(cloneDeep(STATIC_SCATTER_CONFIG))
|
|
231
|
+ if (mapRegionCache.value.adcode !== 'china') {
|
|
232
|
+ const { adcode, areaName } = unref(mapRegionCache) || {}
|
|
233
|
+ const cityOptions = await getAreaLists(areaEnum.CITY, adcode)
|
|
234
|
+ // 循环 push 城市数据
|
|
235
|
+ datasetMap3DList.value.forEach((item: any) => {
|
|
236
|
+
|
|
237
|
+ item.name = areaName
|
|
238
|
+ item.cityOptions = cityOptions && cityOptions.length ? cityOptions : [{ adcode, label: areaName, value: areaName }]
|
|
239
|
+ })
|
|
240
|
+ return
|
|
241
|
+ }
|
293
|
242
|
datasetMap3DList.value.forEach(async (item: Recordable) => {
|
294
|
243
|
item.provinceOptions = await getAreaLists()
|
295
|
244
|
})
|
296
|
245
|
}
|
297
|
246
|
|
|
247
|
+const handleAreaSubmit = () => {
|
|
248
|
+ props.optionData.isShowExecute = !props.optionData?.isShowExecute
|
|
249
|
+}
|
|
250
|
+
|
298
|
251
|
const mapRegionCache = computed(() => {
|
299
|
252
|
return props.optionData.mapRegion
|
300
|
253
|
})
|
...
|
...
|
@@ -306,24 +259,31 @@ const onHandleSelectValues = async (values: regionInfo) => { |
306
|
259
|
mapRegionCache.value.adcode = countyValue
|
307
|
260
|
? countyValue
|
308
|
261
|
: cityValue
|
309
|
|
- ? cityValue
|
310
|
|
- : provinceValue === 'china'
|
311
|
|
- ? 'china'
|
312
|
|
- : provinceValue
|
|
262
|
+ ? cityValue
|
|
263
|
+ : provinceValue === 'china'
|
|
264
|
+ ? 'china'
|
|
265
|
+ : provinceValue
|
313
|
266
|
props.optionData.mapRegion = mapRegionCache.value
|
314
|
|
- if(mapRegionCache.value.adcode!=='china'){
|
315
|
|
- const {adcode,areaName} = unref(mapRegionCache) || {}
|
316
|
|
- const cityOptions = await getAreaLists(areaEnum.CITY, adcode)
|
317
|
|
- console.log(cityOptions,'cityOptions')
|
318
|
|
- datasetMap3DList.value.forEach((item:any)=>{
|
319
|
|
- item.name=areaName
|
320
|
|
- item.city_name=areaName?areaName:null
|
321
|
|
- item.adcode=adcode,
|
322
|
|
- item.cityOptions = cityOptions && cityOptions.length?cityOptions:[{adcode,label:areaName,value:areaName}]
|
323
|
|
- })
|
|
267
|
+ if (mapRegionCache.value.adcode !== 'china') {
|
|
268
|
+ //清空区块配置和柱状配置
|
|
269
|
+ props.optionData.dataset.map3D = [cloneDeep(STATIC_SCATTER_CONFIG)]
|
|
270
|
+ props.optionData.dataset.bar3D = [cloneDeep(STATIC_SCATTER_CONFIG)]
|
|
271
|
+ setDatasetArea()
|
324
|
272
|
}
|
325
|
273
|
}
|
326
|
274
|
|
|
275
|
+const setDatasetArea = async () => {
|
|
276
|
+ const { adcode, areaName } = unref(mapRegionCache) || {}
|
|
277
|
+ const cityOptions = await getAreaLists(areaEnum.CITY, adcode)
|
|
278
|
+ // 循环 push 城市数据
|
|
279
|
+ datasetMap3DList.value.forEach((item: any) => {
|
|
280
|
+ item.name = areaName
|
|
281
|
+ item.city_name = null
|
|
282
|
+ item.adcode = null,
|
|
283
|
+ item.cityOptions = cityOptions && cityOptions.length ? cityOptions : [{ adcode, label: areaName, value: areaName }]
|
|
284
|
+ })
|
|
285
|
+}
|
|
286
|
+
|
327
|
287
|
const handleChangeDrillingIn = () => {
|
328
|
288
|
SelectCityRef.value?.resetValue()
|
329
|
289
|
props.optionData.mapRegion.adcode = 'china'
|
...
|
...
|
|