el表单项启用和禁用验证的切换,以及动态表单验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <style>
        .btn-container{
            margin-top: 40px;
            text-align: center;
        }
        .btn-container .confirm-btn{
            min-width: 70px;
        }
    </style>
</head>
<body>
    <div id="app">
        <el-form :model='formData' :rules='formRules' ref='bidForm'>
            <el-table :data='formData.productList' @selection-change='handleSelectChange'>
                <el-table-column type='selection'></el-table-column>
                <el-table-column label='名称' prop='name'></el-table-column>
                <el-table-column label='初始价格' prop='initPrice'></el-table-column>
                <el-table-column label='报价' width='180'>
                    <template slot-scope='scope'>
                        <el-form-item v-if='!scope.row.checked' key='noProp'>
                            <el-input size='small' v-model='scope.row.bidPrice' :disabled='!scope.row.checked' placeholder="<=50"></el-input>
                        </el-form-item>
                        <el-form-item :prop="'productList.' + scope.$index + '.bidPrice'" :rules='formRules.bidPrice' v-else key='hasProp'>
                            <el-input size='small' v-model='scope.row.bidPrice' :disabled='!scope.row.checked' placeholder="<=50"></el-input>
                        </el-form-item>
                    </template>
                </el-table-column>
            </el-table>
        </el-form>
        <div class="btn-container">
            <el-button type='primary' class="confirm-btn" @click='confirmBid'>确认投标</el-button>
        </div>
    </div>
    <script>
        var app = new Vue({
            el:'#app',
            data:{
                formData:{
                    productList:[{
                        id:0,
                        name:'土豆',
                        initPrice:3.2
                    },{
                        id:1,
                        name:'西红柿',
                        initPrice:4.2
                    }],
                },
                formRules:{
                    bidPrice:[{
                        validator(rule,value,callback){
                            if (value === '' || value === undefined) {
                                callback(new Error('请输入投标价格!'));
                            } else if (isNaN(value)) {
                                callback(new Error('请输入数字值!'));
                            } else if (Number(value) > 50 || Number(value) <= 0) {
                                callback(new Error('需大于0,小于等于50'));
                            } else if (/\.\d{4}/.test(value)) {
                                callback(new Error('最多带3位小数'));
                            } else {
                                callback();
                            }
                        },
                        trigger:'blur'
                    }]
                },
                selectArr:[]
            },
            methods:{
                // 选中项改变
                handleSelectChange(arr){
                    this.selectArr = arr; 
                    // 给每项增加一个表示当前是否选中的标志属性
                    this.formData.productList.forEach(item => {
                        let checked = false;
                        arr.forEach(e => {
                            if(e.id === item.id){
                                checked = true;
                            };
                        });
                        if(checked){
                            this.$set(item,'checked',true);
                        }else{
                            this.$set(item,'checked',false);
                        }
                    });
                },
                // 点击确认
                confirmBid(){
                    this.$refs.bidForm.validate(valid => {
                        if(valid){
                            alert(111);
                        }
                    });
                }
            }
        });
    </script>
</body>
</html>

原文地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-table是Element UI中的一个表格组件,它提供了丰富的功能和选,包括表单验证。在el-table中进行表单验证可以通过自定义校验规则来实现。 下面是一个示例代码,演示了如何在el-table中进行表单验证: ```html <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"> <template slot-scope="scope"> <el-form-item :rules="[{ required: true, message: '请输入姓名', trigger: 'blur' }]"> <el-input v-model="scope.row.name"></el-input> </el-form-item> </template> </el-table-column> <el-table-column prop="age" label="年龄"> <template slot-scope="scope"> <el-form-item :rules="[{ required: true, message: '请输入年龄', trigger: 'blur' }, { type: 'number', message: '年龄必须为数字值' }]"> <el-input-number v-model="scope.row.age"></el-input-number> </el-form-item> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: '' } ] }; } }; </script> ``` 在上述代码中,我们使用了el-form-item组件来包裹el-input和el-input-number组件,并通过:rules属性设置了校验规则。其中,required为必填规则,message为提示信息,trigger为触发校验的事件。另外,我们还使用了type为number的校验规则,确保年龄字段为数字值。 请注意,上述代码只是一个简单的示例,实际的表单验证规则可能更加复杂。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值