IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> elementui的级联地址选择器 -> 正文阅读

[JavaScript知识库]elementui的级联地址选择器

在这里插入图片描述

<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>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:44:50  更:2021-10-27 12:46:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 1:58:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码