el-form 表单根据输入框数字循环展示

<template>
  <div>
    <el-form :model="form" :rules="rulse" ref="form" :inline="true">

      <el-form-item label="用户aaa" prop="aaa">
        <el-input v-model="form.aaa" class="w-220" @input="input"></el-input>
      </el-form-item>

      <!-- 循环的表单 -->
      {{this.form.subjects.length}}
      <div v-for="(item,index) in form.subjects" :key="index" class="subjects">
        <el-form :model="item" :rules="rulse" :ref=" 'subjects' + index ">
          <el-form-item label="用户bbb" prop="bbb">
            <el-input v-model="item.bbb" class="w-220"></el-input>
          </el-form-item>
          <el-form-item label="用户ccc" prop="ccc">
            <el-input v-model="item.ccc" class="w-220"></el-input>
          </el-form-item>
        </el-form>
      </div>

      <el-form-item>
        <el-button type="primary" @click="submitForm()">提交</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data () {
    var count20 = (rule, value, callback) => {
      if (value && !/^[0-9]{1,2}$/.test(value)) {
        callback(new Error("请填写1-20的数字"));
      } else if (value < 1 || value > 20) {
        callback(new Error("请填写1-20的数字"));
      } else {
        callback();
      }
    }
    return {
      form: {
        aaa: '',
        subjects: [
          {
            bbb: '',
            ccc: ''
          }
        ]
      },
      rulse: {
        aaa: [
          { required: true, validator: count20, trigger: 'blur' }
        ],
        bbb: [
          { required: true, message: '请输入', trigger: 'blur' }
        ],
        ccc: [
          { required: true, message: '请输入', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 只能新增3个
    input (value) {
      // 循环的表单总数
      const count = this.form.subjects.length
      if (/^[0-9]{1,2}$/.test(value) && value <= 3) {
        if (value > count) {
          // 追加
          const countNumber = Number(value) - Number(count)
          for (let i = 0; i < countNumber; i++) {
            this.form.subjects.push(
              {
                bbb: '',
                ccc: ''
              }
            )
          }
        } else if (value < count) {
          this.form.subjects = this.form.subjects.slice(0, value)
        }
      }
    },
    // 提交
    submitForm () {
      // 校验是否全部通过
      let validd = true;
      this.$refs.form.validate((valid) => {
        if (!valid) {
          validd = false
        }
      })
      if (this.form.subjects.length) {
        for (var i = 0; i < this.form.subjects.length; i++) {
          this.$refs["subjects" + i][0].validate((valid) => {
            if (!valid) {
              validd = false
            }
          })
        }
      }
      // 全部校验通过
      if (validd) {
        console.log(this.form)
      }

    }
  }
}
</script>

<style lang="less" scoped>
.subjects {
  border: 1px solid black;
  border-radius: 10px;
  padding: 20px;
  box-sizing: border-box;
}
</style>

相关推荐

  1. el-form v-for循环列表的如何校验

    2024-03-23 12:22:02       41 阅读
  2. vue实现输入数字类型校验功能

    2024-03-23 12:22:02       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 12:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 12:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 12:22:02       82 阅读
  4. Python语言-面向对象

    2024-03-23 12:22:02       91 阅读

热门阅读

  1. 【数据库】MySQL索引事务

    2024-03-23 12:22:02       35 阅读
  2. 【复杂网络建模】——通过python的XGI库构建超图

    2024-03-23 12:22:02       33 阅读
  3. Day 29 回溯05

    2024-03-23 12:22:02       41 阅读
  4. 探索MySQL中的SQL_MODE数据模式

    2024-03-23 12:22:02       39 阅读
  5. vue中如何用一个数组减去另一个数组

    2024-03-23 12:22:02       38 阅读
  6. node和npm yarn包管理工具

    2024-03-23 12:22:02       34 阅读
  7. npm 常用命令详解

    2024-03-23 12:22:02       43 阅读
  8. SAP-FI配置与业务解析之代发(客户)销售作业

    2024-03-23 12:22:02       40 阅读