树形表格表单验证预览
树形列表生成序号
首先需要生成一个序号用来确定表单验证的目标row,通过广度优先遍历,以1,1.1,1.1.1的规则对树形列表生成确定唯一值的索引,因为列表自身可以做CURD,因此需要每次列表的item增加或减少时重新调用生成索引的方法。
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: "上海市普陀区金沙江路 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: "上海市普陀区金沙江路 1517 弄", children: [] }, ] setIndex(rows)
表单校验
要想实现对表格的表单验证,需要用form-item将整个表格包裹,然后在以子集的方式将每一列用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'"> <el-input v-model="row.name"></el-input> </el-form-item> </template> </el-table-column>
实现方式,表单校验本质是对于目标数据的路径查找,当el-form-item 上的prop匹配不到正确的目标是的时候就不能正常触发校验
因此,需要记录每一个row上面的属性路径,即实现记录每一行中属性(name,address)路径的方法。
getPathByKey = (value, key, arr) => { let temppath = []; let realPath = "" try { function getNodePath(node) { temppath.push(node.currentIndex); //找到符合条件的节点,通过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]); } //当前节点的子节点遍历完依旧没找到,则删除路径中的该节点 temppath.pop(); } else { //找到叶子节点时,删除路径当中的该叶子节点 temppath.pop(); } } for (let i = 0; i < arr.length; i++) { getNodePath(arr[i]); } } catch (e) { return realPath; } },
将每一列需要验证的item,路径查找好之后,form就可以具体监控到所有的表格输入,并触发正确的验证了,如图:
demo参考
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】