vxe-pc-ui 4.6.4 → 4.6.5

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 (130) hide show
  1. package/es/button/src/button.js +20 -73
  2. package/es/button/style.css +24 -2
  3. package/es/button/style.min.css +1 -1
  4. package/es/color-picker/src/color-picker.js +19 -72
  5. package/es/color-picker/style.css +15 -0
  6. package/es/color-picker/style.min.css +1 -1
  7. package/es/date-picker/src/date-picker.js +19 -74
  8. package/es/date-picker/style.css +3 -2
  9. package/es/date-picker/style.min.css +1 -1
  10. package/es/date-range-picker/src/date-range-picker.js +24 -79
  11. package/es/date-range-picker/style.css +3 -2
  12. package/es/date-range-picker/style.min.css +1 -1
  13. package/es/icon/style.css +1 -1
  14. package/es/pulldown/src/pulldown.js +19 -74
  15. package/es/pulldown/style.css +0 -4
  16. package/es/pulldown/style.min.css +1 -1
  17. package/es/select/src/select.js +19 -72
  18. package/es/style.css +1 -1
  19. package/es/style.min.css +1 -1
  20. package/es/table-select/src/table-select.js +19 -72
  21. package/es/table-select/style.css +0 -1
  22. package/es/table-select/style.min.css +1 -1
  23. package/es/tree-select/src/tree-select.js +19 -72
  24. package/es/tree-select/style.css +0 -1
  25. package/es/tree-select/style.min.css +1 -1
  26. package/es/ui/index.js +1 -1
  27. package/es/ui/src/dom.js +92 -0
  28. package/es/ui/src/log.js +1 -1
  29. package/es/vxe-button/style.css +24 -2
  30. package/es/vxe-button/style.min.css +1 -1
  31. package/es/vxe-color-picker/style.css +15 -0
  32. package/es/vxe-color-picker/style.min.css +1 -1
  33. package/es/vxe-date-picker/style.css +3 -2
  34. package/es/vxe-date-picker/style.min.css +1 -1
  35. package/es/vxe-date-range-picker/style.css +3 -2
  36. package/es/vxe-date-range-picker/style.min.css +1 -1
  37. package/es/vxe-pulldown/style.css +0 -4
  38. package/es/vxe-pulldown/style.min.css +1 -1
  39. package/es/vxe-table-select/style.css +0 -1
  40. package/es/vxe-table-select/style.min.css +1 -1
  41. package/es/vxe-tree-select/style.css +0 -1
  42. package/es/vxe-tree-select/style.min.css +1 -1
  43. package/lib/button/src/button.js +23 -79
  44. package/lib/button/src/button.min.js +1 -1
  45. package/lib/button/style/style.css +24 -2
  46. package/lib/button/style/style.min.css +1 -1
  47. package/lib/color-picker/src/color-picker.js +22 -77
  48. package/lib/color-picker/src/color-picker.min.js +1 -1
  49. package/lib/color-picker/style/style.css +15 -0
  50. package/lib/color-picker/style/style.min.css +1 -1
  51. package/lib/date-picker/src/date-picker.js +22 -79
  52. package/lib/date-picker/src/date-picker.min.js +1 -1
  53. package/lib/date-picker/style/style.css +3 -2
  54. package/lib/date-picker/style/style.min.css +1 -1
  55. package/lib/date-range-picker/src/date-range-picker.js +26 -83
  56. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  57. package/lib/date-range-picker/style/style.css +3 -2
  58. package/lib/date-range-picker/style/style.min.css +1 -1
  59. package/lib/icon/style/style.css +1 -1
  60. package/lib/icon/style/style.min.css +1 -1
  61. package/lib/index.umd.js +279 -631
  62. package/lib/index.umd.min.js +1 -1
  63. package/lib/pulldown/src/pulldown.js +22 -80
  64. package/lib/pulldown/src/pulldown.min.js +1 -1
  65. package/lib/pulldown/style/style.css +0 -4
  66. package/lib/pulldown/style/style.min.css +1 -1
  67. package/lib/select/src/select.js +22 -77
  68. package/lib/select/src/select.min.js +1 -1
  69. package/lib/style.css +1 -1
  70. package/lib/style.min.css +1 -1
  71. package/lib/table-select/src/table-select.js +22 -77
  72. package/lib/table-select/src/table-select.min.js +1 -1
  73. package/lib/table-select/style/style.css +0 -1
  74. package/lib/table-select/style/style.min.css +1 -1
  75. package/lib/tree-select/src/tree-select.js +22 -77
  76. package/lib/tree-select/src/tree-select.min.js +1 -1
  77. package/lib/tree-select/style/style.css +0 -1
  78. package/lib/tree-select/style/style.min.css +1 -1
  79. package/lib/ui/index.js +1 -1
  80. package/lib/ui/index.min.js +1 -1
  81. package/lib/ui/src/dom.js +97 -0
  82. package/lib/ui/src/dom.min.js +1 -1
  83. package/lib/ui/src/log.js +1 -1
  84. package/lib/ui/src/log.min.js +1 -1
  85. package/lib/vxe-button/style/style.css +24 -2
  86. package/lib/vxe-button/style/style.min.css +1 -1
  87. package/lib/vxe-color-picker/style/style.css +15 -0
  88. package/lib/vxe-color-picker/style/style.min.css +1 -1
  89. package/lib/vxe-date-picker/style/style.css +3 -2
  90. package/lib/vxe-date-picker/style/style.min.css +1 -1
  91. package/lib/vxe-date-range-picker/style/style.css +3 -2
  92. package/lib/vxe-date-range-picker/style/style.min.css +1 -1
  93. package/lib/vxe-pulldown/style/style.css +0 -4
  94. package/lib/vxe-pulldown/style/style.min.css +1 -1
  95. package/lib/vxe-table-select/style/style.css +0 -1
  96. package/lib/vxe-table-select/style/style.min.css +1 -1
  97. package/lib/vxe-tree-select/style/style.css +0 -1
  98. package/lib/vxe-tree-select/style/style.min.css +1 -1
  99. package/package.json +1 -1
  100. package/packages/button/src/button.ts +20 -70
  101. package/packages/color-picker/src/color-picker.ts +19 -69
  102. package/packages/date-picker/src/date-picker.ts +20 -72
  103. package/packages/date-range-picker/src/date-range-picker.ts +24 -76
  104. package/packages/pulldown/src/pulldown.ts +20 -72
  105. package/packages/select/src/select.ts +19 -69
  106. package/packages/table-select/src/table-select.ts +19 -69
  107. package/packages/tree-select/src/tree-select.ts +19 -69
  108. package/packages/ui/src/dom.ts +95 -0
  109. package/styles/components/button.scss +3 -20
  110. package/styles/components/color-picker.scss +2 -27
  111. package/styles/components/date-picker.scss +2 -34
  112. package/styles/components/date-range-picker.scss +2 -34
  113. package/styles/components/pulldown.scss +2 -41
  114. package/styles/components/select.scss +2 -35
  115. package/styles/components/table-select.scss +2 -36
  116. package/styles/components/tree-select.scss +2 -36
  117. package/styles/helpers/placement.scss +39 -0
  118. package/types/components/table.d.ts +51 -0
  119. /package/es/icon/{iconfont.1747024965925.ttf → iconfont.1747094595378.ttf} +0 -0
  120. /package/es/icon/{iconfont.1747024965925.woff → iconfont.1747094595378.woff} +0 -0
  121. /package/es/icon/{iconfont.1747024965925.woff2 → iconfont.1747094595378.woff2} +0 -0
  122. /package/es/{iconfont.1747024965925.ttf → iconfont.1747094595378.ttf} +0 -0
  123. /package/es/{iconfont.1747024965925.woff → iconfont.1747094595378.woff} +0 -0
  124. /package/es/{iconfont.1747024965925.woff2 → iconfont.1747094595378.woff2} +0 -0
  125. /package/lib/icon/style/{iconfont.1747024965925.ttf → iconfont.1747094595378.ttf} +0 -0
  126. /package/lib/icon/style/{iconfont.1747024965925.woff → iconfont.1747094595378.woff} +0 -0
  127. /package/lib/icon/style/{iconfont.1747024965925.woff2 → iconfont.1747094595378.woff2} +0 -0
  128. /package/lib/{iconfont.1747024965925.ttf → iconfont.1747094595378.ttf} +0 -0
  129. /package/lib/{iconfont.1747024965925.woff → iconfont.1747094595378.woff} +0 -0
  130. /package/lib/{iconfont.1747024965925.woff2 → iconfont.1747094595378.woff2} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, ref, computed, h, PropType, nextTick, inject, provide, reactive, Teleport, onMounted, onUnmounted, watch } from 'vue'
