Table: fix select-all checkbox is selected when all rows are not selectable.

pull/1207/head
furybean 2016-11-18 12:31:59 +08:00 committed by Leopoldthecoder
parent 402a9abacb
commit 012c0185f2
2 changed files with 55 additions and 3 deletions

View File

@ -313,21 +313,31 @@ TableStore.prototype.updateAllSelected = function() {
}; };
let isAllSelected = true; let isAllSelected = true;
let selectedCount = 0;
for (let i = 0, j = data.length; i < j; i++) { for (let i = 0, j = data.length; i < j; i++) {
const item = data[i]; const item = data[i];
if (selectable) { if (selectable) {
if (selectable.call(null, item, i) && !isSelected(item)) { const isRowSelectable = selectable.call(null, item, i);
if (isRowSelectable) {
if (!isSelected(item)) {
isAllSelected = false; isAllSelected = false;
break; break;
} else {
selectedCount++;
}
} }
} else { } else {
if (!isSelected(item)) { if (!isSelected(item)) {
isAllSelected = false; isAllSelected = false;
break; break;
} else {
selectedCount++;
} }
} }
} }
if (selectedCount === 0) isAllSelected = false;
states.isAllSelected = isAllSelected; states.isAllSelected = isAllSelected;
}; };

View File

@ -623,6 +623,48 @@ describe('Table', () => {
}, DELAY); }, DELAY);
}); });
it('selectable === false & check selectAll status', done => {
const vm = createVue({
template: `
<el-table :data="testData" @selection-change="change">
<el-table-column type="selection" :selectable="filterSelect" />
<el-table-column prop="name" label="name" />
<el-table-column prop="release" label="release" />
<el-table-column prop="director" label="director" />
<el-table-column prop="runtime" label="runtime" />
</el-table>
`,
created() {
},
data() {
return { selected: [], testData: null };
},
methods: {
change(rows) {
this.selected = rows;
},
filterSelect(row, index) {
return false;
}
}
}, true);
vm.testData = getTestData();
setTimeout(_ => {
expect(vm.$el.querySelector('.el-checkbox').__vue__.checked).to.be.false;
setTimeout(_ => {
expect(vm.selected).to.length(0);
destroyVM(vm);
done();
}, DELAY);
}, DELAY);
});
it('emit selection-change after row has been removed', done => { it('emit selection-change after row has been removed', done => {
const vm = createVue({ const vm = createVue({
template: ` template: `