el-table樹(shù)形表格表單驗(yàn)證(列表生成序號(hào))
樹(shù)形表格表單驗(yàn)證預(yù)覽

樹(shù)形列表生成序號(hào)
首先需要生成一個(gè)序號(hào)用來(lái)確定表單驗(yàn)證的目標(biāo)row,通過(guò)廣度優(yōu)先遍歷,以1,1.1,1.1.1的規(guī)則對(duì)樹(shù)形列表生成確定唯一值的索引,因?yàn)榱斜碜陨砜梢宰鯟URD,因此需要每次列表的item增加或減少時(shí)重新調(diào)用生成索引的方法。
setIndex = (data) => {
let queue = [...data];
let loop = 0;
while (queue.length > 0) {
loop++
[...queue].forEach((child, i) => {
queue.shift()
if (loop == 1) {
child.customIndex = i + 1 + "";
child.currentIndex = i;
}
if (child.children && child.children.length > 0) {
child.dataType = 1
for (let ci = 0; ci < child.children.length; ci++) {
child.children[ci].currentIndex = ci
child.children[ci].customIndex = child.customIndex + "." + (ci + 1)
}
queue.push(...child.children)
} else {
child.dataType = 2
}
})
}
}
const rows = [
{
id: "1",
date: "2016-05-02",
name: "王小虎1",
address: "上海市普陀區(qū)金沙江路 1518 弄",
children: [
{
name: "233",
customIndex: "1.1",
children: [{name: "9"}]
},
{
name: "7771",
customIndex: "1.2",
children: [
{
name: "9"
},
{
name: "9",
}]
}
]
},
{
id: "2",
date: "2016-05-04",
name: "王小虎2",
address: "上海市普陀區(qū)金沙江路 1517 弄",
children: []
},
]
setIndex(rows)
表單校驗(yàn)
要想實(shí)現(xiàn)對(duì)表格的表單驗(yàn)證,需要用form-item將整個(gè)表格包裹,然后在以子集的方式將每一列用form-item包裹。
<el-form ref="form" :model="form" label-width="80px" :rules="rules">
<el-form-item label-width="0" prop="rows">
<el-table>
</el-table>
</el-form-item>
</el-form>
<el-table-column
prop="name"
label="姓名"
sortable
width="180">
<template v-slot="{$index, row}">
{{`rows${getPathByKey(row.customIndex,"customIndex",form.rows)}.name`}}
<el-form-item label-width="0" :rules="rules.name"
:prop="`${row.customIndex!=='tempIndex'?`rows${getPathByKey(row.customIndex,'customIndex',form.rows)}.name`:''}`">
<el-input v-model="row.name"></el-input>
</el-form-item>
</template>
</el-table-column>
實(shí)現(xiàn)方式,表單校驗(yàn)本質(zhì)是對(duì)于目標(biāo)數(shù)據(jù)的路徑查找,當(dāng)el-form-item 上的prop匹配不到正確的目標(biāo)是的時(shí)候就不能正常觸發(fā)校驗(yàn)

因此,需要記錄每一個(gè)row上面的屬性路徑,即實(shí)現(xiàn)記錄每一行中屬性(name,address)路徑的方法。
getPathByKey = (value, key, arr) => {
let temppath = [];
let realPath = ""
try {
function getNodePath(node) {
temppath.push(node.currentIndex);
//找到符合條件的節(jié)點(diǎn),通過(guò)throw終止掉遞歸
if (node[key] === value) {
temppath.forEach((v, i) => {
if (i == 0) {
realPath += "." + v
} else {
realPath += `.children.${v}`
}
})
// temppath = temppath.join(",")
throw ("GOT IT!");
// return;
}
if (node.children && node.children.length > 0) {
for (var i = 0; i < node.children.length; i++) {
getNodePath(node.children[i]);
}
//當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)遍歷完依舊沒(méi)找到,則刪除路徑中的該節(jié)點(diǎn)
temppath.pop();
} else {
//找到葉子節(jié)點(diǎn)時(shí),刪除路徑當(dāng)中的該葉子節(jié)點(diǎn)
temppath.pop();
}
}
for (let i = 0; i < arr.length; i++) {
getNodePath(arr[i]);
}
} catch (e) {
return realPath;
}
},
將每一列需要驗(yàn)證的item,路徑查找好之后,form就可以具體監(jiān)控到所有的表格輸入,并觸發(fā)正確的驗(yàn)證了,如圖:

到此這篇關(guān)于el-table樹(shù)形表格表單驗(yàn)證(列表生成序號(hào))的文章就介紹到這了,更多相關(guān)el-table樹(shù)形表格表單驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue-cli4 配置 element-ui 按需引入操作
- Vue + Element-ui的下拉框el-select獲取額外參數(shù)詳解
- vue用elementui寫(xiě)form表單時(shí),在label里添加空格操作
- 快速解決Vue、element-ui的resetFields()方法重置表單無(wú)效的問(wèn)題
- vue+ElementUI 關(guān)閉對(duì)話框清空驗(yàn)證,清除form表單的操作
- vue+element獲取el-table某行的下標(biāo),根據(jù)下標(biāo)操作數(shù)組對(duì)象方式
- vue el-table實(shí)現(xiàn)自定義表頭
- vue el-table實(shí)現(xiàn)行內(nèi)編輯功能
- element的el-table中記錄滾動(dòng)條位置的示例代碼
- VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip
- vue修改Element的el-table樣式的4種方法
相關(guān)文章
使用jenkins一鍵打包發(fā)布vue項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了使用jenkins一鍵打包發(fā)布vue項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
vue-pdf實(shí)現(xiàn)文件在線預(yù)覽
這篇文章主要為大家詳細(xì)介紹了vue-pdf實(shí)現(xiàn)文件在線預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
詳解Vue如何進(jìn)行分布式事務(wù)管理以及解決方案
在分布式系統(tǒng)中,事務(wù)管理是一個(gè)非常重要的問(wèn)題,所以本文將介紹一下Vue中如何進(jìn)行分布式事務(wù)管理以及分布式事務(wù)解決方案,希望對(duì)大家有所幫助2023-06-06
vue el-date-picker 開(kāi)始日期不能大于結(jié)束日期的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue el-date-picker 開(kāi)始日期不能大于結(jié)束日期的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
vue實(shí)現(xiàn)點(diǎn)擊按鈕倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)點(diǎn)擊按鈕倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
vue使用transition組件動(dòng)畫(huà)效果的實(shí)例代碼
這篇文章主要介紹了vue使用transition組件動(dòng)畫(huà)效果的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

