Sfoglia il codice sorgente

feat(limit-purchase): 优化地区选择逻辑并移除本地省市数据

- 移除本地省级数据常量,改为通过接口动态获取省份信息
- 删除直辖市判断逻辑及相关方法
- 更新城市和区县选择器的禁用条件
- 修改地区数据查找逻辑以适配新的数据结构
- 补充城市数据中的直辖市条目(北京、天津、上海、重庆)
runphp 3 mesi fa
parent
commit
7eeada6531
2 ha cambiato i file con 48 aggiunte e 212 eliminazioni
  1. 24 212
      resource/admin/LimitPurchaseRule.vue
  2. 24 0
      src/city.json

+ 24 - 212
resource/admin/LimitPurchaseRule.vue

@@ -131,11 +131,11 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="城市" v-show="!isMunicipalitySelected()">
+                  <el-form-item label="城市">
                     <el-select
                       v-model="selectedCity"
                       placeholder="请选择城市"
-                      :disabled="!selectedProvince || isMunicipalitySelected()"
+                      :disabled="!selectedProvince"
                       filterable
                       clearable
                       @change="onCityChange"
@@ -154,7 +154,7 @@
                     <el-select
                       v-model="selectedArea"
                       placeholder="请选择区县"
-                      :disabled="!selectedProvince || (!selectedCity && !isMunicipalitySelected())"
+                      :disabled="!selectedCity"
                       filterable
                       clearable
                     >
@@ -217,180 +217,6 @@
 </template>
 
 <script>