2
2
  import { getConfig, getI18n, getIcon, globalEvents, createEvent, useSize, renderEmptyElement } from '../../ui'
3
- import { getEventTargetNode, getAbsolutePos, toCssUnit } from '../../ui/src/dom'
3
+ import { getEventTargetNode, updatePanelPlacement, toCssUnit } from '../../ui/src/dom'
4
4
  import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
5
5
  import { errLog } from '../../ui/src/log'
6
6
  import XEUtils from 'xe-utils'
@@ -296,74 +296,24 @@ export default defineComponent({
296
296
  }
297
297
 
298
298
  const updatePlacement = () => {
299
- return nextTick().then(() => {
300
- const { placement } = props
301
- const { panelIndex } = reactData
302
- const el = refElem.value
303
- const panelElem = refOptionPanel.value
304
- const btnTransfer = computeBtnTransfer.value
305
- if (panelElem && el) {
306
- const targetHeight = el.offsetHeight
307
- const targetWidth = el.offsetWidth
308
- const panelHeight = panelElem.offsetHeight
309
- const panelWidth = panelElem.offsetWidth
310
- const marginSize = 5
311
- const panelStyle: { [key: string]: any } = {
312
- zIndex: panelIndex
313
- }
314
- const { boundingTop, boundingLeft, visibleHeight, visibleWidth } = getAbsolutePos(el)
315
- let panelPlacement = 'bottom'
316
- if (btnTransfer) {
317
- let left = boundingLeft
318
- let top = boundingTop + targetHeight
319
- if (placement === 'top') {
320
- panelPlacement = 'top'
321
- top = boundingTop - panelHeight
322
- } else if (!placement) {
323
- // 如果下面不够放,则向上
324
- if (top + panelHeight + marginSize > visibleHeight) {
325
- panelPlacement = 'top'
326
- top = boundingTop - panelHeight
327
- }
328
- // 如果上面不够放,则向下(优先)
329
- if (top < marginSize) {
330
- panelPlacement = 'bottom'
331
- top = boundingTop + targetHeight
332
- }
333
- }
334
- // 如果溢出右边
335
- if (left + panelWidth + marginSize > visibleWidth) {
336
- left -= left + panelWidth + marginSize - visibleWidth
337
- }
338
- // 如果溢出左边
339
- if (left < marginSize) {
340
- left = marginSize
341
- }
342
- Object.assign(panelStyle, {
343
- left: `${left}px`,
344
- top: `${top}px`,
345
- minWidth: `${targetWidth}px`
346
- })
347
- } else {
348
- if (placement === 'top') {
349
- panelPlacement = 'top'
350
- panelStyle.bottom = `${targetHeight}px`
351
- } else if (!placement) {
352
- // 如果下面不够放,则向上
353
- if (boundingTop + targetHeight + panelHeight > visibleHeight) {
354
- // 如果上面不够放,则向下(优先)
355
- if (boundingTop - targetHeight - panelHeight > marginSize) {
356
- panelPlacement = 'top'
357
- panelStyle.bottom = `${targetHeight}px`
358
- }
359
- }
360
- }
361
- }
362
- reactData.panelStyle = panelStyle
363
- reactData.panelPlacement = panelPlacement
364
- return nextTick()
365
- }
366
- })
299
+ const { placement } = props
300
+ const { panelIndex } = reactData
301
+ const targetElem = refElem.value
302
+ const panelElem = refOptionPanel.value
303
+ const btnTransfer = computeBtnTransfer.value
304
+ const handleStyle = () => {
305
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
306
+ placement,
307
+ teleportTo: btnTransfer
308
+ })
309
+ const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
310
+ zIndex: panelIndex
311
+ })
312
+ reactData.panelStyle = panelStyle
313
+ reactData.panelPlacement = ppObj.placement
314
+ }
315
+ handleStyle()
316
+ return nextTick().then(handleStyle)
367
317
  }
