vxe-pc-ui 3.17.19 → 3.17.21
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/components.js +31 -1
- package/es/icon/style.css +1 -1
- package/es/slider/src/slider.js +220 -82
- package/es/slider/style.css +8 -15
- package/es/slider/style.min.css +1 -1
- package/es/space/index.js +12 -0
- package/es/space/src/space.js +143 -0
- package/es/space/style.css +37 -0
- package/es/space/style.min.css +1 -0
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/ui/index.js +2 -1
- package/es/ui/src/dom.js +3 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-slider/style.css +8 -15
- package/es/vxe-slider/style.min.css +1 -1
- package/es/vxe-space/index.js +3 -0
- package/es/vxe-space/style.css +37 -0
- package/es/vxe-space/style.min.css +1 -0
- package/lib/components.js +41 -2
- package/lib/components.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +462 -91
- package/lib/index.umd.min.js +1 -1
- package/lib/slider/src/slider.js +237 -87
- package/lib/slider/src/slider.min.js +1 -1
- package/lib/slider/style/style.css +8 -15
- package/lib/slider/style/style.min.css +1 -1
- package/lib/space/index.js +19 -0
- package/lib/space/index.min.js +1 -0
- package/lib/space/src/space.js +172 -0
- package/lib/space/src/space.min.js +1 -0
- package/lib/space/style/index.js +1 -0
- package/lib/space/style/style.css +37 -0
- package/lib/space/style/style.min.css +1 -0
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/ui/index.js +2 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +4 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-slider/style/style.css +8 -15
- package/lib/vxe-slider/style/style.min.css +1 -1
- package/lib/vxe-space/index.js +22 -0
- package/lib/vxe-space/index.min.js +1 -0
- package/lib/vxe-space/style/index.js +1 -0
- package/lib/vxe-space/style/style.css +37 -0
- package/lib/vxe-space/style/style.min.css +1 -0
- package/package.json +2 -2
- package/packages/components.ts +31 -1
- package/packages/slider/src/slider.ts +226 -80
- package/packages/space/index.ts +16 -0
- package/packages/space/src/space.ts +159 -0
- package/packages/ui/index.ts +1 -0
- package/packages/ui/src/dom.ts +4 -0
- package/styles/all.scss +1 -0
- package/styles/components/slider.scss +8 -13
- package/styles/components/space.scss +38 -0
- package/styles/theme/base.scss +20 -6
- package/types/all.d.ts +3 -0
- package/types/components/slider.d.ts +13 -0
- package/types/components/space.d.ts +102 -0
- package/types/ui/global-config.d.ts +2 -0
- /package/es/icon/{iconfont.1787739873173.ttf → iconfont.1787994741699.ttf} +0 -0
- /package/es/icon/{iconfont.1787739873173.woff → iconfont.1787994741699.woff} +0 -0
- /package/es/icon/{iconfont.1787739873173.woff2 → iconfont.1787994741699.woff2} +0 -0
- /package/es/{iconfont.1787739873173.ttf → iconfont.1787994741699.ttf} +0 -0
- /package/es/{iconfont.1787739873173.woff → iconfont.1787994741699.woff} +0 -0
- /package/es/{iconfont.1787739873173.woff2 → iconfont.1787994741699.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1787739873173.ttf → iconfont.1787994741699.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1787739873173.woff → iconfont.1787994741699.woff} +0 -0
- /package/lib/icon/style/{iconfont.1787739873173.woff2 → iconfont.1787994741699.woff2} +0 -0
- /package/lib/{iconfont.1787739873173.ttf → iconfont.1787994741699.ttf} +0 -0
- /package/lib/{iconfont.1787739873173.woff → iconfont.1787994741699.woff} +0 -0
- /package/lib/{iconfont.1787739873173.woff2 → iconfont.1787994741699.woff2} +0 -0
|
@@ -3,7 +3,21 @@ import { defineVxeComponent } from '../../ui/src/comp'
|
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
4
|
import { getConfig, createEvent, renderEmptyElement } from '../../ui'
|
|
5
5
|
|
|
6
|
-
import type { SliderReactData, VxeSliderEmits, ValueOf, VxeSliderPropTypes, VxeFormDefines, VxeComponentSizeType, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
|
|
6
|
+
import type { SliderReactData, SliderInternalData, VxeSliderEmits, ValueOf, VxeSliderPropTypes, VxeFormDefines, VxeComponentSizeType, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
|
|
7
|
+
|
|
8
|
+
function createInternalData (): SliderInternalData {
|
|
9
|
+
return {
|
|
10
|
+
// _isUp: false,
|
|
11
|
+
currValue: 0,
|
|
12
|
+
startValue: 0,
|
|
13
|
+
endValue: 0
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function createReactData (): SliderReactData {
|
|
18
|
+
return {
|
|
19
|
+
}
|
|
20
|
+
}
|
|
7
21
|
|
|
8
22
|
export default /* define-vxe-component start */ defineVxeComponent({
|
|
9
23
|
name: 'VxeSlider',
|
|
@@ -13,6 +27,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
13
27
|
},
|
|
14
28
|
props: {
|
|
15
29
|
value: [String, Number, Array] as PropType<VxeSliderPropTypes.ModelValue>,
|
|
30
|
+
startValue: [String, Number] as PropType<VxeSliderPropTypes.StartValue>,
|
|
31
|
+
endValue: [String, Number] as PropType<VxeSliderPropTypes.EndValue>,
|
|
16
32
|
vertical: Boolean as PropType<VxeSliderPropTypes.Vertical>,
|
|
17
33
|
max: {
|
|
18
34
|
type: [String, Number] as PropType<VxeSliderPropTypes.Max>,
|
|
@@ -41,6 +57,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
41
57
|
disabled: {
|
|
42
58
|
type: Boolean as PropType<VxeSliderPropTypes.Disabled>,
|
|
43
59
|
default: null
|
|
60
|
+
},
|
|
61
|
+
immediate: {
|
|
62
|
+
type: Boolean as PropType<VxeSliderPropTypes.Immediate>,
|
|
63
|
+
default: () => getConfig().slider.immediate
|
|
44
64
|
}
|
|
45
65
|
},
|
|
46
66
|
inject: {
|
|
@@ -54,11 +74,11 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
54
74
|
},
|
|
55
75
|
data () {
|
|
56
76
|
const xID = XEUtils.uniqueId()
|
|
57
|
-
const reactData
|
|
58
|
-
startValue: 0,
|
|
59
|
-
endValue: 0
|
|
60
|
-
}
|
|
77
|
+
const reactData = createReactData()
|
|
61
78
|
return {
|
|
79
|
+
...({} as {
|
|
80
|
+
internalData: SliderInternalData,
|
|
81
|
+
}),
|
|
62
82
|
xID,
|
|
63
83
|
reactData
|
|
64
84
|
}
|
|
@@ -108,6 +128,13 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
108
128
|
const props = $xeSlider
|
|
109
129
|
|
|
110
130
|
return XEUtils.toNumber(props.min || 0)
|
|
131
|
+
},
|
|
132
|
+
computeMVal () {
|
|
133
|
+
const $xeSlider = this
|
|
134
|
+
const props = $xeSlider
|
|
135
|
+
|
|
136
|
+
const { range, startValue, endValue } = props
|
|
137
|
+
return range ? `${startValue || ''}${endValue || ''}` : ''
|
|
111
138
|
}
|
|
112
139
|
},
|
|
113
140
|
methods: {
|
|
@@ -120,141 +147,230 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
120
147
|
},
|
|
121
148
|
emitModel (value: any) {
|
|
122
149
|
const $xeSlider = this
|
|
150
|
+
const internalData = $xeSlider.internalData
|
|
123
151
|
|
|
124
152
|
const { _events } = $xeSlider as any
|
|
153
|
+
internalData._isUp = true
|
|
125
154
|
if (_events && _events.modelValue) {
|
|
126
155
|
$xeSlider.$emit('modelValue', value)
|
|
127
156
|
} else {
|
|
128
157
|
$xeSlider.$emit('model-value', value)
|
|
129
158
|
}
|
|
130
159
|
},
|
|
131
|
-
|
|
160
|
+
getBarPercent (currValue: number) {
|
|
132
161
|
const $xeSlider = this
|
|
133
|
-
const props = $xeSlider
|
|
134
162
|
|
|
135
|
-
const { range } = props
|
|
136
163
|
const maxNum = $xeSlider.computeMaxNum
|
|
137
164
|
const minNum = $xeSlider.computeMinNum
|
|
138
|
-
|
|
165
|
+
if (maxNum === minNum) {
|
|
166
|
+
return 0
|
|
167
|
+
}
|
|
168
|
+
if (currValue < minNum) {
|
|
169
|
+
currValue = minNum
|
|
170
|
+
}
|
|
171
|
+
if (currValue > maxNum) {
|
|
172
|
+
currValue = maxNum
|
|
173
|
+
}
|
|
174
|
+
return ((currValue - minNum) / (maxNum - minNum)) * 100
|
|
139
175
|
},
|
|
140
|
-
|
|
176
|
+
parseFields (startValue?: VxeSliderPropTypes.StartValue, endValue?: VxeSliderPropTypes.EndValue) {
|
|
141
177
|
const $xeSlider = this
|
|
142
|
-
const
|
|
178
|
+
const internalData = $xeSlider.internalData
|
|
143
179
|
|
|
144
|
-
const
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
180
|
+
const [sVal, eVal] = XEUtils.orderBy([XEUtils.toNumber(startValue), XEUtils.toNumber(endValue)])
|
|
181
|
+
const currValue = XEUtils.floor(XEUtils.toNumber(sVal || 0))
|
|
182
|
+
internalData.currValue = currValue
|
|
183
|
+
internalData.startValue = currValue
|
|
184
|
+
internalData.endValue = XEUtils.floor(XEUtils.toNumber(eVal || 0))
|
|
148
185
|
},
|
|
149
|
-
|
|
186
|
+
parseArrs (arrVals: number[]) {
|
|
187
|
+
const $xeSlider = this
|
|
188
|
+
const internalData = $xeSlider.internalData
|
|
189
|
+
|
|
190
|
+
const [sVal, eVal] = XEUtils.orderBy(arrVals)
|
|
191
|
+
const currValue = XEUtils.floor(XEUtils.toNumber(sVal || 0))
|
|
192
|
+
internalData.currValue = currValue
|
|
193
|
+
internalData.startValue = currValue
|
|
194
|
+
internalData.endValue = XEUtils.floor(XEUtils.toNumber(eVal || 0))
|
|
195
|
+
},
|
|
196
|
+
parseNum (val: VxeSliderPropTypes.ModelValue | undefined) {
|
|
197
|
+
const $xeSlider = this
|
|
198
|
+
const internalData = $xeSlider.internalData
|
|
199
|
+
|
|
200
|
+
const currValue = XEUtils.floor(XEUtils.toNumber(val || 0))
|
|
201
|
+
internalData.currValue = currValue
|
|
202
|
+
internalData.startValue = 0
|
|
203
|
+
internalData.endValue = currValue
|
|
204
|
+
},
|
|
205
|
+
updateModelValue (umType?: 1 | 2) {
|
|
150
206
|
const $xeSlider = this
|
|
151
207
|
const props = $xeSlider
|
|
152
|
-
const reactData = $xeSlider.reactData
|
|
153
208
|
|
|
154
|
-
const { value } = props
|
|
155
|
-
if (
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
209
|
+
const { range, value: modelValue, startValue, endValue } = props
|
|
210
|
+
if (!umType) {
|
|
211
|
+
if (range) {
|
|
212
|
+
if (XEUtils.eqNull(modelValue)) {
|
|
213
|
+
if (startValue || endValue) {
|
|
214
|
+
$xeSlider.parseFields(startValue, endValue)
|
|
215
|
+
}
|
|
216
|
+
} else {
|
|
217
|
+
if (XEUtils.isArray(modelValue)) {
|
|
218
|
+
$xeSlider.parseArrs(modelValue.map(num => XEUtils.toNumber(num)))
|
|
219
|
+
} else {
|
|
220
|
+
$xeSlider.parseNum(modelValue)
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
} else {
|
|
224
|
+
$xeSlider.parseNum(modelValue)
|
|
225
|
+
}
|
|
226
|
+
} else if (range && umType === 2) {
|
|
227
|
+
$xeSlider.parseFields(startValue, endValue)
|
|
159
228
|
} else {
|
|
160
|
-
|
|
161
|
-
|
|
229
|
+
if (XEUtils.isArray(modelValue)) {
|
|
230
|
+
$xeSlider.parseArrs(modelValue.map(num => XEUtils.toNumber(num)))
|
|
231
|
+
} else {
|
|
232
|
+
$xeSlider.parseNum(modelValue)
|
|
233
|
+
}
|
|
162
234
|
}
|
|
235
|
+
$xeSlider.updateBarStyle()
|
|
236
|
+
$xeSlider.updateTrackStyle()
|
|
163
237
|
},
|
|
164
238
|
updateBarStyle () {
|
|
165
239
|
const $xeSlider = this
|
|
166
|
-
const
|
|
240
|
+
const props = $xeSlider
|
|
241
|
+
const internalData = $xeSlider.internalData
|
|
167
242
|
|
|
168
|
-
const {
|
|
169
|
-
const
|
|
243
|
+
const { range } = props
|
|
244
|
+
const { currValue, startValue, endValue } = internalData
|
|
170
245
|
const startBtnElem = $xeSlider.$refs.refStartBtnElem as HTMLDivElement
|
|
171
246
|
const endBtnElem = $xeSlider.$refs.refEndBtnElem as HTMLDivElement
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
247
|
+
if (range) {
|
|
248
|
+
const [sVal, eVal] = XEUtils.orderBy([startValue, endValue])
|
|
249
|
+
if (startBtnElem) {
|
|
250
|
+
startBtnElem.style.left = $xeSlider.getBarPercent(sVal) + '%'
|
|
251
|
+
}
|
|
252
|
+
if (endBtnElem) {
|
|
253
|
+
endBtnElem.style.left = $xeSlider.getBarPercent(eVal) + '%'
|
|
254
|
+
}
|
|
177
255
|
} else {
|
|
178
|
-
|
|
179
|
-
|
|
256
|
+
if (endBtnElem) {
|
|
257
|
+
endBtnElem.style.left = $xeSlider.getBarPercent(currValue) + '%'
|
|
258
|
+
}
|
|
180
259
|
}
|
|
260
|
+
},
|
|
261
|
+
updateTrackStyle () {
|
|
262
|
+
const $xeSlider = this
|
|
263
|
+
const props = $xeSlider
|
|
264
|
+
const internalData = $xeSlider.internalData
|
|
265
|
+
|
|
266
|
+
const { range } = props
|
|
267
|
+
const { currValue, startValue, endValue } = internalData
|
|
268
|
+
const trackElem = $xeSlider.$refs.refTrackElem as HTMLDivElement
|
|
181
269
|
if (trackElem) {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
270
|
+
if (range) {
|
|
271
|
+
const [sVal, eVal] = XEUtils.orderBy([startValue, endValue])
|
|
272
|
+
trackElem.style.left = $xeSlider.getBarPercent(sVal) + '%'
|
|
273
|
+
trackElem.style.width = $xeSlider.getBarPercent(eVal - sVal) + '%'
|
|
274
|
+
} else {
|
|
275
|
+
trackElem.style.left = '0'
|
|
276
|
+
trackElem.style.width = $xeSlider.getBarPercent(currValue) + '%'
|
|
277
|
+
}
|
|
190
278
|
}
|
|
191
279
|
},
|
|
192
280
|
changeEvent (evnt: MouseEvent) {
|
|
193
281
|
const $xeSlider = this
|
|
194
282
|
const props = $xeSlider
|
|
195
|
-
const
|
|
283
|
+
const internalData = $xeSlider.internalData
|
|
196
284
|
const $xeForm = $xeSlider.$xeForm
|
|
197
285
|
const formItemInfo = $xeSlider.formItemInfo
|
|
198
286
|
|
|
199
287
|
const { range } = props
|
|
200
|
-
const { startValue, endValue } =
|
|
201
|
-
const
|
|
288
|
+
const { currValue, startValue, endValue } = internalData
|
|
289
|
+
const vals = range ? XEUtils.orderBy([startValue, endValue]) : []
|
|
290
|
+
const value = range ? vals : currValue
|
|
202
291
|
$xeSlider.emitModel(value)
|
|
292
|
+
if (range) {
|
|
293
|
+
$xeSlider.$emit('update:startValue', vals[0] || 0)
|
|
294
|
+
$xeSlider.$emit('update:endValue', vals[1] || 0)
|
|
295
|
+
}
|
|
203
296
|
$xeSlider.dispatchEvent('change', { value }, evnt)
|
|
204
297
|
// 自动更新校验状态
|
|
205
298
|
if ($xeForm && formItemInfo) {
|
|
206
299
|
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
|
|
207
300
|
}
|
|
208
301
|
},
|
|
209
|
-
|
|
302
|
+
getValueByLeft (offsetLeft: number, barWidth: number) {
|
|
210
303
|
const $xeSlider = this
|
|
211
|
-
const reactData = $xeSlider.reactData
|
|
212
304
|
|
|
213
|
-
const formReadonly = $xeSlider.computeFormReadonly
|
|
214
|
-
const isDisabled = $xeSlider.computeIsDisabled
|
|
215
305
|
const maxNum = $xeSlider.computeMaxNum
|
|
216
306
|
const minNum = $xeSlider.computeMinNum
|
|
307
|
+
if (barWidth === 0) {
|
|
308
|
+
return minNum
|
|
309
|
+
}
|
|
310
|
+
const clamped = Math.max(0, Math.min(barWidth, offsetLeft))
|
|
311
|
+
const ratio = clamped / barWidth
|
|
312
|
+
const raw = minNum + ratio * (maxNum - minNum)
|
|
313
|
+
return Math.floor(raw)
|
|
314
|
+
},
|
|
315
|
+
handleBtnMousedownEvent (evnt: MouseEvent) {
|
|
316
|
+
const $xeSlider = this
|
|
317
|
+
const props = $xeSlider
|
|
318
|
+
const internalData = $xeSlider.internalData
|
|
319
|
+
|
|
320
|
+
const { range, immediate } = props
|
|
321
|
+
const btnElem = evnt.currentTarget as HTMLDivElement
|
|
322
|
+
const formReadonly = $xeSlider.computeFormReadonly
|
|
323
|
+
const isDisabled = $xeSlider.computeIsDisabled
|
|
217
324
|
if (!(formReadonly || isDisabled)) {
|
|
218
325
|
evnt.preventDefault()
|
|
219
326
|
document.onmousemove = evnt => {
|
|
220
327
|
evnt.preventDefault()
|
|
328
|
+
const el = $xeSlider.$refs.refElem as HTMLDivElement
|
|
221
329
|
const barElem = $xeSlider.$refs.refBarElem as HTMLDivElement
|
|
222
|
-
if (barElem) {
|
|
330
|
+
if (el && barElem) {
|
|
331
|
+
const btnType = btnElem.getAttribute('data-type')
|
|
223
332
|
const barRect = barElem.getBoundingClientRect()
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
333
|
+
const barWidth = barRect.width
|
|
334
|
+
const offsetLeft = Math.min(barWidth, Math.max(0, evnt.clientX - barRect.left))
|
|
335
|
+
const currValue = $xeSlider.getValueByLeft(offsetLeft, barWidth)
|
|
336
|
+
if (range) {
|
|
337
|
+
if (btnType === '1') {
|
|
338
|
+
internalData.startValue = currValue
|
|
339
|
+
} else {
|
|
340
|
+
internalData.endValue = currValue
|
|
341
|
+
}
|
|
229
342
|
}
|
|
230
|
-
|
|
343
|
+
internalData.currValue = currValue
|
|
344
|
+
btnElem.style.left = $xeSlider.getBarPercent(currValue) + '%'
|
|
345
|
+
$xeSlider.dispatchEvent('track-dragover', {
|
|
346
|
+
currentValue: internalData.currValue,
|
|
347
|
+
startValue: internalData.startValue,
|
|
348
|
+
endValue: internalData.endValue
|
|
349
|
+
}, evnt)
|
|
350
|
+
}
|
|
351
|
+
if (immediate) {
|
|
352
|
+
$xeSlider.changeEvent(evnt)
|
|
231
353
|
}
|
|
232
|
-
$xeSlider.
|
|
354
|
+
$xeSlider.updateTrackStyle()
|
|
233
355
|
}
|
|
234
356
|
document.onmouseup = (evnt: MouseEvent) => {
|
|
235
357
|
document.onmousemove = null
|
|
236
358
|
document.onmouseup = null
|
|
237
|
-
$xeSlider.dispatchEvent('track-dragend', {
|
|
359
|
+
$xeSlider.dispatchEvent('track-dragend', {
|
|
360
|
+
currentValue: internalData.currValue,
|
|
361
|
+
startValue: internalData.startValue,
|
|
362
|
+
endValue: internalData.endValue
|
|
363
|
+
}, evnt)
|
|
238
364
|
$xeSlider.changeEvent(evnt)
|
|
239
|
-
$xeSlider.
|
|
365
|
+
$xeSlider.updateTrackStyle()
|
|
240
366
|
}
|
|
241
|
-
$xeSlider.dispatchEvent('track-dragstart', {
|
|
367
|
+
$xeSlider.dispatchEvent('track-dragstart', {
|
|
368
|
+
currentValue: internalData.currValue,
|
|
369
|
+
startValue: internalData.startValue,
|
|
370
|
+
endValue: internalData.endValue
|
|
371
|
+
}, evnt)
|
|
242
372
|
}
|
|
243
373
|
},
|
|
244
|
-
handleStartMousedownEvent (evnt: MouseEvent) {
|
|
245
|
-
const $xeSlider = this
|
|
246
|
-
|
|
247
|
-
const endBtnElem = $xeSlider.$refs.refEndBtnElem as HTMLDivElement
|
|
248
|
-
const startBtnElem = evnt.currentTarget as HTMLDivElement
|
|
249
|
-
$xeSlider.handleMousedownEvent(evnt, endBtnElem ? endBtnElem.offsetLeft < startBtnElem.offsetLeft : false)
|
|
250
|
-
},
|
|
251
|
-
handleEndMousedownEvent (evnt: MouseEvent) {
|
|
252
|
-
const $xeSlider = this
|
|
253
|
-
|
|
254
|
-
const startBtnElem = $xeSlider.$refs.refStartBtnElem as HTMLDivElement
|
|
255
|
-
const endBtnElem = evnt.currentTarget as HTMLDivElement
|
|
256
|
-
$xeSlider.handleMousedownEvent(evnt, startBtnElem ? endBtnElem.offsetLeft > startBtnElem.offsetLeft : true)
|
|
257
|
-
},
|
|
258
374
|
|
|
259
375
|
//
|
|
260
376
|
// Render
|
|
@@ -291,18 +407,24 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
291
407
|
? renderEmptyElement($xeSlider)
|
|
292
408
|
: h('div', {
|
|
293
409
|
ref: 'refStartBtnElem',
|
|
294
|
-
class: 'vxe-slider--bar-btn
|
|
410
|
+
class: 'vxe-slider--bar-btn',
|
|
411
|
+
attrs: {
|
|
412
|
+
'data-type': '1'
|
|
413
|
+
},
|
|
295
414
|
on: {
|
|
296
|
-
mousedown: $xeSlider.
|
|
415
|
+
mousedown: $xeSlider.handleBtnMousedownEvent
|
|
297
416
|
}
|
|
298
417
|
}),
|
|
299
418
|
formReadonly
|
|
300
419
|
? renderEmptyElement($xeSlider)
|
|
301
420
|
: h('div', {
|
|
302
421
|
ref: 'refEndBtnElem',
|
|
303
|
-
class: 'vxe-slider--bar-btn
|
|
422
|
+
class: 'vxe-slider--bar-btn',
|
|
423
|
+
attrs: {
|
|
424
|
+
'data-type': '2'
|
|
425
|
+
},
|
|
304
426
|
on: {
|
|
305
|
-
mousedown: $xeSlider.
|
|
427
|
+
mousedown: $xeSlider.handleBtnMousedownEvent
|
|
306
428
|
}
|
|
307
429
|
})
|
|
308
430
|
])
|
|
@@ -312,19 +434,43 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
312
434
|
watch: {
|
|
313
435
|
value () {
|
|
314
436
|
const $xeSlider = this
|
|
437
|
+
const internalData = $xeSlider.internalData
|
|
315
438
|
|
|
316
|
-
|
|
439
|
+
if (!internalData._isUp) {
|
|
440
|
+
$xeSlider.updateModelValue(1)
|
|
441
|
+
}
|
|
442
|
+
internalData._isUp = false
|
|
443
|
+
},
|
|
444
|
+
computeMVal () {
|
|
445
|
+
const $xeSlider = this
|
|
446
|
+
const internalData = $xeSlider.internalData
|
|
447
|
+
|
|
448
|
+
if (!internalData._isUp) {
|
|
449
|
+
$xeSlider.updateModelValue(2)
|
|
450
|
+
}
|
|
451
|
+
internalData._isUp = false
|
|
317
452
|
}
|
|
318
453
|
},
|
|
319
454
|
created () {
|
|
320
455
|
const $xeSlider = this
|
|
321
456
|
|
|
322
|
-
$xeSlider.
|
|
457
|
+
$xeSlider.internalData = createInternalData()
|
|
458
|
+
|
|
459
|
+
$xeSlider.updateModelValue()
|
|
323
460
|
},
|
|
324
461
|
mounted () {
|
|
325
462
|
const $xeSlider = this
|
|
326
463
|
|
|
327
464
|
$xeSlider.updateBarStyle()
|
|
465
|
+
$xeSlider.updateTrackStyle()
|
|
466
|
+
},
|
|
467
|
+
beforeDestroy () {
|
|
468
|
+
const $xeSlider = this
|
|
469
|
+
const reactData = $xeSlider.reactData
|
|
470
|
+
const internalData = $xeSlider.internalData
|
|
471
|
+
|
|
472
|
+
XEUtils.assign(reactData, createReactData())
|
|
473
|
+
XEUtils.assign(internalData, createInternalData())
|
|
328
474
|
},
|
|
329
475
|
render (this: any, h) {
|
|
330
476
|
return this.renderVN(h)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { VueConstructor } from 'vue'
|
|
2
|
+
import { VxeUI } from '@vxe-ui/core'
|
|
3
|
+
import VxeSpaceComponent from './src/space'
|
|
4
|
+
import { dynamicApp } from '../dynamics'
|
|
5
|
+
|
|
6
|
+
export const VxeSpace = Object.assign({}, VxeSpaceComponent, {
|
|
7
|
+
install (app: VueConstructor) {
|
|
8
|
+
app.component(VxeSpaceComponent.name as string, VxeSpaceComponent)
|
|
9
|
+
}
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
dynamicApp.use(VxeSpace)
|
|
13
|
+
VxeUI.component(VxeSpaceComponent)
|
|
14
|
+
|
|
15
|
+
export const Space = VxeSpace
|
|
16
|
+
export default VxeSpace
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { CreateElement, VNode, PropType } from 'vue'
|
|
2
|
+
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
|
+
import XEUtils from 'xe-utils'
|
|
4
|
+
import { getConfig, createEvent, globalMixins } from '../../ui'
|
|
5
|
+
import { getPropClass, toCssUnit } from '../../ui/src/dom'
|
|
6
|
+
import { eqEmptyValue } from '../../ui/src/utils'
|
|
7
|
+
|
|
8
|
+
import type { SpaceReactData, VxeSpaceEmits, VxeSpacePropTypes, ValueOf, VxeComponentSizeType, VxeComponentPermissionInfo, VxeComponentStyleType } from '../../../types'
|
|
9
|
+
|
|
10
|
+
export default /* define-vxe-component start */ defineVxeComponent({
|
|
11
|
+
name: 'VxeSpace',
|
|
12
|
+
mixins: [
|
|
13
|
+
globalMixins.sizeMixin,
|
|
14
|
+
globalMixins.permissionMixin
|
|
15
|
+
],
|
|
16
|
+
props: {
|
|
17
|
+
size: {
|
|
18
|
+
type: String as PropType<VxeSpacePropTypes.Size>,
|
|
19
|
+
default: () => getConfig().space.size || getConfig().size
|
|
20
|
+
},
|
|
21
|
+
wrap: {
|
|
22
|
+
type: Boolean as PropType<VxeSpacePropTypes.Wrap>,
|
|
23
|
+
default: () => getConfig().space.wrap
|
|
24
|
+
},
|
|
25
|
+
gap: {
|
|
26
|
+
type: [Number, String, Array, Object] as PropType<VxeSpacePropTypes.Gap>,
|
|
27
|
+
default: () => getConfig().space.gap
|
|
28
|
+
},
|
|
29
|
+
vertical: {
|
|
30
|
+
type: Boolean as PropType<VxeSpacePropTypes.Vertical>,
|
|
31
|
+
default: () => getConfig().space.vertical
|
|
32
|
+
},
|
|
33
|
+
className: {
|
|
34
|
+
type: String as PropType<VxeSpacePropTypes.ClassName>,
|
|
35
|
+
default: () => getConfig().space.className
|
|
36
|
+
},
|
|
37
|
+
itemClassName: {
|
|
38
|
+
type: String as PropType<VxeSpacePropTypes.ItemClassName>,
|
|
39
|
+
default: () => getConfig().space.itemClassName
|
|
40
|
+
},
|
|
41
|
+
separator: {
|
|
42
|
+
type: String as PropType<VxeSpacePropTypes.Separator>,
|
|
43
|
+
default: () => getConfig().space.separator
|
|
44
|
+
},
|
|
45
|
+
align: {
|
|
46
|
+
type: String as PropType<VxeSpacePropTypes.Align>,
|
|
47
|
+
default: () => getConfig().space.align
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
data () {
|
|
51
|
+
const xID = XEUtils.uniqueId()
|
|
52
|
+
const reactData: SpaceReactData = {
|
|
53
|
+
activeValue: null
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
xID,
|
|
57
|
+
reactData
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
computed: {
|
|
61
|
+
...({} as {
|
|
62
|
+
computePermissionInfo(): VxeComponentPermissionInfo
|
|
63
|
+
computeSize(): VxeComponentSizeType
|
|
64
|
+
}),
|
|
65
|
+
computeWrapperStyle () {
|
|
66
|
+
const $xeSpace = this
|
|
67
|
+
const props = $xeSpace
|
|
68
|
+
|
|
69
|
+
const { align, gap } = props
|
|
70
|
+
const stys: VxeComponentStyleType = {}
|
|
71
|
+
let rowGap: string | number = ''
|
|
72
|
+
let columGap: string | number = ''
|
|
73
|
+
if (XEUtils.isNumber(gap) || XEUtils.isString(gap)) {
|
|
74
|
+
rowGap = gap
|
|
75
|
+
columGap = gap
|
|
76
|
+
} else if (gap) {
|
|
77
|
+
if (XEUtils.isArray(gap)) {
|
|
78
|
+
rowGap = gap[0]
|
|
79
|
+
columGap = gap[1]
|
|
80
|
+
} else {
|
|
81
|
+
rowGap = gap.rowGap || ''
|
|
82
|
+
columGap = gap.columGap || ''
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (align) {
|
|
86
|
+
stys['align-items'] = align
|
|
87
|
+
}
|
|
88
|
+
if (!eqEmptyValue(rowGap)) {
|
|
89
|
+
stys['--vxe-ui-space-current-row-gap'] = toCssUnit(rowGap)
|
|
90
|
+
}
|
|
91
|
+
if (!eqEmptyValue(columGap)) {
|
|
92
|
+
stys['--vxe-ui-space-current-column-gap'] = toCssUnit(columGap)
|
|
93
|
+
}
|
|
94
|
+
return stys
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
methods: {
|
|
98
|
+
//
|
|
99
|
+
// Method
|
|
100
|
+
//
|
|
101
|
+
dispatchEvent (type: ValueOf<VxeSpaceEmits>, params: Record<string, any>, evnt: Event | null) {
|
|
102
|
+
const $xeSpace = this
|
|
103
|
+
$xeSpace.$emit(type, createEvent(evnt, { $space: $xeSpace }, params))
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
//
|
|
107
|
+
// Render
|
|
108
|
+
//
|
|
109
|
+
renderItems (h: CreateElement) {
|
|
110
|
+
const $xeSpace = this
|
|
111
|
+
const props = $xeSpace
|
|
112
|
+
const slots = $xeSpace.$scopedSlots
|
|
113
|
+
|
|
114
|
+
const { separator, itemClassName } = props
|
|
115
|
+
const itemVNs: VNode[] = []
|
|
116
|
+
const defaultSlot = slots.default
|
|
117
|
+
const separatorSlot = slots.separator
|
|
118
|
+
if (defaultSlot) {
|
|
119
|
+
XEUtils.each(defaultSlot({}), (itemVN, index, items) => {
|
|
120
|
+
itemVNs.push(
|
|
121
|
+
h('div', {
|
|
122
|
+
key: 'i' + index,
|
|
123
|
+
class: ['vxe-space--item', getPropClass(itemClassName, { index })]
|
|
124
|
+
}, [itemVN])
|
|
125
|
+
)
|
|
126
|
+
if ((separator || separatorSlot) && index < items.length - 1) {
|
|
127
|
+
itemVNs.push(
|
|
128
|
+
h('div', {
|
|
129
|
+
key: 's' + index,
|
|
130
|
+
class: 'vxe-space--separator'
|
|
131
|
+
}, separatorSlot ? separatorSlot({}) : ('' + separator))
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
return itemVNs
|
|
137
|
+
},
|
|
138
|
+
renderVN (h: CreateElement): VNode {
|
|
139
|
+
const $xeSpace = this
|
|
140
|
+
const props = $xeSpace
|
|
141
|
+
|
|
142
|
+
const { vertical, wrap, className } = props
|
|
143
|
+
const wrapperStyle = $xeSpace.computeWrapperStyle
|
|
144
|
+
const vSize = $xeSpace.computeSize
|
|
145
|
+
return h('div', {
|
|
146
|
+
ref: 'refElem',
|
|
147
|
+
class: ['vxe-space', getPropClass(className, {}), {
|
|
148
|
+
[`size--${vSize}`]: vSize,
|
|
149
|
+
'is--wrap': wrap,
|
|
150
|
+
'is--vertical': vertical
|
|
151
|
+
}],
|
|
152
|
+
style: wrapperStyle
|
|
153
|
+
}, $xeSpace.renderItems(h))
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
render (this: any, h) {
|
|
157
|
+
return this.renderVN(h)
|
|
158
|
+
}
|
|
159
|
+
}) /* define-vxe-component end */
|
package/packages/ui/index.ts
CHANGED
package/packages/ui/src/dom.ts
CHANGED
|
@@ -17,6 +17,10 @@ export function getTpImg () {
|
|
|
17
17
|
return tpImgEl
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
export function getPropClass (property: any, params: any) {
|
|
21
|
+
return property ? (XEUtils.isFunction(property) ? property(params) : property) || '' : ''
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
const reClsMap: { [key: string]: any } = {}
|
|
21
25
|
|
|
22
26
|
function getClsRE (cls: any) {
|
package/styles/all.scss
CHANGED