From 32fe110b694b38c28702db191ef3e73e16d1a4eb Mon Sep 17 00:00:00 2001 From: Jorge Poignon Date: Mon, 8 Nov 2021 12:18:42 +0200 Subject: [PATCH 1/2] ElTableColumn: Add 'disabled' prop to 'selection' type column --- packages/table/src/config.js | 6 +++--- packages/table/src/table-column.js | 11 ++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/table/src/config.js b/packages/table/src/config.js index ba705ac632d..c3c7881a096 100644 --- a/packages/table/src/config.js +++ b/packages/table/src/config.js @@ -28,11 +28,11 @@ export const cellStarts = { // 这些选项不应该被覆盖 export const cellForced = { selection: { - renderHeader: function(h, { store }) { + renderHeader: function(h, { store, column }) { return 0 && !this.isAllSelected } - nativeOn-click={ this.toggleAllSelection } + nativeOn-click={ !column.disabled ? this.toggleAllSelection : ()=>{} } value={ this.isAllSelected } />; }, renderCell: function(h, { row, column, store, $index }) { diff --git a/packages/table/src/table-column.js b/packages/table/src/table-column.js index 528eff1ab11..a29e5fbf03a 100644 --- a/packages/table/src/table-column.js +++ b/packages/table/src/table-column.js @@ -56,6 +56,10 @@ export default { validator(val) { return val.every(order => ['ascending', 'descending', null].indexOf(order) > -1); } + }, + disabled: { + type: Boolean, + default: false } }, @@ -195,13 +199,14 @@ export default { }, registerNormalWatchers() { - const props = ['label', 'property', 'filters', 'filterMultiple', 'sortable', 'index', 'formatter', 'className', 'labelClassName', 'showOverflowTooltip']; + const props = ['label', 'property', 'filters', 'filterMultiple', 'sortable', 'index', 'formatter', 'className', 'labelClassName', 'showOverflowTooltip', 'disabled']; // 一些属性具有别名 const aliases = { prop: 'property', realAlign: 'align', realHeaderAlign: 'headerAlign', - realWidth: 'width' + realWidth: 'width', + disabled: 'disabled' }; const allAliases = props.reduce((prev, cur) => { prev[cur] = cur; @@ -280,7 +285,7 @@ export default { const basicProps = ['columnKey', 'label', 'className', 'labelClassName', 'type', 'renderHeader', 'formatter', 'fixed', 'resizable']; const sortProps = ['sortMethod', 'sortBy', 'sortOrders']; - const selectProps = ['selectable', 'reserveSelection']; + const selectProps = ['selectable', 'reserveSelection', 'disabled']; const filterProps = ['filterMethod', 'filters', 'filterMultiple', 'filterOpened', 'filteredValue', 'filterPlacement']; let column = this.getPropsData(basicProps, sortProps, selectProps, filterProps); From f0b69b923d1dd4b21774a6a1df7782659c98172b Mon Sep 17 00:00:00 2001 From: Jorge Poignon Date: Mon, 8 Nov 2021 12:33:08 +0200 Subject: [PATCH 2/2] ElTable: Add 'unselection-change' event --- packages/table/src/store/watcher.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/table/src/store/watcher.js b/packages/table/src/store/watcher.js index fa13bdcfefa..58598004352 100644 --- a/packages/table/src/store/watcher.js +++ b/packages/table/src/store/watcher.js @@ -129,6 +129,8 @@ export default Vue.extend({ if (oldSelection.length) { states.selection = []; this.table.$emit('selection-change', []); + states.unselection = []; + this.table.$emit('unselection-change', []); } }, @@ -165,6 +167,14 @@ export default Vue.extend({ } this.table.$emit('selection-change', newSelection); } + if (!this.isSelected(row)) { + if (!this.states.unselection) this.states.unselection = []; + this.states.unselection.push(row); + } else if (this.states.unselection) { + let indx = this.states.unselection.findIndex(v => v.ns_id === row.ns_id); + this.states.unselection.splice(indx, indx >= 0 ? 1 : 0); + } + if (this.states.unselection && this.states.unselection.length > 0) this.table.$emit('unselection-change', this.states.unselection); }, _toggleAllSelection() {