iov-design 2.15.31 → 2.15.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/select.js CHANGED
@@ -554,13 +554,6 @@ module.exports = require("iov-design/lib/utils/vue-popper");
554
554
 
555
555
  /***/ }),
556
556
 
557
- /***/ 6:
558
- /***/ (function(module, exports) {
559
-
560
- module.exports = require("iov-design/lib/mixins/locale");
561
-
562
- /***/ }),
563
-
564
557
  /***/ 64:
565
558
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
566
559
 
@@ -1071,7 +1064,7 @@ var focus_ = __webpack_require__(22);
1071
1064
  var focus_default = /*#__PURE__*/__webpack_require__.n(focus_);
1072
1065
 
1073
1066
  // EXTERNAL MODULE: external "iov-design/lib/mixins/locale"
1074
- var locale_ = __webpack_require__(6);
1067
+ var locale_ = __webpack_require__(7);
1075
1068
  var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
1076
1069
 
1077
1070
  // EXTERNAL MODULE: external "iov-design/lib/input"
@@ -2246,6 +2239,13 @@ src_select.install = function (Vue) {
2246
2239
 
2247
2240
  /* harmony default export */ var packages_select = __webpack_exports__["default"] = (src_select);
2248
2241
 
2242
+ /***/ }),
2243
+
2244
+ /***/ 7:
2245
+ /***/ (function(module, exports) {
2246
+
2247
+ module.exports = require("iov-design/lib/mixins/locale");
2248
+
2249
2249
  /***/ })
2250
2250
 
2251
2251
  /******/ });
@@ -128,18 +128,88 @@ var cellStarts = {
128
128
  var cellForced = {
129
129
  selection: {
130
130
  renderHeader: function renderHeader(h, _ref) {
131
+ var _this = this;
132
+
131
133
  var store = _ref.store;
132
134
 
133
- return h('el-checkbox', {
135
+ // console.log(store, 'store===========');
136
+ var _store$states = store.states,
137
+ isCrossPageSelection = _store$states.isCrossPageSelection,
138
+ selection = _store$states.selection,
139
+ data = _store$states.data,
140
+ rowKey = _store$states.rowKey;
141
+
142
+ var indeterminate = selection.length > 0 && !(selection.length === data.length);
143
+ if (isCrossPageSelection) {
144
+ // 全选: v-model - true, indeterminate - false
145
+ // 半选: v-model - false, indeterminate - true
146
+ // 不选:v-model - false, indeterminate - false
147
+
148
+ // 已选择的数据中是否包括当前页的数据项 && !当前页数据全部选中
149
+ indeterminate = selection.some(function (o) {
150
+ return data.some(function (row) {
151
+ return row[rowKey] === o[rowKey];
152
+ });
153
+ }) && !data.every(function (row) {
154
+ return selection.some(function (o) {
155
+ return row[rowKey] === o[rowKey];
156
+ });
157
+ });
158
+ }
159
+ // console.log(indeterminate, 'indeterminate===========');
160
+ return [h('el-checkbox', {
134
161
  attrs: {
135
- disabled: store.states.data && store.states.data.length === 0,
136
- indeterminate: store.states.selection.length > 0 && !this.isAllSelected,
162
+ disabled: data && data.length === 0,
163
+ indeterminate: indeterminate,
137
164
 
138
165
  value: this.isAllSelected },
139
166
  on: {
140
167
  'input': this.toggleAllSelection
141
168
  }
142
- });
169
+ }), this.table.crossPageSelection && h(
170
+ 'el-dropdown',
171
+ {
172
+ 'class': 'el-table__cross-page-selection',
173
+ attrs: { placement: 'bottom-start',
174
+ trigger: 'click'
175
+ },
176
+ on: {
177
+ 'command': function command(_command) {
178
+ return _this.onCommand(_command, _this.scope);
179
+ },
180
+ 'visible-change': this.onVisibleChange
181
+ }
182
+ },
183
+ [h('i', { 'class': ['iov-icon-arrow-down', this.store.states.showSelectionDropdown ? 'show-selection-dropdown' : ''] }), h(
184
+ 'el-dropdown-menu',
185
+ { slot: 'dropdown', 'class': 'table-selection__dropdown' },
186
+ [h(
187
+ 'el-dropdown-item',
188
+ {
189
+ attrs: { command: 1 }
190
+ },
191
+ ['\u5168\u9009\u5F53\u9875']
192
+ ), h(
193
+ 'el-dropdown-item',
194
+ {
195
+ attrs: { command: 3 }
196
+ },
197
+ ['\u5168\u9009\u6240\u6709\u9875']
198
+ ), h(
199
+ 'el-dropdown-item',
200
+ {
201
+ attrs: { command: 2 }
202
+ },
203
+ ['\u6E05\u7A7A\u5F53\u9875']
204
+ ), h(
205
+ 'el-dropdown-item',
206
+ {
207
+ attrs: { command: 4 }
208
+ },
209
+ ['\u6E05\u7A7A\u6240\u6709\u9875']
210
+ )]
211
+ )]
212
+ )];
143
213
  },
144
214
  renderCell: function renderCell(h, _ref2) {
145
215
  var row = _ref2.row,
@@ -274,7 +344,7 @@ function treeCellPrefix(h, _ref8) {
274
344
  return ele;
275
345
  }
276
346
  // EXTERNAL MODULE: ./packages/table/src/util.js
277
- var util = __webpack_require__(8);
347
+ var util = __webpack_require__(6);
278
348
 
279
349
  // EXTERNAL MODULE: external "iov-design/lib/checkbox"
280
350
  var checkbox_ = __webpack_require__(18);
@@ -632,7 +702,7 @@ module.exports = require("iov-design/lib/utils/util");
632
702
 
633
703
  /***/ }),
634
704
 
635
- /***/ 8:
705
+ /***/ 6:
636
706
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
637
707
 
638
708
  "use strict";
package/lib/table.js CHANGED
@@ -208,18 +208,6 @@ module.exports = require("iov-design/lib/utils/vue-popper");
208
208
 
209
209
  /***/ }),
