@scenetechnology/cj_iview_table 0.0.66 → 0.0.68

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/README.md CHANGED
@@ -61,10 +61,12 @@ cj_iview_table 是一个功能强大的表格组件,支持筛选、排序、
61
61
  | height | String | - | 表格高度 |
62
62
  | maxHeight | String | - | 最大高度 |
63
63
  | toolBar | Array/Boolean | true | 工具栏配置 |
64
- | defaultSize | Number | - | 默认分页大小 |
65
- | filterGridSpan | Number | 6 | 筛选栏栅格跨度 |
66
- | filterLabelWidth | Number | 80 | 筛选标签宽度 |
67
- | fields | Array | [] | 导出数据时需要包含的属性名 |
64
+ | defaultSize | Number | - | 默认分页大小 |
65
+ | rowKey | String/Boolean | id | 开启跨分页保留选中时使用的唯一键,支持如 `id`、`user.id` |
66
+ | reserveSelection | Boolean | false | 是否保留跨分页、跨筛选/搜索的多选结果 |
67
+ | filterGridSpan | Number | 6 | 筛选栏栅格跨度 |
68
+ | filterLabelWidth | Number | 80 | 筛选标签宽度 |
69
+ | fields | Array | [] | 导出数据时需要包含的属性名 |
68
70
 
69
71
  ### 列配置项
70
72
  每个column支持以下属性:
@@ -81,9 +83,11 @@ cj_iview_table 是一个功能强大的表格组件,支持筛选、排序、
81
83
  | slot | Boolean | 是否使用自定义插槽 |
82
84
 
83
85
  ## 事件
84
- | 事件名 | 说明 | 回调参数 |
85
- |--------|------|----------|
86
- | on-change | 分页、排序等变化时触发 | (pagination, filters, sorter) |
86
+ | 事件名 | 说明 | 回调参数 |
87
+ |--------|------|----------|
88
+ | on-change | 分页、排序等变化时触发 | (pagination, filters, sorter) |
89
+ | on-selection-change | 当前页选中项变化时触发 | (selection) |
90
+ | on-reserve-selection-change | 开启 `reserveSelection` 后,所有已保留选中项变化时触发 | (selection) |
87
91
 
88
92
  ## 插槽
89
93
  | 插槽名 | 说明 |
@@ -105,10 +109,28 @@ cj_iview_table 是一个功能强大的表格组件,支持筛选、排序、
105
109
  - 列排序
106
110
  - 列固定
107
111
 
108
- ### 3. 数据请求
109
- 支持两种数据加载方式:
110
- - 通过data属性直接传入数据
111
- - 通过request函数异步加载数据
112
+ ### 3. 数据请求
113
+ 支持两种数据加载方式:
114
+ - 通过data属性直接传入数据
115
+ - 通过request函数异步加载数据
116
+
117
+ ### 4. 跨分页保留选中
118
+ 当表格包含 `type: 'selection'` 列时,可通过 `reserveSelection` 开启跨分页、跨搜索/筛选保留勾选。
119
+
120
+ ```vue
121
+ <cj_iview_table
122
+ :columns="columns"
123
+ :request="loadData"
124
+ row-key="id"
125
+ :reserveSelection="true"
126
+ @on-reserve-selection-change="handleSelectionChange"
127
+ />
128
+ ```
129
+
130
+ 说明:
131
+ - `rowKey` 必须能唯一标识一行数据,支持多级路径,例如 `user.id`
132
+ - `on-selection-change` 返回的是当前页选中项
133
+ - `on-reserve-selection-change` 返回的是所有分页/筛选范围内累计保留的选中项
112
134
 
113
135
  ## 使用示例
114
136
 
@@ -21021,6 +21021,46 @@ module.exports = function (name) {
21021
21021
  };
21022
21022
 
21023
21023
 
