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知识库 -> 省市区四级json -> 正文阅读

[JavaScript知识库]省市区四级json

<style lang="scss" scoped>
.wrap {
  .el-input,.el-select{
    width: 70%;
  }
  .gy-label{
    font-size: 15px;
    padding-right: 10px;
    margin-right: 10px;
    color: rgb(102, 102, 102);
    font-weight: 700;
    width: 150px;
    text-align: right;
    line-height: 40px;
    &.required:before{
      content: '*';
      color: #F56C6C;
      margin-right: 4px;
      font-size: 16px;
    }
  }
}
</style>
<style lang="scss">
.province{
  .el-form-item{
    float: left;
    margin-right: 22px;
    .el-form-item__content{
      margin-left: 0!important;
    }
  }
}
</style>
<template>
  <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="160px" class="demo-ruleForm">
    <div class="dis-flex">
      <div class="gy-label required">小区地址:</div>
      <div class="province">
        <!--省-->
        <el-form-item prop="province">
          <el-select v-model="ruleForm.province" placeholder="选择省" @change="selectProvince" calss="slelect-province" style="width: 142px;">
            <el-option
              v-for="item in provinceData"
              :key="item.code"
              :label="item.name"
              :value="item.name">
            </el-option>
          </el-select>
        </el-form-item>
        <!--市-->
        <el-form-item prop="city">
          <el-select v-model="ruleForm.city" placeholder="选择市" @change="selectCity" class="slelect-city" style="width: 142px;">
            <el-option
              v-for="item in cityData"
              :key="item.code"
              :label="item.name"
              :value="item.name">
            </el-option>
          </el-select>
        </el-form-item>
        <!--区-->
        <el-form-item prop="area">
          <el-select v-model="ruleForm.area" placeholder="选择区" @change="selectArea" class="slelect-area" style="width: 142px;">
            <el-option
              v-for="item in areaData"
              :key="item.code"
              :label="item.name"
              :value="item.name">
            </el-option>
          </el-select>
        </el-form-item>
        <!--镇-->
        <el-form-item prop="town">
          <el-select v-model="ruleForm.town" placeholder="选择镇" @change="selectTown" class="slelect-town" style="width: 142px;">
            <el-option
              v-for="item in townData"
              :key="item.code"
              :label="item.name"
              :value="item.name">
            </el-option>
          </el-select>
        </el-form-item>
      </div>
    </div>
  </el-form>
</template>

<script>
import addressData from '@/utils/address.json'
export default {
  data() {
    let validateMobile = (rule, value, callback) => {
      if(!!value && !/^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(value)){
        callback(new Error('请输入正确格式的电话!'))
      } else {
        callback()
      }
    }
    const validateCity = (rule, value, callback) => {
      if (!value) {
        if (this.cityFlag === 0) {
          callback(new Error('请选择市'))
        }
      }
      else {
        callback()
      }
    }
    const validateArea = (rule, value, callback) => {
      if (!value) {
        if (this.areaFlag === 0) {
          callback(new Error('请选择区'))
        }
      }
      else {
        callback()
      }
    }
    const validateTown = (rule, value, callback) => {
      if (!value) {
        if (this.townFlag === 0) {
          callback(new Error('请选择镇'))
        }
      }
      else {
        callback()
      }
    }
    return {
      ruleForm: {
        province: '',
        city: '',
        area: '',
        town: '',
      },
      // 省数据
      provinceData: [],
      // 市数据
      cityFlag: 0,
      cityData: [],
      // 区数据
      areaFlag: 0,
      areaData: [],
      // 镇数据
      townFlag: 0,
      townData: [],
      rules: {
        province: [{required: true, trigger: 'change', message: '请选择省'}],
        city: [{required: true, trigger: 'change', validator: validateCity}],
        area: [{required: true, trigger: 'change', validator: validateArea}],
        town: [{required: true, trigger: 'change', validator: validateTown}],
      }
    }
  },
  created() {
    this.loadData()
  },
  methods: {
    // 加载省市区镇数据
    loadData() {
      this.provinceData = addressData
    },

    // 选择省
    selectProvince(value) {
      this.provinceData.forEach((item, index) => {
        if (item.name === value) {
          console.log('children', item.children)
          this.cityData = item.children
          this.ruleForm.city = item.children[0].name || ''
          this.cityFlag = 1
          this.ruleForm.area = item.children[0].children[0].name || ''
          this.areaFlag = 1
          this.ruleForm.town = item.children[0].children[0].children[0].name || ''
          this.townFlag = 1
          this.areaData = []
          this.townData = []
          return false
        }
      })
      console.log('选择了省' + value)
    },
    // 选择市
    selectCity(value) {
      this.cityData.forEach((item, index) => {
        if (item.name === value) {
          this.areaData = item.children
          this.ruleForm.area =  item.children[0].name || ''
          this.areaFlag = 1
          this.ruleForm.town = item.children[0].children[0].name || ''
          this.townFlag = 1
          this.townData = []
          return false
        }
      })
      console.log('选择了市' + value)
    },
    // 选择区
    selectArea(value) {
      this.areaData.forEach((item, index) => {
        if (item.name === value) {
          this.townData = item.children
          this.ruleForm.town = item.children[0].name || ''
          this.townFlag = 1
          return false
        }
      })
      console.log('选择了区' + value)
    },
    // 选择镇
    selectTown(value) {
      console.log('选择了镇' + value)
    },
  }
}
</script>

?address.json

?省市区街道四级联动地址json-Javascript文档类资源-CSDN下载

?参考:https://github.com/Beingyo/vue-test-template

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:52:15  更:2022-05-21 18:53:11 
 
开发: 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年11日历 -2024/11/23 20:40:14-

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