vxe-table 3.20.4 → 3.20.6

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.
Files changed (155) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +106 -106
  3. package/es/grid/style.css +4 -0
  4. package/es/grid/style.min.css +1 -1
  5. package/es/index.css +1 -1
  6. package/es/index.esm.js +1 -2
  7. package/es/index.min.css +1 -1
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/table/src/methods.js +51 -22
  11. package/es/table/src/table.js +36 -0
  12. package/es/table/src/util.js +3 -4
  13. package/es/table/style.css +48 -18
  14. package/es/ui/index.js +1 -1
  15. package/es/ui/src/log.js +1 -1
  16. package/es/vxe-grid/style.css +4 -0
  17. package/es/vxe-grid/style.min.css +1 -1
  18. package/es/vxe-table/style.css +48 -18
  19. package/lib/grid/style/style.css +4 -0
  20. package/lib/grid/style/style.min.css +1 -1
  21. package/lib/index.common.js +1 -2
  22. package/lib/index.css +1 -1
  23. package/lib/index.min.css +1 -1
  24. package/lib/index.umd.js +3252 -1877
  25. package/lib/index.umd.min.js +1 -1
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/table/src/methods.js +4 -3
  29. package/lib/table/src/methods.min.js +1 -1
  30. package/lib/table/src/table.js +44 -0
  31. package/lib/table/src/table.min.js +1 -1
  32. package/lib/table/src/util.js +4 -6
  33. package/lib/table/src/util.min.js +1 -1
  34. package/lib/table/style/style.css +48 -18
  35. package/lib/ui/index.js +1 -1
  36. package/lib/ui/index.min.js +1 -1
  37. package/lib/ui/src/log.js +1 -1
  38. package/lib/ui/src/log.min.js +1 -1
  39. package/lib/v-x-e-table/index.js +1 -2
  40. package/lib/v-x-e-table/index.min.js +1 -1
  41. package/lib/vxe-colgroup/index.js +1 -2
  42. package/lib/vxe-colgroup/index.min.js +1 -1
  43. package/lib/vxe-column/index.js +1 -2
  44. package/lib/vxe-column/index.min.js +1 -1
  45. package/lib/vxe-grid/index.js +1 -2
  46. package/lib/vxe-grid/index.min.js +1 -1
  47. package/lib/vxe-grid/style/style.css +4 -0
  48. package/lib/vxe-grid/style/style.min.css +1 -1
  49. package/lib/vxe-table/index.js +1 -2
  50. package/lib/vxe-table/index.min.js +1 -1
  51. package/lib/vxe-table/style/style.css +48 -18
  52. package/lib/vxe-toolbar/index.js +1 -2
  53. package/lib/vxe-toolbar/index.min.js +1 -1
  54. package/lib/vxe-ui/index.js +1 -2
  55. package/lib/vxe-ui/index.min.js +1 -1
  56. package/lib/vxe-v-x-e-table/index.js +1 -2
  57. package/lib/vxe-v-x-e-table/index.min.js +1 -1
  58. package/package.json +93 -93
  59. package/packages/colgroup/index.ts +22 -22
  60. package/packages/column/index.ts +22 -22
  61. package/packages/components.ts +42 -42
  62. package/packages/grid/index.ts +22 -22
  63. package/packages/grid/src/grid.ts +1935 -1935
  64. package/packages/index.ts +4 -4
  65. package/packages/locale/lang/ar-EG.ts +832 -832
  66. package/packages/locale/lang/de-DE.ts +832 -832
  67. package/packages/locale/lang/en-US.ts +832 -832
  68. package/packages/locale/lang/es-ES.ts +832 -832
  69. package/packages/locale/lang/fr-FR.ts +832 -832
  70. package/packages/locale/lang/hu-HU.ts +832 -832
  71. package/packages/locale/lang/hy-AM.ts +832 -832
  72. package/packages/locale/lang/id-ID.ts +832 -832
  73. package/packages/locale/lang/it-IT.ts +832 -832
  74. package/packages/locale/lang/ja-JP.ts +832 -832
  75. package/packages/locale/lang/ko-KR.ts +832 -832
  76. package/packages/locale/lang/ms-MY.ts +832 -832
  77. package/packages/locale/lang/nb-NO.ts +832 -832
  78. package/packages/locale/lang/pt-BR.ts +832 -832
  79. package/packages/locale/lang/ru-RU.ts +832 -832
  80. package/packages/locale/lang/th-TH.ts +832 -832
  81. package/packages/locale/lang/ug-CN.ts +832 -832
  82. package/packages/locale/lang/uk-UA.ts +832 -832
  83. package/packages/locale/lang/uz-UZ.ts +832 -832
  84. package/packages/locale/lang/vi-VN.ts +832 -832
  85. package/packages/locale/lang/zh-CHT.ts +832 -832
  86. package/packages/locale/lang/zh-CN.ts +832 -832
  87. package/packages/locale/lang/zh-HK.ts +3 -3
  88. package/packages/locale/lang/zh-MO.ts +3 -3
  89. package/packages/locale/lang/zh-TC.ts +3 -3
  90. package/packages/locale/lang/zh-TW.ts +3 -3
  91. package/packages/table/index.ts +49 -49
  92. package/packages/table/module/custom/mixin.ts +369 -369
  93. package/packages/table/module/custom/panel.ts +1461 -1461
  94. package/packages/table/module/edit/mixin.ts +1123 -1123
  95. package/packages/table/module/export/export-panel.ts +658 -658
  96. package/packages/table/module/export/import-panel.ts +319 -319
  97. package/packages/table/module/export/mixin.ts +1693 -1693
  98. package/packages/table/module/export/util.ts +24 -24
  99. package/packages/table/module/filter/mixin.ts +507 -507
  100. package/packages/table/module/filter/panel.ts +329 -329
  101. package/packages/table/module/keyboard/mixin.ts +513 -513
  102. package/packages/table/module/menu/mixin.ts +329 -329
  103. package/packages/table/module/menu/panel.ts +212 -212
  104. package/packages/table/module/validator/mixin.ts +626 -626
  105. package/packages/table/render/index.ts +1456 -1456
  106. package/packages/table/src/body.ts +969 -969
  107. package/packages/table/src/cell.ts +1285 -1285
  108. package/packages/table/src/column.ts +205 -205
  109. package/packages/table/src/columnInfo.ts +228 -228
  110. package/packages/table/src/footer.ts +388 -388
  111. package/packages/table/src/group.ts +51 -51
  112. package/packages/table/src/header.ts +602 -602
  113. package/packages/table/src/methods.ts +12939 -12912
  114. package/packages/table/src/props.ts +311 -311
  115. package/packages/table/src/store.ts +15 -15
  116. package/packages/table/src/table.ts +2502 -2460
  117. package/packages/table/src/util.ts +1012 -1012
  118. package/packages/toolbar/index.ts +18 -18
  119. package/packages/toolbar/src/toolbar.ts +856 -856
  120. package/packages/ui/index.ts +530 -530
  121. package/packages/ui/src/anime.ts +52 -52
  122. package/packages/ui/src/comp.ts +3 -3
  123. package/packages/ui/src/dom.ts +236 -236
  124. package/packages/ui/src/log.ts +8 -8
  125. package/packages/ui/src/utils.ts +56 -56
  126. package/packages/ui/src/vn.ts +65 -65
  127. package/packages/v-x-e-table/index.ts +4 -4
  128. package/styles/all.scss +7 -7
  129. package/styles/base.scss +16 -16
  130. package/styles/components/grid.scss +89 -85
  131. package/styles/components/icon.scss +225 -225
  132. package/styles/components/old-icon.scss +715 -715
  133. package/styles/components/table-module/all.scss +6 -6
  134. package/styles/components/table-module/custom.scss +527 -527
  135. package/styles/components/table-module/export.scss +130 -130
  136. package/styles/components/table-module/filter.scss +130 -130
  137. package/styles/components/table-module/menu.scss +81 -81
  138. package/styles/components/table.scss +2679 -2679
  139. package/styles/components/toolbar.scss +119 -119
  140. package/styles/default.scss +2 -2
  141. package/styles/helpers/baseMixin.scss +95 -95
  142. package/styles/index.scss +3 -3
  143. package/styles/modules.scss +5 -5
  144. package/styles/theme/base.scss +93 -93
  145. package/styles/theme/dark.scss +49 -49
  146. package/styles/theme/light.scss +44 -44
  147. package/styles/variable.scss +43 -43
  148. package/types/all.d.ts +53 -53
  149. package/types/index.d.ts +4 -4
  150. /package/es/{iconfont.1773644050430.ttf → iconfont.1773972972913.ttf} +0 -0
  151. /package/es/{iconfont.1773644050430.woff → iconfont.1773972972913.woff} +0 -0
  152. /package/es/{iconfont.1773644050430.woff2 → iconfont.1773972972913.woff2} +0 -0
  153. /package/lib/{iconfont.1773644050430.ttf → iconfont.1773972972913.ttf} +0 -0
  154. /package/lib/{iconfont.1773644050430.woff → iconfont.1773972972913.woff} +0 -0
  155. /package/lib/{iconfont.1773644050430.woff2 → iconfont.1773972972913.woff2} +0 -0
