【vue】element 前端处理 省市区三级联动 公共组件

1.src/components/AreaCascader/index.vue

<template>
  <el-cascader :value="data_array" :options="areaData" @change="handleChange"></el-cascader>
</template>

<script>
import areaData from '@/utils/area.json'

export default {
  name: 'AreaCascader',
  props: {
    data: {
      type: String || Array,
      default: ''
    }
  },
  computed: {
    areaData() {
      return areaData
    },
    // el-cascader只接受数组格式的初始化值
    // 检测父组件传参类型,如果为String则分割字符串,反之直接展示
    data_array() {
      return Array.isArray(this.data) ? this.data : this.data.split(',')
    }
  },
  methods: {
    handleChange(val) {
      this.$emit('update:change', val.join(','));
    }
  }
}
</script>

2.src/utils/area.js

3.src/utils/area.json

使用

  <area-cascader v-if="form.field_type === 7" :data="submitForm" :change.sync="submitForm"></area-cascader>

import AreaCascader from '@/components/AreaCascader/index.vue'
   components: { AreaCascader },
    submitForm: '',

这个时候的值是00,0000,000000这样的形式
需要转换areaCodeTransform,所以封装这样一个函数

src/utils下


import areaData from './area.json'
export function areaCodeTransform(areaCode) {
  const Province = areaCode.split(',')[0]
  const City = areaCode.split(',')[1]
  const District = areaCode.split(',')[2]
  const ProvinceObj = areaData.find(province => province.value === Province)
  const CityObj = ProvinceObj ? ProvinceObj.children.find(city => city.value === City) : { label: '', child: [] }
  const DistrictObj = CityObj ? CityObj.children.find(district => district.value === District) : { label: '' }

  return `${ProvinceObj.label}/${CityObj.label}/${DistrictObj.label}`
}

在main.js

import { areaCodeTransform } from './utils/index'
Vue.prototype.$areaCodeTransform = areaCodeTransform

使用

  • $areaCodeTransform(item.value)

将00,0000,000000

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停喝水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值