vue + el-form 實(shí)現(xiàn)的多層循環(huán)表單驗(yàn)證
html
<el-form :model="formObj" :rules="rules" ref="ruleForm">
<el-form-item :label="'護(hù)理記錄項(xiàng)目配置:'" label-width="180px">
<template v-for="(formItem, index) in formObj.formDictExtendDoList">
<div class="hljl-container" :key="formItem.id">
<el-row>
<el-col :span="8">
<el-form-item
:label="'字段名稱:'"
label-width="90px"
:rules="rules.fieldName"
:prop="'formDictExtendDoList.'+index+'.fieldName'"
>
<el-input
v-model.trim="formItem.fieldName"
type="text"
:clearable="true"
maxLength="100"
placeholder="請(qǐng)輸入"
/>
<!--@blur="isRepeat(formItem, index, 'fieldName')"-->
</el-form-item>
</el-col>
<template
v-for="(child, index1) in formItem.item"
v-show="formItem.type === 2"
>
<el-col :span="8" :key="child.id">
<el-form-item
:label="'選項(xiàng)' + (index1+1) + ':'"
label-width="90px"
:rules="rules.value"
:prop="'formDictExtendDoList.'+index+'.item.'+index1+'.value'"
>
<el-input
v-model.trim="child.value"
@input="forceUpdate"
:clearable="true"
type="text"
maxlength="20"
placeholder="請(qǐng)輸入"
/>
</el-form-item>
</el-col>
</template>
</el-row>
</div>
</template>
</el-form-item>
</el-form>
js
let _THAT
export
default {
name: 'formMangeAdd',
data() {
return {
formObj: {
formDictExtendDoList: []
},
rules: {
fieldName: [{
required: true,
message: '請(qǐng)輸入',
trigger: 'blur'
}, {
validator: this.itemValidator,
trigger: 'blur'
}],
value: [{
validator: (rule, value, callback) = > {
// I'm a genius.
let that = _THAT
that.forceUpdate()
let field = rule.field
let arr = field.split('.')
let index = +arr[1]
let index1 = +arr[3]
let _value = that.formObj.formDictExtendDoList[index].item[index1].value
if (_value === '' || _value === null || _value === undefined) {
callback(new Error('請(qǐng)輸入'))
} else {
callback()
}
},
trigger: 'blur'
}]
}
}
},
beforeCreate() {
_THAT = this
},
created() {
// 測(cè)試數(shù)據(jù)
let test = [{
id: 'id_1595641858891',
// 唯一配置id
fieldName: '字段名稱',
// 字段名稱
item: []
}, {
id: 'id_1595641858892',
// 唯一配置id
fieldName: '字段名稱',
// 字段名稱
item: []
}, {
id: 'id_1595641858893',
// 唯一配置id
fieldName: '字段名稱',
// 字段名稱
item: [{
id: 'item_id_1595641858891',
// 唯一id
value: '選項(xiàng)1'
}, {
id: 'item_id_1595641858892',
// 唯一id
value: '選項(xiàng)2'
}]
}]
this.formObj.formDictExtendDoList = test
},
methods: {
/**
* 重復(fù)性判斷
**/
itemValidator: (rule, value, callback) = > {
let that = _THAT
that.forceUpdate()
let field = rule.field
let ruleArr = field.split('.')
let index = +ruleArr[1]
let type = ruleArr[2]
if (value === '') {
callback()
return false
}
let arr = []
for (let i = 0; i < that.formObj.formDictExtendDoList.length; i++) {
let formDictExtendDoListItem = that.formObj.formDictExtendDoList[i]
let formDictExtendDoListFieldName = formDictExtendDoListItem.fieldName
let formDictExtendDoListProjectName = formDictExtendDoListItem.projectName
if (index !== i) {
if (type === 'fieldName') {
if (formDictExtendDoListFieldName !== '') {
if (formDictExtendDoListFieldName === value) {
arr.push(i)
}
}
}
}
}
if (arr.length !== 0) {
if (type === 'fieldName') {
callback(new Error('與配置' + (+arr[0] + 1) + '的字段名稱重復(fù)'))
setTimeout(function() {
that.formObj.formDictExtendDoList[index].fieldName = ''
}, 500)
}
} else {
callback()
}
},
forceUpdate() {
this.$forceUpdate()
}
}
}
以上就是vue + el-form 實(shí)現(xiàn)的多層循環(huán)表單驗(yàn)證的詳細(xì)內(nèi)容,更多關(guān)于vue 表單驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element-plus+Vue3實(shí)現(xiàn)表格數(shù)據(jù)動(dòng)態(tài)渲染
在Vue中,el-table是element-ui提供的強(qiáng)大表格組件,可以用于展示靜態(tài)和動(dòng)態(tài)表格數(shù)據(jù),本文主要介紹了element-plus+Vue3實(shí)現(xiàn)表格數(shù)據(jù)動(dòng)態(tài)渲染,感興趣的可以了解一下2024-03-03
公共Hooks封裝useTableData表格數(shù)據(jù)實(shí)例
這篇文章主要為大家介紹了公共Hooks封裝useTableData表格數(shù)據(jù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
關(guān)于Vue中echarts響應(yīng)式頁面變化resize()的用法介紹
Vue項(xiàng)目中開發(fā)數(shù)據(jù)大屏,使用echarts圖表根據(jù)不同尺寸的屏幕進(jìn)行適配,resize()可以調(diào)用echarts中內(nèi)置的resize函數(shù)進(jìn)行自適應(yīng)縮放,本文將給大家詳細(xì)介紹resize()的用法,需要的朋友可以參考下2023-06-06
vue實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
Vue3+antDesignVue實(shí)現(xiàn)表單校驗(yàn)的方法
這篇文章主要為大家詳細(xì)介紹了基于Vue3和antDesignVue實(shí)現(xiàn)表單校驗(yàn)的方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以了解下2024-01-01
elementUI Table組件實(shí)現(xiàn)表頭吸頂效果(示例代碼)
文章介紹了如何在vue2.6+和elementUI環(huán)境下實(shí)現(xiàn)el-table組件的表頭吸頂效果,通過添加樣式、注冊(cè)指令、引入指令并在父元素中避免使用overflow:hidden,可以實(shí)現(xiàn)場(chǎng)景下表頭始終可見,本文通過實(shí)例代碼介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
vue-cli3.0 axios跨域請(qǐng)求代理配置方式及端口修改
這篇文章主要介紹了vue-cli3.0 axios跨域請(qǐng)求代理配置方式及端口修改,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue循環(huán)遍歷選項(xiàng)賦值到對(duì)應(yīng)控件的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue-循環(huán)遍歷選項(xiàng)賦值到對(duì)應(yīng)控件的實(shí)現(xiàn)方法啊,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06

