Table tree support selectAll status

This commit is contained in:
梁灏 2020-01-07 22:27:00 +08:00
parent 725814b355
commit 1ce519d3ff
2 changed files with 111 additions and 11 deletions

View file

@ -1,5 +1,7 @@
<template> <template>
<div style="margin: 100px;"> <div style="margin: 100px;">
<Table border ref="selection" :columns="columns5" :data="data2"></Table>
<Divider></Divider>
<Table <Table
border border
highlight-row highlight-row
@ -61,7 +63,8 @@
name: 'John Brown', name: 'John Brown',
age: 18, age: 18,
address: 'New York No. 1 Lake Park', address: 'New York No. 1 Lake Park',
date: '2016-10-03' date: '2016-10-03',
_disabled: true,
}, },
{ {
id: '101', id: '101',
@ -70,20 +73,23 @@
address: 'London No. 1 Lake Park', address: 'London No. 1 Lake Park',
date: '2016-10-01', date: '2016-10-01',
_showChildren: true, _showChildren: true,
_disabled: true,
children: [ children: [
{ {
id: '10100', id: '10100',
name: '张三', name: '张三',
age: 18, age: 18,
address: '发动机莲富大厦放假了开始的', address: '发动机莲富大厦放假了开始的',
date: '2016-10-01' date: '2016-10-01',
_disabled: true,
}, },
{ {
id: '10101', id: '10101',
name: '李四', name: '李四',
age: 19, age: 19,
address: '风刀霜剑分离的思路开发', address: '风刀霜剑分离的思路开发',
date: '2016-10-02' date: '2016-10-02',
_disabled: true,
}, },
{ {
id: '10102', id: '10102',
@ -92,13 +98,15 @@
address: '分离的付款就说个就是范德萨发生', address: '分离的付款就说个就是范德萨发生',
date: '2016-10-03', date: '2016-10-03',
_showChildren: true, _showChildren: true,
_disabled: true,
children: [ children: [
{ {
id: '10102100', id: '10102100',
name: '赵六', name: '赵六',
age: 21, age: 21,
address: '梵蒂冈人太热疼我', address: '梵蒂冈人太热疼我',
date: '2016-10-05' date: '2016-10-05',
_disabled: true,
}, },
{ {
id: '10102101', id: '10102101',
@ -107,20 +115,23 @@
address: '法第三方的范德萨范德萨发送到', address: '法第三方的范德萨范德萨发送到',
date: '2016-10-06', date: '2016-10-06',
_showChildren: true, _showChildren: true,
_disabled: true,
children: [ children: [
{ {
id: '10102101100', id: '10102101100',
name: '第九', name: '第九',
age: 23, age: 23,
address: '9梵蒂冈人太热疼我', address: '9梵蒂冈人太热疼我',
date: '2016-10-07' date: '2016-10-07',
_disabled: true,
}, },
{ {
id: '10102101101', id: '10102101101',
name: '第十', name: '第十',
age: 24, age: 24,
address: '10法第三方的范德萨范德萨发送到', address: '10法第三方的范德萨范德萨发送到',
date: '2016-10-08' date: '2016-10-08',
_disabled: true,
}, },
] ]
}, },
@ -133,14 +144,65 @@
name: 'Joe Black', name: 'Joe Black',
age: 30, age: 30,
address: 'Sydney No. 1 Lake Park', address: 'Sydney No. 1 Lake Park',
date: '2016-10-02' date: '2016-10-02',
_disabled: true,
}, },
{ {
id: '103', id: '103',
name: 'Jon Snow', name: 'Jon Snow',
age: 26, age: 26,
address: 'Ottawa No. 2 Lake Park', address: 'Ottawa No. 2 Lake Park',
date: '2016-10-04' date: '2016-10-04',
_disabled: true,
}
],
columns5: [
{
type: 'selection',
width: 60,
align: 'center'
},
{
title: 'Name',
key: 'name'
},
{
title: 'Age',
key: 'age'
},
{
title: 'Address',
key: 'address'
}
],
data2: [
{
name: 'John Brown',
age: 18,
address: 'New York No. 1 Lake Park',
date: '2016-10-03',
_disabled: true,
},
{
name: 'Jim Green',
age: 24,
address: 'London No. 1 Lake Park',
date: '2016-10-01',
_disabled: true
},
{
name: 'Joe Black',
age: 30,
address: 'Sydney No. 1 Lake Park',
date: '2016-10-02',
_disabled: true
},
{
name: 'Jon Snow',
age: 26,
address: 'Ottawa No. 2 Lake Park',
date: '2016-10-04',
_disabled: true
} }
] ]
} }

View file

@ -119,13 +119,25 @@
isSelectAll () { isSelectAll () {
let isSelectAll = true; let isSelectAll = true;
if (!this.data.length) isSelectAll = false; if (!this.data.length) isSelectAll = false;
if (!this.data.find(item => !item._disabled)) isSelectAll = false; // #1751
for (let i = 0; i < this.data.length; i++) { // disabledfalse#1751
if (!this.objData[this.data[i]._index]._isChecked && !this.objData[this.data[i]._index]._isDisabled) { let isAllDisabledAndUnSelected = true;
for (let i in this.objData) {
const objData = this.objData[i];
if (!objData._isChecked && !objData._isDisabled) {
isSelectAll = false; isSelectAll = false;
break; break;
} else if (objData.children && objData.children.length) {
isSelectAll = this.isChildrenSelected(objData, isSelectAll);
}
if (!(objData._isDisabled && !objData._isChecked)) {
isAllDisabledAndUnSelected = false;
} else if (objData.children && objData.children.length) {
isAllDisabledAndUnSelected = this.isChildrenAllDisabledAndUnSelected(objData, isAllDisabledAndUnSelected);
} }
} }
if (isAllDisabledAndUnSelected) isSelectAll = false;
return isSelectAll; return isSelectAll;
}, },
@ -331,6 +343,32 @@
handleMouseOut () { handleMouseOut () {
if (this.$isServer) return; if (this.$isServer) return;
document.body.style.cursor = ''; document.body.style.cursor = '';
},
isChildrenSelected (objData, isSelectAll) {
let status = isSelectAll;
if (objData.children && objData.children.length) {
objData.children.forEach(row => {
if (!row._isChecked && !row._isDisabled) {
status = false;
} else if (row.children && row.children.length) {
status = this.isChildrenSelected(row, status);
}
});
}
return status;
},
isChildrenAllDisabledAndUnSelected (objData, isAllDisabledAndUnSelected) {
let status = isAllDisabledAndUnSelected;
if (objData.children && objData.children.length) {
objData.children.forEach(row => {
if (!(row._isDisabled && !row._isChecked)) {
status = false;
} else if (row.children && row.children.length) {
status = this.isChildrenAllDisabledAndUnSelected(row, status);
}
});
}
return status;
} }
} }
}; };