vxe-table 3.20.7 → 3.20.9

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 (144) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +106 -106
  3. package/es/index.esm.js +2 -1
  4. package/es/style.css +1 -1
  5. package/es/table/src/methods.js +81 -84
  6. package/es/table/src/table.js +20 -1
  7. package/es/table/src/util.js +6 -0
  8. package/es/table/style.css +18 -48
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/dom.js +19 -20
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +18 -48
  13. package/lib/index.common.js +2 -1
  14. package/lib/index.umd.js +1985 -3291
  15. package/lib/index.umd.min.js +1 -1
  16. package/lib/style.css +1 -1
  17. package/lib/table/src/methods.js +17 -15
  18. package/lib/table/src/methods.min.js +1 -1
  19. package/lib/table/src/table.js +19 -1
  20. package/lib/table/src/table.min.js +1 -1
  21. package/lib/table/src/util.js +6 -0
  22. package/lib/table/src/util.min.js +1 -1
  23. package/lib/table/style/style.css +18 -48
  24. package/lib/ui/index.js +1 -1
  25. package/lib/ui/index.min.js +1 -1
  26. package/lib/ui/src/dom.js +21 -20
  27. package/lib/ui/src/dom.min.js +1 -1
  28. package/lib/ui/src/log.js +1 -1
  29. package/lib/ui/src/log.min.js +1 -1
  30. package/lib/v-x-e-table/index.js +2 -1
  31. package/lib/v-x-e-table/index.min.js +1 -1
  32. package/lib/vxe-colgroup/index.js +2 -1
  33. package/lib/vxe-colgroup/index.min.js +1 -1
  34. package/lib/vxe-column/index.js +2 -1
  35. package/lib/vxe-column/index.min.js +1 -1
  36. package/lib/vxe-grid/index.js +2 -1
  37. package/lib/vxe-grid/index.min.js +1 -1
  38. package/lib/vxe-table/index.js +2 -1
  39. package/lib/vxe-table/index.min.js +1 -1
  40. package/lib/vxe-table/style/style.css +18 -48
  41. package/lib/vxe-toolbar/index.js +2 -1
  42. package/lib/vxe-toolbar/index.min.js +1 -1
  43. package/lib/vxe-ui/index.js +2 -1
  44. package/lib/vxe-ui/index.min.js +1 -1
  45. package/lib/vxe-v-x-e-table/index.js +2 -1
  46. package/lib/vxe-v-x-e-table/index.min.js +1 -1
  47. package/package.json +93 -93
  48. package/packages/colgroup/index.ts +22 -22
  49. package/packages/column/index.ts +22 -22
  50. package/packages/components.ts +42 -42
  51. package/packages/grid/index.ts +22 -22
  52. package/packages/grid/src/grid.ts +1935 -1935
  53. package/packages/index.ts +4 -4
  54. package/packages/locale/lang/ar-EG.ts +832 -832
  55. package/packages/locale/lang/de-DE.ts +832 -832
  56. package/packages/locale/lang/en-US.ts +832 -832
  57. package/packages/locale/lang/es-ES.ts +832 -832
  58. package/packages/locale/lang/fr-FR.ts +832 -832
  59. package/packages/locale/lang/hu-HU.ts +832 -832
  60. package/packages/locale/lang/hy-AM.ts +832 -832
  61. package/packages/locale/lang/id-ID.ts +832 -832
  62. package/packages/locale/lang/it-IT.ts +832 -832
  63. package/packages/locale/lang/ja-JP.ts +832 -832
  64. package/packages/locale/lang/ko-KR.ts +832 -832
  65. package/packages/locale/lang/ms-MY.ts +832 -832
  66. package/packages/locale/lang/nb-NO.ts +832 -832
  67. package/packages/locale/lang/pt-BR.ts +832 -832
  68. package/packages/locale/lang/ru-RU.ts +832 -832
  69. package/packages/locale/lang/th-TH.ts +832 -832
  70. package/packages/locale/lang/ug-CN.ts +832 -832
  71. package/packages/locale/lang/uk-UA.ts +832 -832
  72. package/packages/locale/lang/uz-UZ.ts +832 -832
  73. package/packages/locale/lang/vi-VN.ts +832 -832
  74. package/packages/locale/lang/zh-CHT.ts +832 -832
  75. package/packages/locale/lang/zh-CN.ts +832 -832
  76. package/packages/locale/lang/zh-HK.ts +3 -3
  77. package/packages/locale/lang/zh-MO.ts +3 -3
  78. package/packages/locale/lang/zh-TC.ts +3 -3
  79. package/packages/locale/lang/zh-TW.ts +3 -3
  80. package/packages/table/index.ts +49 -49
  81. package/packages/table/module/custom/mixin.ts +369 -369
  82. package/packages/table/module/custom/panel.ts +1461 -1461
  83. package/packages/table/module/edit/mixin.ts +1123 -1123
  84. package/packages/table/module/export/export-panel.ts +658 -658
  85. package/packages/table/module/export/import-panel.ts +319 -319
  86. package/packages/table/module/export/mixin.ts +1693 -1693
  87. package/packages/table/module/export/util.ts +24 -24
  88. package/packages/table/module/filter/mixin.ts +507 -507
  89. package/packages/table/module/filter/panel.ts +329 -329
  90. package/packages/table/module/keyboard/mixin.ts +513 -513
  91. package/packages/table/module/menu/mixin.ts +329 -329
  92. package/packages/table/module/menu/panel.ts +212 -212
  93. package/packages/table/module/validator/mixin.ts +626 -626
  94. package/packages/table/render/index.ts +1456 -1456
  95. package/packages/table/src/body.ts +969 -969
  96. package/packages/table/src/cell.ts +1285 -1285
  97. package/packages/table/src/column.ts +205 -205
  98. package/packages/table/src/columnInfo.ts +228 -228
  99. package/packages/table/src/footer.ts +388 -388
  100. package/packages/table/src/group.ts +51 -51
  101. package/packages/table/src/header.ts +602 -602
  102. package/packages/table/src/methods.ts +12936 -12939
  103. package/packages/table/src/props.ts +311 -311
  104. package/packages/table/src/store.ts +15 -15
  105. package/packages/table/src/table.ts +2523 -2505
  106. package/packages/table/src/util.ts +1018 -1012
  107. package/packages/toolbar/index.ts +18 -18
  108. package/packages/toolbar/src/toolbar.ts +856 -856
  109. package/packages/ui/index.ts +530 -530
  110. package/packages/ui/src/anime.ts +52 -52
  111. package/packages/ui/src/comp.ts +3 -3
  112. package/packages/ui/src/dom.ts +237 -236
  113. package/packages/ui/src/log.ts +8 -8
  114. package/packages/ui/src/utils.ts +56 -56
  115. package/packages/ui/src/vn.ts +65 -65
  116. package/packages/v-x-e-table/index.ts +4 -4
  117. package/styles/all.scss +7 -7
  118. package/styles/base.scss +16 -16
  119. package/styles/components/grid.scss +89 -89
  120. package/styles/components/icon.scss +225 -225
  121. package/styles/components/old-icon.scss +715 -715
  122. package/styles/components/table-module/all.scss +6 -6
  123. package/styles/components/table-module/custom.scss +527 -527
  124. package/styles/components/table-module/export.scss +130 -130
  125. package/styles/components/table-module/filter.scss +130 -130
  126. package/styles/components/table-module/menu.scss +81 -81
  127. package/styles/components/table.scss +2679 -2679
  128. package/styles/components/toolbar.scss +119 -119
  129. package/styles/default.scss +2 -2
  130. package/styles/helpers/baseMixin.scss +95 -95
  131. package/styles/index.scss +3 -3
  132. package/styles/modules.scss +5 -5
  133. package/styles/theme/base.scss +93 -93
  134. package/styles/theme/dark.scss +49 -49
  135. package/styles/theme/light.scss +44 -44
  136. package/styles/variable.scss +43 -43
  137. package/types/all.d.ts +53 -53
  138. package/types/index.d.ts +4 -4
  139. /package/es/{iconfont.1773991883171.ttf → iconfont.1774420912543.ttf} +0 -0
  140. /package/es/{iconfont.1773991883171.woff → iconfont.1774420912543.woff} +0 -0
  141. /package/es/{iconfont.1773991883171.woff2 → iconfont.1774420912543.woff2} +0 -0
  142. /package/lib/{iconfont.1773991883171.ttf → iconfont.1774420912543.ttf} +0 -0
  143. /package/lib/{iconfont.1773991883171.woff → iconfont.1774420912543.woff} +0 -0
  144. /package/lib/{iconfont.1773991883171.woff2 → iconfont.1774420912543.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 */