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.
- package/es/avatar/style.css +0 -5
- package/es/avatar/style.min.css +1 -1
- package/es/icon/style.css +1 -1
- package/es/slider/src/slider.js +268 -7
- package/es/slider/style.css +143 -0
- package/es/slider/style.min.css +1 -0
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tabs/src/tabs.js +24 -16
- package/es/ui/index.js +5 -2
- package/es/ui/src/log.js +1 -1
- package/es/vxe-avatar/style.css +0 -5
- package/es/vxe-avatar/style.min.css +1 -1
- package/es/vxe-slider/style.css +143 -0
- package/es/vxe-slider/style.min.css +1 -0
- package/lib/avatar/style/style.css +0 -5
- package/lib/avatar/style/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +486 -38
- package/lib/index.umd.min.js +1 -1
- package/lib/slider/src/slider.js +279 -7
- package/lib/slider/src/slider.min.js +1 -1
- package/lib/slider/style/style.css +143 -0
- package/lib/slider/style/style.min.css +1 -0
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tabs/src/tabs.js +51 -29
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/ui/index.js +5 -2
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-avatar/style/style.css +0 -5
- package/lib/vxe-avatar/style/style.min.css +1 -1
- package/lib/vxe-slider/style/style.css +143 -0
- package/lib/vxe-slider/style/style.min.css +1 -0
- package/package.json +1 -1
- package/packages/slider/src/slider.ts +286 -7
- package/packages/tabs/src/tabs.ts +26 -14
- package/packages/ui/index.ts +4 -1
- package/styles/components/avatar.scss +3 -8
- package/styles/components/slider.scss +138 -0
- package/types/components/slider.d.ts +27 -2
- package/types/components/switch.d.ts +1 -1
- package/types/components/tabs.d.ts +8 -2
- /package/es/icon/style/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
- /package/es/icon/style/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
- /package/es/icon/style/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
- /package/es/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
- /package/es/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
- /package/es/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
- /package/lib/icon/style/{iconfont.1728032194284.woff2 → iconfont.1728223060971.woff2} +0 -0
- /package/lib/{iconfont.1728032194284.ttf → iconfont.1728223060971.ttf} +0 -0
- /package/lib/{iconfont.1728032194284.woff → iconfont.1728223060971.woff} +0 -0
- /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
|
|
258
|
+
const props = $xeSlider
|
|
36
259
|
|
|
37
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
|
|
321
|
-
$xeTabs
|
|
322
|
-
|
|
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
|
package/packages/ui/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
$
|
|
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($
|
|
68
|
-
$item: nth($
|
|
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
|
|
File without changes
|
|
File without changes
|