一个vue组件包含多个form表单(多个组件)的验证

解决大量的表单元素放在一个组件内是会造成页面卡顿的现象

解决方案:一个页面表单拆分成多个页面表单实现
注意事项:
1、父组件引入的子组件要有ref属性,并传入父组件v-model绑定form数据(目的整合所有子组件的form数据)
2、子组件通过props接收父组件传来的数据,watch监听父组件传来的数据, 将其深拷贝给子的v-model绑定form数据
3、子组件正常检验form表单
4、父组件提交时,子组件在父组件的验证通过this. r e f s . A ( 在 父 注 册 的 子 r e f 名 称 ) . refs.A(在父注册的子ref名称). refs.A(ref).refs.B(子组件form的ref名称)
代码片段:
父组件A.vue
<template>
  <div class="swba_sp">
    <el-form
      ref="swbaForm"
      :model="formCheck"
      label-width="140px"
      :rules="formDataRules"
    >
      <el-row>
        <el-col :span="7">
          <el-form-item label="统一社会信用代码" prop="tyshxydm">
            <el-input v-model="formCheck.tyshxydm" disabled></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="7">
          <el-form-item label="组织机构代码" prop="zzjgdm">
            <el-input v-model="formCheck.zzjgdm" disabled></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="7">
          <el-form-item label="申请日期" prop="sqrq">
            <el-date-picker
              v-model="formCheck.sqrq"
              type="date"
              placeholder="选择日期"
              value-format="yyyyMMdd"
            >
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="3">
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          <el-button type="primary" @click="sp_dzcl">电子材料</el-button>
        </el-col>
      </el-row>
      <div
        class="sp_head"
        style="border: 1px solid rgb(0, 121, 254);color:rgb(0, 121, 254);"
      >
        基本信息
      </div>
      <jbxx-view ref="jbxxRef" :jbxx-map="formCheck"></jbxx-view>
      <div style="position: relative;left: 9.5rem;bottom: 0.68rem;">
        <el-button type="primary" @click="commit_sp('swbaForm')">
          确定
        </el-button>
      </div>
    </el-form>
  </div>
</template>
<script>
import { mapService } from 'ty-core/services'
import jbxxView from '@/components/swba/jbxxView'
export default {
  components: {
    jbxxView
  },
  props: {
    record: {
      type: Object,
      default() {
        return {}
      }
    },
    spBasicInfo: {
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {
      swDialogClose: false,
      formCheck: {
        tyshxydm: '',
        zzjgdm: '',
        sqrq: '',
        gsqc: ''
      },
      formDataRules: {
        tyshxydm: [
          {
            required: true,
            message: '请填写统一社会机构代码',
            trigger: 'blur'
          }
        ],
        sqrq: [
          {
            required: true,
            message: '请填写申请日期',
            trigger: 'blur'
          }
        ]
      }
    }
  },
  mounted() {
    this.formCheck = this.spBasicInfo
  },
  methods: {
    commit_sp(formName) {
      let fromValidate = true

      this.$refs.jbxxRef.$refs.spJbxxform.validate((valid) => {
        if (!valid) {
          fromValidate = false
        }
      })
      const jbxxData = this.$refs.jbxxRef.jbxxForm
      this.$refs[formName].validate((valid) => {
        if (!valid) {
          fromValidate = false
        }
      })

      if (fromValidate) {
        const allFormData = Object.assign(
          {},
          jbxxData,
          this.formCheck
        )
        // console.info(allFormData)
        this.saveSwbaCheck(allFormData)
      }
    }
  },
  ...mapService(['swba'])
}
</script>
子组件B.vue
<template>
  <div>
    <el-form
      ref="spJbxxform"
      :model="jbxxForm"
      label-width="100%"
      size="mini"
      label-position="left"
      style="margin:10px"
      :inline="true"
      :rules="jbxxFormRules"
    >
      <el-row>
        <el-col :span="6">
          <el-form-item label="公司全称" prop="gsqc">
            <el-input v-model="jbxxForm.gsqc" :disabled="showType"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="成立时间" prop="clsj">
            <el-date-picker
              v-model="jbxxForm.clsj"
              type="date"
              placeholder="选择日期"
              value-format="yyyyMMdd"
              :disabled="showType"
            >
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="企业性质" prop="qyxz">
            <ty-select
              v-model="jbxxForm.qyxz"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="所属行业" prop="sshy">
            <ty-select
              v-model="jbxxForm.sshy"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6">
          <el-form-item label="是否为支持企业" prop="sfzcqy">
            <ty-select
              v-model="jbxxForm.sfzcqy"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="年营业额" prop="nyye">
            <ty-select
              v-model="jbxxForm.nyye"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="纳税金额" prop="nsje">
            <ty-select
              v-model="jbxxForm.nsje"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="员工人数" prop="ygrs">
            <ty-select
              v-model="jbxxForm.ygrs"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6">
          <el-form-item label="需办理备案员工人数" prop="blagrs">
            <ty-select
              v-model="jbxxForm.blagrs"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="开展活动年限" prop="kzhdnx">
            <ty-select
              v-model="jbxxForm.kzhdnx"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label=活动种类" prop="gahdzl">
            <ty-select
              v-model="jbxxForm.gahdzl"
              data="D_出生地"
              filterable
              properties="label1"
              clearable
              :disabled="showType"
            ></ty-select>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>
<script>
export default {
  props: {
    jbxxMap: {
      type: Object,
      default() {
        return {
          gsqc: '',
          clsj: '',
          qyxz: '',
          sshy: '',
          sfzcqy: '',
          nyye: '',
          nsje: '',
          ygrs: '',
          blagrs: '',
          kzhdnx: '',
          gahdzl: ''
        }
      }
    },
    shType: {
      type: String,
      default() {
        return ''
      }
    }
  },
  data() {
    return {
      showType: false,
      jbxxForm: {
        gsqc: '',
        clsj: '',
        qyxz: '',
        sshy: '',
        sfzcqy: '',
        nyye: '',
        nsje: '',
        ygrs: '',
        blagrs: '',
        kzhdnx: '',
        gahdzl: ''
      },
      jbxxFormRules: {
        gsqc: [
          {
            required: true,
            message: '请填写公司全称',
            trigger: 'blur'
          }
        ],
        qyxz: [
          {
            required: true,
            message: '请填写企业性质',
            trigger: 'change'
          }
        ],
        sshy: [
          {
            required: true,
            message: '请填写所属行业',
            trigger: 'change'
          }
        ],
        sfzcqy: [
          {
            required: true,
            message: '请填写是否为国家重点支持企业',
            trigger: 'change'
          }
        ],
        nyye: [
          {
            required: true,
            message: '请填写年营业额',
            trigger: 'change'
          }
        ],
        nsje: [
          {
            required: true,
            message: '请填写纳税金额',
            trigger: 'change'
          }
        ],
        ygrs: [
          {
            required: true,
            message: '请填写员工人数',
            trigger: 'change'
          }
        ],
        blagrs: [
          {
            required: true,
            message: '请填写备案员工人数',
            trigger: 'change'
          }
        ],
        kzhdnx: [
          {
            required: true,
            message: '请填写活动年限',
            trigger: 'change'
          }
        ],
        gahdzl: [
          {
            required: true,
            message: '请填写活动种类',
            trigger: 'change'
          }
        ]
      }
    }
  },
  watch: {
    jbxxMap() {
      if (this.shType) {
        this.jbxxFormRules = {}
        this.showType = true
      }
      this.jbxxForm = JSON.parse(JSON.stringify(this.jbxxMap))
    }
  }
}
</script>

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值