vxe-pc-ui 3.1.21 → 3.1.23

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 (58) hide show
  1. package/es/avatar/style.css +0 -5
  2. package/es/avatar/style.min.css +1 -1
  3. package/es/icon/style.css +1 -1
  4. package/es/slider/src/slider.js +268 -7
  5. package/es/slider/style.css +143 -0
  6. package/es/slider/style.min.css +1 -0
  7. package/es/style.css +1 -1
  8. package/es/style.min.css +1 -1
  9. package/es/tabs/src/tabs.js +24 -16
  10. package/es/ui/index.js +5 -2
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-avatar/style.css +0 -5
  13. package/es/vxe-avatar/style.min.css +1 -1
  14. package/es/vxe-slider/style.css +143 -0
  15. package/es/vxe-slider/style.min.css +1 -0
  16. package/lib/avatar/style/style.css +0 -5
  17. package/lib/avatar/style/style.min.css +1 -1
  18. package/lib/icon/style/style.css +1 -1
  19. package/lib/icon/style/style.min.css +1 -1
  20. package/lib/index.umd.js +486 -38
  21. package/lib/index.umd.min.js +1 -1
  22. package/lib/slider/src/slider.js +279 -7
  23. package/lib/slider/src/slider.min.js +1 -1
  24. package/lib/slider/style/style.css +143 -0
  25. package/lib/slider/style/style.min.css +1 -0
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/tabs/src/tabs.js +51 -29
  29. package/lib/tabs/src/tabs.min.js +1 -1
  30. package/lib/ui/index.js +5 -2
  31. package/lib/ui/index.min.js +1 -1
  32. package/lib/ui/src/log.js +1 -1
  33. package/lib/ui/src/log.min.js +1 -1
  34. package/lib/vxe-avatar/style/style.css +0 -5
  35. package/lib/vxe-avatar/style/style.min.css +1 -1
  36. package/lib/vxe-slider/style/style.css +143 -0
  37. package/lib/vxe-slider/style/style.min.css +1 -0
  38. package/package.json +1 -1
  39. package/packages/slider/src/slider.ts +286 -7
  40. package/packages/tabs/src/tabs.ts +26 -14
  41. package/packages/ui/index.ts +4 -1
  42. package/styles/components/avatar.scss +3 -8
  43. package/styles/components/slider.scss +138 -0
  44. package/types/components/slider.d.ts +27 -2
  45. package/types/components/switch.d.ts +1 -1
  46. package/types/components/tabs.d.ts +8 -2
  47. /package/es/icon/style/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
  48. /package/es/icon/style/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
  49. /package/es/icon/style/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
  50. /package/es/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
  51. /package/es/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
  52. /package/es/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
  53. /package/lib/icon/style/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
  54. /package/lib/icon/style/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
  55. /package/lib/icon/style/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
  56. /package/lib/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
  57. /package/lib/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
  58. /package/lib/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
@@ -1,23 +1,115 @@
1
- import { CreateElement, VNode } from 'vue'
1
+ import { CreateElement, VNode, PropType } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
- import { createEvent } from '../../ui'
4
+ import { getConfig, createEvent, renderEmptyElement } from '../../ui'
5
5
 