210
210
  /* 6 */
211
- /***/ (function(module, exports) {
212
-
213
- module.exports = require("iov-design/lib/mixins/locale");
214
-
215
- /***/ }),
216
- /* 7 */
217
- /***/ (function(module, exports) {
218
-
219
- module.exports = require("vue");
220
-
221
- /***/ }),
222
- /* 8 */
223
211
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
224
212
 
225
213
  "use strict";
@@ -533,6 +521,18 @@ var objectEquals = function objectEquals(objectA, objectB) {
533
521
  return true;
534
522
  };
535
523
 
524
+ /***/ }),
525
+ /* 7 */
526
+ /***/ (function(module, exports) {
527
+
528
+ module.exports = require("iov-design/lib/mixins/locale");
529
+
530
+ /***/ }),
531
+ /* 8 */
532
+ /***/ (function(module, exports) {
533
+
534
+ module.exports = require("vue");
535
+
536
536
  /***/ }),
537
537
  /* 9 */
538
538
  /***/ (function(module, exports) {
@@ -1151,7 +1151,7 @@ var mousewheel_mousewheel = function mousewheel(element, callback) {
1151
1151
  }
1152
1152
  });
1153
1153
  // EXTERNAL MODULE: external "iov-design/lib/mixins/locale"
1154
- var locale_ = __webpack_require__(6);
1154
+ var locale_ = __webpack_require__(7);
1155
1155
  var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
1156
1156
 
1157
1157
  // EXTERNAL MODULE: external "iov-design/lib/mixins/migrating"
@@ -1159,7 +1159,7 @@ var migrating_ = __webpack_require__(11);
1159
1159
  var migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);
1160
1160
 
