vue+element 全国+指定地区 地区级联选择器

1.实现效果(全国禁选,指定地区可选)

vue+element 全国+指定地区 地区级联选择器_第1张图片

vue+element 全国+指定地区 地区级联选择器_第2张图片

2. 思路(级联选择器无法直接添加禁用,只能子地区数据里添加disabled=true)

1.单选组

    
      全国
      指定地区
    

2. 全国----只给第一层数据

    指定地区---给三层数据

methods:{   
     init() {
      // 获取地区
      getRegionList(this.level).then(({ data }) => {
        let dataBuild = data
        if (this.showAllCountry) {
          dataBuild = [{
            d: '0',
            h: '全国',
            c: data
          }
          ]
        }
        // this.regionList = dataBuild
        // 获取三级地区数据
        this.regionListBase = dataBuild
        // console.log(data, 'data')

        // 将一级地区数据赋值给level1
        const level1 = data.map(item => {
          return { d: item.d, h: item.h }
        })
        // 给每一条以及地区数据里添加disbled=true
        level1.map((item) => {
          this.$set(item, 'disabled', true)
        })
        // console.log(level1)

        // 将处理好的level1 赋值
        this.regionListLevet1 = level1

        if (this.radio === 1) {
          //  当时全国时只赋值一级地区数据切禁用
          this.regionList = this.regionListLevet1
        } else {
          // 指定地区时赋值三级地区数据不禁用
          this.regionList = this.regionListBase
        }
      })
    }
}

3.单选组切换(使用element radio的事件change)

    allCountryChangeHandle(val) {
      if (val === 1) {
        //已选择地区列表清空
        this.chooseList = []
        //cascader里的值清空(不清空会影响切换)
        this.valueRegion = []
        //在获取到数据后进行赋值
        this.$nextTick(() => {
          //将一级禁用地区列表赋值
          this.regionList = this.regionListLevet1
        })
      } else if (val === 2) {
        this.$nextTick(() => {
          this.regionList = this.regionListBase
        })
      }
 
      this.regionIsShow = !val
      //单选时
      if (this.multiple === false) {
        this.valueRegion = undefined
        //如果选中的是全国,已选中地区列表为 d: 0, path: '全国' 
        if (val === 1) {
          this.chooseList = [{ d: 0, path: '全国' }]
          
          this.$emit('isAllCountry')
          console.log('this.allCountry is true')
        } else {
          this.chooseList = []
          // this.$emit('noAllCountry');
          console.log('this.allCountry is false')
        }
        // console.log('this.chooseList',this.chooseList);
        this.$emit('update:chooseData', this.chooseList)
      } else {
        this.changeHandle()
      }
    }

 3.完整组件代码




你可能感兴趣的:(elementui)