368
318
 
369
319
  const showOptionPanel = () => {
@@ -143,3 +143,98 @@ export function triggerEvent (targetElem: Element, type: string) {
143
143
  export function isNodeElement (elem: any): elem is HTMLElement {
144
144
  return elem && elem.nodeType === 1
145
145
  }
146
+
147
+ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined, panelElem: HTMLElement | null | undefined, options: {
148
+ placement?: '' | 'top' | 'bottom' | null
149
+ teleportTo?: boolean
150
+ marginSize?: number
151
+ }) {
152
+ const { placement, teleportTo, marginSize } = Object.assign({ teleportTo: false, marginSize: 5 }, options)
153
+ let panelPlacement: 'top' | 'bottom' = 'bottom'
154
+ let top: number | '' = ''
155
+ let bottom: number | '' = ''
156
+ let left: number | '' = ''
157
+ const right: number | '' = ''
158
+ let minWidth: number | '' = ''
159
+ const stys: Record<string, string> = {}
160
+ if (panelElem && targetElem) {
161
+ const documentElement = document.documentElement
162
+ const bodyElem = document.body
163
+ const targetHeight = targetElem.offsetHeight
164
+ const panelHeight = panelElem.offsetHeight
165
+ const panelWidth = panelElem.offsetWidth
166
+
167
+ const bounding = targetElem.getBoundingClientRect()
168
+ const boundingTop = bounding.top
169
+ const boundingLeft = bounding.left
170
+ const visibleHeight = documentElement.clientHeight || bodyElem.clientHeight
171
+ const visibleWidth = documentElement.clientWidth || bodyElem.clientWidth
172
+ minWidth = targetElem.offsetWidth
173
+ if (teleportTo) {
174
+ left = boundingLeft
175
+ top = boundingTop + targetHeight
176
+ if (placement === 'top') {
177
+ panelPlacement = 'top'
178
+ top = boundingTop - panelHeight
179
+ } else if (!placement) {
180
+ // 如果下面不够放,则向上
181
+ if (top + panelHeight + marginSize > visibleHeight) {
182
+ panelPlacement = 'top'
183
+ top = boundingTop - panelHeight
184
+ }
185
+ // 如果上面不够放,则向下(优先)
186
+ if (top < marginSize) {
187
+ panelPlacement = 'bottom'
188
+ top = boundingTop + targetHeight
189
+ }
190
+ }
191
+ // 如果溢出右边
192
+ if (left + panelWidth + marginSize > visibleWidth) {
193
+ left -= left + panelWidth + marginSize - visibleWidth
194
+ }
195
+ // 如果溢出左边
196
+ if (left < marginSize) {
197
+ left = marginSize
198
+ }
199
+ } else {
200
+ if (placement === 'top') {
201
+ panelPlacement = 'top'
202
+ bottom = targetHeight
203
+ } else if (!placement) {
204
+ // 如果下面不够放,则向上
205
+ top = targetHeight
206
+ if (boundingTop + targetHeight + panelHeight > visibleHeight) {
207
+ // 如果上面不够放,则向下(优先)
208
+ if (boundingTop - targetHeight - panelHeight > marginSize) {
209
+ panelPlacement = 'top'
210
+ top = ''
211
+ bottom = targetHeight
212
+ }
213
+ }
214
+ }
215
+ }
216
+ if (XEUtils.isNumber(top)) {
217
+ stys.top = toCssUnit(top)
218
+ }
219
+ if (XEUtils.isNumber(bottom)) {
220
+ stys.bottom = toCssUnit(bottom)
221
+ }
222
+ if (XEUtils.isNumber(left)) {
223
+ stys.left = toCssUnit(left)
224
+ }
225
+ if (XEUtils.isNumber(right)) {
226
+ stys.right = toCssUnit(right)
227
+ }
228
+ if (XEUtils.isNumber(minWidth)) {
229
+ stys.minWidth = toCssUnit(minWidth)
230
+ }
231
+ }
232
+ return {
233
+ top: top || 0,
234
+ bottom: bottom || 0,
235
+ left: left || 0,
236
+ right: right || 0,
237
+ style: stys,
238
+ placement: panelPlacement
239
+ }
240
+ }
@@ -1,6 +1,7 @@
1
1
  @use "sass:map";
2
2
  @use "sass:list";
3
3
  @use '../helpers/baseMixin.scss';
4
+ @use '../helpers/placement.scss';
4
5
 
5
6
  $btnThemeList: (
6
7
  (
@@ -356,27 +357,9 @@ $btnThemeList: (
356
357
  }
357
358
 
358
359
  .vxe-button--dropdown-panel {
359
- display: none;
360
- position: absolute;
361
- right: 0;
362
- padding: 4px 0;
363
- &.ani--leave {
364
- display: block;
365
- opacity: 0;
366
- transform: scaleY(0.5);
367
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
368
- transform-origin: center top;
369
- backface-visibility: hidden;
370
- transform-style: preserve-3d;
371
- &[placement="top"] {
372
- transform-origin: center bottom;
373
- }
374
- }
375
- &.ani--enter {
376
- opacity: 1;
377
- transform: scaleY(1);
378
- }
360
+ @include placement.createPlacementPanel();
379
361
  }
362
+
380
363
  .vxe-button--dropdown-wrapper {
381
364
  padding: 5px;
382
365
  background-color: var(--vxe-ui-layout-background-color);
@@ -1,4 +1,5 @@
1
1
  @use '../helpers/baseMixin.scss';
2
+ @use '../helpers/placement.scss';
2
3
 
3
4
  .vxe-color-picker {
4
5
  &.is--selected {
@@ -71,33 +72,7 @@
71
72
  }
72
73
 
73
74
  .vxe-color-picker--panel {
74
- display: none;
75
- position: absolute;
76
- left: 0;
77
- padding: 4px 0;
78
- color: var(--vxe-ui-font-color);
79
- text-align: left;
80
- &:not(.is--transfer) {
81
- min-width: 100%;
82
- }
83
- &.is--transfer {
84
- position: fixed;
85
- }
86
- &.ani--leave {
87
- display: block;
88
- opacity: 0;
89
- transform: scaleY(0.5);
90
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
91
- transform-origin: center top;
92
- backface-visibility: hidden;
93
- &[placement="top"] {
94
- transform-origin: center bottom;
95
- }
96
- }
97
- &.ani--enter {
98
- opacity: 1;
99
- transform: scaleY(1);
100
- }
75
+ @include placement.createPlacementPanel();
101
76
  }
102
77
 
103
78
  .vxe-color-picker--color-wrapper {
@@ -1,5 +1,6 @@
1
1
  @use "sass:list";
2
2
  @use '../helpers/baseMixin.scss';
3
+ @use '../helpers/placement.scss';
3
4
 
4
5
  .vxe-date-picker--readonly {
5
6
  color: var(--vxe-ui-font-color);
@@ -106,40 +107,7 @@
106
107
  }
107
108
 
108
109
  .vxe-date-picker--panel {
109
- display: none;
110
- position: absolute;
111
- left: 0;
112
- padding: 4px 0;
113
- color: var(--vxe-ui-font-color);
114
- font-size: var(--vxe-ui-font-size-default);
115
- text-align: left;
116
- &.is--transfer {
117
- position: fixed;
118
- }
119
- &.ani--leave {
120
- display: block;
121
- opacity: 0;
122
- transform: scaleY(0.5);
123
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
124
- transform-origin: center top;
125
- backface-visibility: hidden;
126
- transform-style: preserve-3d;
127
- &[placement="top"] {
128
- transform-origin: center bottom;
129
- }
130
- }
131
- &.ani--enter {
132
- opacity: 1;
133
- transform: scaleY(1);
134
- & > div {
135
- &::after {
136
- display: none;
137
- }
138
- }
139
- }
140
- & > div {
141
- @include baseMixin.createEmptyMask();
142
- }
110
+ @include placement.createPlacementPanel();
143
111
  }
144
112
 
145
113
  .vxe-date-picker--panel {
@@ -1,5 +1,6 @@
1
1
  @use "sass:list";
2
2
  @use '../helpers/baseMixin.scss';
3
+ @use '../helpers/placement.scss';
3
4
 
4
5
  .vxe-date-range-picker--readonly {
5
6
  color: var(--vxe-ui-font-color);
@@ -106,40 +107,7 @@
106
107
  }
107
108
 
108
109
  .vxe-date-range-picker--panel {
109
- display: none;
110
- position: absolute;
111
- left: 0;
112
- padding: 4px 0;
113
- color: var(--vxe-ui-font-color);
114
- font-size: var(--vxe-ui-font-size-default);
115
- text-align: left;
116
- &.is--transfer {
117
- position: fixed;
118
- }
119
- &.ani--leave {
120
- display: block;
121
- opacity: 0;
122
- transform: scaleY(0.5);
123
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
124
- transform-origin: center top;
125
- backface-visibility: hidden;
126
- transform-style: preserve-3d;
127
- &[placement="top"] {
128
- transform-origin: center bottom;
129
- }
130
- }
131
- &.ani--enter {
132
- opacity: 1;
133
- transform: scaleY(1);
134
- & > div {
135
- &::after {
136
- display: none;
137
- }
138
- }
139
- }
140
- & > div {
141
- @include baseMixin.createEmptyMask();
142
- }
110
+ @include placement.createPlacementPanel();
143
111
  }
144
112
 
145
113
  .vxe-date-range-picker--panel {
@@ -1,4 +1,5 @@
1
1
  @use '../helpers/baseMixin.scss';
2
+ @use '../helpers/placement.scss';
2
3
 
3
4
  .vxe-pulldown {
4
5
  position: relative;
@@ -9,47 +10,7 @@
9
10
  }
10
11
 
11
12
  .vxe-pulldown--panel {
12
- display: none;
13
- position: absolute;
14
- left: 0;
15
- padding: 4px 0;
16
- color: var(--vxe-ui-font-color);
17
- text-align: left;
18
- outline: 0;
19
- &:not(.is--transfer) {
20
- min-width: 100%;
21
- }
22
- &.is--shadow {
23
- .vxe-pulldown--panel-wrapper {
24
- box-shadow: var(--vxe-ui-base-popup-box-shadow);
25
- }
26
- }
27
- &.is--transfer {
28
- position: fixed;
29
- }
30
- &.ani--leave {
31
- display: block;
32
- opacity: 0;
33
- transform: scaleY(0.5);
34
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
35
- transform-origin: center top;
36
- backface-visibility: hidden;
37
- &[placement="top"] {
38
- transform-origin: center bottom;
39
- }
40
- }
41
- &.ani--enter {
42
- opacity: 1;
43
- transform: scaleY(1);
44
- & > div {
45
- &::after {
46
- display: none;
47
- }
48
- }
49
- }
50
- & > div {
51
- @include baseMixin.createEmptyMask();
52
- }
13
+ @include placement.createPlacementPanel();
53
14
  }
54
15
  .vxe-pulldown--panel-wrapper {
55
16
  background-color: var(--vxe-ui-layout-background-color);
@@ -1,4 +1,5 @@
1
1
  @use '../helpers/baseMixin.scss';
2
+ @use '../helpers/placement.scss';
2
3
 
3
4
  .vxe-select {
4
5
  position: relative;
@@ -50,41 +51,7 @@
50
51
  }
51
52
 
52
53
  .vxe-select--panel {
53
- display: none;
54
- position: absolute;
55
- left: 0;
56
- padding: 4px 0;
57
- color: var(--vxe-ui-font-color);
58
- text-align: left;
59
- &:not(.is--transfer) {
60
- min-width: 100%;
61
- }
62
- &.is--transfer {
63
- position: fixed;
64
- }
65
- &.ani--leave {
66
- display: block;
67
- opacity: 0;
68
- transform: scaleY(0.5);
69
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
70
- transform-origin: center top;
71
- backface-visibility: hidden;
72
- &[placement="top"] {
73
- transform-origin: center bottom;
74
- }
75
- }
76
- &.ani--enter {
77
- opacity: 1;
78
- transform: scaleY(1);
79
- & > div {
80
- &::after {
81
- display: none;
82
- }
83
- }
84
- }
85
- & > div {
86
- @include baseMixin.createEmptyMask();
87
- }
54
+ @include placement.createPlacementPanel();
88
55
  }
89
56
 
90
57
  .vxe-select--panel-search {
@@ -1,4 +1,5 @@
1
1
  @use '../helpers/baseMixin.scss';
2
+ @use '../helpers/placement.scss';
2
3
 
3
4
  .vxe-table-select {
4
5
  position: relative;
@@ -46,42 +47,7 @@
46
47
  }
47
48
 
48
49
  .vxe-table-select--panel {
49
- display: none;
50
- position: absolute;
51
- left: 0;
52
- padding: 4px 0;
53
- color: var(--vxe-ui-font-color);
54
- text-align: left;
55
- pointer-events: none;
56
- &:not(.is--transfer) {
57
- min-width: 100%;
58
- }
59
- &.is--transfer {
60
- position: fixed;
61
- }
62
- &.ani--leave {
63
- display: block;
64
- opacity: 0;
65
- transform: scaleY(0.5);
66
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
67
- transform-origin: center top;
68
- backface-visibility: hidden;
69
- &[placement="top"] {
70
- transform-origin: center bottom;
71
- }
72
- }
73
- &.ani--enter {
74
- opacity: 1;
75
- transform: scaleY(1);
76
- & > div {
77
- &::after {
78
- display: none;
79
- }
80
- }
81
- }
82
- & > div {
83
- @include baseMixin.createEmptyMask();
84
- }
50
+ @include placement.createPlacementPanel();
85
51
  }
86
52
 
87
53
  .vxe-table-select--panel-search {
@@ -1,4 +1,5 @@
1
1
  @use '../helpers/baseMixin.scss';
2
+ @use '../helpers/placement.scss';
2
3
 
3
4
  .vxe-tree-select {
4
5
  position: relative;
@@ -46,42 +47,7 @@
46
47
  }
47
48
 
48
49
  .vxe-tree-select--panel {
49
- display: none;
50
- position: absolute;
51
- left: 0;
52
- padding: 4px 0;
53
- color: var(--vxe-ui-font-color);
54
- text-align: left;
55
- pointer-events: none;
56
- &:not(.is--transfer) {
57
- min-width: 100%;
58
- }
59
- &.is--transfer {
60
- position: fixed;
61
- }
62
- &.ani--leave {
63
- display: block;
64
- opacity: 0;
65
- transform: scaleY(0.5);
66
- transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
67
- transform-origin: center top;
68
- backface-visibility: hidden;
69
- &[placement="top"] {
70
- transform-origin: center bottom;
71
- }
72
- }
73
- &.ani--enter {
74
- opacity: 1;
75
- transform: scaleY(1);
76
- & > div {
77
- &::after {
78
- display: none;
79
- }
80
- }
81
- }
82
- & > div {
83
- @include baseMixin.createEmptyMask();
84
- }
50
+ @include placement.createPlacementPanel();
85
51
  }
86
52
 
87
53
  .vxe-tree-select--panel-search {
@@ -0,0 +1,39 @@
1
+ @use './baseMixin.scss';
2
+
3
+ @mixin createPlacementPanel {
4
+ display: none;
5
+ position: absolute;
6
+ left: 0;
7
+ padding: 4px 0;
8
+ color: var(--vxe-ui-font-color);
9
+ text-align: left;
10
+ &:not(.is--transfer) {
11
+ min-width: 100%;
12
+ }
13
+ &.is--transfer {
14
+ position: fixed;
15
+ }
16
+ &.ani--leave {
17
+ display: block;
18
+ opacity: 0;
19
+ transform: scaleY(0.5);
20
+ transition: transform .3s cubic-bezier(.23,1,.32,1), opacity .3s cubic-bezier(.23,1,.32,1);
21
+ transform-origin: center top;
22
+ backface-visibility: hidden;
23
+ &[placement="top"] {
24
+ transform-origin: center bottom;
25
+ }
26
+ }
27
+ &.ani--enter {
28
+ opacity: 1;
29
+ transform: scaleY(1);
30
+ & > div {
31
+ &::after {
32
+ display: none;
33
+ }
34
+ }
35
+ }
36
+ & > div {
37
+ @include baseMixin.createEmptyMask();
38
+ }
39
+ }
@@ -1943,6 +1943,54 @@ export namespace VxeTablePropTypes {
1943
1943
  replaceValue: string
1944
1944
  result: VxeTableExtendCellAreaDefines.FindAndReplaceResult[]
1945
1945
  }) => void
1946
+ /**
1947
+ * 匹配选项配置
1948
+ */
1949
+ matchOptions?: {
1950
+ /**
1951
+ * 是否启用正则表达式
1952
+ */
1953
+ isRE?: boolean
1954
+ /**
1955
+ * 是否启用全词匹配
1956
+ */
1957
+ isWhole?: boolean
1958
+ /**
1959
+ * 是否启用区分大小写
1960
+ */
1961
+ isSensitive?: boolean
1962
+ }
1963
+ /**
1964
+ * 列表配置项
1965
+ */
1966
+ listOptions?: {
1967
+ /**
1968
+ * 格式化列表的显示值
1969
+ */
1970
+ formatCellValue?(params: {
1971
+ item: VxeTableExtendCellAreaDefines.FNRSearch
1972
+ cellValue: any
1973
+ }): string | number
1974
+ }
1975
+ /**
1976
+ * 弹窗配置项
1977
+ */
1978
+ modalOptions?: {
1979
+ title?: VxeModalPropTypes.Title
1980
+ width?: VxeModalPropTypes.Width
1981
+ minWidth?: VxeModalPropTypes.MinWidth
1982
+ height?: VxeModalPropTypes.Height
1983
+ minHeight?: VxeModalPropTypes.MinHeight
1984
+ className?: VxeModalPropTypes.ClassName
1985
+ resize?: VxeModalPropTypes.Resize
1986
+ showMaximize?: VxeModalPropTypes.ShowMaximize
1987
+ showMinimize?: VxeModalPropTypes.ShowMinimize
1988
+ showZoom?: VxeModalPropTypes.ShowZoom
1989
+ lockView?: VxeModalPropTypes.LockView
1990
+ mask?: VxeModalPropTypes.Mask
1991
+ maskClosable?: VxeModalPropTypes.MaskClosable
1992
+ escClosable?: VxeModalPropTypes.EscClosable
1993
+ }
1946
1994
  }
1947
1995
  export interface FNROpts<DT = any> extends FnrConfig<DT> { }
1948
1996
 
@@ -3095,6 +3143,7 @@ export interface VxeTableProps<D = any> {
3095
3143
  export interface TablePrivateComputed<D = any> {
3096
3144
  computeSize: ComputedRef<VxeTablePropTypes.Size>
3097
3145
  computeTableId: ComputedRef<string>
3146
+ computeRowField: ComputedRef<string>
3098
3147
  computeValidOpts: ComputedRef<VxeTablePropTypes.ValidOpts<D>>
3099
3148
  computeVirtualXOpts: ComputedRef<VxeTablePropTypes.VirtualXConfig & { gt: number }>
3100
3149
  computeVirtualYOpts: ComputedRef<VxeTablePropTypes.VirtualYConfig & { gt: number }>
@@ -3426,6 +3475,8 @@ export interface TableReactData<D = any> {
3426
3475
 
3427
3476
  export interface TableInternalData<D = any> {
3428
3477
  tZindex: number
3478
+ currKeyField: string
3479
+ isCurrDeepKey: boolean
3429
3480
  elemStore: {
3430
3481
  [key: string]: Ref<HTMLElement> |Ref<ComponentPublicInstance> | null
3431
3482
  }