Commit bc144521de400a28eb85ecbde53fe6b816cf172a

Authored by fengwotao
1 parent ca773a06

feat(src/packages): 修改地图从中国地图,点击省会下钻,再点击市区,返回只能返回到省会,再返回到中国地图无效

... ... @@ -74,10 +74,15 @@ props.chartConfig.option = {
74 74 //地图点击返回
75 75 const watchAdcode = async () => {
76 76 if (props.chartConfig.option.drillingIn) {
77   - let saveAdcode: any = saveLevelStr.parentInfo.adcode
78   - saveLevelStr.level = saveLevelStr.parentInfo.level
  77 + //如果是从右边配置里设置的,比如点击四川省,然后点击返回
  78 + const savePopParent = saveHistoryParent.value.pop()
  79 + let saveAdcode: any = savePopParent?.adcode
  80 + saveLevelStr.level = savePopParent?.level as string
  81 + if (!savePopParent) {
  82 + saveAdcode = getParentAdcode(props.chartConfig.option.mapRegion.adcode)
  83 + saveLevelStr.level = (regionMapParentArea as any)[props.chartConfig.option.mapRegion.saveSelect.levelStr]
  84 + }
79 85 if (saveAdcode === 0) {
80   - //
81 86 saveAdcode = 'china'
82 87 saveLevelStr.level = 'COUNTRY'
83 88 }
... ... @@ -110,9 +115,11 @@ const handleMap3DClick = async (params: any) => {
110 115 const adcode = item.properties.adcode
111 116 props.chartConfig.option.mapRegion.adcode = adcode
112 117 saveLevelStr.level = level
113   - saveLevelStr.parentInfo.adcode = item.properties.parent.adcode //保存上一级的地区编码
114   - saveLevelStr.parentInfo.level = (regionMapParentArea as any)[level] //保存上一级的行政级别
115 118 handleDataPoint(adcode)
  119 + saveHistoryParent.value.push({
  120 + adcode: item.properties.parent.adcode,
  121 + level: (regionMapParentArea as any)[level]
  122 + })
116 123 }
117 124 })
118 125 }
... ... @@ -123,14 +130,18 @@ const saveGeojson: any = ref({}) // 保存geojson
123 130 const chinaDefaultRegionId = ref(100000) //如果是china则adcode为100000
124 131
125 132 const saveLevelStr = reactive({
126   - // 保存行政级别和上一级的adcode和level
127   - level: '',
128   - parentInfo: {
129   - adcode: 0,
130   - level: ''
131   - }
  133 + // 地区级别
  134 + level: ''
132 135 })
133 136
  137 +//父级地区编码和级别接口
  138 +interface HistoryParentType {
  139 + adcode: number
  140 + level: string
  141 +}
  142 +
  143 +const saveHistoryParent = ref<HistoryParentType[]>([])
  144 +
134 145 //动态注册地图
135 146 const getGeojson = (regionId: any) => {
136 147 try {
... ... @@ -158,6 +169,18 @@ const getGeojson = (regionId: any) => {
158 169 }
159 170 }
160 171
  172 +
  173 +//传adcode 获取上级
  174 +const getParentAdcode = (adcode: number) => {
  175 + let adcodeNum = 100000
  176 + saveGeojson.value?.features.forEach((item: any) => {
  177 + if (item.properties.adcode === adcode) {
  178 + adcodeNum = item.properties.parent.adcode
  179 + }
  180 + })
  181 + return adcodeNum
  182 +}
  183 +
161 184 watch(
162 185 () => w.value,
163 186 (value: number) => {
... ...
... ... @@ -107,10 +107,15 @@ props.chartConfig.option = {
107 107 //地图点击返回 adcode=100000,名字必须是china
108 108 const watchAdcode = async () => {
109 109 if (props.chartConfig.option.drillingIn) {
110   - let saveAdcode: any = saveLevelStr.parentInfo.adcode
111   - saveLevelStr.level = saveLevelStr.parentInfo.level
  110 + //如果是从右边配置里设置的,比如点击四川省,然后点击返回
  111 + const savePopParent = saveHistoryParent.value.pop()
  112 + let saveAdcode: any = savePopParent?.adcode
  113 + saveLevelStr.level = savePopParent?.level as string
  114 + if (!savePopParent) {
  115 + saveAdcode = getParentAdcode(props.chartConfig.option.mapRegion.adcode)
  116 + saveLevelStr.level = (regionMapParentArea as any)[props.chartConfig.option.mapRegion.saveSelect.levelStr]
  117 + }
112 118 if (saveAdcode === 0) {
113   - //
114 119 saveAdcode = 'china'
115 120 saveLevelStr.level = 'COUNTRY'
116 121 }
... ... @@ -132,14 +137,18 @@ const saveGeojson: any = ref({}) // 保存geojson
132 137 const chinaDefaultRegionId = ref(100000) //如果是china则adcode为100000
133 138
134 139 const saveLevelStr = reactive({
135   - // 保存行政级别和上一级的adcode和level
136   - level: '',
137   - parentInfo: {
138   - adcode: 0,
139   - level: ''
140   - }
  140 + // 地区级别
  141 + level: ''
141 142 })
142 143
  144 +//父级地区编码和级别接口
  145 +interface HistoryParentType {
  146 + adcode: number
  147 + level: string
  148 +}
  149 +
  150 +const saveHistoryParent = ref<HistoryParentType[]>([])
  151 +
143 152 //动态注册地图
144 153 const getGeojson = async (regionId: any) => {
145 154 try {
... ... @@ -281,6 +290,17 @@ const regionMapParentArea = {
281 290 [areaEnum.TOWN]: areaEnum.COUNTY //镇的上一级 县或者区
282 291 }
283 292
  293 +//传adcode 获取上级
  294 +const getParentAdcode = (adcode: number) => {
  295 + let adcodeNum = 100000
  296 + saveGeojson.value?.features.forEach((item: any) => {
  297 + if (item.properties.adcode === adcode) {
  298 + adcodeNum = item.properties.parent.adcode
  299 + }
  300 + })
  301 + return adcodeNum
  302 +}
  303 +
284 304 //地图点击下钻
285 305 const handleVChartClick = async (params: any) => {
286 306 if (props.chartConfig.option.drillingIn) {
... ... @@ -291,9 +311,11 @@ const handleVChartClick = async (params: any) => {
291 311 const adcode = item.properties.adcode
292 312 props.chartConfig.option.mapRegion.adcode = adcode
293 313 saveLevelStr.level = level
294   - saveLevelStr.parentInfo.adcode = item.properties.parent.adcode //保存上一级的地区编码
295   - saveLevelStr.parentInfo.level = (regionMapParentArea as any)[level] //保存上一级的行政级别
296 314 handleDataPoint(adcode)
  315 + saveHistoryParent.value.push({
  316 + adcode: item.properties.parent.adcode,
  317 + level: (regionMapParentArea as any)[level]
  318 + })
297 319 }
298 320 })
299 321 }
... ...