1161
1161
  // EXTERNAL MODULE: external "vue"
1162
- var external_vue_ = __webpack_require__(7);
1162
+ var external_vue_ = __webpack_require__(8);
1163
1163
  var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
1164
1164
 
1165
1165
  // EXTERNAL MODULE: external "iov-design/lib/utils/merge"
@@ -1167,7 +1167,7 @@ var merge_ = __webpack_require__(9);
1167
1167
  var merge_default = /*#__PURE__*/__webpack_require__.n(merge_);
1168
1168
 
1169
1169
  // EXTERNAL MODULE: ./packages/table/src/util.js
1170
- var util = __webpack_require__(8);
1170
+ var util = __webpack_require__(6);
1171
1171
 
1172
1172
  // CONCATENATED MODULE: ./packages/table/src/store/expand.js
1173
1173
 
@@ -1625,6 +1625,15 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1625
1625
  selectOnIndeterminate: false,
1626
1626
  selectable: null,
1627
1627
 
1628
+ // 跨页全选标记
1629
+ isCrossPageSelection: false,
1630
+ // 全选下拉出现/隐藏事件
1631
+ showSelectionDropdown: false,
1632
+ // 1-全选当前页 2-取消全选当前页 3-全选所有页 4-取消全选所有页
1633
+ selectionType: 0,
1634
+ // 已取消勾选的数据
1635
+ unSelectedRow: [],
1636
+
1628
1637
  // 过滤
1629
1638
  filters: {}, // 不可响应的
1630
1639
  filteredData: null,
@@ -1704,9 +1713,19 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1704
1713
  var states = this.states;
1705
1714
  states.isAllSelected = false;
1706
1715
  var oldSelection = states.selection;
1716
+
1717
+ // 表格中有选中的数据项是disabled状态时,清空时保留该数据
1718
+ var isDisabledSelection = states.data.filter(function (row, index) {
1719
+ // 判断selectable是不可选中状态, 且当前数据项已被选中
1720
+ if (states.selectable && !states.selectable.call(null, row, index) && oldSelection.some(function (item) {
1721
+ return item[states.rowKey] === row[states.rowKey];
1722
+ })) {
1723
+ return row;
1724
+ }
1725
+ });
1707
1726
  if (oldSelection.length) {
1708
- states.selection = [];
1709
- this.table.$emit('selection-change', []);
1727
+ states.selection = isDisabledSelection;
1728
+ this.table.$emit('selection-change', states.selection, false);
1710
1729
  }
1711
1730
  },
1712
1731
  cleanSelection: function cleanSelection() {
@@ -1735,7 +1754,7 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1735
1754
  return deleted.indexOf(item) === -1;
1736
1755
  });
1737
1756
  states.selection = newSelection;
1738
- this.table.$emit('selection-change', newSelection.slice());
1757
+ this.table.$emit('selection-change', newSelection.slice(), false);
1739
1758
  }
1740
1759
  },
1741
1760
  toggleRowSelection: function toggleRowSelection(row, selected) {
@@ -1746,11 +1765,65 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1746
1765
  var newSelection = (this.states.selection || []).slice();
1747
1766
  // 调用 API 修改选中值,不触发 select 事件
1748
1767
  if (emitChange) {
1768
+ this.getUnSelectedRow(newSelection);
1749
1769
  this.table.$emit('select', newSelection, row);
1750
1770
  }
1751
- this.table.$emit('selection-change', newSelection);
1771
+ if (this.states.isCrossPageSelection) {
1772
+ this.table.$emit('selection-change', this.states.unSelectedRow, true);
1773
+ } else {
1774
+ this.table.$emit('selection-change', newSelection, false);
1775
+ }
1752
1776
  }
1753
1777
  },
