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.
Files changed (66) hide show
  1. package/README.md +1 -1
  2. package/dist/all.esm.js +57 -16
  3. package/dist/style.css +1 -1
  4. package/dist/style.min.css +1 -1
  5. package/es/backtop/src/backtop.js +1 -4
  6. package/es/icon/style.css +1 -1
  7. package/es/input/src/input.js +4 -0
  8. package/es/input/style.css +2 -2
  9. package/es/input/style.min.css +1 -1
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/textarea/src/textarea.js +49 -11
  13. package/es/textarea/style.css +23 -1
  14. package/es/textarea/style.min.css +1 -1
  15. package/es/ui/index.js +3 -1
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-input/style.css +2 -2
  18. package/es/vxe-input/style.min.css +1 -1
  19. package/es/vxe-textarea/style.css +23 -1
  20. package/es/vxe-textarea/style.min.css +1 -1
  21. package/lib/backtop/src/backtop.js +1 -4
  22. package/lib/backtop/src/backtop.min.js +1 -1
  23. package/lib/icon/style/style.css +1 -1
  24. package/lib/icon/style/style.min.css +1 -1
  25. package/lib/index.umd.js +46 -12
  26. package/lib/index.umd.min.js +1 -1
  27. package/lib/input/src/input.js +3 -0
  28. package/lib/input/src/input.min.js +1 -1
  29. package/lib/input/style/style.css +2 -2
  30. package/lib/input/style/style.min.css +1 -1
  31. package/lib/style.css +1 -1
  32. package/lib/style.min.css +1 -1
  33. package/lib/textarea/src/textarea.js +38 -6
  34. package/lib/textarea/src/textarea.min.js +1 -1
  35. package/lib/textarea/style/style.css +23 -1
  36. package/lib/textarea/style/style.min.css +1 -1
  37. package/lib/ui/index.js +3 -1
  38. package/lib/ui/index.min.js +1 -1
  39. package/lib/ui/src/log.js +1 -1
  40. package/lib/ui/src/log.min.js +1 -1
  41. package/lib/vxe-input/style/style.css +2 -2
  42. package/lib/vxe-input/style/style.min.css +1 -1
  43. package/lib/vxe-textarea/style/style.css +23 -1
  44. package/lib/vxe-textarea/style/style.min.css +1 -1
  45. package/package.json +3 -3
  46. package/packages/backtop/src/backtop.ts +1 -4
  47. package/packages/input/src/input.ts +3 -0
  48. package/packages/textarea/src/textarea.ts +49 -11
  49. package/packages/ui/index.ts +3 -0
  50. package/styles/components/input.scss +2 -2
  51. package/styles/components/textarea.scss +31 -1
  52. package/types/components/grid.d.ts +5 -5
  53. package/types/components/textarea.d.ts +5 -0
  54. package/types/ui/global-icon.d.ts +3 -0
  55. /package/es/icon/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
  56. /package/es/icon/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
  57. /package/es/icon/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
  58. /package/es/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
  59. /package/es/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
  60. /package/es/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
  61. /package/lib/icon/style/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
  62. /package/lib/icon/style/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
  63. /package/lib/icon/style/{iconfont.1787300576676.woff2 → iconfont.1787558434119.woff2} +0 -0
  64. /package/lib/{iconfont.1787300576676.ttf → iconfont.1787558434119.ttf} +0 -0
  65. /package/lib/{iconfont.1787300576676.woff → iconfont.1787558434119.woff} +0 -0
  66. /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
- textareaMethods.dispatchEvent('change', { value }, evnt)
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('span', {
390
- class: ['vxe-textarea--count', {
391
- 'is--error': isCountError
392
- }]
393
- }, countMethod ? `${countMethod({ value: inputValue })}` : `${inputCount}${inpMaxLength ? `/${inpMaxLength}` : ''}`)
394
- : null
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
 
@@ -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
- display: block;
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
- display: none;
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.2em;
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
 
@@ -106,6 +106,9 @@ declare module '@vxe-ui/core' {
106
106
  CHECKBOX_UNCHECKED?: string
107
107
  CHECKBOX_DISABLED_UNCHECKED?: string
108
108
 
109
+ // textarea
110
+ TEXTAREA_CLEAR?: string
111
+
109
112
  // input
110
113
  INPUT_CLEAR?: string
111
114
  INPUT_SEARCH?: string