@@ -1,369 +1,369 @@
1
- import XEUtils from 'xe-utils'
2
- import { getColumnList } from '../../src/util'
3
-
4
- import type { VxeColumnPropTypes, VxeTableConstructor, VxeTablePrivateMethods, VxeTableDefines, TableReactData, TableInternalData } from '../../../../types'
5
-
6
- function updatePopupStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
7
- const $xeGrid = $xeTable.$xeGrid
8
- const $xeGantt = $xeTable.$xeGantt
9
- const $xeGGWrapper = $xeGrid || $xeGantt
10
- const reactData = $xeTable as unknown as TableReactData
11
-
12
- const { customStore } = reactData
13
- const customOpts = $xeTable.computeCustomOpts
14
- const customSimpleMode = $xeTable.computeCustomSimpleMode
15
- const showCustomSimpleOutside = customSimpleMode === 'outside'
16
- const { popupOptions } = customOpts
17
- const { maxHeight } = popupOptions || {}
18
- let wrapperEl = $xeTable.$refs.refElem as HTMLDivElement
19
- let popupTop = 0
20
- let popupMaxHeight: string | number = 0
21
- if ($xeGantt) {
22
- const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem as HTMLDivElement
23
- if (ganttContainerElem) {
24
- wrapperEl = ganttContainerElem
25
- }
26
- }
27
- if (showCustomSimpleOutside) {
28
- if ($xeGGWrapper && wrapperEl) {
29
- popupTop = wrapperEl.offsetTop
30
- }
31
- popupMaxHeight = XEUtils.eqNull(maxHeight) ? 360 : maxHeight
32
- } else {
33
- // 判断面板不能大于表格高度
34
- if (wrapperEl) {
35
- popupMaxHeight = wrapperEl.clientHeight - 22
36
- }
37
- popupMaxHeight = Math.max(88, popupMaxHeight)
38
- }
39
- customStore.popupTop = popupTop
40
- customStore.maxHeight = XEUtils.eqNull(maxHeight) ? popupMaxHeight : maxHeight
41
- }
42
-
43
- function emitCustomEvent ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, type: VxeTableDefines.CustomType, evnt: Event) {
44
- const $xeGrid = $xeTable.$xeGrid
45
- const $xeGantt = $xeTable.$xeGantt
46
-
47
- const comp = $xeGrid || $xeGantt || $xeTable
48
- comp.dispatchEvent('custom', { type }, evnt)
49
- }
50
-
51
- export default {
52
- methods: {
53
- _getCustomVisible () {
54
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
55
- const reactData = $xeTable as unknown as TableReactData
56
-
57
- const { customStore } = reactData
58
- return customStore.visible
59
- },
60
- _openCustom () {
61
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
62
- const reactData = $xeTable as unknown as TableReactData
63
-
64
- const { initStore, customStore } = reactData
65
- customStore.visible = true
66
- initStore.custom = true
67
- $xeTable.handleUpdateCustomColumn()
68
- $xeTable.checkCustomStatus()
69
- updatePopupStyle($xeTable)
70
- return $xeTable.$nextTick().then(() => updatePopupStyle($xeTable))
71
- },
72
- _closeCustom () {
73
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
74
- const reactData = $xeTable as unknown as TableReactData
75
-
76
- const { customStore } = reactData
77
- const customOpts = $xeTable.computeCustomOpts
78
- if (customStore.visible) {
79
- customStore.visible = false
80
- if (!customOpts.immediate) {
81
- $xeTable.handleCustom()
82
- }
83
- }
84
- return $xeTable.$nextTick()
85
- },
86
- _toggleCustom () {
87
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
88
- const reactData = $xeTable as unknown as TableReactData
89
-
90
- const { customStore } = reactData
91
- if (customStore.visible) {
92
- return $xeTable.closeCustom()
93
- }
94
- return $xeTable.openCustom()
95
- },
96
- _saveCustom () {
97
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
98
- const reactData = $xeTable as unknown as TableReactData
99
- const internalData = $xeTable as unknown as TableInternalData
100
-
101
- const { customColumnList, aggHandleFields, rowGroupList } = reactData
102
- const customOpts = $xeTable.computeCustomOpts
103
- const { allowVisible, allowSort, allowFixed, allowResizable, allowGroup, allowValues } = customOpts
104
- XEUtils.eachTree(customColumnList, (column, index, items, path, parentColumn) => {
105
- if (parentColumn) {
106
- // 更新子列信息
107
- column.fixed = parentColumn.fixed
108
- } else {
109
- if (allowSort) {
110
- const sortIndex = index + 1
111
- column.renderSortNumber = sortIndex
112
- }
113
- if (allowFixed) {
114
- column.fixed = column.renderFixed
115
- }
116
- }
117
- if (allowResizable) {
118
- if (column.renderVisible && (!column.children || !column.children.length)) {
119
- if (column.renderResizeWidth !== column.renderWidth) {
120
- column.resizeWidth = column.renderResizeWidth
121
- column.renderWidth = column.renderResizeWidth
122
- }
123
- }
124
- }
125
- if (allowVisible) {
126
- column.visible = column.renderVisible
127
- }
128
- if (allowGroup && allowValues) {
129
- column.aggFunc = column.renderAggFn
130
- }
131
- })
132
- reactData.isCustomStatus = true
133
- if (allowGroup && allowValues && !!$xeTable.handlePivotTableAggregateData) {
134
- if (rowGroupList.length !== aggHandleFields.length || rowGroupList.some((conf, i) => conf.field !== aggHandleFields[i])) {
135
- // 更新数据分组
136
- if (aggHandleFields.length) {
137
- $xeTable.setRowGroups(aggHandleFields)
138
- } else {
139
- $xeTable.clearRowGroups()
140
- }
141
- } else if (allowValues) {
142
- // 更新聚合函数
143
- $xeTable.handleUpdateAggData()
144
- }
145
- }
146
- if (allowSort) {
147
- internalData.collectColumn = customColumnList
148
- }
149
- return $xeTable.saveCustomStore('confirm')
150
- },
151
- _cancelCustom () {
152
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
153
- const reactData = $xeTable as unknown as TableReactData
154
-
155
- const { customColumnList, customStore } = reactData
156
- const { oldSortMaps, oldFixedMaps, oldVisibleMaps } = customStore
157
- const customOpts = $xeTable.computeCustomOpts
158
- const { allowVisible, allowSort, allowFixed, allowResizable } = customOpts
159
- XEUtils.eachTree(customColumnList, column => {
160
- const colid = column.getKey()
161
- const visible = !!oldVisibleMaps[colid]
162
- const fixed = oldFixedMaps[colid] || ''
163
- if (allowVisible) {
164
- column.renderVisible = visible
165
- column.visible = visible
166
- }
167
- if (allowFixed) {
168
- column.renderFixed = fixed
169
- column.fixed = fixed
170
- }
171
- if (allowSort) {
172
- column.renderSortNumber = oldSortMaps[colid] || 0
173
- }
174
- if (allowResizable) {
175
- column.renderResizeWidth = column.renderWidth
176
- }
177
- }, { children: 'children' })
178
- return $xeTable.$nextTick()
179
- },
180
- _resetCustom (options: any) {
181
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
182
- const reactData = $xeTable as unknown as TableReactData
183
- const internalData = $xeTable as unknown as TableInternalData
184
-
185
- const { rowGroupList } = reactData
186
- const { collectColumn } = internalData
187
- const customOpts = $xeTable.computeCustomOpts
188
- const { checkMethod } = customOpts
189
- const opts = Object.assign({
190
- visible: true,
191
- resizable: options === true,
192
- fixed: options === true,
193
- sort: options === true,
194
- aggFunc: options === true
195
- }, options)
196
- const allCols: VxeTableDefines.ColumnInfo[] = []
197
- XEUtils.eachTree(collectColumn, (column) => {
198
- if (opts.resizable) {
199
- column.resizeWidth = 0
200
- }
201
- if (opts.fixed) {
202
- column.fixed = column.defaultFixed
203
- }
204
- if (opts.sort) {
205
- column.renderSortNumber = column.sortNumber
206
- column.parentId = column.defaultParentId
207
- }
208
- if (!checkMethod || checkMethod({ $table: $xeTable, column })) {
209
- column.visible = column.defaultVisible
210
- }
211
- if (opts.aggFunc) {
212
- column.aggFunc = column.defaultAggFunc
213
- column.renderAggFn = column.defaultAggFunc
214
- }
215
- column.renderResizeWidth = column.renderWidth
216
- allCols.push(column)
217
- })
218
- if (opts.sort) {
219
- const newCollectCols = XEUtils.toArrayTree(XEUtils.orderBy(allCols, 'renderSortNumber'), { key: 'id', parentKey: 'parentId', children: 'children' })
220
- internalData.collectColumn = newCollectCols
221
- internalData.tableFullColumn = getColumnList(newCollectCols)
222
- }
223
- reactData.isCustomStatus = false
224
- return $xeTable.handleCustom().then(() => {
225
- if (opts.aggFunc && ($xeTable as any).handlePivotTableAggregateData) {
226
- const rowGroupFields = $xeTable.computeRowGroupFields
227
- if (rowGroupFields ? rowGroupFields.length : rowGroupList.length) {
228
- if (rowGroupFields && rowGroupFields.length) {
229
- $xeTable.setRowGroups(rowGroupFields)
230
- } else {
231
- $xeTable.clearRowGroups()
232
- }
233
- } else {
234
- $xeTable.handleUpdateAggData()
235
- }
236
- }
237
- $xeTable.saveCustomStore('reset')
238
- })
239
- },
240
- _toggleCustomAllCheckbox () {
241
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
242
- const reactData = $xeTable as unknown as TableReactData
243
-
244
- const { customStore } = reactData
245
- const isAll = !customStore.isAll
246
- return $xeTable.setCustomAllCheckbox(isAll)
247
- },
248
- _setCustomAllCheckbox (checked: boolean) {
249
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
250
- const reactData = $xeTable as unknown as TableReactData
251
-
252
- const { customStore } = reactData
253
- const { customColumnList } = reactData
254
- const customOpts = $xeTable.computeCustomOpts
255
- const { checkMethod, visibleMethod } = customOpts
256
- const isAll = !!checked
257
- if (customOpts.immediate) {
258
- XEUtils.eachTree(customColumnList, (column) => {
259
- if (visibleMethod && !visibleMethod({ $table: $xeTable, column })) {
260
- return
261
- }
262
- if (checkMethod && !checkMethod({ $table: $xeTable, column })) {
263
- return
264
- }
265
- column.visible = isAll
266
- column.renderVisible = isAll
267
- column.halfVisible = false
268
- })
269
- customStore.isAll = isAll
270
- reactData.isCustomStatus = true
271
- $xeTable.handleCustom()
272
- $xeTable.saveCustomStore('update:visible')
273
- } else {
274
- XEUtils.eachTree(customColumnList, (column) => {
275
- if (visibleMethod && !visibleMethod({ $table: $xeTable, column })) {
276
- return
277
- }
278
- if (checkMethod && !checkMethod({ $table: $xeTable, column })) {
279
- return
280
- }
281
- column.renderVisible = isAll
282
- column.halfVisible = false
283
- })
284
- customStore.isAll = isAll
285
- }
286
- $xeTable.checkCustomStatus()
287
- },
288
- checkCustomStatus () {
289
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
290
- const reactData = $xeTable as unknown as TableReactData
291
- const internalData = $xeTable as unknown as TableInternalData
292
-
293
- const { customStore } = reactData
294
- const { collectColumn } = internalData
295
- const customOpts = $xeTable.computeCustomOpts
296
- const { checkMethod } = customOpts
297
- customStore.isAll = collectColumn.every((column) => (checkMethod ? !checkMethod({ $table: $xeTable, column }) : false) || column.renderVisible)
298
- customStore.isIndeterminate = !customStore.isAll && collectColumn.some((column) => (!checkMethod || checkMethod({ $table: $xeTable, column })) && (column.renderVisible || column.halfVisible))
299
- },
300
- emitCustomEvent (type: any, evnt: any) {
301
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
302
-
303
- $xeTable.dispatchEvent('custom', { type }, evnt)
304
- },
305
- triggerCustomEvent (evnt: any) {
306
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
307
- const reactData = $xeTable as unknown as TableReactData
308
-
309
- const { customStore } = reactData
310
- if (customStore.visible) {
311
- $xeTable.closeCustom()
312
- emitCustomEvent($xeTable, 'close', evnt)
313
- } else {
314
- customStore.btnEl = evnt.target
315
- $xeTable.openCustom()
316
- emitCustomEvent($xeTable, 'open', evnt)
317
- }
318
- },
319
- customOpenEvent (evnt: any) {
320
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
321
- const reactData = $xeTable as unknown as TableReactData
322
-
323
- const { customStore } = reactData
324
- if (customStore.visible) {
325
- customStore.activeBtn = true
326
- customStore.btnEl = evnt.target
327
- $xeTable.openCustom()
328
- emitCustomEvent($xeTable, 'open', evnt)
329
- }
330
- },
331
- customCloseEvent (evnt: any) {
332
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
333
- const reactData = $xeTable as unknown as TableReactData
334
-
335
- const { customStore } = reactData
336
- if (customStore.visible) {
337
- customStore.activeBtn = false
338
- $xeTable.closeCustom()
339
- emitCustomEvent($xeTable, 'close', evnt)
340
- }
341
- },
342
- handleUpdateCustomColumn () {
343
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
344
- const reactData = $xeTable as unknown as TableReactData
345
- const internalData = $xeTable as unknown as TableInternalData
346
-
347
- const { customStore } = reactData
348
- const { collectColumn } = internalData
349
- if (customStore.visible) {
350
- const sortMaps: Record<string, number> = {}
351
- const fixedMaps: Record<string, VxeColumnPropTypes.Fixed> = {}
352
- const visibleMaps: Record<string, boolean> = {}
353
- XEUtils.eachTree(collectColumn, column => {
354
- const colid = column.getKey()
355
- column.renderFixed = column.fixed
356
- column.renderVisible = column.visible
357
- column.renderResizeWidth = column.renderWidth
358
- sortMaps[colid] = column.renderSortNumber
359
- fixedMaps[colid] = column.fixed
360
- visibleMaps[colid] = column.visible
361
- })
362
- customStore.oldSortMaps = sortMaps
363
- customStore.oldFixedMaps = fixedMaps
364
- customStore.oldVisibleMaps = visibleMaps
365
- reactData.customColumnList = collectColumn.slice(0)
366
- }
367
- }
368
- } as any
369
- }
1
+ import XEUtils from 'xe-utils'
2
+ import { getColumnList } from '../../src/util'
3
+
4
+ import type { VxeColumnPropTypes, VxeTableConstructor, VxeTablePrivateMethods, VxeTableDefines, TableReactData, TableInternalData } from '../../../../types'
5
+
6
+ function updatePopupStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
7
+ const $xeGrid = $xeTable.$xeGrid
8
+ const $xeGantt = $xeTable.$xeGantt
9
+ const $xeGGWrapper = $xeGrid || $xeGantt
10
+ const reactData = $xeTable as unknown as TableReactData
11
+
12
+ const { customStore } = reactData
13
+ const customOpts = $xeTable.computeCustomOpts
14
+ const customSimpleMode = $xeTable.computeCustomSimpleMode
15
+ const showCustomSimpleOutside = customSimpleMode === 'outside'
16
+ const { popupOptions } = customOpts
17
+ const { maxHeight } = popupOptions || {}
18
+ let wrapperEl = $xeTable.$refs.refElem as HTMLDivElement
19
+ let popupTop = 0
20
+ let popupMaxHeight: string | number = 0
21
+ if ($xeGantt) {
22
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem as HTMLDivElement
23
+ if (ganttContainerElem) {
24
+ wrapperEl = ganttContainerElem
25
+ }
26
+ }
27
+ if (showCustomSimpleOutside) {
28
+ if ($xeGGWrapper && wrapperEl) {
29
+ popupTop = wrapperEl.offsetTop
30
+ }
31
+ popupMaxHeight = XEUtils.eqNull(maxHeight) ? 360 : maxHeight
32
+ } else {
33
+ // 判断面板不能大于表格高度
34
+ if (wrapperEl) {
35
+ popupMaxHeight = wrapperEl.clientHeight - 22
36
+ }
37
+ popupMaxHeight = Math.max(88, popupMaxHeight)
38
+ }
39
+ customStore.popupTop = popupTop
40
+ customStore.maxHeight = XEUtils.eqNull(maxHeight) ? popupMaxHeight : maxHeight
41
+ }
42
+
43
+ function emitCustomEvent ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, type: VxeTableDefines.CustomType, evnt: Event) {
44
+ const $xeGrid = $xeTable.$xeGrid
45
+ const $xeGantt = $xeTable.$xeGantt
46
+
47
+ const comp = $xeGrid || $xeGantt || $xeTable
48
+ comp.dispatchEvent('custom', { type }, evnt)
49
+ }
50
+
51
+ export default {
52
+ methods: {
53
+ _getCustomVisible () {
54
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
55
+ const reactData = $xeTable as unknown as TableReactData
56
+
57
+ const { customStore } = reactData
58
+ return customStore.visible
59
+ },
60
+ _openCustom () {
61
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
62
+ const reactData = $xeTable as unknown as TableReactData
63
+
64
+ const { initStore, customStore } = reactData
65
+ customStore.visible = true
66
+ initStore.custom = true
67
+ $xeTable.handleUpdateCustomColumn()
68
+ $xeTable.checkCustomStatus()
69
+ updatePopupStyle($xeTable)
70
+ return $xeTable.$nextTick().then(() => updatePopupStyle($xeTable))
71
+ },
72
+ _closeCustom () {
73
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
74
+ const reactData = $xeTable as unknown as TableReactData
75
+
76
+ const { customStore } = reactData
77
+ const customOpts = $xeTable.computeCustomOpts
78
+ if (customStore.visible) {
79
+ customStore.visible = false
80
+ if (!customOpts.immediate) {
81
+ $xeTable.handleCustom()
82
+ }
83
+ }
84
+ return $xeTable.$nextTick()
85
+ },
86
+ _toggleCustom () {
87
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
88
+ const reactData = $xeTable as unknown as TableReactData
89
+
90
+ const { customStore } = reactData
91
+ if (customStore.visible) {
92
+ return $xeTable.closeCustom()
93
+ }
94
+ return $xeTable.openCustom()
95
+ },
96
+ _saveCustom () {
97
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
98
+ const reactData = $xeTable as unknown as TableReactData
99
+ const internalData = $xeTable as unknown as TableInternalData
100
+
101
+ const { customColumnList, aggHandleFields, rowGroupList } = reactData
102
+ const customOpts = $xeTable.computeCustomOpts
103
+ const { allowVisible, allowSort, allowFixed, allowResizable, allowGroup, allowValues } = customOpts
104
+ XEUtils.eachTree(customColumnList, (column, index, items, path, parentColumn) => {
105
+ if (parentColumn) {
106
+ // 更新子列信息
107
+ column.fixed = parentColumn.fixed
108
+ } else {
109
+ if (allowSort) {
110
+ const sortIndex = index + 1
111
+ column.renderSortNumber = sortIndex
112
+ }
113
+ if (allowFixed) {
114
+ column.fixed = column.renderFixed
115
+ }
116
+ }
117
+ if (allowResizable) {
118
+ if (column.renderVisible && (!column.children || !column.children.length)) {
119
+ if (column.renderResizeWidth !== column.renderWidth) {
120
+ column.resizeWidth = column.renderResizeWidth
121
+ column.renderWidth = column.renderResizeWidth
122
+ }
123
+ }
124
+ }
125
+ if (allowVisible) {
126
+ column.visible = column.renderVisible
127
+ }
128
+ if (allowGroup && allowValues) {
129
+ column.aggFunc = column.renderAggFn
130
+ }
131
+ })
132
+ reactData.isCustomStatus = true
133
+ if (allowGroup && allowValues && !!$xeTable.handlePivotTableAggregateData) {
134
+ if (rowGroupList.length !== aggHandleFields.length || rowGroupList.some((conf, i) => conf.field !== aggHandleFields[i])) {
135
+ // 更新数据分组
136
+ if (aggHandleFields.length) {
137
+ $xeTable.setRowGroups(aggHandleFields)
138
+ } else {
139
+ $xeTable.clearRowGroups()
140
+ }
141
+ } else if (allowValues) {
142
+ // 更新聚合函数
143
+ $xeTable.handleUpdateAggData()
144
+ }
145
+ }
146
+ if (allowSort) {
147
+ internalData.collectColumn = customColumnList
148
+ }
149
+ return $xeTable.saveCustomStore('confirm')
150
+ },
151
+ _cancelCustom () {
152
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
153
+ const reactData = $xeTable as unknown as TableReactData
154
+
155
+ const { customColumnList, customStore } = reactData
156
+ const { oldSortMaps, oldFixedMaps, oldVisibleMaps } = customStore
157
+ const customOpts = $xeTable.computeCustomOpts
158
+ const { allowVisible, allowSort, allowFixed, allowResizable } = customOpts
159
+ XEUtils.eachTree(customColumnList, column => {
160
+ const colid = column.getKey()
161
+ const visible = !!oldVisibleMaps[colid]
162
+ const fixed = oldFixedMaps[colid] || ''
163
+ if (allowVisible) {
164
+ column.renderVisible = visible
165
+ column.visible = visible
166
+ }
167
+ if (allowFixed) {
168
+ column.renderFixed = fixed
169
+ column.fixed = fixed
170
+ }
171
+ if (allowSort) {
172
+ column.renderSortNumber = oldSortMaps[colid] || 0
173
+ }
174
+ if (allowResizable) {
175
+ column.renderResizeWidth = column.renderWidth
176
+ }
177
+ }, { children: 'children' })
178
+ return $xeTable.$nextTick()
179
+ },
180
+ _resetCustom (options: any) {
181
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
182
+ const reactData = $xeTable as unknown as TableReactData
183
+ const internalData = $xeTable as unknown as TableInternalData
184
+
185
+ const { rowGroupList } = reactData
186
+ const { collectColumn } = internalData
187
+ const customOpts = $xeTable.computeCustomOpts
188
+ const { checkMethod } = customOpts
189
+ const opts = Object.assign({
190
+ visible: true,
191
+ resizable: options === true,
192
+ fixed: options === true,
193
+ sort: options === true,
194
+ aggFunc: options === true
195
+ }, options)
196
+ const allCols: VxeTableDefines.ColumnInfo[] = []
197
+ XEUtils.eachTree(collectColumn, (column) => {
198
+ if (opts.resizable) {
199
+ column.resizeWidth = 0
200
+ }
201
+ if (opts.fixed) {
202
+ column.fixed = column.defaultFixed
203
+ }
204
+ if (opts.sort) {
205
+ column.renderSortNumber = column.sortNumber
206
+ column.parentId = column.defaultParentId
207
+ }
208
+ if (!checkMethod || checkMethod({ $table: $xeTable, column })) {
209
+ column.visible = column.defaultVisible
210
+ }
211
+ if (opts.aggFunc) {
212
+ column.aggFunc = column.defaultAggFunc
213
+ column.renderAggFn = column.defaultAggFunc
214
+ }
215
+ column.renderResizeWidth = column.renderWidth
216
+ allCols.push(column)
217
+ })
218
+ if (opts.sort) {
219
+ const newCollectCols = XEUtils.toArrayTree(XEUtils.orderBy(allCols, 'renderSortNumber'), { key: 'id', parentKey: 'parentId', children: 'children' })
220
+ internalData.collectColumn = newCollectCols
221
+ internalData.tableFullColumn = getColumnList(newCollectCols)
222
+ }
223
+ reactData.isCustomStatus = false
224
+ return $xeTable.handleCustom().then(() => {
225
+ if (opts.aggFunc && ($xeTable as any).handlePivotTableAggregateData) {
226
+ const rowGroupFields = $xeTable.computeRowGroupFields
227
+ if (rowGroupFields ? rowGroupFields.length : rowGroupList.length) {
228
+ if (rowGroupFields && rowGroupFields.length) {
229
+ $xeTable.setRowGroups(rowGroupFields)
230
+ } else {
231
+ $xeTable.clearRowGroups()
232
+ }
233
+ } else {
234
+ $xeTable.handleUpdateAggData()
235
+ }
236
+ }
237
+ $xeTable.saveCustomStore('reset')
238
+ })
239
+ },
240
+ _toggleCustomAllCheckbox () {
241
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
242
+ const reactData = $xeTable as unknown as TableReactData
243
+
244
+ const { customStore } = reactData
245
+ const isAll = !customStore.isAll
246
+ return $xeTable.setCustomAllCheckbox(isAll)
247
+ },
248
+ _setCustomAllCheckbox (checked: boolean) {
249
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
250
+ const reactData = $xeTable as unknown as TableReactData
251
+
252
+ const { customStore } = reactData
253
+ const { customColumnList } = reactData
254
+ const customOpts = $xeTable.computeCustomOpts
255
+ const { checkMethod, visibleMethod } = customOpts
256
+ const isAll = !!checked
257
+ if (customOpts.immediate) {
258
+ XEUtils.eachTree(customColumnList, (column) => {
259
+ if (visibleMethod && !visibleMethod({ $table: $xeTable, column })) {
260
+ return
261
+ }
262
+ if (checkMethod && !checkMethod({ $table: $xeTable, column })) {
263
+ return
264
+ }
265
+ column.visible = isAll
266
+ column.renderVisible = isAll
267
+ column.halfVisible = false
268
+ })
269
+ customStore.isAll = isAll
270
+ reactData.isCustomStatus = true
271
+ $xeTable.handleCustom()
272
+ $xeTable.saveCustomStore('update:visible')
273
+ } else {
274
+ XEUtils.eachTree(customColumnList, (column) => {
275
+ if (visibleMethod && !visibleMethod({ $table: $xeTable, column })) {
276
+ return
277
+ }
278
+ if (checkMethod && !checkMethod({ $table: $xeTable, column })) {
279
+ return
280
+ }
281
+ column.renderVisible = isAll
282
+ column.halfVisible = false
283
+ })
284
+ customStore.isAll = isAll
285
+ }
286
+ $xeTable.checkCustomStatus()
287
+ },
288
+ checkCustomStatus () {
289
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
290
+ const reactData = $xeTable as unknown as TableReactData
291
+ const internalData = $xeTable as unknown as TableInternalData
292
+
293
+ const { customStore } = reactData
294
+ const { collectColumn } = internalData
295
+ const customOpts = $xeTable.computeCustomOpts
296
+ const { checkMethod } = customOpts
297
+ customStore.isAll = collectColumn.every((column) => (checkMethod ? !checkMethod({ $table: $xeTable, column }) : false) || column.renderVisible)
298
+ customStore.isIndeterminate = !customStore.isAll && collectColumn.some((column) => (!checkMethod || checkMethod({ $table: $xeTable, column })) && (column.renderVisible || column.halfVisible))
299
+ },
300
+ emitCustomEvent (type: any, evnt: any) {
301
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
302
+
303
+ $xeTable.dispatchEvent('custom', { type }, evnt)
304
+ },
305
+ triggerCustomEvent (evnt: any) {
306
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
307
+ const reactData = $xeTable as unknown as TableReactData
308
+
309
+ const { customStore } = reactData
310
+ if (customStore.visible) {
311
+ $xeTable.closeCustom()
312
+ emitCustomEvent($xeTable, 'close', evnt)
313
+ } else {
314
+ customStore.btnEl = evnt.target
315
+ $xeTable.openCustom()
316
+ emitCustomEvent($xeTable, 'open', evnt)
317
+ }
318
+ },
319
+ customOpenEvent (evnt: any) {
320
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
321
+ const reactData = $xeTable as unknown as TableReactData
322
+
323
+ const { customStore } = reactData
324
+ if (customStore.visible) {
325
+ customStore.activeBtn = true
326
+ customStore.btnEl = evnt.target
327
+ $xeTable.openCustom()
328
+ emitCustomEvent($xeTable, 'open', evnt)
329
+ }
330
+ },
331
+ customCloseEvent (evnt: any) {
332
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
333
+ const reactData = $xeTable as unknown as TableReactData
334
+
335
+ const { customStore } = reactData
336
+ if (customStore.visible) {
337
+ customStore.activeBtn = false
338
+ $xeTable.closeCustom()
339
+ emitCustomEvent($xeTable, 'close', evnt)
340
+ }
341
+ },
342
+ handleUpdateCustomColumn () {
343
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
344
+ const reactData = $xeTable as unknown as TableReactData
345
+ const internalData = $xeTable as unknown as TableInternalData
346
+
347
+ const { customStore } = reactData
348
+ const { collectColumn } = internalData
349
+ if (customStore.visible) {
350
+ const sortMaps: Record<string, number> = {}
351
+ const fixedMaps: Record<string, VxeColumnPropTypes.Fixed> = {}
352
+ const visibleMaps: Record<string, boolean> = {}
353
+ XEUtils.eachTree(collectColumn, column => {
354
+ const colid = column.getKey()
355
+ column.renderFixed = column.fixed
356
+ column.renderVisible = column.visible
357
+ column.renderResizeWidth = column.renderWidth
358
+ sortMaps[colid] = column.renderSortNumber
359
+ fixedMaps[colid] = column.fixed
360
+ visibleMaps[colid] = column.visible
361
+ })
362
+ customStore.oldSortMaps = sortMaps
363
+ customStore.oldFixedMaps = fixedMaps
364
+ customStore.oldVisibleMaps = visibleMaps
365
+ reactData.customColumnList = collectColumn.slice(0)
366
+ }
367
+ }
368
+ } as any
369
+ }