首页 > 其他分享 >VUE省市区三级联动组件

VUE省市区三级联动组件

时间:2024-09-20 10:51:47浏览次数:12  
标签:VUE false form 组件 const 省市区 null true id

:::color5 核心搜索<font style="background-color:rgb(250, 250, 250);">fullCityCode</font>即可

:::

使用

<a-col :span="12" >
              <a-form-model-item label="省市区" prop="fullCityCodeArr">
                <a-cascader
                  :options="optionsArea"
                  :show-search="{ filterArea }"
                  placeholder="请选择省市区(可搜索)"
                  @change="onChangeArea"
                  v-model="form.fullCityCodeArr"
                />
              </a-form-model-item>
            </a-col>

截图

VUE省市区三级联动组件_bc

完整代码

<template>
  <j-modal
    ref="createModal"
    :maskClosable="formDisabled"
    centered
    :title="formTitle"
    width="60%"
    :visible="open"
    :fullscreen.sync="modal.fullscreen"
    :switchFullscreen="modal.switchFullscreen"
    :okButtonProps="{ class:{'pgz-hidden': formDisabled} }"
    :confirmLoading="submitLoading"
    @ok="submitForm"
    @cancel="cancel"
    cancelText="关闭11">
    <a-spin :spinning="loading">
      <p-form-container :disabled="formDisabled">
        <a-form-model ref="form" :model="form" :rules="rules" slot="detail">
          <a-row :gutter="32">
            <a-col :span="12" >
              <a-form-model-item label="省市区" prop="fullCityCodeArr">
                <a-cascader
                  :options="optionsArea"
                  :show-search="{ filterArea }"
                  placeholder="请选择省市区(可搜索)"
                  @change="onChangeArea"
                  v-model="form.fullCityCodeArr"
                />
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="所属牛场" prop="cattleFarmId" >
                <j-search-select-tag placeholder="请选择" v-model="form.cattleFarmId" dict="bcb_cattle_farm,cattle_farm_name,id,del_flag!=2"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="所属圈舍" prop="farmingPenId" >
                <j-search-select-tag placeholder="请选择" v-model="form.farmingPenId" :dict="'bcb_farming_pen,pen_name,id,del_flag!=2 and cattle_farm_id=\'' + form.cattleFarmId + '\' '"/>
              </a-form-model-item>
            </a-col>
            <!-- <a-col :span="12" >
                <a-form-model-item label="所属批次" prop="batchId" >
                  <j-search-select-tag placeholder="请选择" v-model="form.batchId" :dict="'bcb_batch,batch_name,id,del_flag!=2 and cattle_farm_id=\'' + form.cattleFarmId + '\' '"/>
                </a-form-model-item>
              </a-col>-->
            <a-col :span="12" >
              <a-form-model-item label="种牛编号" prop="cattleNumber" >
                <j-search-select-tag placeholder="请选择" v-model="form.cattleNumber" :dict="'bcb_cattle,ear_tag_number,ear_tag_number,del_flag=0 and status=0 and farming_pen_id=\'' + form.farmingPenId + '\' '"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="选配编号" prop="optionalNumber" >
                <j-search-select-tag placeholder="请选择" v-model="form.optionalNumber" :dict="'bcb_cattle,ear_tag_number,ear_tag_number,del_flag=0 and status=0 and cattle_farm_id=\'' + form.cattleFarmId + '\' '"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="父代编号" prop="fatherNumber" >
                <j-search-select-tag placeholder="请选择" v-model="form.fatherNumber" :dict="'bcb_cattle,ear_tag_number,ear_tag_number,del_flag=0 and status=0 and cattle_farm_id=\'' + form.cattleFarmId + '\' '"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="母代编号" prop="motherNumber" >
                <j-search-select-tag placeholder="请选择" v-model="form.motherNumber" :dict="'bcb_cattle,ear_tag_number,ear_tag_number,del_flag=0 and status=0 and cattle_farm_id=\'' + form.cattleFarmId + '\' '"/>
              </a-form-model-item>
            </a-col>
           <!-- <a-col :span="12" >
              <a-form-model-item label="部门ID" prop="deptId" >
                <a-input v-model="form.deptId" placeholder="请输入部门ID" />
              </a-form-model-item>
            </a-col>
            <a-col :span="12" >
              <a-form-model-item label="用户ID" prop="userId" >
                <a-input v-model="form.userId" placeholder="请输入用户ID" />
              </a-form-model-item>
            </a-col>-->
          </a-row>
        </a-form-model>
      </p-form-container>
    </a-spin>
  </j-modal>
