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,856 +1,856 @@
1
- import { PropType, CreateElement, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI } from '../../ui'
5
- import { getSlotVNs } from '../../ui/src/vn'
6
- import { warnLog, errLog } from '../../ui/src/log'
7
-
8
- import type { ValueOf, VxeComponentSizeType, VxeComponentSlotType, VxeButtonDefines } from 'vxe-pc-ui'
9
- import type { VxeGridConstructor, GridPrivateMethods, ToolbarInternalData, VxeTableDefines, VxeToolbarEmits, VxeToolbarPropTypes, VxeTablePropTypes, ToolbarReactData, VxeTableConstructor, VxeTablePrivateMethods } from '../../../types'
10
-
11
- const { getConfig, getIcon, getI18n, renderer, commands, createEvent, globalMixins, renderEmptyElement } = VxeUI
12
-
13
- function createReactData (): ToolbarReactData {
14
- return {
15
- isRefresh: false,
16
- connectFlag: 0,
17
- columns: []
18
- }
19
- }
20
-
21
- function createInternalData (): ToolbarInternalData {
22
- return {
23
- connectTable: null
24
- }
25
- }
26
-
27
- export default /* define-vxe-component start */ defineVxeComponent({
28
- name: 'VxeToolbar',
29
- mixins: [
30
- globalMixins.sizeMixin
31
- ],
32
- props: {
33
- loading: Boolean,
34
- refresh: [Boolean, Object] as PropType<VxeToolbarPropTypes.Refresh>,
35
- refreshOptions: Object as PropType<VxeToolbarPropTypes.RefreshOptions>,
36
- import: [Boolean, Object] as PropType<VxeToolbarPropTypes.Import>,
37
- importOptions: Object as PropType<VxeToolbarPropTypes.ImportOptions>,
38
- export: [Boolean, Object] as PropType<VxeToolbarPropTypes.Export>,
39
- exportOptions: Object as PropType<VxeToolbarPropTypes.ExportOptions>,
40
- print: [Boolean, Object] as PropType<VxeToolbarPropTypes.Print>,
41
- printOptions: Object as PropType<VxeToolbarPropTypes.PrintOptions>,
42
- zoom: [Boolean, Object] as PropType< VxeToolbarPropTypes.Zoom>,
43
- zoomOptions: Object as PropType< VxeToolbarPropTypes.ZoomOptions>,
44
- custom: [Boolean, Object] as PropType<VxeToolbarPropTypes.Custom>,
45
- customOptions: Object as PropType<VxeToolbarPropTypes.CustomOptions>,
46
- buttons: {
47
- type: Array as PropType<VxeToolbarPropTypes.Buttons>,
48
- default: () => getConfig().toolbar.buttons
49
- },
50
- tools: {
51
- type: Array as PropType<VxeToolbarPropTypes.Tools>,
52
- default: () => getConfig().toolbar.tools
53
- },
54
- perfect: {
55
- type: Boolean as PropType<VxeToolbarPropTypes.Perfect>,
56
- default: () => getConfig().toolbar.perfect
57
- },
58
- size: {
59
- type: String as PropType<VxeToolbarPropTypes.Size>,
60
- default: () => getConfig().toolbar.size || getConfig().size
61
- },
62
- className: [String, Function] as PropType<VxeToolbarPropTypes.ClassName>
63
- },
64
- inject: {
65
- $xeGrid: {
66
- default: null
67
- },
68
- $xeGantt: {
69
- default: null
70
- }
71
- },
72
- data () {
73
- const xID = XEUtils.uniqueId()
74
- const reactData = createReactData()
75
- const internalData = createInternalData()
76
- return {
77
- xID,
78
- reactData,
79
- internalData
80
- }
81
- },
82
- computed: {
83
- ...({} as {
84
- computeSize(): VxeComponentSizeType
85
- $xeGrid(): (VxeGridConstructor & GridPrivateMethods) | null
86
- $xeGantt(): any
87
- }),
88
- computeRefreshOpts () {
89
- const $xeToolbar = this
90
- const props = $xeToolbar
91
-
92
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.refresh, true), props.refreshOptions, props.refresh) as VxeToolbarPropTypes.RefreshOptions
93
- },
94
- computeImportOpts () {
95
- const $xeToolbar = this
96
- const props = $xeToolbar
97
-
98
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.import, true), props.importOptions, props.import) as VxeToolbarPropTypes.ImportOptions
99
- },
100
- computeExportOpts () {
101
- const $xeToolbar = this
102
- const props = $xeToolbar
103
-
104
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.export, true), props.exportOptions, props.export) as VxeToolbarPropTypes.ExportOptions
105
- },
106
- computePrintOpts () {
107
- const $xeToolbar = this
108
- const props = $xeToolbar
109
-
110
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.print, true), props.printOptions, props.print) as VxeToolbarPropTypes.PrintOptions
111
- },
112
- computeZoomOpts () {
113
- const $xeToolbar = this
114
- const props = $xeToolbar
115
-
116
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.zoom, true), props.zoomOptions, props.zoom) as VxeToolbarPropTypes.ZoomOptions
117
- },
118
- computeCustomOpts () {
119
- const $xeToolbar = this
120
- const props = $xeToolbar
121
-
122
- return Object.assign({}, XEUtils.clone(getConfig().toolbar.custom, true), props.customOptions, props.custom) as VxeToolbarPropTypes.CustomOptions
123
- },
124
- computeTableCustomOpts (this: any) {
125
- const $xeToolbar = this
126
- const reactData = $xeToolbar.reactData
127
- const internalData = $xeToolbar.internalData
128
-
129
- const { connectTable } = internalData
130
- const $table = connectTable
131
- if (reactData.connectFlag || $table) {
132
- if ($table) {
133
- return $table.computeCustomOpts
134
- }
135
- }
136
- return { trigger: '' } as VxeTablePropTypes.CustomOpts
137
- },
138
- computeTrigger () {
139
- const $xeToolbar = this
140
-
141
- const tableCustomOpts = $xeToolbar.computeTableCustomOpts as VxeTablePropTypes.CustomOpts
142
- return tableCustomOpts.trigger
143
- }
144
- },
145
- methods: {
146
- //
147
- // Method
148
- //
149
- dispatchEvent (type: ValueOf<VxeToolbarEmits>, params: Record<string, any>, evnt: Event | null) {
150
- const $xeToolbar = this
151
- $xeToolbar.$emit(type, createEvent(evnt, { $toolbar: $xeToolbar }, params))
152
- },
153
- fintTable () {
154
- const { $children } = this.$parent
155
- const selfIndex = $children.indexOf(this)
156
- return XEUtils.find($children, (comp: any, index) => comp && comp.loadData && index > selfIndex && comp.$vnode.componentOptions.tag === 'vxe-table')
157
- },
158
- syncUpdate (params: {
159
- collectColumn: VxeTableDefines.ColumnInfo<any>[]
160
- $table: VxeTableConstructor
161
- }) {
162
- const $xeToolbar = this
163
- const reactData = $xeToolbar.reactData
164
- const internalData = $xeToolbar.internalData
165
-
166
- internalData.connectTable = params.$table as (VxeTableConstructor & VxeTablePrivateMethods)
167
- reactData.columns = params.collectColumn
168
- reactData.connectFlag++
169
- },
170
- checkTable () {
171
- const $xeToolbar = this
172
- const internalData = $xeToolbar.internalData
173
-
174
- const { connectTable } = internalData
175
- const $table = connectTable
176
- if ($table) {
177
- return true
178
- }
179
- errLog('vxe.error.barUnableLink')
180
- },
181
- handleClickSettingEvent ({ $event }: any) {
182
- const $xeToolbar = this
183
- const internalData = $xeToolbar.internalData
184
-
185
- const { connectTable } = internalData
186
- const $table: any = connectTable
187
- if ($table) {
188
- if ($table.triggerCustomEvent) {
189
- $table.triggerCustomEvent($event)
190
- }
191
- }
192
- },
193
- handleMouseenterSettingEvent ({ $event }: any) {
194
- const $xeToolbar = this
195
- const internalData = $xeToolbar.internalData
196
-
197
- const { connectTable } = internalData
198
- const $table: any = connectTable
199
- if ($table) {
200
- $table.customOpenEvent($event)
201
- }
202
- },
203
- handleMouseleaveSettingEvent ({ $event }: any) {
204
- const $xeToolbar = this
205
- const internalData = $xeToolbar.internalData
206
-
207
- const { connectTable } = internalData
208
- const $table: any = connectTable
209
- if ($table) {
210
- const { customStore } = $table.reactData
211
- customStore.activeBtn = false
212
- setTimeout(() => {
213
- if (!customStore.activeBtn && !customStore.activeWrapper) {
214
- $table.customCloseEvent($event)
215
- }
216
- }, 350)
217
- }
218
- },
219
- refreshEvent ({ $event }: any) {
220
- const $xeToolbar = this
221
- const reactData = $xeToolbar.reactData
222
- const $xeGrid = $xeToolbar.$xeGrid
223
- const $xeGantt = $xeToolbar.$xeGantt
224
- const $xeGGWrapper = $xeGrid || $xeGantt
225
-
226
- const { isRefresh } = reactData
227
- const refreshOpts = $xeToolbar.computeRefreshOpts
228
- if (!isRefresh) {
229
- const queryMethod = refreshOpts.queryMethod || refreshOpts.query
230
- if (queryMethod) {
231
- reactData.isRefresh = true
232
- try {
233
- Promise.resolve(queryMethod({})).catch((e) => e).then(() => {
234
- reactData.isRefresh = false
235
- })
236
- } catch (e) {
237
- reactData.isRefresh = false
238
- }
239
- } else if ($xeGGWrapper) {
240
- reactData.isRefresh = true
241
- $xeGGWrapper.triggerToolbarCommitEvent({ code: refreshOpts.code || 'reload' }, $event).catch(() => {}).then(() => {
242
- reactData.isRefresh = false
243
- })
244
- }
245
- }
246
- },
247
- zoomEvent ({ $event }: any) {
248
- const $xeToolbar = this
249
- const $xeGrid = $xeToolbar.$xeGrid
250
- const $xeGantt = $xeToolbar.$xeGantt
251
- const $xeGGWrapper = $xeGrid || $xeGantt
252
-
253
- if ($xeGGWrapper) {
254
- $xeGGWrapper.triggerZoomEvent($event)
255
- } else {
256
- warnLog('vxe.error.notProp', ['[toolbar] zoom'])
257
- }
258
- },
259
- importEvent () {
260
- const $xeToolbar = this
261
- const internalData = $xeToolbar.internalData
262
-
263
- if ($xeToolbar.checkTable()) {
264
- const { connectTable } = internalData
265
- const $table: any = connectTable
266
- if ($table) {
267
- $table.importData()
268
- }
269
- }
270
- },
271
- openImportEvent () {
272
- const $xeToolbar = this
273
- const internalData = $xeToolbar.internalData
274
-
275
- if ($xeToolbar.checkTable()) {
276
- const { connectTable } = internalData
277
- const $table: any = connectTable
278
- if ($table) {
279
- $table.openImport()
280
- }
281
- }
282
- },
283
- exportEvent () {
284
- const $xeToolbar = this
285
- const internalData = $xeToolbar.internalData
286
-
287
- if ($xeToolbar.checkTable()) {
288
- const { connectTable } = internalData as any
289
- const $table = connectTable
290
- if ($table) {
291
- $table.exportData()
292
- }
293
- }
294
- },
295
- openExportEvent () {
296
- const $xeToolbar = this
297
- const internalData = $xeToolbar.internalData
298
-
299
- if ($xeToolbar.checkTable()) {
300
- const { connectTable } = internalData as any
301
- const $table = connectTable
302
- if ($table) {
303
- $table.openExport()
304
- }
305
- }
306
- },
307
- printEvent () {
308
- const $xeToolbar = this
309
- const internalData = $xeToolbar.internalData
310
-
311
- if ($xeToolbar.checkTable()) {
312
- const { connectTable } = internalData as any
313
- const $table = connectTable
314
- if ($table) {
315
- $table.print()
316
- }
317
- }
318
- },
319
- openPrintEvent () {
320
- const $xeToolbar = this
321
- const internalData = $xeToolbar.internalData
322
-
323
- if ($xeToolbar.checkTable()) {
324
- const { connectTable } = internalData as any
325
- const $table = connectTable
326
- if ($table) {
327
- $table.openPrint()
328
- }
329
- }
330
- },
331
- handleDefaultCodeEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ButtonConfig | VxeToolbarPropTypes.ToolConfig, cb: () => void) {
332
- const $xeToolbar = this
333
-
334
- switch (item.code) {
335
- case 'print':
336
- $xeToolbar.printEvent()
337
- break
338
- case 'open_print':
339
- $xeToolbar.openPrintEvent()
340
- break
341
- case 'custom':
342
- $xeToolbar.handleClickSettingEvent(eventParams)
343
- break
344
- case 'export':
345
- $xeToolbar.exportEvent()
346
- break
347
- case 'open_export':
348
- $xeToolbar.openExportEvent()
349
- break
350
- case 'import':
351
- $xeToolbar.importEvent()
352
- break
353
- case 'open_import':
354
- $xeToolbar.openImportEvent()
355
- break
356
- case 'zoom':
357
- $xeToolbar.zoomEvent(eventParams)
358
- break
359
- case 'refresh':
360
- $xeToolbar.refreshEvent(eventParams)
361
- break
362
- default:
363
- cb()
364
- break
365
- }
366
- },
367
- btnEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ButtonConfig) {
368
- const $xeToolbar = this
369
- const internalData = $xeToolbar.internalData
370
- const $xeGrid = $xeToolbar.$xeGrid
371
- const $xeGantt = $xeToolbar.$xeGantt
372
- const $xeGGWrapper = $xeGrid || $xeGantt
373
-
374
- const { $event } = eventParams
375
- const { connectTable } = internalData
376
- const $table = connectTable
377
- const { code } = item
378
- if (code) {
379
- $xeToolbar.handleDefaultCodeEvent(eventParams, item, () => {
380
- if ($xeGGWrapper) {
381
- $xeGGWrapper.triggerToolbarBtnEvent(item, $event)
382
- } else {
383
- const gCommandOpts = commands.get(code)
384
- const params = { code, button: item, $table: $table as VxeTableConstructor, $grid: $xeGrid, $gantt: $xeGantt, $event }
385
- if (gCommandOpts) {
386
- const tCommandMethod = gCommandOpts.tableCommandMethod || gCommandOpts.commandMethod
387
- if (tCommandMethod) {
388
- tCommandMethod(params)
389
- } else {
390
- errLog('vxe.error.notCommands', [`[toolbar] ${code}`])
391
- }
392
- }
393
- $xeToolbar.dispatchEvent('button-click', params, $event)
394
- }
395
- })
396
- }
397
- },
398
- tolEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ToolConfig) {
399
- const $xeToolbar = this
400
- const internalData = $xeToolbar.internalData
401
- const $xeGrid = $xeToolbar.$xeGrid
402
- const $xeGantt = $xeToolbar.$xeGantt
403
- const $xeGGWrapper = $xeGrid || $xeGantt
404
-
405
- const { $event } = eventParams
406
- const { connectTable } = internalData
407
- const $table = connectTable
408
- const { code } = item
409
- if (code) {
410
- $xeToolbar.handleDefaultCodeEvent(eventParams, item, () => {
411
- if ($xeGGWrapper) {
412
- $xeGGWrapper.triggerToolbarTolEvent(item, $event)
413
- } else {
414
- const gCommandOpts = commands.get(code)
415
- const params = { code, button: null, tool: item, $table: $table as VxeTableConstructor, $grid: $xeGrid, $gantt: $xeGantt, $event }
416
- if (gCommandOpts) {
417
- const tCommandMethod = gCommandOpts.tableCommandMethod || gCommandOpts.commandMethod
418
- if (tCommandMethod) {
419
- tCommandMethod(params)
420
- } else {
421
- errLog('vxe.error.notCommands', [`[toolbar] ${code}`])
422
- }
423
- }
424
- $xeToolbar.dispatchEvent('tool-click', params, $event)
425
- }
426
- })
427
- }
428
- },
429
-
430
- //
431
- // Render
432
- //
433
- renderDropdowns (h: CreateElement, item: VxeToolbarPropTypes.ButtonConfig, isBtn: boolean) {
434
- // 使用已安装的组件,如果未安装则不渲染
435
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
436
-
437
- const $xeToolbar = this
438
-
439
- const { dropdowns } = item
440
- const downVNs: VNode[] = []
441
- if (dropdowns) {
442
- return dropdowns.map((child, index) => {
443
- if (child.visible === false) {
444
- return renderEmptyElement($xeToolbar)
445
- }
446
- return VxeUIButtonComponent
447
- ? h(VxeUIButtonComponent, {
448
- key: index,
449
- props: Object.assign({}, child, {
450
- content: child.content || child.name,
451
- options: undefined
452
- }),
453
- on: {
454
- click: (eventParams: VxeButtonDefines.ClickEventParams) => isBtn ? $xeToolbar.btnEvent(eventParams, child) : $xeToolbar.tolEvent(eventParams, child)
455
- }
456
- })
457
- : renderEmptyElement($xeToolbar)
458
- })
459
- }
460
- return downVNs
461
- },
462
- /**
463
- * 渲染按钮
464
- */
465
- renderLeftBtns (h: CreateElement): VxeComponentSlotType[] {
466
- // 使用已安装的组件,如果未安装则不渲染
467
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
468
-
469
- const $xeToolbar = this
470
- const props = $xeToolbar
471
- const slots = $xeToolbar.$scopedSlots
472
- const internalData = $xeToolbar.internalData
473
- const $xeGrid = $xeToolbar.$xeGrid
474
- const $xeGantt = $xeToolbar.$xeGantt
475
-
476
- const { buttons } = props
477
- const { connectTable } = internalData
478
- const $table = connectTable
479
- const buttonsSlot = slots.buttons
480
- const buttonPrefixSlot = slots.buttonPrefix || slots['button-prefix']
481
- const buttonSuffixSlot = slots.buttonSuffix || slots['button-suffix']
482
- const btnVNs: VxeComponentSlotType[] = []
483
- if (buttons) {
484
- buttons.forEach((item) => {
485
- const { dropdowns, buttonRender } = item
486
- if (item.visible !== false) {
487
- const compConf = buttonRender ? renderer.get(buttonRender.name) : null
488
- if (buttonRender && compConf && compConf.renderToolbarButton) {
489
- const toolbarButtonClassName = compConf.toolbarButtonClassName
490
- const params = { $grid: $xeGrid, $gantt: $xeGantt, $table: $table!, button: item }
491
- btnVNs.push(
492
- h('span', {
493
- class: ['vxe-button--item', toolbarButtonClassName ? (XEUtils.isFunction(toolbarButtonClassName) ? toolbarButtonClassName(params) : toolbarButtonClassName) : '']
494
- }, getSlotVNs(compConf.renderToolbarButton(h, buttonRender, params)))
495
- )
496
- } else {
497
- if (VxeUIButtonComponent) {
498
- btnVNs.push(
499
- h(VxeUIButtonComponent, {
500
- props: Object.assign({}, item, {
501
- content: item.content || item.name,
502
- options: undefined
503
- }),
504
- on: {
505
- click: (eventParams: VxeButtonDefines.ClickEventParams) => $xeToolbar.btnEvent(eventParams, item)
506
- },
507
- scopedSlots: dropdowns && dropdowns.length
508
- ? {
509
- dropdowns: () => $xeToolbar.renderDropdowns(h, item, true)
510
- }
511
- : {}
512
- })
513
- )
514
- }
515
- }
516
- }
517
- })
518
- }
519
- return [
520
- h('div', {
521
- class: 'vxe-button--prefix-wrapper'
522
- }, buttonPrefixSlot ? getSlotVNs(buttonPrefixSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : []),
523
- h('div', {
524
- class: 'vxe-button--item-wrapper'
525
- }, buttonsSlot ? getSlotVNs(buttonsSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : btnVNs),
526
- h('div', {
527
- class: 'vxe-button--suffix-wrapper'
528
- }, buttonSuffixSlot ? getSlotVNs(buttonSuffixSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : [])
529
- ]
530
- },
531
- /**
532
- * 渲染右侧工具
533
- */
534
- renderRightTools (h: CreateElement) {
535
- // 使用已安装的组件,如果未安装则不渲染
536
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
537
-
538
- const $xeToolbar = this
539
- const props = $xeToolbar
540
- const slots = $xeToolbar.$scopedSlots
541
- const internalData = $xeToolbar.internalData
542
- const $xeGrid = $xeToolbar.$xeGrid
543
- const $xeGantt = $xeToolbar.$xeGantt
544
-
545
- const { tools } = props
546
- const { connectTable } = internalData
547
- const $table = connectTable
548
- const toolsSlot = slots.tools
549
- const toolPrefixSlot = slots.toolPrefix || slots['tool-prefix']
550
- const toolSuffixSlot = slots.toolSuffix || slots['tool-suffix']
551
- const btnVNs: VxeComponentSlotType[] = []
552
- if (tools) {
553
- tools.forEach((item, tIndex) => {
554
- const { dropdowns, toolRender } = item
555
- if (item.visible !== false) {
556
- const rdName = toolRender ? toolRender.name : null
557
- const compConf = toolRender ? renderer.get(rdName) : null
558
- if (toolRender && compConf && compConf.renderToolbarTool) {
559
- const toolbarToolClassName = compConf.toolbarToolClassName
560
- const params = { $grid: $xeGrid, $gantt: $xeGantt, $table: $table!, tool: item }
561
- btnVNs.push(
562
- h('span', {
563
- key: rdName as string,
564
- class: ['vxe-tool--item', toolbarToolClassName ? (XEUtils.isFunction(toolbarToolClassName) ? toolbarToolClassName(params) : toolbarToolClassName) : '']
565
- }, getSlotVNs(compConf.renderToolbarTool(h, toolRender, params)))
566
- )
567
- } else {
568
- if (VxeUIButtonComponent) {
569
- btnVNs.push(
570
- h(VxeUIButtonComponent, {
571
- key: tIndex,
572
- props: Object.assign({}, item, {
573
- content: item.content || item.name,
574
- options: undefined
575
- }),
576
- on: {
577
- click: (eventParams: VxeButtonDefines.ClickEventParams) => $xeToolbar.tolEvent(eventParams, item)
578
- },
579
- scopedSlots: dropdowns && dropdowns.length
580
- ? {
581
- dropdowns: () => $xeToolbar.renderDropdowns(h, item, false)
582
- }
583
- : {}
584
- })
585
- )
586
- }
587
- }
588
- }
589
- })
590
- }
591
- return [
592
- h('div', {
593
- class: 'vxe-tool--prefix-wrapper'
594
- }, toolPrefixSlot ? getSlotVNs(toolPrefixSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : []),
595
- h('div', {
596
- class: 'vxe-tool--item-wrapper'
597
- }, toolsSlot ? getSlotVNs(toolsSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : btnVNs),
598
- h('div', {
599
- class: 'vxe-tool--suffix-wrapper'
600
- }, toolSuffixSlot ? getSlotVNs(toolSuffixSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : [])
601
- ]
602
- },
603
- renderToolImport (h: CreateElement) {
604
- // 使用已安装的组件,如果未安装则不渲染
605
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
606
-
607
- const $xeToolbar = this
608
-
609
- const importOpts = $xeToolbar.computeImportOpts
610
- return VxeUIButtonComponent
611
- ? h(VxeUIButtonComponent, {
612
- key: 'import',
613
- props: {
614
- circle: true,
615
- icon: importOpts.icon || getIcon().TOOLBAR_TOOLS_IMPORT,
616
- title: getI18n('vxe.toolbar.import')
617
- },
618
- on: {
619
- click: $xeToolbar.openImportEvent
620
- }
621
- })
622
- : renderEmptyElement($xeToolbar)
623
- },
624
- renderToolExport (h: CreateElement) {
625
- // 使用已安装的组件,如果未安装则不渲染
626
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
627
-
628
- const $xeToolbar = this
629
-
630
- const exportOpts = $xeToolbar.computeExportOpts
631
- return VxeUIButtonComponent
632
- ? h(VxeUIButtonComponent, {
633
- key: 'export',
634
- props: {
635
- circle: true,
636
- icon: exportOpts.icon || getIcon().TOOLBAR_TOOLS_EXPORT,
637
- title: getI18n('vxe.toolbar.export')
638
- },
639
- on: {
640
- click: $xeToolbar.openExportEvent
641
- }
642
- })
643
- : renderEmptyElement($xeToolbar)
644
- },
645
- renderToolPrint (h: CreateElement) {
646
- // 使用已安装的组件,如果未安装则不渲染
647
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
648
-
649
- const $xeToolbar = this
650
-
651
- const printOpts = $xeToolbar.computePrintOpts
652
- return VxeUIButtonComponent
653
- ? h(VxeUIButtonComponent, {
654
- key: 'print',
655
- props: {
656
- circle: true,
657
- icon: printOpts.icon || getIcon().TOOLBAR_TOOLS_PRINT,
658
- title: getI18n('vxe.toolbar.print')
659
- },
660
- on: {
661
- click: $xeToolbar.openPrintEvent
662
- }
663
- })
664
- : renderEmptyElement($xeToolbar)
665
- },
666
- renderToolRefresh (h: CreateElement) {
667
- // 使用已安装的组件,如果未安装则不渲染
668
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
669
-
670
- const $xeToolbar = this
671
- const reactData = $xeToolbar.reactData
672
-
673
- const refreshOpts = $xeToolbar.computeRefreshOpts
674
- return VxeUIButtonComponent
675
- ? h(VxeUIButtonComponent, {
676
- key: 'refresh',
677
- props: {
678
- circle: true,
679
- icon: reactData.isRefresh ? (refreshOpts.iconLoading || getIcon().TOOLBAR_TOOLS_REFRESH_LOADING) : (refreshOpts.icon || getIcon().TOOLBAR_TOOLS_REFRESH),
680
- title: getI18n('vxe.toolbar.refresh')
681
- },
682
- on: {
683
- click: $xeToolbar.refreshEvent
684
- }
685
- })
686
- : renderEmptyElement($xeToolbar)
687
- },
688
- renderToolZoom (h: CreateElement) {
689
- // 使用已安装的组件,如果未安装则不渲染
690
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
691
-
692
- const $xeToolbar = this
693
- const $xeGrid = $xeToolbar.$xeGrid
694
- const $xeGantt = $xeToolbar.$xeGantt
695
- const $xeGGWrapper = $xeGrid || $xeGantt
696
-
697
- const zoomOpts = $xeToolbar.computeZoomOpts
698
- return $xeGGWrapper && VxeUIButtonComponent
699
- ? h(VxeUIButtonComponent, {
700
- key: 'zoom',
701
- props: {
702
- circle: true,
703
- icon: $xeGGWrapper.isMaximized() ? (zoomOpts.iconOut || getIcon().TOOLBAR_TOOLS_MINIMIZE) : (zoomOpts.iconIn || getIcon().TOOLBAR_TOOLS_FULLSCREEN),
704
- title: getI18n(`vxe.toolbar.zoom${$xeGGWrapper.isMaximized() ? 'Out' : 'In'}`)
705
- },
706
- on: {
707
- click: $xeToolbar.zoomEvent
708
- }
709
- })
710
- : renderEmptyElement($xeToolbar)
711
- },
712
- renderToolCustom (h: CreateElement) {
713
- // 使用已安装的组件,如果未安装则不渲染
714
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
715
-
716
- const $xeToolbar = this
717
-
718
- const customOpts = $xeToolbar.computeCustomOpts
719
- const btnTrigger = $xeToolbar.computeTrigger
720
- const customBtnOns: {
721
- click?: typeof $xeToolbar.handleClickSettingEvent;
722
- mouseenter?: typeof $xeToolbar.handleMouseenterSettingEvent;
723
- mouseleave?: typeof $xeToolbar.handleMouseleaveSettingEvent;
724
- } = {}
725
- if (btnTrigger === 'manual') {
726
- // 手动触发
727
- } else if (btnTrigger === 'hover') {
728
- // hover 触发
729
- customBtnOns.mouseenter = $xeToolbar.handleMouseenterSettingEvent
730
- customBtnOns.mouseleave = $xeToolbar.handleMouseleaveSettingEvent
731
- } else {
732
- // 点击触发
733
- customBtnOns.click = $xeToolbar.handleClickSettingEvent
734
- }
735
- return VxeUIButtonComponent
736
- ? h(VxeUIButtonComponent, {
737
- key: 'custom',
738
- props: {
739
- circle: true,
740
- icon: customOpts.icon || getIcon().TOOLBAR_TOOLS_CUSTOM,
741
- title: getI18n('vxe.toolbar.custom'),
742
- className: 'vxe-toolbar-custom-target'
743
- },
744
- on: customBtnOns
745
- })
746
- : renderEmptyElement($xeToolbar)
747
- },
748
- renderVN (h: CreateElement): VNode {
749
- const $xeToolbar = this
750
- const props = $xeToolbar
751
- const $xeGrid = $xeToolbar.$xeGrid
752
- const $xeGantt = $xeToolbar.$xeGantt
753
- const $xeGGWrapper = $xeGrid || $xeGantt
754
-
755
- const { perfect, loading, refresh, zoom, custom, className } = props
756
- const vSize = $xeToolbar.computeSize
757
- return h('div', {
758
- ref: 'refElem',
759
- class: ['vxe-toolbar', className ? (XEUtils.isFunction(className) ? className({ $toolbar: $xeToolbar }) : className) : '', {
760
- [`size--${vSize}`]: vSize,
761
- 'is--perfect': perfect,
762
- 'is--loading': loading
763
- }]
764
- }, [
765
- h('div', {
766
- class: 'vxe-buttons--wrapper'
767
- }, $xeToolbar.renderLeftBtns(h)),
768
- h('div', {
769
- class: 'vxe-tools--wrapper'
770
- }, $xeToolbar.renderRightTools(h)),
771
- h('div', {
772
- class: 'vxe-tools--operate'
773
- }, [
774
- props.import ? $xeToolbar.renderToolImport(h) : renderEmptyElement($xeToolbar),
775
- props.export ? $xeToolbar.renderToolExport(h) : renderEmptyElement($xeToolbar),
776
- props.print ? $xeToolbar.renderToolPrint(h) : renderEmptyElement($xeToolbar),
777
- refresh ? $xeToolbar.renderToolRefresh(h) : renderEmptyElement($xeToolbar),
778
- zoom && $xeGGWrapper ? $xeToolbar.renderToolZoom(h) : renderEmptyElement($xeToolbar),
779
- custom ? $xeToolbar.renderToolCustom(h) : renderEmptyElement($xeToolbar)
780
- ])
781
- ])
782
- }
783
- },
784
- created () {
785
- const $xeToolbar = this
786
- const props = $xeToolbar
787
- const $xeGrid = $xeToolbar.$xeGrid
788
- const $xeGantt = $xeToolbar.$xeGantt
789
- const $xeGGWrapper = $xeGrid || $xeGantt
790
-
791
- $xeToolbar.$nextTick(() => {
792
- const refreshOpts = $xeToolbar.computeRefreshOpts
793
- const $xeTable = $xeToolbar.fintTable() as any
794
- const queryMethod = refreshOpts.queryMethod || refreshOpts.query
795
- if (props.refresh && !$xeGGWrapper && !queryMethod) {
796
- warnLog('vxe.error.notFunc', ['[toolbar] queryMethod'])
797
- }
798
-
799
- if (XEUtils.isPlainObject(props.custom)) {
800
- warnLog('vxe.error.delProp', ['[toolbar] custom={...}', 'custom=boolean & custom-options={...}'])
801
- }
802
- if (XEUtils.isPlainObject(props.print)) {
803
- warnLog('vxe.error.delProp', ['[toolbar] print={...}', 'print=boolean & print-options={...}'])
804
- }
805
- if (XEUtils.isPlainObject(props.export)) {
806
- warnLog('vxe.error.delProp', ['[toolbar] export={...}', 'export=boolean & export-options={...}'])
807
- }
808
- if (XEUtils.isPlainObject(props.import)) {
809
- warnLog('vxe.error.delProp', ['[toolbar] import={...}', 'import=boolean & import-options={...}'])
810
- }
811
- if (XEUtils.isPlainObject(props.refresh)) {
812
- warnLog('vxe.error.delProp', ['[toolbar] refresh={...}', 'refresh=boolean & refresh-options={...}'])
813
- }
814
- if (XEUtils.isPlainObject(props.refresh)) {
815
- warnLog('vxe.error.delProp', ['[toolbar] zoom={...}', 'zoom=boolean & zoom-options={...}'])
816
- }
817
-
818
- if ($xeTable) {
819
- $xeTable.connect(this)
820
- }
821
- const customOpts = $xeToolbar.computeCustomOpts
822
- if (customOpts.isFooter) {
823
- warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.isFooter', 'table.custom-config.showFooter'])
824
- }
825
- if (customOpts.showFooter) {
826
- warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.showFooter', 'table.custom-config.showFooter'])
827
- }
828
- if (customOpts.immediate) {
829
- warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.immediate', 'table.custom-config.immediate'])
830
- }
831
- if (customOpts.trigger) {
832
- warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.trigger', 'table.custom-config.trigger'])
833
- }
834
- })
835
-
836
- // 使用已安装的组件,如果未安装则不渲染
837
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
838
-
839
- if (props.refresh || props.import || props.export || props.print || props.zoom) {
840
- if (!VxeUIButtonComponent) {
841
- errLog('vxe.error.reqComp', ['vxe-button'])
842
- }
843
- }
844
- },
845
- destroyed () {
846
- const $xeToolbar = this
847
- const reactData = $xeToolbar.reactData
848
- const internalData = $xeToolbar.internalData
849
-
850
- XEUtils.assign(reactData, createReactData())
851
- XEUtils.assign(internalData, createInternalData())
852
- },
853
- render (this: any, h) {
854
- return this.renderVN(h)
855
- }
856
- }) /* define-vxe-component end */
1
+ import { PropType, CreateElement, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI } from '../../ui'
5
+ import { getSlotVNs } from '../../ui/src/vn'
6
+ import { warnLog, errLog } from '../../ui/src/log'
7
+
8
+ import type { ValueOf, VxeComponentSizeType, VxeComponentSlotType, VxeButtonDefines } from 'vxe-pc-ui'
9
+ import type { VxeGridConstructor, GridPrivateMethods, ToolbarInternalData, VxeTableDefines, VxeToolbarEmits, VxeToolbarPropTypes, VxeTablePropTypes, ToolbarReactData, VxeTableConstructor, VxeTablePrivateMethods } from '../../../types'
10
+
11
+ const { getConfig, getIcon, getI18n, renderer, commands, createEvent, globalMixins, renderEmptyElement } = VxeUI
12
+
13
+ function createReactData (): ToolbarReactData {
14
+ return {
15
+ isRefresh: false,
16
+ connectFlag: 0,
17
+ columns: []
18
+ }
19
+ }
20
+
21
+ function createInternalData (): ToolbarInternalData {
22
+ return {
23
+ connectTable: null
24
+ }
25
+ }
26
+
27
+ export default /* define-vxe-component start */ defineVxeComponent({
28
+ name: 'VxeToolbar',
29
+ mixins: [
30
+ globalMixins.sizeMixin
31
+ ],
32
+ props: {
33
+ loading: Boolean,
34
+ refresh: [Boolean, Object] as PropType<VxeToolbarPropTypes.Refresh>,
35
+ refreshOptions: Object as PropType<VxeToolbarPropTypes.RefreshOptions>,
36
+ import: [Boolean, Object] as PropType<VxeToolbarPropTypes.Import>,
37
+ importOptions: Object as PropType<VxeToolbarPropTypes.ImportOptions>,
38
+ export: [Boolean, Object] as PropType<VxeToolbarPropTypes.Export>,
39
+ exportOptions: Object as PropType<VxeToolbarPropTypes.ExportOptions>,
40
+ print: [Boolean, Object] as PropType<VxeToolbarPropTypes.Print>,
41
+ printOptions: Object as PropType<VxeToolbarPropTypes.PrintOptions>,
42
+ zoom: [Boolean, Object] as PropType< VxeToolbarPropTypes.Zoom>,
43
+ zoomOptions: Object as PropType< VxeToolbarPropTypes.ZoomOptions>,
44
+ custom: [Boolean, Object] as PropType<VxeToolbarPropTypes.Custom>,
45
+ customOptions: Object as PropType<VxeToolbarPropTypes.CustomOptions>,
46
+ buttons: {
47
+ type: Array as PropType<VxeToolbarPropTypes.Buttons>,
48
+ default: () => getConfig().toolbar.buttons
49
+ },
50
+ tools: {
51
+ type: Array as PropType<VxeToolbarPropTypes.Tools>,
52
+ default: () => getConfig().toolbar.tools
53
+ },
54
+ perfect: {
55
+ type: Boolean as PropType<VxeToolbarPropTypes.Perfect>,
56
+ default: () => getConfig().toolbar.perfect
57
+ },
58
+ size: {
59
+ type: String as PropType<VxeToolbarPropTypes.Size>,
60
+ default: () => getConfig().toolbar.size || getConfig().size
61
+ },
62
+ className: [String, Function] as PropType<VxeToolbarPropTypes.ClassName>
63
+ },
64
+ inject: {
65
+ $xeGrid: {
66
+ default: null
67
+ },
68
+ $xeGantt: {
69
+ default: null
70
+ }
71
+ },
72
+ data () {
73
+ const xID = XEUtils.uniqueId()
74
+ const reactData = createReactData()
75
+ const internalData = createInternalData()
76
+ return {
77
+ xID,
78
+ reactData,
79
+ internalData
80
+ }
81
+ },
82
+ computed: {
83
+ ...({} as {
84
+ computeSize(): VxeComponentSizeType
85
+ $xeGrid(): (VxeGridConstructor & GridPrivateMethods) | null
86
+ $xeGantt(): any
87
+ }),
88
+ computeRefreshOpts () {
89
+ const $xeToolbar = this
90
+ const props = $xeToolbar
91
+
92
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.refresh, true), props.refreshOptions, props.refresh) as VxeToolbarPropTypes.RefreshOptions
93
+ },
94
+ computeImportOpts () {
95
+ const $xeToolbar = this
96
+ const props = $xeToolbar
97
+
98
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.import, true), props.importOptions, props.import) as VxeToolbarPropTypes.ImportOptions
99
+ },
100
+ computeExportOpts () {
101
+ const $xeToolbar = this
102
+ const props = $xeToolbar
103
+
104
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.export, true), props.exportOptions, props.export) as VxeToolbarPropTypes.ExportOptions
105
+ },
106
+ computePrintOpts () {
107
+ const $xeToolbar = this
108
+ const props = $xeToolbar
109
+
110
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.print, true), props.printOptions, props.print) as VxeToolbarPropTypes.PrintOptions
111
+ },
112
+ computeZoomOpts () {
113
+ const $xeToolbar = this
114
+ const props = $xeToolbar
115
+
116
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.zoom, true), props.zoomOptions, props.zoom) as VxeToolbarPropTypes.ZoomOptions
117
+ },
118
+ computeCustomOpts () {
119
+ const $xeToolbar = this
120
+ const props = $xeToolbar
121
+
122
+ return Object.assign({}, XEUtils.clone(getConfig().toolbar.custom, true), props.customOptions, props.custom) as VxeToolbarPropTypes.CustomOptions
123
+ },
124
+ computeTableCustomOpts (this: any) {
125
+ const $xeToolbar = this
126
+ const reactData = $xeToolbar.reactData
127
+ const internalData = $xeToolbar.internalData
128
+
129
+ const { connectTable } = internalData
130
+ const $table = connectTable
131
+ if (reactData.connectFlag || $table) {
132
+ if ($table) {
133
+ return $table.computeCustomOpts
134
+ }
135
+ }
136
+ return { trigger: '' } as VxeTablePropTypes.CustomOpts
137
+ },
138
+ computeTrigger () {
139
+ const $xeToolbar = this
140
+
141
+ const tableCustomOpts = $xeToolbar.computeTableCustomOpts as VxeTablePropTypes.CustomOpts
142
+ return tableCustomOpts.trigger
143
+ }
144
+ },
145
+ methods: {
146
+ //
147
+ // Method
148
+ //
149
+ dispatchEvent (type: ValueOf<VxeToolbarEmits>, params: Record<string, any>, evnt: Event | null) {
150
+ const $xeToolbar = this
151
+ $xeToolbar.$emit(type, createEvent(evnt, { $toolbar: $xeToolbar }, params))
152
+ },
153
+ fintTable () {
154
+ const { $children } = this.$parent
155
+ const selfIndex = $children.indexOf(this)
156
+ return XEUtils.find($children, (comp: any, index) => comp && comp.loadData && index > selfIndex && comp.$vnode.componentOptions.tag === 'vxe-table')
157
+ },
158
+ syncUpdate (params: {
159
+ collectColumn: VxeTableDefines.ColumnInfo<any>[]
160
+ $table: VxeTableConstructor
161
+ }) {
162
+ const $xeToolbar = this
163
+ const reactData = $xeToolbar.reactData
164
+ const internalData = $xeToolbar.internalData
165
+
166
+ internalData.connectTable = params.$table as (VxeTableConstructor & VxeTablePrivateMethods)
167
+ reactData.columns = params.collectColumn
168
+ reactData.connectFlag++
169
+ },
170
+ checkTable () {
171
+ const $xeToolbar = this
172
+ const internalData = $xeToolbar.internalData
173
+
174
+ const { connectTable } = internalData
175
+ const $table = connectTable
176
+ if ($table) {
177
+ return true
178
+ }
179
+ errLog('vxe.error.barUnableLink')
180
+ },
181
+ handleClickSettingEvent ({ $event }: any) {
182
+ const $xeToolbar = this
183
+ const internalData = $xeToolbar.internalData
184
+
185
+ const { connectTable } = internalData
186
+ const $table: any = connectTable
187
+ if ($table) {
188
+ if ($table.triggerCustomEvent) {
189
+ $table.triggerCustomEvent($event)
190
+ }
191
+ }
192
+ },
193
+ handleMouseenterSettingEvent ({ $event }: any) {
194
+ const $xeToolbar = this
195
+ const internalData = $xeToolbar.internalData
196
+
197
+ const { connectTable } = internalData
198
+ const $table: any = connectTable
199
+ if ($table) {
200
+ $table.customOpenEvent($event)
201
+ }
202
+ },
203
+ handleMouseleaveSettingEvent ({ $event }: any) {
204
+ const $xeToolbar = this
205
+ const internalData = $xeToolbar.internalData
206
+
207
+ const { connectTable } = internalData
208
+ const $table: any = connectTable
209
+ if ($table) {
210
+ const { customStore } = $table.reactData
211
+ customStore.activeBtn = false
212
+ setTimeout(() => {
213
+ if (!customStore.activeBtn && !customStore.activeWrapper) {
214
+ $table.customCloseEvent($event)
215
+ }
216
+ }, 350)
217
+ }
218
+ },
219
+ refreshEvent ({ $event }: any) {
220
+ const $xeToolbar = this
221
+ const reactData = $xeToolbar.reactData
222
+ const $xeGrid = $xeToolbar.$xeGrid
223
+ const $xeGantt = $xeToolbar.$xeGantt
224
+ const $xeGGWrapper = $xeGrid || $xeGantt
225
+
226
+ const { isRefresh } = reactData
227
+ const refreshOpts = $xeToolbar.computeRefreshOpts
228
+ if (!isRefresh) {
229
+ const queryMethod = refreshOpts.queryMethod || refreshOpts.query
230
+ if (queryMethod) {
231
+ reactData.isRefresh = true
232
+ try {
233
+ Promise.resolve(queryMethod({})).catch((e) => e).then(() => {
234
+ reactData.isRefresh = false
235
+ })
236
+ } catch (e) {
237
+ reactData.isRefresh = false
238
+ }
239
+ } else if ($xeGGWrapper) {
240
+ reactData.isRefresh = true
241
+ $xeGGWrapper.triggerToolbarCommitEvent({ code: refreshOpts.code || 'reload' }, $event).catch(() => {}).then(() => {
242
+ reactData.isRefresh = false
243
+ })
244
+ }
245
+ }
246
+ },
247
+ zoomEvent ({ $event }: any) {
248
+ const $xeToolbar = this
249
+ const $xeGrid = $xeToolbar.$xeGrid
250
+ const $xeGantt = $xeToolbar.$xeGantt
251
+ const $xeGGWrapper = $xeGrid || $xeGantt
252
+
253
+ if ($xeGGWrapper) {
254
+ $xeGGWrapper.triggerZoomEvent($event)
255
+ } else {
256
+ warnLog('vxe.error.notProp', ['[toolbar] zoom'])
257
+ }
258
+ },
259
+ importEvent () {
260
+ const $xeToolbar = this
261
+ const internalData = $xeToolbar.internalData
262
+
263
+ if ($xeToolbar.checkTable()) {
264
+ const { connectTable } = internalData
265
+ const $table: any = connectTable
266
+ if ($table) {
267
+ $table.importData()
268
+ }
269
+ }
270
+ },
271
+ openImportEvent () {
272
+ const $xeToolbar = this
273
+ const internalData = $xeToolbar.internalData
274
+
275
+ if ($xeToolbar.checkTable()) {
276
+ const { connectTable } = internalData
277
+ const $table: any = connectTable
278
+ if ($table) {
279
+ $table.openImport()
280
+ }
281
+ }
282
+ },
283
+ exportEvent () {
284
+ const $xeToolbar = this
285
+ const internalData = $xeToolbar.internalData
286
+
287
+ if ($xeToolbar.checkTable()) {
288
+ const { connectTable } = internalData as any
289
+ const $table = connectTable
290
+ if ($table) {
291
+ $table.exportData()
292
+ }
293
+ }
294
+ },
295
+ openExportEvent () {
296
+ const $xeToolbar = this
297
+ const internalData = $xeToolbar.internalData
298
+
299
+ if ($xeToolbar.checkTable()) {
300
+ const { connectTable } = internalData as any
301
+ const $table = connectTable
302
+ if ($table) {
303
+ $table.openExport()
304
+ }
305
+ }
306
+ },
307
+ printEvent () {
308
+ const $xeToolbar = this
309
+ const internalData = $xeToolbar.internalData
310
+
311
+ if ($xeToolbar.checkTable()) {
312
+ const { connectTable } = internalData as any
313
+ const $table = connectTable
314
+ if ($table) {
315
+ $table.print()
316
+ }
317
+ }
318
+ },
319
+ openPrintEvent () {
320
+ const $xeToolbar = this
321
+ const internalData = $xeToolbar.internalData
322
+
323
+ if ($xeToolbar.checkTable()) {
324
+ const { connectTable } = internalData as any
325
+ const $table = connectTable
326
+ if ($table) {
327
+ $table.openPrint()
328
+ }
329
+ }
330
+ },
331
+ handleDefaultCodeEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ButtonConfig | VxeToolbarPropTypes.ToolConfig, cb: () => void) {
332
+ const $xeToolbar = this
333
+
334
+ switch (item.code) {
335
+ case 'print':
336
+ $xeToolbar.printEvent()
337
+ break
338
+ case 'open_print':
339
+ $xeToolbar.openPrintEvent()
340
+ break
341
+ case 'custom':
342
+ $xeToolbar.handleClickSettingEvent(eventParams)
343
+ break
344
+ case 'export':
345
+ $xeToolbar.exportEvent()
346
+ break
347
+ case 'open_export':
348
+ $xeToolbar.openExportEvent()
349
+ break
350
+ case 'import':
351
+ $xeToolbar.importEvent()
352
+ break
353
+ case 'open_import':
354
+ $xeToolbar.openImportEvent()
355
+ break
356
+ case 'zoom':
357
+ $xeToolbar.zoomEvent(eventParams)
358
+ break
359
+ case 'refresh':
360
+ $xeToolbar.refreshEvent(eventParams)
361
+ break
362
+ default:
363
+ cb()
364
+ break
365
+ }
366
+ },
367
+ btnEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ButtonConfig) {
368
+ const $xeToolbar = this
369
+ const internalData = $xeToolbar.internalData
370
+ const $xeGrid = $xeToolbar.$xeGrid
371
+ const $xeGantt = $xeToolbar.$xeGantt
372
+ const $xeGGWrapper = $xeGrid || $xeGantt
373
+
374
+ const { $event } = eventParams
375
+ const { connectTable } = internalData
376
+ const $table = connectTable
377
+ const { code } = item
378
+ if (code) {
379
+ $xeToolbar.handleDefaultCodeEvent(eventParams, item, () => {
380
+ if ($xeGGWrapper) {
381
+ $xeGGWrapper.triggerToolbarBtnEvent(item, $event)
382
+ } else {
383
+ const gCommandOpts = commands.get(code)
384
+ const params = { code, button: item, $table: $table as VxeTableConstructor, $grid: $xeGrid, $gantt: $xeGantt, $event }
385
+ if (gCommandOpts) {
386
+ const tCommandMethod = gCommandOpts.tableCommandMethod || gCommandOpts.commandMethod
387
+ if (tCommandMethod) {
388
+ tCommandMethod(params)
389
+ } else {
390
+ errLog('vxe.error.notCommands', [`[toolbar] ${code}`])
391
+ }
392
+ }
393
+ $xeToolbar.dispatchEvent('button-click', params, $event)
394
+ }
395
+ })
396
+ }
397
+ },
398
+ tolEvent (eventParams: VxeButtonDefines.ClickEventParams, item: VxeToolbarPropTypes.ToolConfig) {
399
+ const $xeToolbar = this
400
+ const internalData = $xeToolbar.internalData
401
+ const $xeGrid = $xeToolbar.$xeGrid
402
+ const $xeGantt = $xeToolbar.$xeGantt
403
+ const $xeGGWrapper = $xeGrid || $xeGantt
404
+
405
+ const { $event } = eventParams
406
+ const { connectTable } = internalData
407
+ const $table = connectTable
408
+ const { code } = item
409
+ if (code) {
410
+ $xeToolbar.handleDefaultCodeEvent(eventParams, item, () => {
411
+ if ($xeGGWrapper) {
412
+ $xeGGWrapper.triggerToolbarTolEvent(item, $event)
413
+ } else {
414
+ const gCommandOpts = commands.get(code)
415
+ const params = { code, button: null, tool: item, $table: $table as VxeTableConstructor, $grid: $xeGrid, $gantt: $xeGantt, $event }
416
+ if (gCommandOpts) {
417
+ const tCommandMethod = gCommandOpts.tableCommandMethod || gCommandOpts.commandMethod
418
+ if (tCommandMethod) {
419
+ tCommandMethod(params)
420
+ } else {
421
+ errLog('vxe.error.notCommands', [`[toolbar] ${code}`])
422
+ }
423
+ }
424
+ $xeToolbar.dispatchEvent('tool-click', params, $event)
425
+ }
426
+ })
427
+ }
428
+ },
429
+
430
+ //
431
+ // Render
432
+ //
433
+ renderDropdowns (h: CreateElement, item: VxeToolbarPropTypes.ButtonConfig, isBtn: boolean) {
434
+ // 使用已安装的组件,如果未安装则不渲染
435
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
436
+
437
+ const $xeToolbar = this
438
+
439
+ const { dropdowns } = item
440
+ const downVNs: VNode[] = []
441
+ if (dropdowns) {
442
+ return dropdowns.map((child, index) => {
443
+ if (child.visible === false) {
444
+ return renderEmptyElement($xeToolbar)
445
+ }
446
+ return VxeUIButtonComponent
447
+ ? h(VxeUIButtonComponent, {
448
+ key: index,
449
+ props: Object.assign({}, child, {
450
+ content: child.content || child.name,
451
+ options: undefined
452
+ }),
453
+ on: {
454
+ click: (eventParams: VxeButtonDefines.ClickEventParams) => isBtn ? $xeToolbar.btnEvent(eventParams, child) : $xeToolbar.tolEvent(eventParams, child)
455
+ }
456
+ })
457
+ : renderEmptyElement($xeToolbar)
458
+ })
459
+ }
460
+ return downVNs
461
+ },
462
+ /**
463
+ * 渲染按钮
464
+ */
465
+ renderLeftBtns (h: CreateElement): VxeComponentSlotType[] {
466
+ // 使用已安装的组件,如果未安装则不渲染
467
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
468
+
469
+ const $xeToolbar = this
470
+ const props = $xeToolbar
471
+ const slots = $xeToolbar.$scopedSlots
472
+ const internalData = $xeToolbar.internalData
473
+ const $xeGrid = $xeToolbar.$xeGrid
474
+ const $xeGantt = $xeToolbar.$xeGantt
475
+
476
+ const { buttons } = props
477
+ const { connectTable } = internalData
478
+ const $table = connectTable
479
+ const buttonsSlot = slots.buttons
480
+ const buttonPrefixSlot = slots.buttonPrefix || slots['button-prefix']
481
+ const buttonSuffixSlot = slots.buttonSuffix || slots['button-suffix']
482
+ const btnVNs: VxeComponentSlotType[] = []
483
+ if (buttons) {
484
+ buttons.forEach((item) => {
485
+ const { dropdowns, buttonRender } = item
486
+ if (item.visible !== false) {
487
+ const compConf = buttonRender ? renderer.get(buttonRender.name) : null
488
+ if (buttonRender && compConf && compConf.renderToolbarButton) {
489
+ const toolbarButtonClassName = compConf.toolbarButtonClassName
490
+ const params = { $grid: $xeGrid, $gantt: $xeGantt, $table: $table!, button: item }
491
+ btnVNs.push(
492
+ h('span', {
493
+ class: ['vxe-button--item', toolbarButtonClassName ? (XEUtils.isFunction(toolbarButtonClassName) ? toolbarButtonClassName(params) : toolbarButtonClassName) : '']
494
+ }, getSlotVNs(compConf.renderToolbarButton(h, buttonRender, params)))
495
+ )
496
+ } else {
497
+ if (VxeUIButtonComponent) {
498
+ btnVNs.push(
499
+ h(VxeUIButtonComponent, {
500
+ props: Object.assign({}, item, {
501
+ content: item.content || item.name,
502
+ options: undefined
503
+ }),
504
+ on: {
505
+ click: (eventParams: VxeButtonDefines.ClickEventParams) => $xeToolbar.btnEvent(eventParams, item)
506
+ },
507
+ scopedSlots: dropdowns && dropdowns.length
508
+ ? {
509
+ dropdowns: () => $xeToolbar.renderDropdowns(h, item, true)
510
+ }
511
+ : {}
512
+ })
513
+ )
514
+ }
515
+ }
516
+ }
517
+ })
518
+ }
519
+ return [
520
+ h('div', {
521
+ class: 'vxe-button--prefix-wrapper'
522
+ }, buttonPrefixSlot ? getSlotVNs(buttonPrefixSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : []),
523
+ h('div', {
524
+ class: 'vxe-button--item-wrapper'
525
+ }, buttonsSlot ? getSlotVNs(buttonsSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : btnVNs),
526
+ h('div', {
527
+ class: 'vxe-button--suffix-wrapper'
528
+ }, buttonSuffixSlot ? getSlotVNs(buttonSuffixSlot.call($xeToolbar, { buttons: buttons || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : [])
529
+ ]
530
+ },
531
+ /**
532
+ * 渲染右侧工具
533
+ */
534
+ renderRightTools (h: CreateElement) {
535
+ // 使用已安装的组件,如果未安装则不渲染
536
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
537
+
538
+ const $xeToolbar = this
539
+ const props = $xeToolbar
540
+ const slots = $xeToolbar.$scopedSlots
541
+ const internalData = $xeToolbar.internalData
542
+ const $xeGrid = $xeToolbar.$xeGrid
543
+ const $xeGantt = $xeToolbar.$xeGantt
544
+
545
+ const { tools } = props
546
+ const { connectTable } = internalData
547
+ const $table = connectTable
548
+ const toolsSlot = slots.tools
549
+ const toolPrefixSlot = slots.toolPrefix || slots['tool-prefix']
550
+ const toolSuffixSlot = slots.toolSuffix || slots['tool-suffix']
551
+ const btnVNs: VxeComponentSlotType[] = []
552
+ if (tools) {
553
+ tools.forEach((item, tIndex) => {
554
+ const { dropdowns, toolRender } = item
555
+ if (item.visible !== false) {
556
+ const rdName = toolRender ? toolRender.name : null
557
+ const compConf = toolRender ? renderer.get(rdName) : null
558
+ if (toolRender && compConf && compConf.renderToolbarTool) {
559
+ const toolbarToolClassName = compConf.toolbarToolClassName
560
+ const params = { $grid: $xeGrid, $gantt: $xeGantt, $table: $table!, tool: item }
561
+ btnVNs.push(
562
+ h('span', {
563
+ key: rdName as string,
564
+ class: ['vxe-tool--item', toolbarToolClassName ? (XEUtils.isFunction(toolbarToolClassName) ? toolbarToolClassName(params) : toolbarToolClassName) : '']
565
+ }, getSlotVNs(compConf.renderToolbarTool(h, toolRender, params)))
566
+ )
567
+ } else {
568
+ if (VxeUIButtonComponent) {
569
+ btnVNs.push(
570
+ h(VxeUIButtonComponent, {
571
+ key: tIndex,
572
+ props: Object.assign({}, item, {
573
+ content: item.content || item.name,
574
+ options: undefined
575
+ }),
576
+ on: {
577
+ click: (eventParams: VxeButtonDefines.ClickEventParams) => $xeToolbar.tolEvent(eventParams, item)
578
+ },
579
+ scopedSlots: dropdowns && dropdowns.length
580
+ ? {
581
+ dropdowns: () => $xeToolbar.renderDropdowns(h, item, false)
582
+ }
583
+ : {}
584
+ })
585
+ )
586
+ }
587
+ }
588
+ }
589
+ })
590
+ }
591
+ return [
592
+ h('div', {
593
+ class: 'vxe-tool--prefix-wrapper'
594
+ }, toolPrefixSlot ? getSlotVNs(toolPrefixSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : []),
595
+ h('div', {
596
+ class: 'vxe-tool--item-wrapper'
597
+ }, toolsSlot ? getSlotVNs(toolsSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : btnVNs),
598
+ h('div', {
599
+ class: 'vxe-tool--suffix-wrapper'
600
+ }, toolSuffixSlot ? getSlotVNs(toolSuffixSlot.call($xeToolbar, { tools: tools || [], $grid: $xeGrid, $gantt: $xeGantt, $table: $table })) : [])
601
+ ]
602
+ },
603
+ renderToolImport (h: CreateElement) {
604
+ // 使用已安装的组件,如果未安装则不渲染
605
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
606
+
607
+ const $xeToolbar = this
608
+
609
+ const importOpts = $xeToolbar.computeImportOpts
610
+ return VxeUIButtonComponent
611
+ ? h(VxeUIButtonComponent, {
612
+ key: 'import',
613
+ props: {
614
+ circle: true,
615
+ icon: importOpts.icon || getIcon().TOOLBAR_TOOLS_IMPORT,
616
+ title: getI18n('vxe.toolbar.import')
617
+ },
618
+ on: {
619
+ click: $xeToolbar.openImportEvent
620
+ }
621
+ })
622
+ : renderEmptyElement($xeToolbar)
623
+ },
624
+ renderToolExport (h: CreateElement) {
625
+ // 使用已安装的组件,如果未安装则不渲染
626
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
627
+
628
+ const $xeToolbar = this
629
+
630
+ const exportOpts = $xeToolbar.computeExportOpts
631
+ return VxeUIButtonComponent
632
+ ? h(VxeUIButtonComponent, {
633
+ key: 'export',
634
+ props: {
635
+ circle: true,
636
+ icon: exportOpts.icon || getIcon().TOOLBAR_TOOLS_EXPORT,
637
+ title: getI18n('vxe.toolbar.export')
638
+ },
639
+ on: {
640
+ click: $xeToolbar.openExportEvent
641
+ }
642
+ })
643
+ : renderEmptyElement($xeToolbar)
644
+ },
645
+ renderToolPrint (h: CreateElement) {
646
+ // 使用已安装的组件,如果未安装则不渲染
647
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
648
+
649
+ const $xeToolbar = this
650
+
651
+ const printOpts = $xeToolbar.computePrintOpts
652
+ return VxeUIButtonComponent
653
+ ? h(VxeUIButtonComponent, {
654
+ key: 'print',
655
+ props: {
656
+ circle: true,
657
+ icon: printOpts.icon || getIcon().TOOLBAR_TOOLS_PRINT,
658
+ title: getI18n('vxe.toolbar.print')
659
+ },
660
+ on: {
661
+ click: $xeToolbar.openPrintEvent
662
+ }
663
+ })
664
+ : renderEmptyElement($xeToolbar)
665
+ },
666
+ renderToolRefresh (h: CreateElement) {
667
+ // 使用已安装的组件,如果未安装则不渲染
668
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
669
+
670
+ const $xeToolbar = this
671
+ const reactData = $xeToolbar.reactData
672
+
673
+ const refreshOpts = $xeToolbar.computeRefreshOpts
674
+ return VxeUIButtonComponent
675
+ ? h(VxeUIButtonComponent, {
676
+ key: 'refresh',
677
+ props: {
678
+ circle: true,
679
+ icon: reactData.isRefresh ? (refreshOpts.iconLoading || getIcon().TOOLBAR_TOOLS_REFRESH_LOADING) : (refreshOpts.icon || getIcon().TOOLBAR_TOOLS_REFRESH),
680
+ title: getI18n('vxe.toolbar.refresh')
681
+ },
682
+ on: {
683
+ click: $xeToolbar.refreshEvent
684
+ }
685
+ })
686
+ : renderEmptyElement($xeToolbar)
687
+ },
688
+ renderToolZoom (h: CreateElement) {
689
+ // 使用已安装的组件,如果未安装则不渲染
690
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
691
+
692
+ const $xeToolbar = this
693
+ const $xeGrid = $xeToolbar.$xeGrid
694
+ const $xeGantt = $xeToolbar.$xeGantt
695
+ const $xeGGWrapper = $xeGrid || $xeGantt
696
+
697
+ const zoomOpts = $xeToolbar.computeZoomOpts
698
+ return $xeGGWrapper && VxeUIButtonComponent
699
+ ? h(VxeUIButtonComponent, {
700
+ key: 'zoom',
701
+ props: {
702
+ circle: true,
703
+ icon: $xeGGWrapper.isMaximized() ? (zoomOpts.iconOut || getIcon().TOOLBAR_TOOLS_MINIMIZE) : (zoomOpts.iconIn || getIcon().TOOLBAR_TOOLS_FULLSCREEN),
704
+ title: getI18n(`vxe.toolbar.zoom${$xeGGWrapper.isMaximized() ? 'Out' : 'In'}`)
705
+ },
706
+ on: {
707
+ click: $xeToolbar.zoomEvent
708
+ }
709
+ })
710
+ : renderEmptyElement($xeToolbar)
711
+ },
712
+ renderToolCustom (h: CreateElement) {
713
+ // 使用已安装的组件,如果未安装则不渲染
714
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
715
+
716
+ const $xeToolbar = this
717
+
718
+ const customOpts = $xeToolbar.computeCustomOpts
719
+ const btnTrigger = $xeToolbar.computeTrigger
720
+ const customBtnOns: {
721
+ click?: typeof $xeToolbar.handleClickSettingEvent;
722
+ mouseenter?: typeof $xeToolbar.handleMouseenterSettingEvent;
723
+ mouseleave?: typeof $xeToolbar.handleMouseleaveSettingEvent;
724
+ } = {}
725
+ if (btnTrigger === 'manual') {
726
+ // 手动触发
727
+ } else if (btnTrigger === 'hover') {
728
+ // hover 触发
729
+ customBtnOns.mouseenter = $xeToolbar.handleMouseenterSettingEvent
730
+ customBtnOns.mouseleave = $xeToolbar.handleMouseleaveSettingEvent
731
+ } else {
732
+ // 点击触发
733
+ customBtnOns.click = $xeToolbar.handleClickSettingEvent
734
+ }
735
+ return VxeUIButtonComponent
736
+ ? h(VxeUIButtonComponent, {
737
+ key: 'custom',
738
+ props: {
739
+ circle: true,
740
+ icon: customOpts.icon || getIcon().TOOLBAR_TOOLS_CUSTOM,
741
+ title: getI18n('vxe.toolbar.custom'),
742
+ className: 'vxe-toolbar-custom-target'
743
+ },
744
+ on: customBtnOns
745
+ })
746
+ : renderEmptyElement($xeToolbar)
747
+ },
748
+ renderVN (h: CreateElement): VNode {
749
+ const $xeToolbar = this
750
+ const props = $xeToolbar
751
+ const $xeGrid = $xeToolbar.$xeGrid
752
+ const $xeGantt = $xeToolbar.$xeGantt
753
+ const $xeGGWrapper = $xeGrid || $xeGantt
754
+
755
+ const { perfect, loading, refresh, zoom, custom, className } = props
756
+ const vSize = $xeToolbar.computeSize
757
+ return h('div', {
758
+ ref: 'refElem',
759
+ class: ['vxe-toolbar', className ? (XEUtils.isFunction(className) ? className({ $toolbar: $xeToolbar }) : className) : '', {
760
+ [`size--${vSize}`]: vSize,
761
+ 'is--perfect': perfect,
762
+ 'is--loading': loading
763
+ }]
764
+ }, [
765
+ h('div', {
766
+ class: 'vxe-buttons--wrapper'
767
+ }, $xeToolbar.renderLeftBtns(h)),
768
+ h('div', {
769
+ class: 'vxe-tools--wrapper'
770
+ }, $xeToolbar.renderRightTools(h)),
771
+ h('div', {
772
+ class: 'vxe-tools--operate'
773
+ }, [
774
+ props.import ? $xeToolbar.renderToolImport(h) : renderEmptyElement($xeToolbar),
775
+ props.export ? $xeToolbar.renderToolExport(h) : renderEmptyElement($xeToolbar),
776
+ props.print ? $xeToolbar.renderToolPrint(h) : renderEmptyElement($xeToolbar),
777
+ refresh ? $xeToolbar.renderToolRefresh(h) : renderEmptyElement($xeToolbar),
778
+ zoom && $xeGGWrapper ? $xeToolbar.renderToolZoom(h) : renderEmptyElement($xeToolbar),
779
+ custom ? $xeToolbar.renderToolCustom(h) : renderEmptyElement($xeToolbar)
780
+ ])
781
+ ])
782
+ }
783
+ },
784
+ created () {
785
+ const $xeToolbar = this
786
+ const props = $xeToolbar
787
+ const $xeGrid = $xeToolbar.$xeGrid
788
+ const $xeGantt = $xeToolbar.$xeGantt
789
+ const $xeGGWrapper = $xeGrid || $xeGantt
790
+
791
+ $xeToolbar.$nextTick(() => {
792
+ const refreshOpts = $xeToolbar.computeRefreshOpts
793
+ const $xeTable = $xeToolbar.fintTable() as any
794
+ const queryMethod = refreshOpts.queryMethod || refreshOpts.query
795
+ if (props.refresh && !$xeGGWrapper && !queryMethod) {
796
+ warnLog('vxe.error.notFunc', ['[toolbar] queryMethod'])
797
+ }
798
+
799
+ if (XEUtils.isPlainObject(props.custom)) {
800
+ warnLog('vxe.error.delProp', ['[toolbar] custom={...}', 'custom=boolean & custom-options={...}'])
801
+ }
802
+ if (XEUtils.isPlainObject(props.print)) {
803
+ warnLog('vxe.error.delProp', ['[toolbar] print={...}', 'print=boolean & print-options={...}'])
804
+ }
805
+ if (XEUtils.isPlainObject(props.export)) {
806
+ warnLog('vxe.error.delProp', ['[toolbar] export={...}', 'export=boolean & export-options={...}'])
807
+ }
808
+ if (XEUtils.isPlainObject(props.import)) {
809
+ warnLog('vxe.error.delProp', ['[toolbar] import={...}', 'import=boolean & import-options={...}'])
810
+ }
811
+ if (XEUtils.isPlainObject(props.refresh)) {
812
+ warnLog('vxe.error.delProp', ['[toolbar] refresh={...}', 'refresh=boolean & refresh-options={...}'])
813
+ }
814
+ if (XEUtils.isPlainObject(props.refresh)) {
815
+ warnLog('vxe.error.delProp', ['[toolbar] zoom={...}', 'zoom=boolean & zoom-options={...}'])
816
+ }
817
+
818
+ if ($xeTable) {
819
+ $xeTable.connect(this)
820
+ }
821
+ const customOpts = $xeToolbar.computeCustomOpts
822
+ if (customOpts.isFooter) {
823
+ warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.isFooter', 'table.custom-config.showFooter'])
824
+ }
825
+ if (customOpts.showFooter) {
826
+ warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.showFooter', 'table.custom-config.showFooter'])
827
+ }
828
+ if (customOpts.immediate) {
829
+ warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.immediate', 'table.custom-config.immediate'])
830
+ }
831
+ if (customOpts.trigger) {
832
+ warnLog('vxe.error.delProp', ['[toolbar] toolbar.custom.trigger', 'table.custom-config.trigger'])
833
+ }
834
+ })
835
+
836
+ // 使用已安装的组件,如果未安装则不渲染
837
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton')
838
+
839
+ if (props.refresh || props.import || props.export || props.print || props.zoom) {
840
+ if (!VxeUIButtonComponent) {
841
+ errLog('vxe.error.reqComp', ['vxe-button'])
842
+ }
843
+ }
844
+ },
845
+ destroyed () {
846
+ const $xeToolbar = this
847
+ const reactData = $xeToolbar.reactData
848
+ const internalData = $xeToolbar.internalData
849
+
850
+ XEUtils.assign(reactData, createReactData())
851
+ XEUtils.assign(internalData, createInternalData())
852
+ },
853
+ render (this: any, h) {
854
+ return this.renderVN(h)
855
+ }
856
+ }) /* define-vxe-component end */