首页前端开发VUEVue实现省市区三级联动el-select组件的示例代码

Vue实现省市区三级联动el-select组件的示例代码

时间2024-02-11 03:24:03发布访客分类VUE浏览805
导读:收集整理的这篇文章主要介绍了Vue实现省市区三级联动el-select组件的示例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。 目录一 自定义组件1 位置2 代码二 main.j...
收集整理的这篇文章主要介绍了Vue实现省市区三级联动el-select组件的示例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
  • 一 自定义组件
    • 1 位置
    • 2 代码
  • 二 main.js 配置
    • 三 使用方法
      • 1 结构部分
      • 2 代码部分
      • 3 样式部分
    • 四 测试
      • 1 级联选择
      • 2 观察数据

    一 自定义组件

    1 位置

    2 代码

    template>
          div class="areaSelect flex">
            !-- 省选择框 -->
            el-select      filterable      :disabled="disabled"      v-model="PRovince"      :size="size"      placeholder="省"      @change="changeCode($event,0)">
              el-option        v-for="ITem in provinceList"        :key="item.value"        :label="item.label"        :value="item.value">
              /el-option>
            /el-select>
            !-- 市选择框 -->
            el-select      filterable      :disabled="disabled"      class="center_select"      v-model="city"      placeholder="市"      @change="changeCode($event,1)">
              el-option        v-for="item in cityList"        :key="item.value"        :label="item.label"        :value="item.value">
              /el-option>
            /el-select>
            !-- 区选择框 -->
            el-select      filterable      :disabled="disabled"      v-model="area"      placeholder="区"      @change="changeCode($event,2)">
              el-option        v-for="item in areaList"        :key="item.value"        :label="item.label"        :value="item.value">
              /el-option>
            /el-select>
          /div>
        /template>
        script>
      export default {
        name: 'regionSelect',    props: {
          Size: '',      disabled: {
            size: String,        tyPE: Boolean,        default: false      }
    ,      code: {
                type: Object,        default: () =>
     {
              return {
                areaCode: '',            areaName: '',            cityCode: '',            cityName: '',            provinceCode: '',            provinceName: ''          }
            }
          }
        }
    ,    data () {
          return {
            province: '',        city: '',        area: '',        provinceList: [],        cityList: [],        areaList: []      }
        }
    ,    watch: {
          code (val) {
                if (val.areaName &
        &
     val.areaName !== '') {
              this.province = val.provinceCode          this.city = val.cityCode          this.area = val.areaCode          this.provinceCity(val.provinceCode)          this.cityArea(val.cityCode)        }
     else {
              this.cityList = []          this.areaList = []        }
          }
        }
    ,    mounted () {
              if (this.code.areaName &
        &
     this.code.areaName !== '') {
            this.province = this.code.provinceCode        this.city = this.code.cityCode        this.area = this.code.areaCode        this.provinceCity(this.code.provinceCode)        this.cityArea(this.code.cityCode)      }
          this.getProvince()    }
    ,    methods: {
          resetArea () {
            this.province = ''        this.city = ''        this.area = ''      }
    ,      // 当 type == 0 ,data 表示省编码      // 当 type == 1 ,data 表示市编码      changeCode (data, type) {
            if (type === 0) {
              this.city = ''          this.area = ''          this.provinceCity(data)        }
            if (type === 1) {
              this.area = ''          this.cityArea(data)        }
                if (this.province !== '' &
        &
         this.city !== '' &
        &
     this.area !== '') {
              this.$emit(            'code', [{
                      code: this.province,              name: this.provinceList.find(                (val) =>
     val.value === this.province              ).label            }
    , {
                      code: this.city,              name: this.cityList.find(                (val) =>
     val.value === this.city              ).label            }
    , {
                      code: this.area,              name: this.areaList.find(                (val) =>
     val.value === this.area              ).label            }
    ]          )        }
          }
    ,      // 从后台获得省数据列表      async getProvince () {
                let result = []        let url = '/base/division/provinceList'        let data = await this.$http.get(url)        data.data.data.map((item) =>
     {
              result.push({
                label: item.name,            value: item.code          }
    )        }
    )        this.provinceList = result      }
    ,      // 依据省编码获得市数据列表      async provinceCity (code) {
            let result = []        let url = '/base/division/cityList'        let data = await this.$http({
              url: url,          method: 'get',          params: {
                provinceCode: code          }
            }
        )          data.data.data.map((item) =>
     {
              result.push({
                label: item.name,            value: item.code          }
    )        }
    )        this.cityList = result      }
    ,      // 依据市编码获得区数据列表      async cityArea (code) {
            let url = '/base/division/districtList'        let data = await this.$http({
              url: url,          method: 'get',          params: {
                cityCode: code          }
            }
        )        let result = []        data.data.data.map((item) =>
     {
              result.push({
                label: item.name,            value: item.code          }
    )        }
    )        this.areaList = result      }
        }
      }
        /script>
        style>
      .center_select {
            margin: 0 10px;
      }
        .global_form .areaSelect {
            width: 70%;
      }
        .global_form .areaSelect .el-select {
            width: 33.33%;
      }
        /style>
        

    二 main.js 配置

    // 行政区划三级选择import RegionSelect From './components/regionSelect'// 行政区划三级选择Vue.use(RegionSelect)// 行政区划三级选择Vue.COMponent('regionSelect', RegionSelect)

    三 使用方法

    1 结构部分

    regionSelect  :code="item.value"  :disabled="item.disabled"  :size="layout.size"  @code="changeCode($event,item.prop)"  v-if="item.type==='region'"  ref="selectArea">
        /regionSelect>
        

    2 代码部分

    seArchForm: {
      province: '', // 省  city: '', // 市  district: '' // 区}
    ,item: {
     // 省市区 select 自定义组件传参部分  value: '',  type: 'region',  disabled: false}
    ,layout: {
     // 选择框样式,用于传参  size: ''}
        ,

    3 样式部分

    // 省市区选择框改变时,传递出来已选择的值changeCode (data, prop) {
      this.searchForm.province = data[0].name  this.searchForm.city = data[1].name  this.searchForm.district = data[2].name}
    ,// 重置选择框resetForm () {
      this.$refs.selectArea[0].resetArea()  // 清除省市区}
        

    四 测试

    1 级联选择

    2 观察数据

    到此这篇关于Vue实现省市区三级联动el-select组件的示例代码的文章就介绍到这了,更多相关Vue省市区三级联动组件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

    您可能感兴趣的文章:
    • vue移动端城市三级联动组件使用详解
    • 基于Vue2实现简易的省市区县三级联动组件效果
    • vue.js模仿京东省市区三级联动的选择组件实例代码
    • Vue自定义省市区三级联动
    • Vue实现省市区三级联动
    • vue + elementUI实现省市县三级联动的方法示例

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


    若转载请注明出处: Vue实现省市区三级联动el-select组件的示例代码
    本文地址: https://pptw.com/jishu/609255.html
    Vue Echarts实现多功能图表绘制的示例详解 详解Vue自定义指令如何实现处理图片加载失败的碎图

    游客 回复需填写必要信息