ElementUI循环生成的Form表单添加规则

209 阅读1分钟

图片示例

image.png

代码示例

<template>
 <el-form label-width="120px" @submit.native.prevent="save('itemFrom')" style="margin-right:20px" :rules="rules" ref="itemFrom" :model="item">
          <div>
            <div class="addRow" style="margin-left: 20px;">
              <div class="searchRow">
                <h5>关联数据</h5>
              </div>
            </div>
          <div v-for="(el,index) in item.ipContent" :key = "'ipcontent'+index"  class="flexd">
            <div style="width:90%">
            <el-form-item label="IP" :prop="`ipContent.${index}.ip`" :rules="rules.ip">
              <el-input v-model="el.ip"></el-input>
            </el-form-item> 
            <el-form-item label="端口" :prop="`ipContent.${index}.port`" :rules="rules.port">
              <el-input v-model="el.port"></el-input>
            </el-form-item>
            <el-form-item label="数据库类型"  :prop="`ipContent.${index}.dbtype`"  :rules="rules.dbtype">
              <el-select v-model="el.dbtype" placeholder="请选择数据库类型">
                <el-option label="mongo" value="mongo"></el-option>
                <el-option label="mysql" value="mysql"></el-option>
                <el-option label="mssql" value="mssql"></el-option>
                <el-option label="oracle" value="oracle"></el-option>
              </el-select>
            </el-form-item>
            </div>
            <div style="width:10%">
              <el-button class="el-icon-minus primary"  v-show="item.ipContent.length >1" size="mini" circle @click="deleteIpContent(index)" title="删除"></el-button>
            </div>
          </div>
            <el-form-item>
            <div style="width:100%;text-align: right;">
              <el-button class="el-icon-plus primary" type="text" style="width:30%;text-align: right;" @click="addIpContent" title="添加" > 添加一条</el-button>
            </div>
          </el-form-item>
          
        </div>
         
          <el-form-item>
            <el-button type="primary" native-type="submit">保存</el-button>
            <el-button @click="resetForm('itemFrom')">重置</el-button>
          </el-form-item>
        </el-form>
</template>
<script>
export default {
  data() {
    return {
      items: [],
      item: {
        ipContent: [{
          ip:'',
          port:'',
          dbtype:'',
        }],
        
      rules: {
        ip: [{ required: true, message: '请输入ip', trigger: 'blur' },
              { pattern: /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/,message: "请输入正确的ip", trigger: 'blur' }
              ],
        port: [,
              { required: true, message: '请输入端口', trigger: 'blur' },
              { pattern: /^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/,message: "请输入正确的端口:1-65535", trigger: 'change' }
              ],
        dbtype: [{ required: true, message: '请输入数据库类型', trigger: 'blur' }],
    
      }
    };
  },
  methods: {
   
    addIpContent(){
      this.item.ipContent.push({
        ip:'',
        port:'',
        dbtype:'',
      })
    },
    deleteIpContent(index){
      console.log(index)
      this.item.ipContent.splice(index,1)
      console.log(this.item.ipContent)
    },
  
  },
};
</script>

注意

:prop="ipContent.${index}.ip" ipContent必须为循环的数据字段,否则不起作用