1778
+
1779
+
1780
+ /**
1781
+ * 获取取消勾选数据项
1782
+ * @param {arr} selection 当前已选择所有数据项
1783
+ */
1784
+ getUnSelectedRow: function getUnSelectedRow(selection) {
1785
+ var _this = this;
1786
+
1787
+ if (!this.states.isCrossPageSelection) return;
1788
+
1789
+ var rowKey = this.table.rowKey;
1790
+
1791
+ // 从全部勾选数据中过滤出当前页勾选的数据
1792
+
1793
+ var selected = this.table.data.filter(function (item) {
1794
+ return selection.some(function (row) {
1795
+ return row[rowKey] === item[rowKey];
1796
+ });
1797
+ });
1798
+ // 通过当前页数据与当前页已勾选的数据, 过滤出当前页未勾选的数据
1799
+ var unselected = this.table.data.filter(function (item) {
1800
+ return !selected.some(function (row) {
1801
+ return row[rowKey] === item[rowKey];
1802
+ });
1803
+ });
1804
+
1805
+ // 取消勾选数据中是否存在当页面已勾选的数据项, 如有则删除
1806
+ var index = [];
1807
+ this.states.unSelectedRow.forEach(function (item, i) {
1808
+ if (selected.some(function (s) {
1809
+ return s[rowKey] === item[rowKey];
1810
+ })) {
1811
+ index.push(i);
1812
+ }
1813
+ });
1814
+ this.states.unSelectedRow = this.states.unSelectedRow.filter(function (item, i) {
1815
+ return !index.includes(i);
1816
+ });
1817
+
1818
+ // 取消勾选数据中如果不存在当前页未勾选的数据, 则将当前未勾选的数据添push到取消勾选数据中
1819
+ unselected.forEach(function (item) {
1820
+ if (!_this.states.unSelectedRow.some(function (s) {
1821
+ return s[rowKey] === item[rowKey];
1822
+ })) {
1823
+ _this.states.unSelectedRow.push(item);
1824
+ }
1825
+ });
1826
+ },
1754
1827
  _toggleAllSelection: function _toggleAllSelection() {
1755
1828
  var states = this.states;
1756
1829
  var _states$data = states.data,
@@ -1775,8 +1848,15 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1775
1848
  }
1776
1849
  });
1777
1850
 
1851
+ var newSelection = (this.states.selection || []).slice();
1852
+
1778
1853
  if (selectionChanged) {
1779
- this.table.$emit('selection-change', selection ? selection.slice() : []);
1854
+ if (states.isCrossPageSelection) {
1855
+ this.getUnSelectedRow(newSelection);
1856
+ this.table.$emit('selection-change', states.unSelectedRow || [], true);
1857
+ } else {
1858
+ this.table.$emit('selection-change', selection ? selection.slice() : [], false);
1859
+ }
1780
1860
  }
1781
1861
  this.table.$emit('select-all', selection);
1782
1862
  },
@@ -1862,7 +1942,7 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1862
1942
  this.states.sortOrder = order;
1863
1943
  },
