Commit eee1727f887b436d0e607d143630abb3df0339e9
Committed by
xp.Huang
1 parent
da7263e4
fix: 地区配置添加确定预览
Showing
3 changed files
with
101 additions
and
126 deletions
| ... | ... | @@ -98,7 +98,7 @@ export const setScale = (adcode: string | number) => { |
| 98 | 98 | case '340000': |
| 99 | 99 | return { distance: 170, zoom: 0.8, alpha: 45 } |
| 100 | 100 | case '350000': |
| 101 | - return { distance: 150, zoom: 0.8, alpha: 45 } | |
| 101 | + return { distance: 150, zoom: 0.8, alpha: 45 } | |
| 102 | 102 | case '360000': |
| 103 | 103 | return { distance: 190, zoom: 0.8, alpha: 45 } |
| 104 | 104 | case '370000': |
| ... | ... | @@ -111,6 +111,8 @@ export const setScale = (adcode: string | number) => { |
| 111 | 111 | return { distance: 165, zoom: 0.8, alpha: 45 } |
| 112 | 112 | case '500000': |
| 113 | 113 | return { distance: 145, zoom: 0.8, alpha: 45 } |
| 114 | + case '510000': | |
| 115 | + return { distance: 115, zoom: 0.8, alpha: 45 } | |
| 114 | 116 | case '520000': |
| 115 | 117 | return { distance: 135, zoom: 0.8, alpha: 45 } |
| 116 | 118 | case '530000': |
| ... | ... | @@ -166,6 +168,7 @@ export const option = { |
| 166 | 168 | iconDistanceTop: 20, |
| 167 | 169 | drillingIn: false, |
| 168 | 170 | dataset: dataMaps, |
| 171 | + isShowExecute:false, | |
| 169 | 172 | saveClickRegion: { |
| 170 | 173 | level: '' |
| 171 | 174 | }, |
| ... | ... | @@ -188,7 +191,10 @@ export const option = { |
| 188 | 191 | geo3D: { |
| 189 | 192 | show: false, // 隐藏该层,为true时会导致出现两个地图 |
| 190 | 193 | map: '', |
| 191 | - roam: true | |
| 194 | + roam: true, | |
| 195 | + viewControl:{ | |
| 196 | + distance:100 | |
| 197 | + } | |
| 192 | 198 | }, |
| 193 | 199 | series: [ |
| 194 | 200 | { | ... | ... |
| ... | ... | @@ -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' | ... | ... |
| ... | ... | @@ -309,7 +309,7 @@ const handleDataPoint = (newData: string | number, areaName: string) => { |
| 309 | 309 | item.data = cloneDeepData.filter((item: Recordable) => item.name !== null) || [] |
| 310 | 310 | } |
| 311 | 311 | if (item.type === ThreeMapEnum.BAR3D) { |
| 312 | - item.data = dataset.value[ThreeMapEnum.BAR3D].filter((dataItem: dataPointI) => dataItem.adcode === newData) | |
| 312 | + item.data = dataset.value[ThreeMapEnum.BAR3D] | |
| 313 | 313 | } |
| 314 | 314 | }) |
| 315 | 315 | } |
| ... | ... | @@ -322,24 +322,23 @@ watch( |
| 322 | 322 | async (newData: number | string) => { |
| 323 | 323 | try { |
| 324 | 324 | await getGeojson(newData) |
| 325 | - const { distance, zoom, alpha } = setScale(String(newData)) | |
| 325 | + const { distance} = setScale(String(newData)) | |
| 326 | 326 | const option = props.chartConfig.option |
| 327 | 327 | // 修复缩放 |
| 328 | - const { series } = option || {} | |
| 328 | + const { series,geo3D } = option || {} | |
| 329 | + | |
| 329 | 330 | series?.forEach((item: Recordable) => { |
| 330 | 331 | if (item.type === 'map3D') { |
| 331 | 332 | item.viewControl = { |
| 332 | 333 | ...item?.viewControl, |
| 333 | 334 | distance, |
| 334 | - zoom, | |
| 335 | - alpha | |
| 336 | 335 | } |
| 337 | 336 | } |
| 338 | 337 | }) |
| 339 | 338 | handleRegisterMapNameAndData(newData, dataset.value, mapRegion.value.areaName) |
| 340 | 339 | handleDataPoint(newData, mapRegion.value.areaName) |
| 341 | 340 | changeOption.value = true |
| 342 | - handleSetOption(chartInstance.value!, { ...option, series }) | |
| 341 | + handleSetOption(chartInstance.value!, { ...option, series ,geo3D:{...geo3D,viewControl:{distance:distance}}}) | |
| 343 | 342 | } catch (error) { |
| 344 | 343 | console.error('展示区域发生变化出错,出错原因->', error) |
| 345 | 344 | } |
| ... | ... | @@ -366,4 +365,14 @@ const stopWatch = watch( |
| 366 | 365 | deep: true |
| 367 | 366 | } |
| 368 | 367 | ) |
| 368 | +watch(()=>props.chartConfig.option.isShowExecute,async()=>{ | |
| 369 | + const {adcode,areaName} = props.chartConfig.option.mapRegion || {} | |
| 370 | + handleRegisterMapNameAndData(adcode,dataset.value,mapRegion.value.areaName) | |
| 371 | + handleDataPoint(adcode,areaName) | |
| 372 | + | |
| 373 | + const { distance } = setScale(String(adcode)) | |
| 374 | + const option = props.chartConfig.option | |
| 375 | + const { series,geo3D } = option || {} | |
| 376 | + handleSetOption(chartInstance.value!, { ...option, series ,geo3D:{...geo3D,viewControl:{distance:distance}}}) | |
| 377 | +}) | |
| 369 | 378 | </script> | ... | ... |