6
- import type { SliderReactData, VxeSliderEmits, ValueOf } from '../../../types'
6
+ import type { SliderReactData, VxeSliderEmits, ValueOf, VxeSliderPropTypes, VxeFormDefines, VxeComponentSizeType, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
7
7
 
8
8
  export default defineVxeComponent({
9
9
  name: 'VxeSlider',
10
+ model: {
11
+ prop: 'value',
12
+ event: 'modelValue'
13
+ },
10
14
  props: {
15
+ value: [String, Number, Array] as PropType<VxeSliderPropTypes.ModelValue>,
16
+ vertical: Boolean as PropType<VxeSliderPropTypes.Vertical>,
17
+ max: {
18
+ type: [String, Number] as PropType<VxeSliderPropTypes.Max>,
19
+ default: () => getConfig().slider.max
20
+ },
21
+ min: {
22
+ type: [String, Number] as PropType<VxeSliderPropTypes.Min>,
23
+ default: () => getConfig().slider.min
24
+ },
25
+ step: {
26
+ type: [String, Number] as PropType<VxeSliderPropTypes.Step>,
27
+ default: () => getConfig().slider.step
28
+ },
29
+ size: {
30
+ type: String as PropType<VxeSliderPropTypes.Size>,
31
+ default: () => getConfig().slider.size || getConfig().size
32
+ },
33
+ range: {
34
+ type: Boolean as PropType<VxeSliderPropTypes.Range>,
35
+ default: () => getConfig().slider.range
36
+ },
37
+ readonly: {
38
+ type: Boolean as PropType<VxeSliderPropTypes.Readonly>,
39
+ default: null
40
+ },
41
+ disabled: {
42
+ type: Boolean as PropType<VxeSliderPropTypes.Disabled>,
43
+ default: null
44
+ }
45
+ },
46
+ inject: {
47
+ $xeForm: {
48
+ default: null
49
+ },
50
+ formItemInfo: {
51
+ from: 'xeFormItemInfo',
52
+ default: null
53
+ }
11
54
  },
12
55
  data () {
13
56
  const xID = XEUtils.uniqueId()
14
57
  const reactData: SliderReactData = {
58
+ startValue: 0,
59
+ endValue: 0
15
60
  }
16
61
  return {
17
62
  xID,
18
63
  reactData
19
64
  }
20
65
  },
66
+ computed: {
67
+ ...({} as {
68
+ computeSize(): VxeComponentSizeType
69
+ $xeForm(): (VxeFormConstructor & VxeFormPrivateMethods) | null
70
+ formItemInfo(): VxeFormDefines.ProvideItemInfo | null
71
+ }),
72
+ computeFormReadonly () {
73
+ const $xeSlider = this
74
+ const props = $xeSlider
75
+ const $xeForm = $xeSlider.$xeForm
76
+
77
+ const { readonly } = props
78
+ if (readonly === null) {
79
+ if ($xeForm) {
80
+ return $xeForm.readonly
81
+ }
82
+ return false
83
+ }
84
+ return readonly
85
+ },
86
+ computeIsDisabled () {
87
+ const $xeSlider = this
88
+ const props = $xeSlider
89
+ const $xeForm = $xeSlider.$xeForm
90
+
91
+ const { disabled } = props
92
+ if (disabled === null) {
93
+ if ($xeForm) {
94
+ return $xeForm.disabled
95
+ }
96
+ return false
97
+ }
98
+ return disabled
99
+ },
100
+ computeMaxNum () {
101
+ const $xeSlider = this
102
+ const props = $xeSlider
103
+
104
+ return XEUtils.toNumber(props.max || 0)
105
+ },
106
+ computeMinNum () {
107
+ const $xeSlider = this
108
+ const props = $xeSlider
109
+
110
+ return XEUtils.toNumber(props.min || 0)
111
+ }
112
+ },
21
113
  methods: {
22
114
  //
23
115
  // Method
@@ -26,21 +118,208 @@ export default defineVxeComponent({
26
118
  const $xeSlider = this
27
119
  $xeSlider.$emit(type, createEvent(evnt, { $watermark: $xeSlider }, params))
28
120
  },
121
+ emitModel (value: any) {
122
+ const $xeSlider = this
123
+
124
+ $xeSlider.$emit('modelValue', value)
125
+ },
126
+ getStartPercent (startValue: number) {
127
+ const $xeSlider = this
128
+ const props = $xeSlider
129
+
130
+ const { range } = props
131
+ const maxNum = $xeSlider.computeMaxNum
132
+ const minNum = $xeSlider.computeMinNum
133
+ return range ? XEUtils.floor((startValue - minNum) / XEUtils.toNumber(maxNum - minNum) * 100) : 0
134
+ },
135
+ getEndPercent (startValue: number, endValue: number) {
136
+ const $xeSlider = this
137
+ const props = $xeSlider
138
+
139
+ const { range } = props
140
+ const maxNum = $xeSlider.computeMaxNum
141
+ const minNum = $xeSlider.computeMinNum
142
+ return XEUtils.floor((endValue - (range ? startValue : 0) - minNum) / XEUtils.toNumber(maxNum - minNum) * 100)
143
+ },
144
+ updateModel () {
145
+ const $xeSlider = this
146
+ const props = $xeSlider
147
+ const reactData = $xeSlider.reactData
148
+
149
+ const { value } = props
150
+ if (XEUtils.isArray(value)) {
151
+ const [sVal, eVal] = XEUtils.clone(value, true).sort()
152
+ reactData.startValue = XEUtils.floor(XEUtils.toNumber(sVal || 0))
153
+ reactData.endValue = XEUtils.floor(XEUtils.toNumber(eVal || 0))
154
+ } else {
155
+ reactData.startValue = 0
156
+ reactData.endValue = XEUtils.floor(XEUtils.toNumber(value || 0))
157
+ }
158
+ },
159
+ updateBarStyle () {
160
+ const $xeSlider = this
161
+ const reactData = $xeSlider.reactData
162
+
163
+ const { startValue, endValue } = reactData
164
+ const trackElem = $xeSlider.$refs.refTrackElem as HTMLDivElement
165
+ const startBtnElem = $xeSlider.$refs.refStartBtnElem as HTMLDivElement
166
+ const endBtnElem = $xeSlider.$refs.refEndBtnElem as HTMLDivElement
167
+ let startPercent = 0
168
+ let endPercent = 0
169
+ if (startValue > endValue) {
170
+ startPercent = $xeSlider.getStartPercent(endValue)
171
+ endPercent = $xeSlider.getEndPercent(endValue, startValue)
172
+ } else {
173
+ startPercent = $xeSlider.getStartPercent(startValue)
174
+ endPercent = $xeSlider.getEndPercent(startValue, endValue)
175
+ }
176
+ if (trackElem) {
177
+ trackElem.style.left = `${startPercent}%`
178
+ trackElem.style.width = `${endPercent}%`
179
+ }
180
+ if (startBtnElem) {
181
+ startBtnElem.style.left = `${startPercent}%`
182
+ }
183
+ if (endBtnElem) {
184
+ endBtnElem.style.left = `${XEUtils.floor(startPercent + endPercent)}%`
185
+ }
186
+ },
187
+ changeEvent (evnt: MouseEvent) {
188
+ const $xeSlider = this
189
+ const props = $xeSlider
190
+ const reactData = $xeSlider.reactData
191
+ const $xeForm = $xeSlider.$xeForm
192
+ const formItemInfo = $xeSlider.formItemInfo
193
+
194
+ const { range } = props
195
+ const { startValue, endValue } = reactData
196
+ const value = range ? [startValue, endValue].sort() : endValue
197
+ $xeSlider.emitModel(value)
198
+ $xeSlider.dispatchEvent('change', { value }, evnt)
199
+ // 自动更新校验状态
200
+ if ($xeForm && formItemInfo) {
201
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
202
+ }
203
+ },
204
+ handleMousedownEvent (evnt: MouseEvent, isEnd: boolean) {
205
+ const $xeSlider = this
206
+ const reactData = $xeSlider.reactData
207
+
208
+ const formReadonly = $xeSlider.computeFormReadonly
209
+ const isDisabled = $xeSlider.computeIsDisabled
210
+ const maxNum = $xeSlider.computeMaxNum
211
+ const minNum = $xeSlider.computeMinNum
212
+ if (!(formReadonly || isDisabled)) {
213
+ evnt.preventDefault()
214
+ const domMousemove = document.onmousemove
215
+ const domMouseup = document.onmouseup
216
+ document.onmousemove = evnt => {
217
+ evnt.preventDefault()
218
+ const barElem = $xeSlider.$refs.refBarElem as HTMLDivElement
219
+ if (barElem) {
220
+ const barRect = barElem.getBoundingClientRect()
221
+ const trackWidth = (evnt.clientX - barRect.left) / 914
222
+ if (isEnd) {
223
+ reactData.endValue = XEUtils.floor(Math.max(minNum, Math.min(maxNum, trackWidth * (maxNum - minNum) + minNum)))
224
+ } else {
225
+ reactData.startValue = XEUtils.floor(Math.max(minNum, Math.min(maxNum, trackWidth * (maxNum - minNum))))
226
+ }
227
+ }
228
+ $xeSlider.updateBarStyle()
229
+ }
230
+ document.onmouseup = (evnt: MouseEvent) => {
231
+ document.onmousemove = domMousemove
232
+ document.onmouseup = domMouseup
233
+ $xeSlider.changeEvent(evnt)
234
+ $xeSlider.updateBarStyle()
235
+ }
236
+ }
237
+ },
238
+ handleStartMousedownEvent (evnt: MouseEvent) {
239
+ const $xeSlider = this
240
+
241
+ const endBtnElem = $xeSlider.$refs.refEndBtnElem as HTMLDivElement
242
+ const startBtnElem = evnt.currentTarget as HTMLDivElement
243
+ $xeSlider.handleMousedownEvent(evnt, endBtnElem ? endBtnElem.offsetLeft < startBtnElem.offsetLeft : false)
244
+ },
245
+ handleEndMousedownEvent (evnt: MouseEvent) {
246
+ const $xeSlider = this
247
+
248
+ const startBtnElem = $xeSlider.$refs.refStartBtnElem as HTMLDivElement
249
+ const endBtnElem = evnt.currentTarget as HTMLDivElement
250
+ $xeSlider.handleMousedownEvent(evnt, startBtnElem ? endBtnElem.offsetLeft > startBtnElem.offsetLeft : true)
251
+ },
29
252
 
30
253
  //
31
254
  // Render
32
255
  //
33
256
  renderVN (h: CreateElement): VNode {
34
257
  const $xeSlider = this
35
- const slots = $xeSlider.$scopedSlots
258
+ const props = $xeSlider
36
259
 
37
- const defaultSlot = slots.default
260
+ const { vertical, range } = props
261
+ const vSize = $xeSlider.computeSize
262
+ const formReadonly = $xeSlider.computeFormReadonly
263
+ const isDisabled = $xeSlider.computeIsDisabled
38
264
  return h('div', {
39
265
  ref: 'refElem',
40
- class: 'vxe-slider'
41
- }, defaultSlot ? defaultSlot({}) : [])
266
+ class: ['vxe-slider', {
267
+ [`size--${vSize}`]: vSize,
268
+ 'is--vertical': vertical,
269
+ 'is--readonly': formReadonly,
270
+ 'is--disabled': isDisabled
271
+ }]
272
+ }, [
273
+ h('div', {
274
+ class: 'vxe-slider--inner'
275
+ }, [
276
+ h('div', {
277
+ ref: 'refBarElem',
278
+ class: 'vxe-slider--bar-wrapper'
279
+ }),
280
+ h('div', {
281
+ ref: 'refTrackElem',
282
+ class: 'vxe-slider--bar-track'
283
+ }),
284
+ formReadonly || !range
285
+ ? renderEmptyElement($xeSlider)
286
+ : h('div', {
287
+ ref: 'refStartBtnElem',
288
+ class: 'vxe-slider--bar-btn vxe-slider--start-btn',
289
+ on: {
290
+ mousedown: $xeSlider.handleStartMousedownEvent
291
+ }
292
+ }),
293
+ formReadonly
294
+ ? renderEmptyElement($xeSlider)
295
+ : h('div', {
296
+ ref: 'refEndBtnElem',
297
+ class: 'vxe-slider--bar-btn vxe-slider--end-btn',
298
+ on: {
299
+ mousedown: $xeSlider.handleEndMousedownEvent
300
+ }
301
+ })
302
+ ])
303
+ ])
304
+ }
305
+ },
306
+ watch: {
307
+ value () {
308
+ const $xeSlider = this
309
+
310
+ $xeSlider.updateModel()
42
311
  }
43
312
  },
313
+ created () {
314
+ const $xeSlider = this
315
+
316
+ $xeSlider.updateModel()
317
+ },
318
+ mounted () {
319
+ const $xeSlider = this
320
+
321
+ $xeSlider.updateBarStyle()
322
+ },
44
323
  render (this: any, h) {
45
324
  return this.renderVN(h)
46
325
  }
@@ -261,21 +261,27 @@ export default defineVxeComponent({
261
261
  const beforeMethod = props.beforeChangeMethod || getConfig().tabs.beforeChangeMethod
262
262
  const { activeName } = reactData
263
263
  const { name } = item
264
+ const value = name
265
+ $xeTabs.dispatchEvent('tab-click', { name }, evnt)
264
266
  if (trigger === 'manual') {
265
- $xeTabs.dispatchEvent('tab-click', { name }, evnt)
266
267
  return
267
268
  }
268
- const value = name
269
- reactData.activeName = name
270
- $xeTabs.emitModel(value)
271
- $xeTabs.dispatchEvent('tab-click', { name }, evnt)
272
- $xeTabs.addInitName(name, evnt)
273
269
  if (name !== activeName) {
274
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })) {
275
- $xeTabs.dispatchEvent('change', { value, name, oldName: activeName, newName: name, option: item }, evnt)
276
- } else {
270
+ Promise.resolve(
271
+ !beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })
272
+ ).then((status) => {
273
+ if (status) {
274
+ reactData.activeName = name
275
+ $xeTabs.emitModel(value)
276
+ $xeTabs.addInitName(name, evnt)
277
+ $xeTabs.dispatchEvent('change', { value, name, oldName: activeName, newName: name, option: item }, evnt)
278
+ $xeTabs.dispatchEvent('tab-change', { value, name, oldName: activeName, newName: name, option: item }, evnt)
279
+ } else {
280
+ $xeTabs.dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name, option: item }, evnt)
281
+ }
282
+ }).catch(() => {
277
283
  $xeTabs.dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name, option: item }, evnt)