</template>

<script>
import { getDynaCattleBreed, addDynaCattleBreed, updateDynaCattleBreed } from '@/api/breed/dynaCattleBreed'
import cascaderOptions, { DivisionUtil } from '@pansy/china-division'
const divisionUtil = new DivisionUtil(cascaderOptions)

export default {
  name: 'CreateFormPModal',
  props: {
  },
  components: {
  },
  data () {
    return {
      optionsArea: cascaderOptions,
      fullCityCode: null,
      fullCityCodeArr: [],
      loading: false,
      submitLoading: false,
      formDisabled: false,
      modal: {
        fullscreen: false, // 初始时是否全屏
        switchFullscreen: true
      },
      formTitle: '',
      // 表单参数
      form: {
        id: null,
        cattleNumber: null,
        cattleBreeds: null,
        optionalNumber: null,
        cattleFarmId: null,
        farmingPenId: null,
        batchId: null,
        fatherNumber: null,
        motherNumber: null,
        tenantId: null,
        deptId: null,
        userId: null
      },
      // 1增加,2修改
      formType: 1,
      open: false,
      rules: {
        fullCityCodeArr: [{ type: 'array', required: true, message: '省市区不能为空', trigger: 'change' }],
        cattleNumber: [
          { required: true, message: '种牛编号不能为空', trigger: 'blur' },
        ],
        cattleBreeds: [
          { required: true, message: '种牛品种不能为空', trigger: 'blur' },
        ],
        optionalNumber: [
          { required: true, message: '选配编号不能为空', trigger: 'blur' },
        ],
        cattleFarmId: [
          { required: true, message: '所属牛场不能为空', trigger: 'blur' },
        ],
        fatherNumber: [
          { required: true, message: '父代编号不能为空', trigger: 'blur' },
        ],
        motherNumber: [
          { required: true, message: '母代编号不能为空', trigger: 'blur' },
        ],
      }
    }
  },
  filters: {
  },
  created () {
  },
  computed: {
  },
  watch: {
  },
  mounted () {
  },
  methods: {
    onChangeArea(value, selectedOptions) {
      console.log(JSON.stringify(value))
      // 返回指定Code的名称
      for (const val of value) {
        const areaName = divisionUtil.getNameByCode(val)
        console.log('当前省市县名称:', areaName)
      }
      this.form.fullCityCode = value.join(',')
    },
    filterArea(inputValue, path) {
      return path.some((option) => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1)
    },
    onClose () {
      this.open = false
    },
    // 取消按钮
    cancel () {
      this.open = false
      this.reset()
    },
    // 表单重置
    reset () {
      this.formType = 1
      this.form = {
        id: null,
        cattleNumber: null,
        cattleBreeds: null,
        optionalNumber: null,
        cattleFarmId: null,
        farmingPenId: null,
        batchId: null,
        fatherNumber: null,
        motherNumber: null,
        tenantId: null,
        deptId: null,
        userId: null
      }
    },
    /** 新增按钮操作 */
    handleAdd (row) {
      this.reset()
      this.formType = 1
      this.formDisabled = false
      this.open = true
      this.formTitle = '添加'
    },
    /** 修改按钮操作 */
    handleUpdate (row, ids) {
      this.formDisabled = false
      this.reset()
      this.formType = 2
      this.loading = true
      const id = row ? row.id : ids
      getDynaCattleBreed(id).then(response => {
        this.form = response.data
        if (this.form.fullCityCode) {
          const tArr = []
          const arr = this.form.fullCityCode.split(',')
          for (const item of arr) {
            tArr.push(arr)
          }
          this.$set(this.form, 'fullCityCodeArr', tArr)
        }
        this.open = true
        this.formTitle = '修改'
      }).finally(() => {
        this.loading = false
      })
    },
    showDetail (row, ids) {
      this.formDisabled = true
      this.reset()
      this.formType = 2
      this.loading = true
      const id = row ? row.id : ids
      getDynaCattleBreed(id).then(response => {
          this.form = response.data
          this.open = true
          this.formTitle = '详情'
      }).finally(() => {
          this.loading = false
      })
    },
    /** 提交按钮 */
    submitForm: function () {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.submitLoading = true
          if (this.form.id !== undefined && this.form.id !== null) {
            updateDynaCattleBreed(this.form).then(response => {
              this.$message.success(
                '修改成功',
                3
              )
              this.open = false
              this.$emit('ok')
            }).finally(() => {
              this.submitLoading = false
            })
          } else {
            addDynaCattleBreed(this.form).then(response => {
              this.$message.success(
                '新增成功',
                3
              )
              this.open = false
              this.$emit('ok')
            }).finally(() => {
              this.submitLoading = false
            })
          }
        } else {
          this.$nextTick(()=>{
            this.scrollToFirstError()
          })
          return false
        }
      })
    },
    scrollToFirstError() {
      this.$nextTick(() => {
        const isError = document.getElementsByClassName('has-error')
        if (isError[0]) {
          isError[0].scrollIntoView({
            block: 'center',
            behavior: 'smooth',
          })
        }
      })
    },
  }
}
</script>
<style lang='less' scoped>
/deep/ .pgz-hidden{
    display: none
}
</style>

