表格动态加载行数,并在行数中验证输入情况,特别是行数之间输入不能相同

25 篇文章 0 订阅
2 篇文章 0 订阅

表格示例:

该案例在动态表格中,验证同一个字段是否为空,是否超出最大限制字符 ,是否做不重名验证;

示例中主要是验证对应别名(columnComment)字段,

所有对每个别名字段循环一个el-form rules model

对每个循环的 el-form-item中加入 :ref="`elFormItem${scope.$index}`" 

        <el-table :data="tableFieldList"
                      class="data-field-table">
                <el-table-column prop="columnName"
                                 label="变量名称">
                    <template slot-scope="scope">
                        <long-str-cut>{{scope.row.columnName}}</long-str-cut>
                    </template>
                </el-table-column>
                <el-table-column prop="columnType"
                                 label="类型">
                </el-table-column>
                <el-table-column prop="columnComment"
                                 label="对应别名">
                    <template slot-scope="scope">
                        <el-form :ref="`tableRow${scope.$index}`"
                                 :model="scope.row"
                                 :rules="rules">
                            <el-form-item :ref="`elFormItem${scope.$index}`"
                                          prop="columnComment">
                                <el-input size="small"
                                          v-model.trim="scope.row.columnComment"
                                          placeholder="请输入对应别名" />
                            </el-form-item>
                        </el-form>
                    </template>
                </el-table-column>
            </el-table>

 

computed: {
    
        rules() {
            return { columnComment: [{ validator: this.validateName, trigger: 'blur' }] }
        }
    },
 validateName(rule, value, callback) {
            if (!value) {
                return callback(new Error('不能为空!'))
            }
            if (value.length > 10) {
                return callback(new Error('请输入10个及以内的别名字符!'))
            }
            //检测重名步骤
            let index = 0
            for (let i = 0; i < this.tableFieldList.length; i++) {
                //寻找是否讯在重复别名
                if (this.tableFieldList[i].columnComment === value) {
                    index += 1
                 if (index > 1) {
                    return callback(new Error('存在相同的别名!'))
                  }
                }

                //首先找出其他error显示框 数据大了会卡死
                //如果error 就手动验证一次
                  //if (this.$refs['elFormItem' + i].validateState === 'error') {
                  //    this.$refs['tableRow' + i].validateField('columnComment')
                  //  }
            }
           
            callback()
        },
   submitForm() {
            let success = [];
            for (let i = 0; i < this.tableFieldList.length; i++) {
                this.$refs['tableRow' + i].validate((valid) => {
                    if (valid) {
                        success.push(true)
                    }
                });
            }
            if (success.length < this.tableFieldList.length) {
                this.$message.warning('存在错误别名,请更改!')
            } else {
                //保存操作
                this.addOrSave()
            }
        },

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Embrace924

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

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

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

打赏作者

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

抵扣说明:

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

余额充值