21024
+ /***/ }),
21025
+
21026
+ /***/ 8237:
21027
+ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
21028
+
21029
+ "use strict";
21030
+
21031
+ var $ = __webpack_require__(6518);
21032
+ var iterate = __webpack_require__(2652);
21033
+ var aCallable = __webpack_require__(9306);
21034
+ var anObject = __webpack_require__(8551);
21035
+ var getIteratorDirect = __webpack_require__(1767);
21036
+
21037
+ var $TypeError = TypeError;
21038
+
21039
+ // `Iterator.prototype.reduce` method
21040
+ // https://tc39.es/ecma262/#sec-iterator.prototype.reduce
21041
+ $({ target: 'Iterator', proto: true, real: true }, {
21042
+ reduce: function reduce(reducer /* , initialValue */) {
21043
+ anObject(this);
21044
+ aCallable(reducer);
21045
+ var record = getIteratorDirect(this);
21046
+ var noInitial = arguments.length < 2;
21047
+ var accumulator = noInitial ? undefined : arguments[1];
21048
+ var counter = 0;
21049
+ iterate(record, function (value) {
21050
+ if (noInitial) {
21051
+ noInitial = false;
21052
+ accumulator = value;
21053
+ } else {
21054
+ accumulator = reducer(accumulator, value, counter);
21055
+ }
21056
+ counter++;
21057
+ }, { IS_RECORD: true });
21058
+ if (noInitial) throw new $TypeError('Reduce of empty iterator with no initial value');
21059
+ return accumulator;
21060
+ }
21061
+ });
21062
+
21063
+
21024
21064
  /***/ }),
21025
21065
 
21026
21066
  /***/ 8469:
@@ -25759,7 +25799,7 @@ if (typeof window !== 'undefined') {
25759
25799
  // Indicate to webpack that this file can be concatenated
25760
25800
  /* harmony default export */ var setPublicPath = (null);
25761
25801
 
25762
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=template&id=55cabfcd&scoped=true
25802
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=template&id=514a3b03&scoped=true
25763
25803
  var render = function render() {
25764
25804
  var _vm = this,
25765
25805
  _c = _vm._self._c;
@@ -26151,6 +26191,7 @@ var render = function render() {
26151
26191
  ref: "selection",
26152
26192
  attrs: {
26153
26193
  "border": _vm.border,
26194
+ "row-key": _vm.tableRowKey,
26154
26195
  "columns": _vm.tableColumns,
26155
26196
  "loading": _vm.tableLoading,
26156
26197
  "data": _vm.dataSource,
@@ -26242,6 +26283,8 @@ var es_iterator_find = __webpack_require__(116);
26242
26283
  var es_iterator_for_each = __webpack_require__(7588);
26243
26284
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.map.js
26244
26285
  var es_iterator_map = __webpack_require__(1701);
26286
+ // EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.reduce.js
26287
+ var es_iterator_reduce = __webpack_require__(8237);
26245
26288
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.some.js
26246
26289
  var es_iterator_some = __webpack_require__(3579);
26247
26290
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.difference.v2.js
@@ -30510,8 +30553,8 @@ function getPersonSearch (param) {
30510
30553
  var table_no_flod_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAUCAYAAACJfM0wAAAAAXNSR0IArs4c6QAAAh1JREFUOE+dlMtu00AYhc9vKxvkBwDEEgFvgERXKRepkYBmWWCPEBIo8sRcCpIF5ZYZOxJ5gRYkWLAp3bULEAIkXgFYtzxAYwgLz5CJZqKpsTHprJzR78+fzxyHAKDb7c4BuJ7n+fM0Tb/ovf0sxthVACcbjcYt0gDG2CaAc+NnZES0wDn/OCuYMXYfwANz300LbgN4A8AfP2dIRK1Z4AXotu/7pyZgvcIwXCKilxaulFpIkuRTnXkYhveI6KGZ2yaiJuf8+xS8H3gRKqWcT9P0m2btAZu8LwF4UWfOGFsGsGJNXWgpuAS+q5RqubEUoDtSyqY1tdH9ZexkfpmI1oz5rmnL5/+BTo0ZYzfGAH0AK0IIXgUH8AqA7qpeO57nzfd6va/6RxzHB7Ise617DKBl67YB4LweUEotJ0ny2MIZY1cArBpzu10G3VBKnTaMaxNwp9M56vv+BwCHzZ13hRBPKuA/PM9ruqbD4fAtgDNmfjMIggvTjKMoOi6lfPcP+EUAbSJ6pHtqX78EuhjH8WjP4dXB3Y/FZLqulDprTfM8b/f7/V+ldTPw9wAOTQaI7nDOn84CrexxEQ7gthDimXP6rulWnueL1rS2x2XwIAgGWZbVQiuNnR6fICJ9oJNYAOj/gWPmutS01rgA15kfdHLeCoKgHcfxTzd797ryk3aHwjDU5hZeC62NwoVHUXREKTU3Go3WB4PB7ypTu/8HEL0+yS21nGMAAAAASUVORK5CYII=";
30511
30554
  ;// ./src/assets/images/table_flod.png
30512
30555
  var table_flod_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAUCAYAAACJfM0wAAAAAXNSR0IArs4c6QAAAiJJREFUOE+V1D1v01AYBeBzHAVYAPEnWPgDVUEoTluVsiG1DLS0jQMDSLABUgcWhASsTAjiNIUwdENCFIa0EUJ8SKhswM4AlSio0C6A70F2bCuxkzj1Zvvex+e+970mBrwKriYJc0q0bjRL/Jw1jVkD/PdFVyVB9wHkAGxYYLHh8GO/uZlwAo2sDc+j/fI8P/XC+8KFiuZJPQiTbkGqg7wYYn3xnnAKBcfXHL6zK7oC6k4W3hVOoiJPNEt8Gy07gX/zPBaTZUnBBVdzhCrR8i1xolHmm2QtbVdXAd0On6fwDnhQNE6ewEXaUSvGsF3RLCi3W9KpZeW+75h7ECdJXlot8WEWHsB2RadBPY5QgidXHb723wXotlkCeCbEPIHlpsNahBequkbpVnBPfBU43IJd8xzAOICtFLpjahCnEzXui5O8HMCFqoYoc0Gy7jbLfB8n7UTXYXgdluoADgLwIDprZS5FH20dJjNk5ayFru3mL39z2ywKnAknrf/dy9FX0/xZdDUsaAXAgW549JEU3A3dYzj24hx/tCXrwEmW2je0Veq2K9io36YK8myUNIkOisdwEiXwIW842p40dUgWdRRGz6KyCJxvOnwUJw5bygU4Gz7MROM+7oGHfezdBLkQocxxrDHHzV6/xB7J/Q3dH2woONJqN9csE5jyl79bNJE8wP2SBPCxug7l/2BiXx5PV2b4a9CkyXEjNR3WPxw5/gVP/gNEyE+/VqwYfAAAAABJRU5ErkJggg==";
30513
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/table-setting.vue?vue&type=template&id=24464d76&scoped=true
30514
- var table_settingvue_type_template_id_24464d76_scoped_true_render = function render() {
30556
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/table-setting.vue?vue&type=template&id=694e7aaa&scoped=true
30557
+ var table_settingvue_type_template_id_694e7aaa_scoped_true_render = function render() {
30515
30558
  var _vm = this,
30516
30559
  _c = _vm._self._c;
30517
30560
  return _c('div', [_c('Modal', {
@@ -30680,7 +30723,7 @@ var table_settingvue_type_template_id_24464d76_scoped_true_render = function ren
30680
30723
  }
30681
30724
  }, [_vm._v("确定")])], 1)])], 1);
30682
30725
  };
30683
- var table_settingvue_type_template_id_24464d76_scoped_true_staticRenderFns = [];
30726
+ var table_settingvue_type_template_id_694e7aaa_scoped_true_staticRenderFns = [];
30684
30727
 
30685
30728
  ;// ./src/assets/images/model_title_icon.png
30686
30729
  var model_title_icon_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAAXNSR0IArs4c6QAAA5xJREFUSEuVll1onFUQhp/32yTYxJAKitSItiXZaOuFCooiqKA33tUbKdSWFrNJGn9aRav5MayJKRqaXAjVZLdN1QotVVFBil4IBUEjaKUXJm6yxR8w8afiVlOVJLtjzpqGLyfZzfa7/M7MvGdm3nfmiBK/awdsTWUVrcAeAioFg9l/6Es/oT9LCaFVjU5YpP48OwIjbnCdZ38OES+rITn6kGaKxSoKFB2yLYheYNMqF0pLtKUaeRfJVrJdEaguYfcE8BJwh+d0xowOGf8qoM/gVu98BLFvPKZPfbAlQPUJu1mwH3jAMzxrRtfEFMeJK5c/M1P9IbbK6AbqPPv3THRMxDR28X8eqH7YNgZZeszYCgQhpykZPZErOFyoB5tOWMVshmZBF3BlyHfORLIsR89Ys6bUkLBt800eBipCRhmMl6fhlclm/b0qYYCGw1ZNjmfN2ANcHvKZNtip6JCdRtwSOjg2U07r97uUKQXAt7lxyNbloNfErsUz8buiCXsD2BFycDQ9NCu6v4vpl0sCc1LIsD2AFzwpjOmaIausDmg34ylgTThlxIGyGfpHH9V0UcD/ifGg6+cyKYhPAqN1kXXR16zWInQLdi4hhPgZo6faSH7VrFkfMDpo9xHkmXr7kjPjaxntqRZ95P4v01FdwjZHRNKMO72g6bxjE+84UUYTdts8gRzA/Z7dpGBfapJji1LwgRxVs3+w18TzHnPCsb4AJoEtK10UcD3unzZeDDN2MaMbknZvzjjo1TgncdyMu4DrC/TJjZyTkLdZGxLoj47q4816P1+6umG7KphlALHNu+GIcjyeatGXLtO5DI8BbZ4oPyRH53iLzmxI2tXlRh+w3Ytzcs7YrYakfeb14zfBc6lJXg/X2N1q/RFbWz5HDNhgWY6mW/S5n2X9oN2NOChx0+KZI0Y0YY66VSGHN7NZnjm7W79ekoYWjJ1cquBJKT8DL46z8y6jvWb0ezPOgQ8owoHUI/qrFMCF8jYCncC68AAw8rMQikztcxK9kRpeLbjY4hZEa3kYI+5KGgJwU/6tSEDXWKN+WKKjQntI4BjUNT7F0fCaiCbzFHfTYLOX9Qc56Eg36ZsQC5cXpshmHZVozxkXFvaWE22o55wy0ZaOacSPWniVF38rLIkjOC1o/7ZJHxfq56qPk/VH7LKK2fzrx9fQfFuYCKAzFePtQm+FoqVb6VYbh6ymXDxt0AJcMLG/9ieGT8U1Vwor/wOKJWKSdidLTwAAAABJRU5ErkJggg==";
@@ -31225,7 +31268,8 @@ let checkAllGroup = [];
31225
31268
  // })
31226
31269
  // this.columnsOptionList
31227
31270
  // 全部选中
31228
- if (this.checkAllGroup.length == val.length) {
31271
+ const titleColumns = val.filter(item => item.type !== 'selection' && item.title);
31272
+ if (this.checkAllGroup.length == titleColumns.length) {
31229
31273
  this.checkAll = true;
31230
31274
  this.checkAllGroup = checkAllGroup;
31231
31275
  this.indeterminate = false;
@@ -31616,10 +31660,10 @@ let checkAllGroup = [];
31616
31660
  });
31617
31661
  ;// ./packages/components/table-setting.vue?vue&type=script&lang=js
31618
31662
  /* harmony default export */ var components_table_settingvue_type_script_lang_js = (table_settingvue_type_script_lang_js);
31619
- ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/table-setting.vue?vue&type=style&index=0&id=24464d76&prod&scoped=true&lang=css
31663
+ ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/table-setting.vue?vue&type=style&index=0&id=694e7aaa&prod&scoped=true&lang=css
31620
31664
  // extracted by mini-css-extract-plugin
31621
31665
 
31622
- ;// ./packages/components/table-setting.vue?vue&type=style&index=0&id=24464d76&prod&scoped=true&lang=css
31666
+ ;// ./packages/components/table-setting.vue?vue&type=style&index=0&id=694e7aaa&prod&scoped=true&lang=css
31623
31667
 
31624
31668
  ;// ./packages/components/table-setting.vue
31625
31669
 
@@ -31632,11 +31676,11 @@ let checkAllGroup = [];
31632
31676
 
31633
31677
  var table_setting_component = normalizeComponent(
31634
31678
  components_table_settingvue_type_script_lang_js,
31635
- table_settingvue_type_template_id_24464d76_scoped_true_render,
31636
- table_settingvue_type_template_id_24464d76_scoped_true_staticRenderFns,
31679
+ table_settingvue_type_template_id_694e7aaa_scoped_true_render,
31680
+ table_settingvue_type_template_id_694e7aaa_scoped_true_staticRenderFns,
31637
31681
  false,
31638
31682
  null,
31639
- "24464d76",
31683
+ "694e7aaa",
31640
31684
  null
31641
31685
 
31642
31686
  )
@@ -36361,6 +36405,8 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36361
36405
 
36362
36406
 
36363
36407
 
36408
+
36409
+
36364
36410
 
36365
36411
 
36366
36412
 
@@ -36460,6 +36506,14 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36460
36506
  type: Object,
36461
36507
  required: false
36462
36508
  },
36509
+ rowKey: {
36510
+ type: [String, Boolean],
36511
+ default: 'id'
36512
+ },
36513
+ reserveSelection: {
36514
+ type: Boolean,
36515
+ default: false
36516
+ },
36463
36517
  // 请求-获取数据
36464
36518
  request: {
36465
36519
  type: Function,
@@ -36496,6 +36550,8 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36496
36550
  filterCount: 0,
36497
36551
  // 选中的数据
36498
36552
  selectionItems: [],
36553
+ reserveSelectionMap: {},
36554
+ isRestoringSelection: false,
36499
36555
  defToolBar: [{
36500
36556
  text: '新增',
36501
36557
  type: 'primary'
@@ -36526,7 +36582,8 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36526
36582
  const config = {
36527
36583
  ...column,
36528
36584
  resizable: this.resizable && column.resizable !== false,
36529
- width: column.width || column.minWidth,
36585
+ width: column.width || undefined,
36586
+ minWidth: column.width ? undefined : column.minWidth || 100,
36530
36587
  render: (h, params) => {
36531
36588
  // 如果列有slot属性,使用插槽内容
36532
36589
  if (column.slot) {
@@ -36885,6 +36942,12 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36885
36942
  */
36886
36943
  formKey() {
36887
36944
  return item => item.as ? item.as : item.key;
36945
+ },
36946
+ tableRowKey() {
36947
+ if (!this.reserveSelection) {
36948
+ return false;
36949
+ }
36950
+ return this.rowKey || false;
36888
36951
  }
36889
36952
  },
36890
36953
  watch: {
@@ -36923,11 +36986,113 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36923
36986
  this.page.total = newVal;
36924
36987
  }
36925
36988
  },
36989
+ dataSource() {
36990
+ if (this.shouldReserveSelection()) {
36991
+ this.queueRestoreSelection();
36992
+ }
36993
+ },
36926
36994
  requestParams() {
36927
36995
  this.reload();
36928
36996
  }
36929
36997
  },
36930
36998
  methods: {
36999
+ hasValidRowKey(value) {
37000
+ return value !== undefined && value !== null && value !== '';
37001
+ },
37002
+ getRowIdentity(row) {
37003
+ if (!row || !this.rowKey || typeof this.rowKey !== 'string') {
37004
+ return undefined;
37005
+ }
37006
+ return this.rowKey.split('.').reduce((result, key) => {
37007
+ return result == null ? undefined : result[key];
37008
+ }, row);
37009
+ },
37010
+ shouldReserveSelection() {
37011
+ return this.reserveSelection && this.columns.some(item => item.type === 'selection') && typeof this.rowKey === 'string' && this.rowKey !== '';
37012
+ },
37013
+ setReserveSelectionMap(nextMap) {
37014
+ this.reserveSelectionMap = nextMap;
37015
+ this.selectionItems = Object.values(nextMap);
37016
+ },
37017
+ syncReserveSelection(selectionItems = []) {
37018
+ if (!this.shouldReserveSelection()) {
37019
+ this.selectionItems = selectionItems;
37020
+ return;
37021
+ }
37022
+ const nextMap = {
37023
+ ...this.reserveSelectionMap
37024
+ };
37025
+ const pageKeys = [];
37026
+ this.dataSource.forEach(row => {
37027
+ const rowKey = this.getRowIdentity(row);
37028
+ if (this.hasValidRowKey(rowKey)) {
37029
+ pageKeys.push(String(rowKey));
37030
+ }
37031
+ });
37032
+ pageKeys.forEach(key => {
37033
+ delete nextMap[key];
37034
+ });
37035
+ selectionItems.forEach(row => {
37036
+ const rowKey = this.getRowIdentity(row);
37037
+ if (this.hasValidRowKey(rowKey)) {
37038
+ nextMap[String(rowKey)] = row;
37039
+ }
37040
+ });
37041
+ this.setReserveSelectionMap(nextMap);
37042
+ },
37043
+ getCurrentTableSelection() {
37044
+ const tableRef = this.$refs.selection;
37045
+ if (tableRef && typeof tableRef.getSelection === 'function') {
37046
+ return tableRef.getSelection();
37047
+ }
37048
+ return [];
37049
+ },
37050
+ queueRestoreSelection() {
37051
+ this.$nextTick(() => {
37052
+ this.restoreSelection();
37053
+ });
37054
+ },
37055
+ restoreSelection() {
37056
+ if (!this.shouldReserveSelection()) {
37057
+ return;
37058
+ }
37059
+ const tableRef = this.$refs.selection;
37060
+ if (!tableRef || typeof tableRef.toggleSelect !== 'function') {
37061
+ return;
37062
+ }
37063
+ const selectedKeys = new Set(Object.keys(this.reserveSelectionMap));
37064
+ if (selectedKeys.size === 0) {
37065
+ return;
37066
+ }
37067
+ const currentSelection = this.getCurrentTableSelection();
37068
+ const currentSelectionKeys = new Set(currentSelection.map(row => this.getRowIdentity(row)).filter(rowKey => this.hasValidRowKey(rowKey)).map(rowKey => String(rowKey)));
37069
+ this.isRestoringSelection = true;
37070
+ this.dataSource.forEach((row, index) => {
37071
+ const rowKey = this.getRowIdentity(row);
37072
+ if (!this.hasValidRowKey(rowKey)) {
37073
+ return;
37074
+ }
37075
+ const normalizedKey = String(rowKey);
37076
+ const shouldBeSelected = selectedKeys.has(normalizedKey);
37077
+ const isSelected = currentSelectionKeys.has(normalizedKey);
37078
+ if (shouldBeSelected !== isSelected) {
37079
+ tableRef.toggleSelect(index, rowKey);
37080
+ }
37081
+ });
37082
+ this.$nextTick(() => {
37083
+ this.isRestoringSelection = false;
37084
+ });
37085
+ },
37086
+ clearReserveSelection() {
37087
+ this.setReserveSelectionMap({});
37088
+ const selectedRowKeys = new Set(this.getCurrentTableSelection().map(row => this.getRowIdentity(row)).filter(rowKey => this.hasValidRowKey(rowKey)).map(rowKey => String(rowKey)));
37089
+ this.dataSource.forEach((row, index) => {
37090
+ const rowKey = this.getRowIdentity(row);
37091
+ if (this.hasValidRowKey(rowKey) && selectedRowKeys.has(String(rowKey)) && this.$refs.selection && typeof this.$refs.selection.toggleSelect === 'function') {
37092
+ this.$refs.selection.toggleSelect(index, rowKey);
37093
+ }
37094
+ });
37095
+ },
36931
37096
  isJsonString(str) {
36932
37097
  if (typeof str !== 'string') return false;
36933
37098
  try {
@@ -37254,7 +37419,15 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37254
37419
  * @param {*} selectionItems
37255
37420
  */
37256
37421
  onSelectionChange(selectionItems) {
37257
- this.selectionItems = selectionItems;
37422
+ if (this.shouldReserveSelection()) {
37423
+ this.syncReserveSelection(selectionItems);
37424
+ if (this.isRestoringSelection) {
37425
+ return;
37426
+ }
37427
+ this.$emit('on-reserve-selection-change', this.selectionItems);
37428
+ } else {
37429
+ this.selectionItems = selectionItems;
37430
+ }
37258
37431
  // 向父组件发射选择变化事件
37259
37432
  this.$emit('on-selection-change', selectionItems);
37260
37433
  },
@@ -37370,7 +37543,7 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37370
37543
  * 刷新
37371
37544
  */
37372
37545
  reload() {
37373
- if (this.selectionItems.length > 0) {
37546
+ if (!this.shouldReserveSelection() && this.selectionItems.length > 0) {
37374
37547
  this.selectionItems.length = 0;
37375
37548
  }
37376
37549
  this.getDataSource();
@@ -37732,11 +37905,37 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37732
37905
  column
37733
37906
  });
37734
37907
  },
37908
+ getActualColumnWidth(colKey) {
37909
+ const tableEl = this.$refs.selection && this.$refs.selection.$el;
37910
+ if (!tableEl) return null;
37911
+ const headers = tableEl.querySelectorAll('.ivu-table-header th');
37912
+ const visibleCols = this.columnsList.filter(col => !col.hideInTable);
37913
+ const colIdx = visibleCols.findIndex(col => col.key === colKey);
37914
+ if (colIdx !== -1 && headers[colIdx]) {
37915
+ return headers[colIdx].offsetWidth;
37916
+ }
37917
+ return null;
37918
+ },
37735
37919
  onColumnWidthResize(newWidth, oldWidth, column, event) {
37736
37920
  const columnKey = column.key;
37737
- const columnIndex = this.columnsList.findIndex(col => col.key === columnKey);
37921
+ const visibleColumns = this.columnsList.filter(col => !col.hideInTable);
37922
+ const columnIndex = visibleColumns.findIndex(col => col.key === columnKey);
37738
37923
  if (columnIndex !== -1) {
37739
- this.$set(this.columnsList[columnIndex], 'width', newWidth);
37924
+ const diff = newWidth - oldWidth;
37925
+ const nextVisibleCol = visibleColumns[columnIndex + 1];
37926
+ if (nextVisibleCol) {
37927
+ const actualWidth = this.getActualColumnWidth(nextVisibleCol.key);
37928
+ const nextCurrentWidth = actualWidth || nextVisibleCol.width || nextVisibleCol.minWidth || 100;
37929
+ const nextNewWidth = Math.max(50, nextCurrentWidth - diff);
37930
+ const nextIndex = this.columnsList.findIndex(col => col.key === nextVisibleCol.key);
37931
+ if (nextIndex !== -1) {
37932
+ this.$set(this.columnsList[nextIndex], 'width', nextNewWidth);
37933
+ this.$set(this.columnsList[nextIndex], 'minWidth', undefined);
37934
+ }
37935
+ }
37936
+ const realIndex = this.columnsList.findIndex(col => col.key === columnKey);
37937
+ this.$set(this.columnsList[realIndex], 'width', newWidth);
37938
+ this.$set(this.columnsList[realIndex], 'minWidth', undefined);
37740
37939
  this.saveColumnWidths();
37741
37940
  }
37742
37941
  this.$emit('on-column-width-resize', {
@@ -37898,15 +38097,15 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37898
38097
  });
37899
38098
  ;// ./packages/components/index.vue?vue&type=script&lang=js
37900
38099
  /* harmony default export */ var packages_componentsvue_type_script_lang_js = (componentsvue_type_script_lang_js);
37901
- ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-32.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-32.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-32.use[2]!./node_modules/less-loader/dist/cjs.js??clonedRuleSet-32.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=style&index=0&id=55cabfcd&prod&scoped=true&lang=less
38100
+ ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-32.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-32.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-32.use[2]!./node_modules/less-loader/dist/cjs.js??clonedRuleSet-32.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=style&index=0&id=514a3b03&prod&scoped=true&lang=less
37902
38101
  // extracted by mini-css-extract-plugin
37903
38102
 
37904
- ;// ./packages/components/index.vue?vue&type=style&index=0&id=55cabfcd&prod&scoped=true&lang=less
38103
+ ;// ./packages/components/index.vue?vue&type=style&index=0&id=514a3b03&prod&scoped=true&lang=less
37905
38104
 
37906
- ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=style&index=1&id=55cabfcd&prod&lang=css
38105
+ ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/components/index.vue?vue&type=style&index=1&id=514a3b03&prod&lang=css
37907
38106
  // extracted by mini-css-extract-plugin
37908
38107
 
37909
- ;// ./packages/components/index.vue?vue&type=style&index=1&id=55cabfcd&prod&lang=css
38108
+ ;// ./packages/components/index.vue?vue&type=style&index=1&id=514a3b03&prod&lang=css
37910
38109
 
37911
38110
  ;// ./packages/components/index.vue
37912
38111
 
@@ -37924,7 +38123,7 @@ var components_component = normalizeComponent(
37924
38123
  staticRenderFns,
37925
38124
  false,
37926
38125
  null,
37927
- "55cabfcd",
38126
+ "514a3b03",
37928
38127
  null
37929
38128
 
37930
38129
  )