标签:VUE,false,form,组件,const,省市区,null,true,id
From: https://blog.51cto.com/janeyork/12062856

相关文章

  • 前端框架vue和react
    vueVue能力的提升是一个综合性的过程,涉及多个方面的学习和实践。以下是一些具体的例子和策略,可以帮助你提升Vue开发能力:1.深入理解Vue的核心概念1.1响应式系统:深入理解Vue的响应式原理,包括数据绑定、依赖追踪和视图更新机制。Vue的响应式系统是其核心,它允许Vue组件响......
  • 基于Uni-app前端框架的SUMER UI3.0组件库!一端开发,多端运行!本组件库可快速二次开发各种
    基于Uni-app前端框架的SUMERUI3.0组件库!一端开发,多端运行!本组件库可快速二次开发各种类别各行业模板,包括:商城、视频、直播、聊天、支付、新闻、社区、地图、导航、出行、社区、博客等sumer-ui介绍基于uView微信小程序UI组件库,兼容vue3。本插件是SUMER组件库,只提供组件......
  • vue2和vue3的多种语法形式
    <template><divclass="persion"><h2>姓名:{{name}}</h2><h2>年龄:{{age}}</h2><h2>性别:{{sex}}</h2><button@click="nameTel">点击姓名</button>......
  • Vue 2&3进阶面试题:(第二天)
    目录5.vue常用操作指令?6.v-for为什么要绑定key?7.v-if和v-show的区别?8.vue中的修饰符5.vue常用操作指令?v-text指令:用于更新标签包含的文本,它的作用跟双大括号效果是一样的v-html指令:绑定一些包含html代码的数据在视图上v-show指令:指令的取值为true/false,分别对应着显示......
  • 详解Vue事件总线的原理与应用:EventBus
    Vue事件总线-组件通信的桥梁引言在Vue.js开发中,组件通信是一个重要的话题。Vue提供了多种方式来实现不同组件之间的通信,譬如Props、$emit、Ref实例、Vuex状态管理及事件总线等等,可谓是五花八门,它们之间使用各有优缺点,主要取决于你的使用场景。本篇文章我们主要介绍......
  • 深入理解Vue3中style的scoped
    概述scoped的作用就是样式模块化(CSSModule),即给组件每一个元素(以及非动态添加的子组件的根元素)加上一个data-v-xxxx的属性,样式选择器也会格式化成选择器[data-v-xxxx],这样就做到了样式隔离,每个组件内定义的样式只对该组件生效,避免了不同组件或页面的样式(选择器)冲突。本文......
  • 组件通讯
    在Vue中,组件之间的传值主要有以下几种方式:1、父向子传递数据在父组件中,通过自定义属性绑定要传递的数据。在子组件中,通过props来接收这些数据。//父组件//子组件2、子向父传递数据子组件通过this.$emit触发事件,并传递参数。父组件通过监听这个事件来获取子组件传递的......
  • Vue 目录树正常跳转,浏览器新增页面地址栏输入后created函数请求不走完
    在vue树中开发当created()涉及到多个接口请求的时候,一般我们都是用来渲染页面或者给变量初始化,在实际开发中我遇到了浏览器新增页面用地址直接访问页面数据以默认值展示导致报错,当发现created()涉及多个请求赋初值的情况,将请求用{}包起来保证顺序执行,当每个请求是独立的就会有异步......
  • 【开题报告+文档+源码】基于SpringBoot+Vue的停车场管理系统
    项目背景与意义随着城市化进程的不断推进和汽车保有量的不断增加,城市道路上的停车难题愈发突出。传统的停车管理方式已经难以满足日益增长的停车需求。为了解决这一问题,需要设计并开发一套停车管理系统。本课题旨在基于SpringBoot开发一套停车管理系统,以提供更便捷、高效的停......
  • 基于Java+SpringBoot+Vue的桂林旅游景点导游平台
    前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......