278
- }
284
+ })
279
285
  }
280
286
  },
281
287
  handleRefreshTabEvent (evnt: KeyboardEvent, item: VxeTabPaneDefines.TabConfig | VxeTabPaneProps) {
@@ -317,11 +323,17 @@ export default defineVxeComponent({
317
323
  const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1]
318
324
  nextName = nextItem ? nextItem.name : null
319
325
  }
320
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })) {
321
- $xeTabs.dispatchEvent('tab-close', { value, name, nextName }, evnt)
322
- } else {
326
+ Promise.resolve(
327
+ !beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })
328
+ ).then(status => {
329
+ if (status) {
330
+ $xeTabs.dispatchEvent('tab-close', { value, name, nextName }, evnt)
331
+ } else {
332
+ $xeTabs.dispatchEvent('tab-close-fail', { value, name, nextName }, evnt)
333
+ }
334
+ }).catch(() => {
323
335
  $xeTabs.dispatchEvent('tab-close-fail', { value, name, nextName }, evnt)
324
- }
336
+ })
325
337
  },
326
338
  startScrollAnimation (offsetPos: number, offsetSize: number) {
327
339
  const $xeTabs = this
@@ -254,7 +254,10 @@ setConfig({
254
254
  select: {
255
255
  multiCharOverflow: 8
256
256
  },
257
- slider: {},
257
+ slider: {
258
+ max: 100,
259
+ min: 0
260
+ },
258
261
  steps: {},
259
262
  switch: {},
260
263
  tabPane: {},
@@ -1,4 +1,4 @@
1
- $btnThemeList: (
1
+ $avatarThemeList: (
2
2
  (
3
3
  name: "primary",
4
4
  textColor: var(--vxe-ui-font-primary-color),
@@ -28,11 +28,6 @@ $btnThemeList: (
28
28
  name: "error",
29
29
  textColor: var(--vxe-ui-status-error-color),
30
30
  btnColor: #fff,
31
- ),
32
- (
33
- name: "perfect",
34
- textColor: var(--vxe-ui-table-header-background-color),
35
- btnColor: var(--vxe-ui-font-color),
36
31
  )
37
32
  );
38
33
 
@@ -64,8 +59,8 @@ $btnThemeList: (
64
59
  z-index: 1;
65
60
  }
66
61
  }
67
- @for $index from 0 to length($btnThemeList) {
68
- $item: nth($btnThemeList, $index + 1);
62
+ @for $index from 0 to length($avatarThemeList) {
63
+ $item: nth($avatarThemeList, $index + 1);
69
64
  $textColor: map-get($item, textColor);
70
65
  $btnColor: map-get($item, btnColor);
71
66
  &.theme--#{map-get($item, name)} {
@@ -0,0 +1,138 @@
1
+ @import '../helpers/mixin.scss';
2
+
3
+ $sliderThemeList: (
4
+ (
5
+ name: "primary",
6
+ textColor: var(--vxe-ui-font-primary-color),
7
+ hoverColor: var(--vxe-ui-font-primary-lighten-color),
8
+ activeColor: var(--vxe-ui-font-primary-darken-color),
9
+ disabledColor: var(--vxe-ui-font-primary-disabled-color)
10
+ ),
11
+ (
12
+ name: "success",
13
+ textColor: var(--vxe-ui-status-success-color),
14
+ hoverColor: var(--vxe-ui-status-success-lighten-color),
15
+ activeColor: var(--vxe-ui-status-success-darken-color),
16
+ disabledColor: var(--vxe-ui-status-success-disabled-color)
17
+ ),
18
+ (
19
+ name: "info",
20
+ textColor: var(--vxe-ui-status-info-color),
21
+ hoverColor: var(--vxe-ui-status-info-lighten-color),
22
+ activeColor: var(--vxe-ui-status-info-darken-color),
23
+ disabledColor: var(--vxe-ui-status-info-disabled-color)
24
+ ),
25
+ (
26
+ name: "warning",
27
+ textColor: var(--vxe-ui-status-warning-color),
28
+ hoverColor: var(--vxe-ui-status-warning-lighten-color),
29
+ activeColor: var(--vxe-ui-status-warning-darken-color),
30
+ disabledColor: var(--vxe-ui-status-warning-disabled-color)
31
+ ),
32
+ (
33
+ name: "danger",
34
+ textColor: var(--vxe-ui-status-danger-color),
35
+ hoverColor: var(--vxe-ui-status-danger-lighten-color),
36
+ activeColor: var(--vxe-ui-status-danger-darken-color),
37
+ disabledColor: var(--vxe-ui-status-danger-disabled-color)
38
+ ),
39
+ (
40
+ name: "error",
41
+ textColor: var(--vxe-ui-status-error-color),
42
+ hoverColor: var(--vxe-ui-status-error-lighten-color),
43
+ activeColor: var(--vxe-ui-status-error-darken-color),
44
+ disabledColor: var(--vxe-ui-status-error-disabled-color)
45
+ )
46
+ );
47
+
48
+ .vxe-slider {
49
+ position: relative;
50
+ display: block;
51
+ padding: 0.5em 1em;
52
+ @for $index from 0 to length($sliderThemeList) {
53
+ $item: nth($sliderThemeList, $index + 1);
54
+ &.theme--#{map-get($item, name)} {
55
+ .vxe-slider--bar-track {
56
+ background-color: map-get($item, textColor);
57
+ &:hover {
58
+ background-color: map-get($item, hoverColor);
59
+ }
60
+ &:hover {
61
+ background-color: map-get($item, activeColor);
62
+ }
63
+ }
64
+ .vxe-slider--bar-btn {
65
+ background-color: map-get($item, textColor);
66
+ }
67
+ }
68
+ }
69
+ &.is--disabled {
70
+ .vxe-slider--bar-btn {
71
+ cursor: not-allowed;
72
+ }
73
+ }
74
+ &:not(.is--disabled) {
75
+ .vxe-slider--bar-wrapper,
76
+ .vxe-slider--inner {
77
+ cursor: pointer;
78
+ }
79
+ .vxe-slider--bar-btn {
80
+ &:hover {
81
+ transform: scale(1.2);
82
+ }
83
+ &:active {
84
+ transform: scale(1.1);
85
+ }
86
+ }
87
+ }
88
+ &.is--readonly {
89
+ .vxe-slider--bar-wrapper,
90
+ .vxe-slider--inner {
91
+ cursor: default;
92
+ }
93
+ }
94
+ }
95
+ .vxe-slider--inner {
96
+ position: relative;
97
+ }
98
+
99
+ .vxe-slider--bar-wrapper {
100
+ background-color: #e4e7ed;
101
+ }
102
+ .vxe-slider--bar-track {
103
+ position: absolute;
104
+ left: 0;
105
+ top: 0;
106
+ z-index: 1;
107
+ background-color: var(--vxe-ui-font-primary-color);
108
+ &:hover {
109
+ background-color: var(--vxe-ui-font-primary-lighten-color);
110
+ }
111
+ &:active {
112
+ background-color: var(--vxe-ui-font-primary-darken-color);
113
+ }
114
+ }
115
+ .vxe-slider--bar-wrapper,
116
+ .vxe-slider--bar-track {
117
+ height: 0.3em;
118
+ border-radius: var(--vxe-ui-base-border-radius);
119
+ }
120
+
121
+ .vxe-slider--bar-btn {
122
+ position: absolute;
123
+ width: 0.9em;
124
+ height: 0.9em;
125
+ top: -0.3em;
126
+ border-radius: 50%;
127
+ border: 0.15em solid var(--vxe-ui-font-primary-color);
128
+ background-color: #fff;
129
+ cursor: pointer;
130
+ z-index: 1;
131
+ @include createAnimationTransition(transform, 0.1s);
132
+ }
133
+ .vxe-slider--start-btn {
134
+ left: -0.45em;
135
+ }
136
+ .vxe-slider--end-btn {
137
+ right: -0.45em;
138
+ }
@@ -1,4 +1,4 @@
1
- import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentEventParams } from '@vxe-ui/core'
1
+ import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentSizeType, VxeComponentStatusType, VxeComponentEventParams } from '@vxe-ui/core'
2
2
 
3
3
  /* eslint-disable @typescript-eslint/no-empty-interface,no-use-before-define,@typescript-eslint/ban-types */
4
4
 
@@ -16,9 +16,29 @@ export interface SliderPrivateRef {
16
16
  export interface VxeSliderPrivateRef extends SliderPrivateRef { }
17
17
 
18
18
  export namespace VxeSliderPropTypes {
19
+ export type Size = VxeComponentSizeType
20
+ export type ModelValue = number | string | null | (number | string | null)[]
21
+ export type Max = number | string
22
+ export type Min = number | string
23
+ export type Vertical = boolean
24
+ export type Range = boolean
25
+ export type Status = VxeComponentStatusType
26
+ export type Step = number | string
27
+ export type Readonly = boolean
28
+ export type Disabled = boolean
19
29
  }
20
30
 
21
31
  export interface VxeSliderProps {
32
+ size?: VxeSliderPropTypes.Size
33
+ modelValue?: VxeSliderPropTypes.ModelValue
34
+ max?: VxeSliderPropTypes.Max
35
+ min?: VxeSliderPropTypes.Min
36
+ vertical?: VxeSliderPropTypes.Vertical
37
+ range?: VxeSliderPropTypes.Range
38
+ status?: VxeSliderPropTypes.Status
39
+ step?: VxeSliderPropTypes.Step
40
+ readonly?: VxeSliderPropTypes.Readonly
41
+ disabled?: VxeSliderPropTypes.Disabled
22
42
  }
23
43
 
24
44
  export interface SliderPrivateComputed {
@@ -26,6 +46,8 @@ export interface SliderPrivateComputed {
26
46
  export interface VxeSliderPrivateComputed extends SliderPrivateComputed { }
27
47
 
28
48
  export interface SliderReactData {
49
+ startValue: number
50
+ endValue: number
29
51
  }
30
52
 
31
53
  export interface SliderMethods {
@@ -35,7 +57,10 @@ export interface VxeSliderMethods extends SliderMethods { }
35
57
  export interface SliderPrivateMethods { }
36
58
  export interface VxeSliderPrivateMethods extends SliderPrivateMethods { }
37
59
 
38
- export type VxeSliderEmits = []
60
+ export type VxeSliderEmits = [
61
+ 'modelValue',
62
+ 'change'
63
+ ]
39
64
 
40
65
  export namespace VxeSliderDefines {
41
66
  export interface SliderEventParams extends VxeComponentEventParams {
@@ -17,7 +17,7 @@ export interface VxeSwitchPrivateRef extends SwitchPrivateRef { }
17
17
 
18
18
  export namespace VxeSwitchPropTypes {
19
19
  export type Size = VxeComponentSizeType
20
- export type ModelValue = string | number | boolean
20
+ export type ModelValue = string | number | boolean | null
21
21
  export type Disabled = boolean
22
22
  export type Readonly = boolean
23
23
  export type OpenLabel = string
@@ -33,7 +33,7 @@ export namespace VxeTabsPropTypes {
33
33
  oldName: VxeTabsPropTypes.ModelValue
34
34
  newName: VxeTabsPropTypes.ModelValue
35
35
  option: Omit<VxeTabPaneProps, 'slots'>
36
- }) => boolean
36
+ }) => boolean | Promise<boolean>
37
37
  /**
38
38
  * 请使用 closeConfig.beforeMethod
39
39
  * @deprecated
@@ -60,7 +60,7 @@ export namespace VxeTabsPropTypes {
60
60
  name: VxeTabsPropTypes.ModelValue
61
61
  nextName: VxeTabsPropTypes.ModelValue | null
62
62
  option: Omit<VxeTabPaneProps, 'slots'>
63
- }) => boolean
63
+ }) => boolean | Promise<boolean>
64
64
  /**
65
65
  * 显示关闭按钮方法,该方法的返回值用来决定当前页签的关闭按钮是否显示
66
66
  * @returns boolean
@@ -181,6 +181,7 @@ export interface VxeTabsPrivateMethods extends TabsPrivateMethods { }
181
181
  export type VxeTabsEmits = [
182
182
  'input',
183
183
  'change',
184
+ 'tab-change',
184
185
  'tab-change-fail',
185
186
  'tab-close',
186
187
  'tab-close-fail',
@@ -200,6 +201,8 @@ export namespace VxeTabsDefines {
200
201
  newName: VxeTabsPropTypes.ModelValue
201
202
  }
202
203
 
204
+ export interface TabChangeEventParams extends ChangeEventParams {}
205
+
203
206
  export interface TabChangeFailEventParams extends TabsEventParams {
204
207
  value: VxeTabsPropTypes.ModelValue
205
208
  name: VxeTabsPropTypes.ModelValue
@@ -227,6 +230,7 @@ export namespace VxeTabsDefines {
227
230
 
228
231
  export type VxeTabsEventProps = {
229
232
  onChange?: VxeTabsEvents.Change
233
+ onTabChange?: VxeTabsEvents.TabChange
230
234
  onTabChangeFail?: VxeTabsEvents.TabChangeFail
231
235
  onTabClose?: VxeTabsEvents.TabClose
232
236
  onTabCloseFail?: VxeTabsEvents.TabCloseFail
@@ -236,6 +240,7 @@ export type VxeTabsEventProps = {
236
240
 
237
241
  export interface VxeTabsListeners {
238
242
  change?: VxeTabsEvents.Change
243
+ tabChange?: VxeTabsEvents.TabChange
239
244
  tabChangeFail?: VxeTabsEvents.TabChangeFail
240
245
  tabClose?: VxeTabsEvents.TabClose
241
246
  tabCloseFail?: VxeTabsEvents.TabCloseFail
@@ -245,6 +250,7 @@ export interface VxeTabsListeners {
245
250
 
246
251
  export namespace VxeTabsEvents {
247
252
  export type Change = (params: VxeTabsDefines.ChangeEventParams) => void
253
+ export type TabChange = (params: VxeTabsDefines.TabChangeEventParams) => void
248
254
  export type TabChangeFail = (params: VxeTabsDefines.TabChangeFailEventParams) => void
249
255
  export type TabClose = (params: VxeTabsDefines.TabCloseEventParams) => void
250
256
  export type TabCloseFail = (params: VxeTabsDefines.TabCloseFailEventParams) => void