vxe-pc-ui 4.17.13 → 4.17.15
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/README.md +1 -1
- package/dist/all.esm.js +57 -16
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/backtop/src/backtop.js +1 -4
- package/es/icon/style.css +1 -1
- package/es/input/src/input.js +4 -0
- package/es/input/style.css +2 -2
- package/es/input/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/textarea/src/textarea.js +49 -11
- package/es/textarea/style.css +23 -1
- package/es/textarea/style.min.css +1 -1
- package/es/ui/index.js +3 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-input/style.css +2 -2
- package/es/vxe-input/style.min.css +1 -1
- package/es/vxe-textarea/style.css +23 -1
- package/es/vxe-textarea/style.min.css +1 -1
- package/lib/backtop/src/backtop.js +1 -4
- package/lib/backtop/src/backtop.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 +46 -12
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +3 -0
- package/lib/input/src/input.min.js +1 -1
- package/lib/input/style/style.css +2 -2
- package/lib/input/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/textarea/src/textarea.js +38 -6
- package/lib/textarea/src/textarea.min.js +1 -1
- package/lib/textarea/style/style.css +23 -1
- package/lib/textarea/style/style.min.css +1 -1
- package/lib/ui/index.js +3 -1
- 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-input/style/style.css +2 -2
- package/lib/vxe-input/style/style.min.css +1 -1
- package/lib/vxe-textarea/style/style.css +23 -1
- package/lib/vxe-textarea/style/style.min.css +1 -1
- package/package.json +3 -3
- package/packages/backtop/src/backtop.ts +1 -4
- package/packages/input/src/input.ts +3 -0
- package/packages/textarea/src/textarea.ts +49 -11
- package/packages/ui/index.ts +3 -0
- package/styles/components/input.scss +2 -2
- package/styles/components/textarea.scss +31 -1
- package/types/components/grid.d.ts +5 -5
- package/types/components/textarea.d.ts +5 -0
- package/types/ui/global-icon.d.ts +3 -0
- /package/es/icon/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
- /package/es/icon/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
- /package/es/icon/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
- /package/es/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
- /package/es/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
- /package/es/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
- /package/lib/icon/style/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
- /package/lib/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
- /package/lib/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
- /package/lib/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
|
@@ -211,11 +211,8 @@ export default defineVxeComponent({
|
|
|
211
211
|
return
|
|
212
212
|
}
|
|
213
213
|
if (XEUtils.isString(target)) {
|
|
214
|
-
const tEl = document.querySelector<HTMLElement>(target)
|
|
215
|
-
if (!tEl) {
|
|
216
|
-
errLog('vxe.error.errProp', [`target=${target}`, 'body'])
|
|
217
|
-
}
|
|
218
214
|
const { targetEl } = internalData
|
|
215
|
+
const tEl = document.querySelector<HTMLElement>(target) || document.body
|
|
219
216
|
if (targetEl !== tEl) {
|
|
220
217
|
removeScrollEvent()
|
|
221
218
|
internalData.targetEl = tEl
|
|
@@ -918,6 +918,8 @@ export default defineVxeComponent({
|
|
|
918
918
|
const value = inputValue
|
|
919
919
|
if (!inpImmediate) {
|
|
920
920
|
handleChange(value, evnt)
|
|
921
|
+
} else {
|
|
922
|
+
updateDomValue()
|
|
921
923
|
}
|
|
922
924
|
afterCheckValue()
|
|
923
925
|
if (!reactData.visiblePanel) {
|
|
@@ -2703,6 +2705,7 @@ export default defineVxeComponent({
|
|
|
2703
2705
|
'is--prefix': !!prefix,
|
|
2704
2706
|
'is--suffix': !!suffix,
|
|
2705
2707
|
'is--visible': visiblePanel,
|
|
2708
|
+
'is--clear': isClearable,
|
|
2706
2709
|
'is--count': isWordCount,
|
|
2707
2710
|
'is--disabled': isDisabled,
|
|
2708
2711
|
'is--active': isActivated,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h, ref, Ref, computed, nextTick, watch, PropType, reactive, inject, onMounted } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { getConfig, getI18n, createEvent, useSize } from '../../ui'
|
|
4
|
+
import { getConfig, getIcon, getI18n, createEvent, useSize, renderEmptyElement } from '../../ui'
|
|
5
5
|
import { getFuncText } from '../../ui/src/utils'
|
|
6
6
|
import { createComponentLog } from '../../ui/src/log'
|
|
7
7
|
|
|
@@ -37,6 +37,10 @@ export default defineVxeComponent({
|
|
|
37
37
|
type: Boolean as PropType<VxeTextareaPropTypes.Disabled>,
|
|
38
38
|
default: null
|
|
39
39
|
},
|
|
40
|
+
clearable: {
|
|
41
|
+
type: Boolean as PropType<VxeTextareaPropTypes.Clearable>,
|
|
42
|
+
default: () => getConfig().textarea.clearable
|
|
43
|
+
},
|
|
40
44
|
placeholder: String as PropType<VxeTextareaPropTypes.Placeholder>,
|
|
41
45
|
maxLength: [String, Number] as PropType<VxeTextareaPropTypes.MaxLength>,
|
|
42
46
|
trim: {
|
|
@@ -53,6 +57,10 @@ export default defineVxeComponent({
|
|
|
53
57
|
},
|
|
54
58
|
showWordCount: Boolean as PropType<VxeTextareaPropTypes.ShowWordCount>,
|
|
55
59
|
countMethod: Function as PropType<VxeTextareaPropTypes.CountMethod>,
|
|
60
|
+
autoFocus: {
|
|
61
|
+
type: Boolean as PropType<VxeTextareaPropTypes.AutoFocus>,
|
|
62
|
+
default: null
|
|
63
|
+
},
|
|
56
64
|
/**
|
|
57
65
|
* 已废弃,被 auto-size 替换
|
|
58
66
|
* @deprecated
|
|
@@ -86,6 +94,7 @@ export default defineVxeComponent({
|
|
|
86
94
|
'change',
|
|
87
95
|
'focus',
|
|
88
96
|
'blur',
|
|
97
|
+
'clear',
|
|
89
98
|
'lazy-change'
|
|
90
99
|
] as VxeTextareaEmits,
|
|
91
100
|
setup (props, context) {
|
|
@@ -268,7 +277,7 @@ export default defineVxeComponent({
|
|
|
268
277
|
reactData.inputValue = value
|
|
269
278
|
emit('update:modelValue', value)
|
|
270
279
|
if (XEUtils.toValueString(props.modelValue) !== value) {
|
|
271
|
-
|
|
280
|
+
dispatchEvent('change', { value }, evnt)
|
|
272
281
|
// 自动更新校验状态
|
|
273
282
|
if ($xeForm && formItemInfo) {
|
|
274
283
|
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
|
|
@@ -276,6 +285,15 @@ export default defineVxeComponent({
|
|
|
276
285
|
}
|
|
277
286
|
}
|
|
278
287
|
|
|
288
|
+
const clearValueEvent = (evnt: Event, value: VxeTextareaPropTypes.ModelValue) => {
|
|
289
|
+
const { autoFocus } = props
|
|
290
|
+
if (autoFocus || autoFocus === null) {
|
|
291
|
+
focus()
|
|
292
|
+
}
|
|
293
|
+
handleChange('', evnt)
|
|
294
|
+
dispatchEvent('clear', { value }, evnt)
|
|
295
|
+
}
|
|
296
|
+
|
|
279
297
|
const inputEvent = (evnt: InputEvent) => {
|
|
280
298
|
const { immediate } = props
|
|
281
299
|
const textElem = evnt.target as HTMLTextAreaElement
|
|
@@ -308,6 +326,8 @@ export default defineVxeComponent({
|
|
|
308
326
|
const { inputValue } = reactData
|
|
309
327
|
if (!immediate) {
|
|
310
328
|
handleChange(inputValue, evnt)
|
|
329
|
+
} else {
|
|
330
|
+
updateDomValue()
|
|
311
331
|
}
|
|
312
332
|
dispatchEvent('blur', { value: inputValue }, evnt)
|
|
313
333
|
}
|
|
@@ -329,7 +349,7 @@ export default defineVxeComponent({
|
|
|
329
349
|
Object.assign($xeTextarea, textareaMethods)
|
|
330
350
|
|
|
331
351
|
const renderVN = () => {
|
|
332
|
-
const { className, inputClassName, resize, autosize, autoSize, showWordCount, countMethod, rows, cols } = props
|
|
352
|
+
const { className, inputClassName, resize, autosize, autoSize, showWordCount, countMethod, rows, cols, clearable } = props
|
|
333
353
|
const { inputValue } = reactData
|
|
334
354
|
const vSize = computeSize.value
|
|
335
355
|
const isDisabled = computeIsDisabled.value
|
|
@@ -357,8 +377,10 @@ export default defineVxeComponent({
|
|
|
357
377
|
'is--autosize': autosize || autoSize,
|
|
358
378
|
'is--count': showWordCount,
|
|
359
379
|
'is--disabled': isDisabled,
|
|
380
|
+
'is-clear': clearable,
|
|
360
381
|
'is--rows': !XEUtils.eqNull(rows),
|
|
361
|
-
'is--cols': !XEUtils.eqNull(cols)
|
|
382
|
+
'is--cols': !XEUtils.eqNull(cols),
|
|
383
|
+
'show--clear': clearable && !isDisabled && !(inputValue === '' || XEUtils.eqNull(inputValue))
|
|
362
384
|
}],
|
|
363
385
|
spellcheck: false
|
|
364
386
|
}, [
|
|
@@ -385,13 +407,29 @@ export default defineVxeComponent({
|
|
|
385
407
|
onFocus: triggerEvent,
|
|
386
408
|
onBlur: blurEvent
|
|
387
409
|
}),
|
|
388
|
-
showWordCount
|
|
389
|
-
? h('
|
|
390
|
-
class:
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
410
|
+
clearable || showWordCount
|
|
411
|
+
? h('div', {
|
|
412
|
+
class: 'vxe-textarea--suffix'
|
|
413
|
+
}, [
|
|
414
|
+
clearable
|
|
415
|
+
? h('div', {
|
|
416
|
+
class: 'vxe-textarea--clear-icon',
|
|
417
|
+
onClick: clearValueEvent
|
|
418
|
+
}, [
|
|
419
|
+
h('i', {
|
|
420
|
+
class: getIcon().TEXTAREA_CLEAR
|
|
421
|
+
})
|
|
422
|
+
])
|
|
423
|
+
: renderEmptyElement($xeTextarea),
|
|
424
|
+
showWordCount
|
|
425
|
+
? h('span', {
|
|
426
|
+
class: ['vxe-textarea--count', {
|
|
427
|
+
'is--error': isCountError
|
|
428
|
+
}]
|
|
429
|
+
}, countMethod ? `${countMethod({ value: inputValue })}` : `${inputCount}${inpMaxLength ? `/${inpMaxLength}` : ''}`)
|
|
430
|
+
: renderEmptyElement($xeTextarea)
|
|
431
|
+
])
|
|
432
|
+
: renderEmptyElement($xeTextarea)
|
|
395
433
|
])
|
|
396
434
|
}
|
|
397
435
|
|
package/packages/ui/index.ts
CHANGED
|
@@ -550,6 +550,9 @@ setIcon({
|
|
|
550
550
|
CHECKBOX_UNCHECKED: iconPrefix + 'checkbox-unchecked',
|
|
551
551
|
CHECKBOX_DISABLED_UNCHECKED: iconPrefix + 'checkbox-unchecked-fill',
|
|
552
552
|
|
|
553
|
+
// textarea
|
|
554
|
+
TEXTAREA_CLEAR: iconPrefix + 'error-circle-fill',
|
|
555
|
+
|
|
553
556
|
// input
|
|
554
557
|
INPUT_CLEAR: iconPrefix + 'error-circle-fill',
|
|
555
558
|
INPUT_SEARCH: iconPrefix + 'search',
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
&.show--clear {
|
|
111
111
|
&:hover {
|
|
112
112
|
.vxe-input--clear-icon {
|
|
113
|
-
|
|
113
|
+
visibility: visible;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
cursor: pointer;
|
|
159
159
|
}
|
|
160
160
|
.vxe-input--clear-icon {
|
|
161
|
-
|
|
161
|
+
visibility: hidden;
|
|
162
162
|
&:hover {
|
|
163
163
|
color: var(--vxe-ui-font-color);
|
|
164
164
|
}
|
|
@@ -43,6 +43,21 @@
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
.vxe-textarea {
|
|
47
|
+
&.is-clear {
|
|
48
|
+
.vxe-textarea--inner {
|
|
49
|
+
padding-right: 2em;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
&.show--clear {
|
|
53
|
+
&:hover {
|
|
54
|
+
.vxe-textarea--clear-icon {
|
|
55
|
+
visibility: visible;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
46
61
|
.vxe-textarea--inner,
|
|
47
62
|
.vxe-textarea--autosize,
|
|
48
63
|
.vxe-textarea--content {
|
|
@@ -67,7 +82,7 @@
|
|
|
67
82
|
|
|
68
83
|
.vxe-textarea--count {
|
|
69
84
|
position: absolute;
|
|
70
|
-
bottom: 0.
|
|
85
|
+
bottom: 0.3em;
|
|
71
86
|
right: 1.4em;
|
|
72
87
|
padding-left: 0.2em;
|
|
73
88
|
color: var(--vxe-ui-input-count-color);
|
|
@@ -77,6 +92,21 @@
|
|
|
77
92
|
}
|
|
78
93
|
}
|
|
79
94
|
|
|
95
|
+
.vxe-textarea--clear-icon {
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: 0.3rem;
|
|
98
|
+
right: 1.4em;
|
|
99
|
+
color: var(--vxe-ui-input-placeholder-color);
|
|
100
|
+
cursor: pointer;
|
|
101
|
+
visibility: hidden;
|
|
102
|
+
&:hover {
|
|
103
|
+
color: var(--vxe-ui-font-color);
|
|
104
|
+
}
|
|
105
|
+
&:active {
|
|
106
|
+
color: var(--vxe-ui-font-primary-color);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
80
110
|
.vxe-textarea,
|
|
81
111
|
.vxe-textarea--autosize {
|
|
82
112
|
font-size: var(--vxe-ui-font-size-default);
|
|
@@ -201,7 +201,7 @@ export namespace VxeGridPropTypes {
|
|
|
201
201
|
*/
|
|
202
202
|
ajax?: {
|
|
203
203
|
/**
|
|
204
|
-
*
|
|
204
|
+
* 查询列表数据之前方法,可以返回 false 阻止本次操作
|
|
205
205
|
*/
|
|
206
206
|
beforeQuery?(params: ProxyAjaxQueryParams<D>, ...args: any[]): boolean | Promise<boolean>
|
|
207
207
|
/**
|
|
@@ -222,7 +222,7 @@ export namespace VxeGridPropTypes {
|
|
|
222
222
|
queryError?(params: ProxyAjaxQueryParams<D> & ProxyAjaxResponseParams): void
|
|
223
223
|
|
|
224
224
|
/**
|
|
225
|
-
*
|
|
225
|
+
* 查询全量数据之前方法,可以返回 false 阻止本次操作
|
|
226
226
|
*/
|
|
227
227
|
beforeQueryAll?(params: ProxyAjaxQueryAllParams<D>): boolean | Promise<boolean>
|
|
228
228
|
/**
|
|
@@ -243,7 +243,7 @@ export namespace VxeGridPropTypes {
|
|
|
243
243
|
queryAllError?(params: ProxyAjaxQueryAllParams<D> & ProxyAjaxResponseParams): void
|
|
244
244
|
|
|
245
245
|
/**
|
|
246
|
-
*
|
|
246
|
+
* 查询表尾数据之前方法,可以返回 false 阻止本次操作
|
|
247
247
|
*/
|
|
248
248
|
beforeQueryFooter?(params: ProxyAjaxQueryFooterParams<D>, ...args: any[]): boolean | Promise<boolean>
|
|
249
249
|
/**
|
|
@@ -264,7 +264,7 @@ export namespace VxeGridPropTypes {
|
|
|
264
264
|
queryFooterError?(params: ProxyAjaxQueryFooterParams<D> & ProxyAjaxResponseParams): void
|
|
265
265
|
|
|
266
266
|
/**
|
|
267
|
-
*
|
|
267
|
+
* 删除列表数据之前方法,可以返回 false 阻止本次操作
|
|
268
268
|
*/
|
|
269
269
|
beforeDelete?(params: ProxyAjaxDeleteParams<D>, ...args: any[]): boolean | Promise<boolean>
|
|
270
270
|
/**
|
|
@@ -285,7 +285,7 @@ export namespace VxeGridPropTypes {
|
|
|
285
285
|
deleteError?(params: ProxyAjaxDeleteParams<D> & ProxyAjaxResponseParams): void
|
|
286
286
|
|
|
287
287
|
/**
|
|
288
|
-
*
|
|
288
|
+
* 保存数据之前方法,可以返回 false 阻止本次操作
|
|
289
289
|
*/
|
|
290
290
|
beforeSave?(params: ProxyAjaxSaveParams<D>, ...args: any[]): boolean | Promise<boolean>
|
|
291
291
|
/**
|
|
@@ -33,6 +33,8 @@ export namespace VxeTextareaPropTypes {
|
|
|
33
33
|
export type Readonly = boolean
|
|
34
34
|
export type Editable = boolean
|
|
35
35
|
export type Disabled = boolean
|
|
36
|
+
export type Clearable = boolean
|
|
37
|
+
export type AutoFocus = boolean
|
|
36
38
|
export type Placeholder = string
|
|
37
39
|
export type MaxLength = string | number | null
|
|
38
40
|
export type Trim = boolean
|
|
@@ -94,6 +96,8 @@ export type VxeTextareaProps = {
|
|
|
94
96
|
* 是否禁用
|
|
95
97
|
*/
|
|
96
98
|
disabled?: VxeTextareaPropTypes.Disabled
|
|
99
|
+
clearable?: VxeTextareaPropTypes.Clearable
|
|
100
|
+
autoFocus?: VxeTextareaPropTypes.AutoFocus
|
|
97
101
|
/**
|
|
98
102
|
* 当值为空时,显示的占位符
|
|
99
103
|
*/
|
|
@@ -180,6 +184,7 @@ export type VxeTextareaEmits = [
|
|
|
180
184
|
'change',
|
|
181
185
|
'focus',
|
|
182
186
|
'blur',
|
|
187
|
+
'clear',
|
|
183
188
|
'lazy-change'
|
|
184
189
|
]
|
|
185
190
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|