-// 省级数据
-const PROVINCES = [
-  {
-    "code": "110000",
-    "name": "北京市",
-    "province": "11"
-  },
-  {
-    "code": "120000",
-    "name": "天津市",
-    "province": "12"
-  },
-  {
-    "code": "130000",
-    "name": "河北省",
-    "province": "13"
-  },
-  {
-    "code": "140000",
-    "name": "山西省",
-    "province": "14"
-  },
-  {
-    "code": "150000",
-    "name": "内蒙古自治区",
-    "province": "15"
-  },
-  {
-    "code": "210000",
-    "name": "辽宁省",
-    "province": "21"
-  },
-  {
-    "code": "220000",
-    "name": "吉林省",
-    "province": "22"
-  },
-  {
-    "code": "230000",
-    "name": "黑龙江省",
-    "province": "23"
-  },
-  {
-    "code": "310000",
-    "name": "上海市",
-    "province": "31"
-  },
-  {
-    "code": "320000",
-    "name": "江苏省",
-    "province": "32"
-  },
-  {
-    "code": "330000",
-    "name": "浙江省",
-    "province": "33"
-  },
-  {
-    "code": "340000",
-    "name": "安徽省",
-    "province": "34"
-  },
-  {
-    "code": "350000",
-    "name": "福建省",
-    "province": "35"
-  },
-  {
-    "code": "360000",
-    "name": "江西省",
-    "province": "36"
-  },
-  {
-    "code": "370000",
-    "name": "山东省",
-    "province": "37"
-  },
-  {
-    "code": "410000",
-    "name": "河南省",
-    "province": "41"
-  },
-  {
-    "code": "420000",
-    "name": "湖北省",
-    "province": "42"
-  },
-  {
-    "code": "430000",
-    "name": "湖南省",
-    "province": "43"
-  },
-  {
-    "code": "440000",
-    "name": "广东省",
-    "province": "44"
-  },
-  {
-    "code": "450000",
-    "name": "广西壮族自治区",
-    "province": "45"
-  },
-  {
-    "code": "460000",
-    "name": "海南省",
-    "province": "46"
-  },
-  {
-    "code": "500000",
-    "name": "重庆市",
-    "province": "50"
-  },
-  {
-    "code": "510000",
-    "name": "四川省",
-    "province": "51"
-  },
-  {
-    "code": "520000",
-    "name": "贵州省",
-    "province": "52"
-  },
-  {
-    "code": "530000",
-    "name": "云南省",
-    "province": "53"
-  },
-  {
-    "code": "540000",
-    "name": "西藏自治区",
-    "province": "54"
-  },
-  {
-    "code": "610000",
-    "name": "陕西省",
-    "province": "61"
-  },
-  {
-    "code": "620000",
-    "name": "甘肃省",
-    "province": "62"
-  },
-  {
-    "code": "630000",
-    "name": "青海省",
-    "province": "63"
-  },
-  {
-    "code": "640000",
-    "name": "宁夏回族自治区",
-    "province": "64"
-  },
-  {
-    "code": "650000",
-    "name": "新疆维吾尔自治区",
-    "province": "65"
-  },
-  {
-    "code": "710000",
-    "name": "台湾省",
-    "province": "71"
-  },
-  {
-    "code": "810000",
-    "name": "香港特别行政区",
-    "province": "81"
-  },
-  {
-    "code": "820000",
-    "name": "澳门特别行政区",
-    "province": "82"
-  }
-];
-
 export default {
   name: 'LimitPurchaseRule',
   props: {
@@ -433,41 +259,36 @@ export default {
       },
 
 
-      // 使用本地省市区 JSON 级联
-      provinces: PROVINCES,
+      // 使用接口获取省市区数据
+      provinces: [],
       cities: [],
       areas: [],
       selectedProvince: '',
       selectedCity: '',
       selectedArea: '',
-      currentRuleRegions: [], // 当前规则下的地区数组
-      
-      // 直辖市编码列表
-      municipalityCodes: ['11', '12', '31', '50'] // 北京、天津、上海、重庆
+      currentRuleRegions: []
     }
   },
   created() {
     this.fetchRuleList()
+    this.fetchProvinces()
   },
   methods: {
     http() {
       // 默认用全局 axios,如果父组件传入则优先用父组件的
       return this.axiosInstance || this.$axios || this.$http
     },
-    
-    // 判断是否为直辖市
-    isMunicipality(provinceCode) {
-      if (!provinceCode) return false;
-      // 提取前两位作为省份编码进行判断
-      const provincePrefix = provinceCode.substring(0, 2);
-      return this.municipalityCodes.includes(provincePrefix);
-    },
-    
-    // 判断当前选中的省份是否为直辖市
-    isMunicipalitySelected() {
-      if (!this.selectedProvince) return false;
-      const province = PROVINCES.find(p => p.name === this.selectedProvince);
-      return province ? this.isMunicipality(province.code) : false;
+
+    // 获取省份数据
+    async fetchProvinces() {
+      if (!this.http()) return
+      try {
+        const response = await this.http().get('/limit_purchase/region/province')
+        this.provinces = response.data || []
+      } catch (e) {
+        console.error('获取省份数据失败:', e)
+        this.$message.error('获取省份数据失败')
+      }
     },
 
     // ========== 列表相关 ==========
@@ -621,20 +442,11 @@ export default {
       if (!this.selectedProvince) return
       
       try {
-        const province = PROVINCES.find(p => p.name === this.selectedProvince)
+        const province = this.provinces.find(p => p.name === this.selectedProvince)
         if (province) {
-          // 判断是否为直辖市
-          if (this.isMunicipality(province.code)) {
-            // 直辖市直接获取区县数据,参数需要特殊处理
-            // 将110000转换为110100格式
-            const municipalityCode = province.code.substring(0, 2) + '0100';
-            const response = await this.http().get(`/limit_purchase/region/area/${municipalityCode}`)
-            this.areas = response.data || []
-          } else {
-            // 非直辖市获取城市数据
-            const response = await this.http().get(`/limit_purchase/region/city/${province.code}`)
-            this.cities = response.data || []
-          }
+          // 获取城市数据
+          const response = await this.http().get(`/limit_purchase/region/city/${province.code}`)
+          this.cities = response.data || []
         }
       } catch (e) {
         console.error('获取城市数据失败:', e)
@@ -650,7 +462,7 @@ export default {
       if (!this.selectedCity || !this.selectedProvince) return
       
       try {
-        const province = PROVINCES.find(p => p.name === this.selectedProvince)
+        const province = this.provinces.find(p => p.name === this.selectedProvince)
         if (province) {
           const city = this.cities.find(c => c.name === this.selectedCity)
           if (city) {
@@ -671,7 +483,7 @@ export default {
       }
 
       // 查找选中的省市区对象
-      const provinceObj = PROVINCES.find(p => p.name === this.selectedProvince)
+      const provinceObj = this.provinces.find(p => p.name === this.selectedProvince)
       const cityObj = this.cities.find(c => c.name === this.selectedCity) || null
       const areaObj = this.areas.find(a => a.name === this.selectedArea) || null
 

+ 24 - 0
src/city.json

@@ -1,4 +1,16 @@
 [
+  {
+    "code": "110100",
+    "name": "北京市",
+    "province": "11",
+    "city": "01"
+  },
+  {
+    "code": "120100",
+    "name": "天津市",
+    "province": "12",
+    "city": "01"
+  },
   {
     "code": "130100",
     "name": "石家庄市",
@@ -419,6 +431,12 @@
     "province": "23",
     "city": "27"
   },
+  {
+    "code": "310100",
+    "name": "上海市",
+    "province": "31",
+    "city": "01"
+  },
   {
     "code": "320100",
     "name": "南京市",
@@ -1373,6 +1391,12 @@
     "province": "46",
     "city": "04"
   },
+  {
+    "code": "500100",
+    "name": "重庆市",
+    "province": "50",
+    "city": "01"
+  },
   {
     "code": "510100",
     "name": "成都市",