mirror of https://github.com/ElemeFE/element
				
				
				
			Table: fix select-all checkbox is selected when all rows are not selectable.
							parent
							
								
									1dad71e170
								
							
						
					
					
						commit
						0a54bd41f1
					
				| 
						 | 
				
			
			@ -313,21 +313,31 @@ TableStore.prototype.updateAllSelected = function() {
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  let isAllSelected = true;
 | 
			
		||||
  let selectedCount = 0;
 | 
			
		||||
  for (let i = 0, j = data.length; i < j; i++) {
 | 
			
		||||
    const item = data[i];
 | 
			
		||||
    if (selectable) {
 | 
			
		||||
      if (selectable.call(null, item, i) && !isSelected(item)) {
 | 
			
		||||
        isAllSelected = false;
 | 
			
		||||
        break;
 | 
			
		||||
      const isRowSelectable = selectable.call(null, item, i);
 | 
			
		||||
      if (isRowSelectable) {
 | 
			
		||||
        if (!isSelected(item)) {
 | 
			
		||||
          isAllSelected = false;
 | 
			
		||||
          break;
 | 
			
		||||
        } else {
 | 
			
		||||
          selectedCount++;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      if (!isSelected(item)) {
 | 
			
		||||
        isAllSelected = false;
 | 
			
		||||
        break;
 | 
			
		||||
      } else {
 | 
			
		||||
        selectedCount++;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (selectedCount === 0) isAllSelected = false;
 | 
			
		||||
 | 
			
		||||
  states.isAllSelected = isAllSelected;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -623,6 +623,48 @@ describe('Table', () => {
 | 
			
		|||
      }, 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 => {
 | 
			
		||||
      const vm = createVue({
 | 
			
		||||
        template: `
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue