@scenetechnology/cj_iview_table 0.0.69 → 0.0.70

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
@@ -62,9 +62,10 @@ cj_iview_table 是一个功能强大的表格组件,支持筛选、排序、
62
62
  | maxHeight | String | - | 最大高度 |
63
63
  | toolBar | Array/Boolean | true | 工具栏配置 |
64
64
  | defaultSize | Number | - | 默认分页大小 |
65
- | rowKey | String/Boolean | id | 开启跨分页保留选中时使用的唯一键,支持如 `id`、`user.id` |
66
- | selectedRowKeys | Array | [] | 外部传入的已选 rowKey 列表,可用于页面返回后恢复勾选 |
67
- | reserveSelection | Boolean | false | 是否保留跨分页、跨筛选/搜索的多选结果 |
65
+ | rowKey | String/Boolean | id | 开启跨分页保留选中时使用的唯一键,支持如 `id`、`user.id` |
66
+ | selectedRowKeys | Array | [] | 外部传入的已选 rowKey 列表,可用于页面返回后恢复勾选 |
67
+ | selectedRows | Array | [] | 外部传入的已选完整行数据,用于页面返回后直接恢复完整提交数据 |
68
+ | reserveSelection | Boolean | false | 是否保留跨分页、跨筛选/搜索的多选结果 |
68
69
  | filterGridSpan | Number | 6 | 筛选栏栅格跨度 |
69
70
  | filterLabelWidth | Number | 80 | 筛选标签宽度 |
70
71
  | fields | Array | [] | 导出数据时需要包含的属性名 |
@@ -135,39 +136,48 @@ cj_iview_table 是一个功能强大的表格组件,支持筛选、排序、
135
136
  - `on-reserve-selection-change` 返回的是所有分页/筛选范围内累计保留的选中项
136
137
 
137
138
  ### 5. 跨页面返回后恢复勾选
138
- 如果你会在离开列表页后再回来,需要由父页面自己保存已选 rowKey 列表,并在重新进入时通过 `selectedRowKeys` 传回组件。
139
+ 如果你会在离开列表页后再回来,需要由父页面自己保存已选 rowKey 列表,并在重新进入时通过 `selectedRowKeys` 传回组件。
139
140
 
140
141
  ```vue
141
- <cj_iview_table
142
- :columns="columns"
143
- :request="loadData"
144
- row-key="id"
145
- :reserveSelection="true"
146
- :selectedRowKeys="savedSelectedRowKeys"
147
- @on-reserve-selection-keys-change="handleReserveSelectionKeysChange"
148
- />
142
+ <cj_iview_table
143
+ :columns="columns"
144
+ :request="loadData"
145
+ row-key="id"
146
+ :reserveSelection="true"
147
+ :selectedRowKeys="savedSelectedRowKeys"
148
+ :selectedRows="savedSelectedRows"
149
+ @on-reserve-selection-change="handleReserveSelectionChange"
150
+ @on-reserve-selection-keys-change="handleReserveSelectionKeysChange"
151
+ />
149
152
  ```
150
153
 
151
154
  ```js
152
155
  export default {
153
- data () {
154
- return {
155
- savedSelectedRowKeys: JSON.parse(sessionStorage.getItem('table-selected-row-keys') || '[]')
156
- }
157
- },
158
- methods: {
159
- handleReserveSelectionKeysChange (selectedRowKeys) {
160
- this.savedSelectedRowKeys = selectedRowKeys
161
- sessionStorage.setItem('table-selected-row-keys', JSON.stringify(selectedRowKeys))
156
+ data () {
157
+ return {
158
+ savedSelectedRowKeys: JSON.parse(sessionStorage.getItem('table-selected-row-keys') || '[]'),
159
+ savedSelectedRows: JSON.parse(sessionStorage.getItem('table-selected-rows') || '[]')
160
+ }
161
+ },
162
+ methods: {
163
+ handleReserveSelectionChange (selectedRows) {
164
+ this.savedSelectedRows = selectedRows
165
+ sessionStorage.setItem('table-selected-rows', JSON.stringify(selectedRows))
166
+ },
167
+ handleReserveSelectionKeysChange (selectedRowKeys) {
168
+ this.savedSelectedRowKeys = selectedRowKeys
169
+ sessionStorage.setItem('table-selected-row-keys', JSON.stringify(selectedRowKeys))
162
170
  }
163
171
  }
164
172
  }
165
173
  ```
166
174
 
167
- 说明:
168
- - `selectedRowKeys` 传的是 rowKey 数组,不是整行数据
169
- - 组件会在数据重新加载后自动按这些 key 回显勾选
170
- - 如果某些 key 在当前数据集中不存在,会被自动忽略
175
+ 说明:
176
+ - `selectedRowKeys` 传的是 rowKey 数组,不是整行数据
177
+ - `selectedRows` 传的是之前保存下来的完整行数据,组件会优先用它恢复完整提交数据
178
+ - 组件会在数据重新加载后自动按这些 key 回显勾选
179
+ - 如果某些 key 在当前数据集中不存在,会被自动忽略
180
+ - 如果你希望“进入页面不翻页也能直接提交全部已选数据”,需要同时传 `selectedRowKeys` 和 `selectedRows`
171
181
 
172
182
  ## 使用示例
173
183
 
@@ -25799,7 +25799,7 @@ if (typeof window !== 'undefined') {
25799
25799
  // Indicate to webpack that this file can be concatenated
25800
25800
  /* harmony default export */ var setPublicPath = (null);
25801
25801
 
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=6e06842e&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=a2ad3720&scoped=true
25803
25803
  var render = function render() {
25804
25804
  var _vm = this,
25805
25805
  _c = _vm._self._c;
@@ -36514,6 +36514,10 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36514
36514
  type: Array,
36515
36515
  default: () => []
36516
36516
  },
36517
+ selectedRows: {
36518
+ type: Array,
36519
+ default: () => []
36520
+ },
36517
36521
  reserveSelection: {
36518
36522
  type: Boolean,
36519
36523
  default: false
@@ -36999,9 +37003,18 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
36999
37003
  selectedRowKeys: {
37000
37004
  immediate: true,
37001
37005
  deep: true,
37002
- handler(newVal) {
37006
+ handler() {
37003
37007
  if (this.shouldReserveSelection()) {
37004
- this.applySelectedRowKeys(newVal);
37008
+ this.applyExternalSelection();
37009
+ }
37010
+ }
37011
+ },
37012
+ selectedRows: {
37013
+ immediate: true,
37014
+ deep: true,
37015
+ handler() {
37016
+ if (this.shouldReserveSelection()) {
37017
+ this.applyExternalSelection();
37005
37018
  }
37006
37019
  }
37007
37020
  },
@@ -37033,6 +37046,18 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37033
37046
  }
37034
37047
  return Array.from(new Set(selectedRowKeys.map(item => this.normalizeRowKeyValue(item)).filter(Boolean)));
37035
37048
  },
37049
+ createReserveSelectionMapFromRows(rows = []) {
37050
+ if (!Array.isArray(rows)) {
37051
+ return {};
37052
+ }
37053
+ return rows.reduce((result, row) => {
37054
+ const rowKey = this.normalizeRowKeyValue(this.getRowIdentity(row));
37055
+ if (rowKey) {
37056
+ result[rowKey] = row;
37057
+ }
37058
+ return result;
37059
+ }, {});
37060
+ },
37036
37061
  setReserveSelectionState(nextMap = {}, nextKeys = []) {
37037
37062
  const normalizedKeys = this.normalizeSelectedRowKeys(nextKeys);
37038
37063
  const normalizedMap = normalizedKeys.reduce((result, key) => {
@@ -37045,18 +37070,16 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
37045
37070
  this.reserveSelectionKeys = normalizedKeys;
37046
37071
  this.selectionItems = normalizedKeys.map(key => normalizedMap[key]).filter(Boolean);
37047
37072
  },
37048
- applySelectedRowKeys(selectedRowKeys = []) {
37073
+ applyExternalSelection() {
37049
37074
  if (!this.shouldReserveSelection()) {
37050
37075
  return;
37051
37076
  }
37052
- const normalizedKeys = this.normalizeSelectedRowKeys(selectedRowKeys);
37077
+ const normalizedKeys = this.normalizeSelectedRowKeys(this.selectedRowKeys);
37053
37078
  const selectedKeySet = new Set(normalizedKeys);
37054
- const nextMap = normalizedKeys.reduce((result, key) => {
37055
- if (this.reserveSelectionMap[key]) {
37056
- result[key] = this.reserveSelectionMap[key];
37057
- }
37058
- return result;
37059
- }, {});
37079
+ const nextMap = {
37080
+ ...this.reserveSelectionMap,
37081
+ ...this.createReserveSelectionMapFromRows(this.selectedRows)
37082
+ };
37060
37083
  this.dataSource.forEach(row => {
37061
37084
  const rowKey = this.normalizeRowKeyValue(this.getRowIdentity(row));
37062
37085
  if (rowKey && selectedKeySet.has(rowKey)) {
@@ -38156,15 +38179,15 @@ var vue_treeselect_cjs_default = /*#__PURE__*/__webpack_require__.n(vue_treesele
38156
38179
  });
38157
38180
  ;// ./packages/components/index.vue?vue&type=script&lang=js
38158
38181
  /* harmony default export */ var packages_componentsvue_type_script_lang_js = (componentsvue_type_script_lang_js);
38159
- ;// ./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=6e06842e&prod&scoped=true&lang=less
38182
+ ;// ./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=a2ad3720&prod&scoped=true&lang=less
38160
38183
  // extracted by mini-css-extract-plugin
38161
38184
 
38162
- ;// ./packages/components/index.vue?vue&type=style&index=0&id=6e06842e&prod&scoped=true&lang=less
38185
+ ;// ./packages/components/index.vue?vue&type=style&index=0&id=a2ad3720&prod&scoped=true&lang=less
38163
38186
 
38164
- ;// ./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=6e06842e&prod&lang=css
38187
+ ;// ./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=a2ad3720&prod&lang=css
38165
38188
  // extracted by mini-css-extract-plugin
38166
38189
 
38167
- ;// ./packages/components/index.vue?vue&type=style&index=1&id=6e06842e&prod&lang=css
38190
+ ;// ./packages/components/index.vue?vue&type=style&index=1&id=a2ad3720&prod&lang=css
38168
38191
 
38169
38192
  ;// ./packages/components/index.vue
38170
38193
 
@@ -38182,7 +38205,7 @@ var components_component = normalizeComponent(
38182
38205
  staticRenderFns,
38183
38206
  false,
38184
38207
  null,
38185
- "6e06842e",
38208
+ "a2ad3720",
38186
38209
  null
38187
38210
 
38188
38211
  )