生活随笔
收集整理的這篇文章主要介紹了
element-ui 可复选树型表格
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果
思路
- 自定義模板
- 當(dāng)點(diǎn)擊某個(gè)行復(fù)選框時(shí),其所有后代復(fù)選框都要同步狀態(tài),且其直系父輩狀態(tài)需要根據(jù)所點(diǎn)擊復(fù)選框的狀態(tài)來修正
- 點(diǎn)擊全選復(fù)選框時(shí),批量同步所有行內(nèi)復(fù)選框狀態(tài)
代碼
非封裝組件,按需自行改寫
確保引入element-ui 的情況下直接新增如下代碼的vue組件即可,部分?jǐn)?shù)據(jù)檢索和批處理存在優(yōu)化空間。
<template><div><aside>樹型表格復(fù)選框
</aside><el-tableref="table":data="rows"row-key="id"borderdefault-expand-all><el-table-column label="全選" width="160" align="center"><template slot="header" slot-scope="scope"><el-checkbox :indeterminate="isIndeterminate" v-model="isFullChecked" @change="checkAllChange"/></template><template slot-scope="{row}"><el-checkbox :indeterminate="row.isIndeterminate" :value="row.checked" @change="checkRowChange(row)"/></template></el-table-column><el-table-column label="子節(jié)點(diǎn)部分選取" prop="isIndeterminate" width="160" align="center"><template slot-scope="{row}">{{row.isIndeterminate?'true':'false'}}
</template></el-table-column><el-table-column label="是否選中" prop="checked" width="160" align="center"><template slot-scope="{row}">{{row.checked?'true':'false'}}
</template></el-table-column><el-table-column type="index" label="序號(hào)" width="60" align="center"></el-table-column><el-table-column prop="id" label="ID" align="center" width="160"></el-table-column><el-table-column prop="parentId" label="PARENT_ID" align="center" width="160"></el-table-column></el-table><br><el-button @click="getResource">刷新數(shù)據(jù)
</el-button></div>
</template><script>
export default {name: "tree-table-checkbox",data() {return {rows: [],isFullChecked: false,isIndeterminate: false,}},created() {this.getResource()},watch: {rows() {this.isFullChecked = falsethis.isIndeterminate = false}},methods: {deepSetChildren(data) {const { isIndeterminate, checked } = dataconst recursionSetChecked = (arr, checked) => {if (arr && arr.length > 0) {arr.forEach(d => {d.checked = checkedd.isIndeterminate = falserecursionSetChecked(d.children, checked)})}}recursionSetChecked(data.children, isIndeterminate ? true : checked)},checkRowChange(data) {const vm = this;const { rows } = vmdata.checked = !data.checkedvm.deepSetChildren(data)const recursion = (node) => {if (node.children && node.children.length > 0) {node.children.forEach(d => recursion(d))const sumChecked = node.children.filter(d => d.checked).lengthnode.isIndeterminate = sumChecked > 0 && sumChecked < node.children.lengthif (node.children.some(d => d.isIndeterminate)) {node.isIndeterminate = true}node.checked = sumChecked !== 0} else {node.isIndeterminate = false}return node}rows.forEach(d => {recursion(d)})if (rows.every(d => d.checked)) {vm.isFullChecked = true}if (rows.every(d => !d.checked)) {vm.isFullChecked = false}vm.isIndeterminate = rows.some(d => d.isIndeterminate) ? true : rows.some(d => !d.checked) && rows.some(d => d.checked)},checkAllChange() {const vm = thisconst { rows } = vmconst recursionSetChecked = (item, checked) => {item.checked = checkeditem.isIndeterminate = falseif (item.children && item.children.length > 0) {item.children.forEach(d => recursionSetChecked(d, checked))}}this.isIndeterminate = falserows.forEach(d => recursionSetChecked(d, vm.isFullChecked))},getResource() {const vm = thisconst data = [{ id: '1', parentId: '0' },{ id: '2', parentId: '0' },{ id: '2-0', parentId: '2' },{ id: '1-0', parentId: '1' },{ id: '1-1', parentId: '1' },{ id: '1-1-0', parentId: '1-1' },{ id: '1-1-0-0', parentId: '1-1-0' },{ id: '1-1-0-1', parentId: '1-1-0' },{ id: '1-2', parentId: '1' },{ id: '1-2-0', parentId: '1-2' },{ id: '1-2-1', parentId: '1-2' },]data.forEach(d => {d.checked = false d.isIndeterminate = false})vm.rows = vm.makeTree(data, 'id', 'parentId', '0')},makeTree(data, idMark, pIdMark, rootId) {let nodeDict = {};(nodeDict[rootId] = { children: [] })[idMark] = rootId;data.forEach(n => {(nodeDict[n[idMark]] = n).children = [];});data.forEach(function (d) {let parentNode = nodeDict[d[pIdMark]];if (parentNode) {parentNode.children.push(d);}});return nodeDict[rootId].children;}}
}
</script><style scoped></style>
總結(jié)
以上是生活随笔為你收集整理的element-ui 可复选树型表格的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。