elementui表格嵌套校验表单,这个表格是带勾选的,在提交的时候,怎么能让只勾选的行进行校验
<script>
export default {
data() {
return {
tableData: [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
// 其他表格数据
],
formData: {},
rules: {
// 表单输入项的校验规则
// ...
},
checkedRows: [], // 用于跟踪勾选的行
};
},
methods: {
// 提交表单时,对勾选的行进行校验
handleSubmit() {
this.$refs.form.validate((valid) => {
if (valid) {
// 表单校验通过,对勾选的行进行其他处理
console.log("校验通过,勾选的行为:", this.checkedRows);
} else {
console.log("表单校验不通过");
}
});
},
},
};
</script>
你参考这个写咯
提交的时候判断根据勾选获取的id 去过滤表格数据再去执行对应的表单校验
不知道你这个问题是否已经解决, 如果还没有解决的话:// 修改收款信息
updateReceivable(val,index){
// console.log(val)
// console.log('item'+index)
let reff = 'item'+index
this.$refs[reff][0].validate((valid) => { //此处不加[0]会报错===》this.$refs[("item" + index)].validate is not a function
console.log(valid);
if(valid){
val.actualTime = val.actualTime == null ? null : moment(val.actualTime).format('YYYY-MM-DD')
val.finishTime = val.finishTime == null ? null : moment(val.finishTime).format('YYYY-MM-DD')
val.estimatedReceivableTime = val.estimatedReceivableTime == null ? null : moment(val.estimatedReceivableTime).format('YYYY-MM-DD')
val.actualReceivableTime = val.actualReceivableTime == null ? null : moment(val.actualReceivableTime).format('YYYY-MM-DD')
this.$$api_project_updateReceivable({
data: val,
fn: () => {
this.$message.success('提交成功')
this.loadReceivableList()
}
})
}
})
return false;
},
针对这个问题,我可以给出以下解决方案:
<el-table-column>
组件,并添加一个type="selection"
属性。如下所示:<el-table-column type="selection" width="50"></el-table-column>
this.$refs['表单引用'].validate()
。在validate方法中,可以通过指定校验规则来只校验勾选的行。具体步骤如下:// 在提交按钮的点击事件中
submitForm() {
// 获取已勾选的行数据
const selectedRows = this.$refs['表格引用'].getSelection();
// 创建一个临时数组,用于存储已勾选的行的表单引用
const formRefs = [];
// 遍历已勾选的行数据
selectedRows.forEach(row => {
// 获取该行对应的表单引用,并将其添加到临时数组中
const refName = `formRef_${row.id}`;
formRefs.push(this.$refs[refName]);
});
// 对已勾选的行进行校验
Promise.all(formRefs.map(formRef => formRef.validate()))
.then(() => {
// 校验通过,执行提交操作
// ...
})
.catch(() => {
// 校验失败
// ...
});
}
ref
属性给每个表单元素添加一个引用,如下所示:<!-- 表格中的校验表单 -->
<el-form ref="formRef_{{row.id}}" :model="row">
<!-- 表单的具体内容 -->
<!-- ... -->
</el-form>
required
属性来标记必填项,并使用其他属性来添加更多的校验规则。如下所示:<!-- 表单的具体内容 -->
<el-form-item label="用户名" label-width="70px" :required="true">
<el-input v-model="form.name" autocomplete="off"></el-input>
</el-form-item>
通过以上步骤,就可以实现在element-ui表格中只校验已勾选的行的功能。如果在实际操作中遇到问题,可以根据具体情况进行调整和修改。
动态绑定验证规则,判断选中绑定验证,否则绑定为空
<template>
<div class="wrap">
<el-form :model="form" ref="form">
<el-table
ref="table"
:data="form.tableData"
@selection-change="selectionChange"
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
label="姓名"
width="180">
<template slot-scope="scope">
<el-form-item
:prop="`tableData.${scope.$index}.name`"
:rules="isSelected(scope.row.id) ? rules.name : null">
<el-input v-model="scope.row.name"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="地址">
<template slot-scope="scope">
<el-form-item
:prop="`tableData.${scope.$index}.address`"
:rules="isSelected(scope.row.id) ? rules.address : null">
<el-input v-model="scope.row.address"></el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<el-button @click="submit">提交</el-button>
</div>
</template>
<script>
export default {
data () {
return {
form: {
tableData: [
{ id: 1, name: '张三', address: '' },
{ id: 2, name: '李四', address: '' },
{ id: 3, name: '王五', address: '' },
{ id: 4, name: '赵六', address: '' }
]
},
rules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
],
address: [
{ required: true, message: '请输入地址', trigger: 'blur' }
]
},
selectedRows: []
}
},
methods: {
selectionChange (sel) {
this.selectedRows = sel
},
// 是否选中
isSelected (id) {
let target = false
const index = this.selectedRows.findIndex(item => item.id === id)
if (index !== -1) {
target = true
}
return target
},
submit () {
this.$refs.form.clearValidate() // 清除验证
this.$refs.form.validate((valid) => {
if (valid) {
console.log(this.form)
} else {
return false
}
})
}
}
}
</script>
<style lang="scss" scoped>
</style>
不好意思,没有描述清楚,这个表格所有的数据都会提交,只是选中的和未选中的由一个字段来区分。现在是提交的时候,所有的行都会校验,我是想让这个选中的进行校验,达到一个提示的效果,就是只有选中并且没填的边框变红,没选的不要变样式,只需要实现这个样式的效果就好
两种
1.表单的勾选事件里修改rules
2.不走表单校验,自己写校验,做提示