1864
1944
  execFilter: function execFilter() {
1865
- var _this = this;
1945
+ var _this2 = this;
1866
1946
 
1867
1947
  var states = this.states;
1868
1948
  var _data = states._data,
@@ -1873,7 +1953,7 @@ var doFlattenColumns = function doFlattenColumns(columns) {
1873
1953
  Object.keys(filters).forEach(function (columnId) {
1874
1954
  var values = states.filters[columnId];
1875
1955
  if (!values || values.length === 0) return;
1876
- var column = Object(util["d" /* getColumnById */])(_this.states, columnId);
1956
+ var column = Object(util["d" /* getColumnById */])(_this2.states, columnId);
1877
1957
  if (column && column.filterMethod) {
1878
1958
  data = data.filter(function (row) {
1879
1959
  return values.some(function (value) {
@@ -3574,6 +3654,7 @@ var table_header_extends = Object.assign || function (target) { for (var i = 1;
3574
3654
 
3575
3655
 
3576
3656
 
3657
+
3577
3658
  var getAllColumns = function getAllColumns(columns) {
3578
3659
  var result = [];
3579
3660
  columns.forEach(function (column) {
@@ -3788,6 +3869,64 @@ var convertToRows = function convertToRows(originColumns) {
3788
3869
  }
3789
3870
  })),
3790
3871
 
3872
+ watch: {
3873
+ 'store.states.data': {
3874
+ handler: function handler() {
3875
+ var states = this.store.states;
3876
+ var _states$data = states.data,
3877
+ data = _states$data === undefined ? [] : _states$data,
3878
+ selection = states.selection;
3879
+ var rowKey = this.table.rowKey;
3880
+ // 全选所有页
3881
+
3882
+ if (this.store.states.isCrossPageSelection) {
3883
+
3884
+ states.isAllSelected = true;
3885
+
3886
+ data.forEach(function (row, index) {
3887
+ if (states.selectable) {
3888
+ if (states.selectable.call(null, row, index)) {
3889
+ // 如果已勾选数据中不包含当前页数据(如跳转至新的一页), 则勾选
3890
+ if (!selection.some(function (o) {
3891
+ return o[rowKey] === row[rowKey];
3892
+ })) {
3893
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
3894
+ }
3895
+ if (states.unSelectedRow.some(function (o) {
3896
+ return o[rowKey] === row[rowKey];
3897
+ })) {
3898
+ // 如果取消勾选数据中包含当前页数据项, 则取消勾选
3899
+ Object(util["n" /* toggleRowStatus */])(selection, row, false);
3900
+ states.isAllSelected = false;
3901
+ }
3902
+ }
3903
+ } else {
3904
+ // 如果已勾选数据中不包含当前页数据(如跳转至新的一页), 则勾选
3905
+ if (!selection.some(function (o) {
3906
+ return o[rowKey] === row[rowKey];
3907
+ })) {
3908
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
3909
+ }
3910
+ // 如果取消勾选数据中包含当前页数据项, 则取消勾选
3911
+ if (states.unSelectedRow.some(function (o) {
3912
+ return o[rowKey] === row[rowKey];
3913
+ })) {
3914
+ Object(util["n" /* toggleRowStatus */])(selection, row, false);
3915
+ states.isAllSelected = false;
3916
+ }
3917
+ }
3918
+ });
3919
+ // console.log(states, 'states===========================');
3920
+ } else {
3921
+ // states.isAllSelected = false;
3922
+ states.selection = [];
3923
+ }
3924
+ },
3925
+
3926
+ deep: true
3927
+ }
3928
+ },
3929
+
3791
3930
  created: function created() {
3792
3931
  this.filterPanels = {};
3793
3932
  },
@@ -3894,6 +4033,113 @@ var convertToRows = function convertToRows(originColumns) {
3894
4033
  toggleAllSelection: function toggleAllSelection() {
3895
4034
  this.store.commit('toggleAllSelection');
3896
4035
  },
4036
+
4037
+
4038
+ /**
4039
+ * 下拉框出现/隐藏事件
4040
+ * @param {bol} visible 出现/隐藏
4041
+ */
4042
+ onVisibleChange: function onVisibleChange(v) {
4043
+ this.store.states.showSelectionDropdown = v;
4044
+ },
4045
+
4046
+
4047
+ /**
4048
+ * 选择数据事件
4049
+ * @param {num} command 选择事件类型 1-全选当前页 2-清空当前页 3-全选所有页 4-清空所有页
4050
+ */
4051
+ onCommand: function onCommand(command) {
4052
+ this.store.states.selectionType = command;
4053
+ var states = this.store.states;
4054
+ var _states$data2 = states.data,
4055
+ data = _states$data2 === undefined ? [] : _states$data2,
4056
+ selection = states.selection;
4057
+ // console.log(this, 'this===========================');
4058
+
4059
+ switch (command) {
4060
+ // 全选当前页
4061
+ case 1:
4062
+ states.isAllSelected = true;
4063
+ data.forEach(function (row, index) {
4064
+ if (states.selectable) {
4065
+ if (states.selectable.call(null, row, index)) {
4066
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
4067
+ }
4068
+ } else {
4069
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
4070
+ }
4071
+ });
4072
+ // console.log(states, 'states1===========================');
4073
+ // 先点击跨页全选,再点击清空当前页/取消几条勾选数据, 最后点击全选当前页
4074
+ if (states.isCrossPageSelection) {
4075
+ // 重新计算未选中数据
4076
+ this.store.getUnSelectedRow(states.selection);
4077
+ // 触发el-table的'selection-change'事件
4078
+ this.table.$listeners['selection-change'](states.unSelectedRow, true);
4079
+ } else {
4080
+ this.table.$listeners['selection-change'](this.table.selection, false);
4081
+ }
4082
+ break;
4083
+ // 清空当前页
4084
+ case 2:
4085
+ // 先点击跨页选择,再点击清空当前页
4086
+ if (states.isCrossPageSelection) {
4087
+ // 标记当前页未选中, 如果有选中的数据,清空选中数据
4088
+ states.isAllSelected = false;
4089
+ var oldSelection = states.selection;
4090
+ // 表格中有选中的数据项是disabled状态时,清空时保留该数据
4091
+ var isDisabledSelection = states.data.filter(function (row, index) {
4092
+ // 判断selectable是不可选中状态, 且当前数据项已被选中
4093
+ if (states.selectable && !states.selectable.call(null, row, index) && oldSelection.some(function (item) {
4094
+ return item[states.rowKey] === row[states.rowKey];
4095
+ })) {
4096
+ return row;
4097
+ }
4098
+ });
4099
+ if (oldSelection.length) {
4100
+ states.selection = isDisabledSelection;
4101
+ }
4102
+ // 重新计算未选中数据
4103
+ this.store.getUnSelectedRow(states.selection);
4104
+ // 触发el-table的'selection-change'事件
4105
+ this.table.$listeners['selection-change'](states.unSelectedRow, true);
4106
+ } else {
4107
+ states.unSelectedRow = [];
4108
+ this.table.clearSelection();
4109
+ }
4110
+ // console.log(states, 'states2===========================');
4111
+ break;
4112
+ // 全选所有页
4113
+ case 3:
4114
+ states.isCrossPageSelection = true;
4115
+ states.unSelectedRow = [];
4116
+ states.isAllSelected = true;
4117
+ data.forEach(function (row, index) {
4118
+ if (states.selectable) {
4119
+ if (states.selectable.call(null, row, index)) {
4120
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
4121
+ }
4122
+ } else {
4123
+ Object(util["n" /* toggleRowStatus */])(selection, row, true);
4124
+ }
4125
+ });
4126
+ // console.log(states, 'states3===========================');
4127
+ // 重新计算未选中数据
4128
+ this.store.getUnSelectedRow(states.selection);
4129
+ // 触发el-table的'selection-change'事件
4130
+ this.table.$listeners['selection-change'](states.unSelectedRow, true);
4131
+ break;
4132
+ // 清空所有页
4133
+ case 4:
4134
+ states.isCrossPageSelection = false;
4135
+ states.unSelectedRow = [];
4136
+ // console.log(states, 'states4===========================');
4137
+ this.table.clearSelection();
4138
+ break;
4139
+ default:
4140
+ break;
4141
+ }
4142
+ },
3897
4143
  handleFilterClick: function handleFilterClick(event, column) {
3898
4144
  event.stopPropagation();
3899
4145
  var target = event.target;
@@ -4601,6 +4847,11 @@ var tableIdSeed = 1;
4601
4847
  default: true
4602
4848
  },
4603
4849
 
4850
+ crossPageSelection: {
4851
+ type: Boolean,
4852
+ default: false
4853
+ },
4854
+
4604
4855
  indent: {
4605
4856
  type: Number,
4606
4857
  default: 16