Blame view

src/components/community/areaSelect.vue 3.67 KB
a42b3256   wuxw   HC小区管理系统前段vue版正在开发中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  <template>
    <div class="area-select">
      <el-select v-model="areaSelectInfo.selectProv" :placeholder="$t('areaSelect.province')"
        style="width: 30%; margin-right: 10px" @change="getProv(areaSelectInfo.selectProv)">
        <el-option v-for="item in areaSelectInfo.provs" :key="item.areaCode" :label="item.areaName"
          :value="item.areaCode" />
      </el-select>
      <el-select v-model="areaSelectInfo.selectCity" :placeholder="$t('areaSelect.city')"
        style="width: 30%; margin-right: 10px" :disabled="!areaSelectInfo.selectProv"
        @change="getCity(areaSelectInfo.selectCity)">
        <el-option v-for="item in areaSelectInfo.citys" :key="item.areaCode" :label="item.areaName"
          :value="item.areaCode" />
      </el-select>
      <el-select v-model="areaSelectInfo.selectArea" :placeholder="$t('areaSelect.area')" style="width: 30%"
        :disabled="!areaSelectInfo.selectCity" @change="getArea(areaSelectInfo.selectArea)">
        <el-option v-for="item in areaSelectInfo.areas" :key="item.areaCode" :label="item.areaName"
          :value="item.areaCode" />
      </el-select>
    </div>
  </template>
  
  <script>
  import { listAreas } from '@/api/community/communityManageApi'
  
  export default {
    name: 'AreaSelect',
    props: {
      callBackListener: {
        type: String,
        default: ''
      },
      callBackFunction: {
        type: String,
        default: ''
      },
      namespace: {
        type: String,
        default: ''
      }
    },
    data() {
      return {
        areaSelectInfo: {
          areas: [],
          provs: [],
          citys: [],
          allCity: [],
          selectProv: '',
          selectProvName: '',
          selectCity: '',
          selectCityName: '',
          selectArea: '',
          selectAreaName: ''
        }
      }
    },
    created() {
      this._initArea('101', '0')
    },
    methods: {
      getProv(prov) {
        this._initArea('202', prov)
      },
      getCity(city) {
        this._initArea('303', city)
      },
      getArea(area) {
        this.areaSelectInfo.cityCode = area
        this.areaSelectInfo.areaAddress = ''
        if (!this.areaSelectInfo.provs) return
  
        this.areaSelectInfo.provs.forEach(param => {
          if (param.areaCode === this.areaSelectInfo.selectProv) {
            this.areaSelectInfo.selectProvName = param.areaName
          }
        })
        this.areaSelectInfo.citys.forEach(param => {
          if (param.areaCode === this.areaSelectInfo.selectCity) {
            this.areaSelectInfo.selectCityName = param.areaName
          }
        })
        this.areaSelectInfo.areas.forEach(param => {
          if (param.areaCode === this.areaSelectInfo.selectArea) {
            this.areaSelectInfo.selectAreaName = param.areaName
          }
        })
  
        this.$emit('selectArea', {
          selectProv: this.areaSelectInfo.selectProv,
          selectProvName: this.areaSelectInfo.selectProvName,
          selectCity: this.areaSelectInfo.selectCity,
          selectCityName: this.areaSelectInfo.selectCityName,
          selectArea: this.areaSelectInfo.selectArea,
          selectAreaName: this.areaSelectInfo.selectAreaName
        })
      },
      _initArea(areaLevel, parentAreaCode) {
        listAreas({ areaLevel, parentAreaCode }).then(res => {
          const tmpAreas = res.areas
          if (areaLevel === '101') {
            this.areaSelectInfo.provs = tmpAreas
          } else if (areaLevel === '202') {
            this.areaSelectInfo.citys = tmpAreas
          } else {
            this.areaSelectInfo.areas = tmpAreas
          }
        }).catch(error => {
          console.error('查询地区失败', error)
          this.$message.error(this.$t('areaSelect.fetchError'))
        })
      },
      clearArea() {
        this.areaSelectInfo.selectProv = ''
        this.areaSelectInfo.selectCity = ''
        this.areaSelectInfo.selectArea = ''
      }
    }
  }
  </script>