ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

elementui的级联地址选择器

2021-10-26 19:06:03  阅读:911  来源: 互联网

标签:case childrenData 级联 return elementui default addresstype type 选择器


在这里插入图片描述

<template>
  <div style="display: flex; align-items: flex-end">
    <el-cascader
      ref="cascaderAddr"
      :options="options"
      :props="{ checkStrictly: true, value: 'code', label: 'name' }"
      :style="{ width: inputwidth + 'px' }"
      v-model="chooseAddressList"
      :placeholder="defaultaddress"
      @change="handleChange"
      @visible-change="visibleChange"
    ></el-cascader>
    <div v-if="isshowtitle" style="color: red; margin-left: 10px">
      {{ title }}
    </div>
  </div>
</template>
<script>
/* 
  props参数:
           inputwidth:          输入框的宽度
           addresstype:         地址填写要求,4: 省市区街道四级必填,3:省市区三级必填,2:省市必填, 0:没有限制
           addresslevel:        请求接口的地址级别,PROVINCE:省份,CITY: 省市,DISTRICT:省市区,STREET:省市区街道
           currentaddresscode:  地址反填,传入当前地区的code,如:'安徽省安庆市大观区大观开发区' 要传入 '340803400000',
           isshowtitle:         是否显示提示信息
  $emit事件:
           getaddressinfo       将所选地址信息传递到父组件
*/
import 'element-ui/lib/theme-chalk/index.css'
let addressList = require('././address.json')
export default {
  props: {
    inputwidth: {
      type: Number,
      default: 260,
    },
    addresstype: {
      type: Number,
      default: 0,
    },
    addresslevel: {
      type: String,
      default: 'STREET',
    },
    isshowtitle: {
      type: Boolean,
      default: true,
    },
    currentaddresscode: {
      type: String,
      default: '',
    },
  },
  data() {
    return {
      options: addressList,
      title: '',
      chooseAddressList: [],
    }
  },
  mounted() {
    this.getTitle()
    this.init()
  },
  methods: {
    visibleChange(flag) {
      this.$nextTick(() => {
        let areaInfo = this.$refs['cascaderAddr'].getCheckedNodes()
        if (!flag && areaInfo.length !== 0) {
          if (this.addresstype !== 0 && areaInfo[0].level < this.addresstype) {
            _.ui.notify({
              type: 'warning',
              message: this.getLevelInfo(),
            })
            this.chooseAddressList = []
          } else {
            this.$emit('getaddressinfo', areaInfo[0].data)
            console.log(
              this.chooseAddressList,
              areaInfo[0].data,
              'selectedOptions'
            )
          }
        }
      })
    },
    handleChange(value) {
      // console.log(value)
      // this.$refs.cascader.dropDownVisible = false //监听值发生变化就关闭它
    },
    init() {
        if (this.currentaddresscode !== '') {
          this.chooseAddressList = this.getTreeDeepArr(
            this.currentaddresscode,
            this.options
          )
      }
    },
    getTitle() {
      switch (this.addresstype) {
        case 4:
          this.title = '(省、市、区、街道为必选项)'
          break
        case 3:
          this.title = '(省、市、区为必选项)'
          break
        case 2:
          this.title = '(省、市为必选项)'
          break
      }
    },
    getLevelInfo() {
      switch (this.addresstype) {
        case 4:
          return '请选择省、市、区、街道'
        case 3:
          return '请选择省、市、区'
        case 2:
          return '请选择省、市'
      }
    },
    // 反填地址
    getTreeDeepArr(key, treeData) {
      let arr = [] // 在递归时操作的数组
      let returnArr = [] // 存放结果的数组
      let depth = 0 // 定义全局层级
      // 定义递归函数
      function childrenEach(childrenData, depthN) {
        for (var j = 0; j < childrenData.length; j++) {
          depth = depthN // 将执行的层级赋值 到 全局层级
          arr[depthN] = childrenData[j].code
          if (childrenData[j].code == key) {
            returnArr = arr.slice(0, depthN + 1) //将目前匹配的数组,截断并保存到结果数组,
            break
          } else {
            if (childrenData[j].children) {
              depth++
              childrenEach(childrenData[j].children, depth)
            }
          }
        }
        return returnArr
      }
      return childrenEach(treeData, depth)
    },
  },
}
</script>
<style>
</style>

标签:case,childrenData,级联,return,elementui,default,addresstype,type,选择器
来源: https://blog.csdn.net/qq_40280730/article/details/120978200

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有