vxe-pc-ui 3.15.0 → 3.15.2

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 (71) hide show
  1. package/es/cascader/src/cascader.js +91 -10
  2. package/es/date-panel/src/util.js +12 -0
  3. package/es/date-picker/src/date-picker.js +81 -10
  4. package/es/date-range-picker/src/date-range-picker.js +20 -8
  5. package/es/form/render/index.js +28 -14
  6. package/es/form/style.css +4 -2
  7. package/es/form/style.min.css +1 -1
  8. package/es/number-input/src/number-input.js +2 -3
  9. package/es/splitter/src/splitter.js +6 -1
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/tree-select/src/tree-select.js +14 -2
  13. package/es/ui/index.js +1 -1
  14. package/es/ui/src/log.js +1 -1
  15. package/es/vxe-form/style.css +4 -2
  16. package/es/vxe-form/style.min.css +1 -1
  17. package/lib/cascader/src/cascader.js +96 -12
  18. package/lib/cascader/src/cascader.min.js +1 -1
  19. package/lib/date-panel/src/util.js +13 -0
  20. package/lib/date-panel/src/util.min.js +1 -1
  21. package/lib/date-picker/src/date-picker.js +79 -9
  22. package/lib/date-picker/src/date-picker.min.js +1 -1
  23. package/lib/date-range-picker/src/date-range-picker.js +18 -8
  24. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  25. package/lib/form/render/index.js +31 -14
  26. package/lib/form/render/index.min.js +1 -1
  27. package/lib/form/style/style.css +4 -2
  28. package/lib/form/style/style.min.css +1 -1
  29. package/lib/index.umd.js +264 -51
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/number-input/src/number-input.js +2 -3
  32. package/lib/splitter/src/splitter.js +6 -1
  33. package/lib/splitter/src/splitter.min.js +1 -1
  34. package/lib/style.css +1 -1
  35. package/lib/style.min.css +1 -1
  36. package/lib/tree-select/src/tree-select.js +18 -2
  37. package/lib/tree-select/src/tree-select.min.js +1 -1
  38. package/lib/ui/index.js +1 -1
  39. package/lib/ui/index.min.js +1 -1
  40. package/lib/ui/src/log.js +1 -1
  41. package/lib/ui/src/log.min.js +1 -1
  42. package/lib/vxe-form/style/style.css +4 -2
  43. package/lib/vxe-form/style/style.min.css +1 -1
  44. package/package.json +1 -1
  45. package/packages/cascader/src/cascader.ts +93 -10
  46. package/packages/date-panel/src/util.ts +13 -0
  47. package/packages/date-picker/src/date-picker.ts +82 -10
  48. package/packages/date-range-picker/src/date-range-picker.ts +18 -8
  49. package/packages/form/render/index.ts +28 -14
  50. package/packages/number-input/src/number-input.ts +2 -6
  51. package/packages/splitter/src/splitter.ts +6 -1
  52. package/packages/tree-select/src/tree-select.ts +14 -2
  53. package/styles/components/form.scss +4 -2
  54. package/types/components/cascader.d.ts +6 -2
  55. package/types/components/date-picker.d.ts +18 -0
  56. package/types/components/date-range-picker.d.ts +4 -0
  57. package/types/components/splitter.d.ts +1 -0
  58. package/types/components/table.d.ts +33 -4
  59. package/types/components/tree-select.d.ts +20 -1
  60. /package/es/icon/{iconfont.1781659223842.ttf → iconfont.1781753586592.ttf} +0 -0
  61. /package/es/icon/{iconfont.1781659223842.woff → iconfont.1781753586592.woff} +0 -0
  62. /package/es/icon/{iconfont.1781659223842.woff2 → iconfont.1781753586592.woff2} +0 -0
  63. /package/es/{iconfont.1781659223842.ttf → iconfont.1781753586592.ttf} +0 -0
  64. /package/es/{iconfont.1781659223842.woff → iconfont.1781753586592.woff} +0 -0
  65. /package/es/{iconfont.1781659223842.woff2 → iconfont.1781753586592.woff2} +0 -0
  66. /package/lib/icon/style/{iconfont.1781659223842.ttf → iconfont.1781753586592.ttf} +0 -0
  67. /package/lib/icon/style/{iconfont.1781659223842.woff → iconfont.1781753586592.woff} +0 -0
  68. /package/lib/icon/style/{iconfont.1781659223842.woff2 → iconfont.1781753586592.woff2} +0 -0
  69. /package/lib/{iconfont.1781659223842.ttf → iconfont.1781753586592.ttf} +0 -0
  70. /package/lib/{iconfont.1781659223842.woff → iconfont.1781753586592.woff} +0 -0
  71. /package/lib/{iconfont.1781659223842.woff2 → iconfont.1781753586592.woff2} +0 -0
@@ -51,6 +51,10 @@ function createReactData() {
51
51
  function createInternalData() {
52
52
  return {
53
53
  // hpTimeout: undefined,
54
+ listVirtualYOpts: {
55
+ enabled: true,
56
+ gt: 20
57
+ },
54
58
  afterTreeList: [],
55
59
  treeFullData: [],
56
60
  afterVisibleList: [],
@@ -109,7 +113,15 @@ export default {
109
113
  default: () => getConfig().cascader.size || getConfig().size
110
114
  },
111
115
  treeConfig: Object,
116
+ showRadio: {
117
+ type: Boolean,
118
+ default: () => getConfig().cascader.showRadio
119
+ },
112
120
  radioConfig: Object,
121
+ showCheckbox: {
122
+ type: Boolean,
123
+ default: () => getConfig().cascader.showCheckbox
124
+ },
113
125
  checkboxConfig: Object,
114
126
  remote: Boolean,
115
127
  remoteConfig: Function,
@@ -414,6 +426,59 @@ export default {
414
426
  return item;
415
427
  }));
416
428
  },
429
+ handleSetCheckboxByNodeId(nodeKeys, checked) {
430
+ const $xeCascader = this;
431
+ const internalData = $xeCascader.internalData;
432
+ const { nodeMaps } = internalData;
433
+ if (nodeKeys) {
434
+ if (!XEUtils.isArray(nodeKeys)) {
435
+ nodeKeys = [nodeKeys];
436
+ }
437
+ const nodeList = [];
438
+ nodeKeys.forEach((nodeKey) => {
439
+ const nodeid = enNodeValue(nodeKey);
440
+ const nodeItem = nodeMaps[nodeid];
441
+ if (nodeItem) {
442
+ nodeList.push(nodeItem.item);
443
+ }
444
+ });
445
+ $xeCascader.handleCheckedCheckboxNode(nodeList, checked);
446
+ }
447
+ return $xeCascader.$nextTick();
448
+ },
449
+ updateCheckboxChecked(nodeKeys) {
450
+ const $xeCascader = this;
451
+ const internalData = $xeCascader.internalData;
452
+ internalData.selectCheckboxMaps = {};
453
+ $xeCascader.handleSetCheckboxByNodeId(nodeKeys, true);
454
+ },
455
+ updateModelChecked() {
456
+ const $xeCascader = this;
457
+ const props = $xeCascader;
458
+ const reactData = $xeCascader.reactData;
459
+ const internalData = $xeCascader.internalData;
460
+ const { value: modelValue } = props;
461
+ const { nodeMaps } = internalData;
462
+ const expandedMaps = {};
463
+ if (props.multiple) {
464
+ if (modelValue && modelValue.length) {
465
+ $xeCascader.updateCheckboxChecked(modelValue);
466
+ }
467
+ }
468
+ else {
469
+ if (modelValue) {
470
+ const nodeid = enNodeValue(XEUtils.isArray(modelValue) ? modelValue[0] : modelValue);
471
+ const itemRest = nodeMaps[nodeid];
472
+ if (itemRest) {
473
+ itemRest.nodes.forEach(item => {
474
+ expandedMaps[$xeCascader.getNodeId(item)] = true;
475
+ });
476
+ reactData.selectRadioKey = nodeid;
477
+ }
478
+ }
479
+ }
480
+ internalData.treeExpandedMaps = expandedMaps;
481
+ },
417
482
  cacheNodeMap() {
418
483
  const $xeCascader = this;
419
484
  const props = $xeCascader;
@@ -647,6 +712,7 @@ export default {
647
712
  internalData.treeFullData = fullData;
648
713
  $xeCascader.cacheNodeMap();
649
714
  $xeCascader.handleData(true);
715
+ $xeCascader.updateModelChecked();
650
716
  $xeCascader.handleCurrentItems();
651
717
  $xeCascader.updateCurrentChunk();
652
718
  return $xeCascader.$nextTick();
@@ -682,11 +748,14 @@ export default {
682
748
  const { treeFullData } = internalData;
683
749
  const selectVals = $xeCascader.computeSelectVals;
684
750
  const childrenField = $xeCascader.computeChildrenField;
751
+ const mapChildrenField = $xeCascader.computeMapChildrenField;
752
+ const treeOpts = $xeCascader.computeTreeOpts;
753
+ const { transform } = treeOpts;
685
754
  const stItems = [];
686
755
  const expandedMaps = {};
687
756
  if (selectVals.length) {
688
- const lastVal = XEUtils.last(selectVals);
689
- const stRest = XEUtils.findTree(treeFullData, (item) => lastVal === $xeCascader.getNodeId(item), { children: childrenField });
757
+ const lastVal = enNodeValue(XEUtils.last(selectVals));
758
+ const stRest = XEUtils.findTree(treeFullData, (item) => lastVal === $xeCascader.getNodeId(item), { children: transform ? mapChildrenField : childrenField });
690
759
  if (stRest) {
691
760
  const { nodes } = stRest;
692
761
  nodes.forEach(item => {
@@ -1292,7 +1361,7 @@ export default {
1292
1361
  handleNodeClickEvent(evnt, node, chunks, chunkIndex) {
1293
1362
  const $xeCascader = this;
1294
1363
  const props = $xeCascader;
1295
- const { multiple } = props;
1364
+ const { multiple, showCheckbox, showRadio } = props;
1296
1365
  const treeOpts = $xeCascader.computeTreeOpts;
1297
1366
  const radioOpts = $xeCascader.computeRadioOpts;
1298
1367
  const checkboxOpts = $xeCascader.computeCheckboxOpts;
@@ -1311,13 +1380,13 @@ export default {
1311
1380
  $xeCascader.toggleExpandEvent(evnt, node, chunks, chunkIndex);
1312
1381
  }
1313
1382
  if (multiple) {
1314
- if (checkboxOpts.trigger === 'node' || (!checkboxOpts.showIcon && (!childList || !childList.length))) {
1383
+ if (checkboxOpts.trigger === 'node' || (!showCheckbox && (!childList || !childList.length))) {
1315
1384
  triggerCheckbox = true;
1316
1385
  $xeCascader.changeCheckboxEvent(evnt, node);
1317
1386
  }
1318
1387
  }
1319
1388
  else {
1320
- if (radioOpts.trigger === 'node' || (!radioOpts.showIcon && (!childList || !childList.length))) {
1389
+ if (radioOpts.trigger === 'node' || (!showRadio && (!childList || !childList.length))) {
1321
1390
  triggerRadio = true;
1322
1391
  $xeCascader.changeRadioEvent(evnt, node);
1323
1392
  }
@@ -1450,10 +1519,12 @@ export default {
1450
1519
  //
1451
1520
  renderRadio(h, node, isExistChild, nLevel, isChecked) {
1452
1521
  const $xeCascader = this;
1522
+ const props = $xeCascader;
1523
+ const { showRadio } = props;
1453
1524
  const radioOpts = $xeCascader.computeRadioOpts;
1454
- const { showIcon, checkMode, checkMethod, visibleMode, visibleMethod } = radioOpts;
1525
+ const { checkMode, checkMethod, visibleMode, visibleMethod } = radioOpts;
1455
1526
  const isVisible = visibleMethod ? visibleMethod({ $cascader: $xeCascader, node }) : handleVisibleOrCheckMode(visibleMode, isExistChild, nLevel);
1456
- if (showIcon && isVisible) {
1527
+ if (showRadio && isVisible) {
1457
1528
  const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel);
1458
1529
  return h('div', {
1459
1530
  class: ['vxe-tree--radio-option', {
@@ -1477,10 +1548,12 @@ export default {
1477
1548
  },
1478
1549
  renderCheckbox(h, node, isExistChild, nLevel, isChecked, isIndeterminate) {
1479
1550
  const $xeCascader = this;
1551
+ const props = $xeCascader;
1552
+ const { showCheckbox } = props;
1480
1553
  const checkboxOpts = $xeCascader.computeCheckboxOpts;
1481
- const { showIcon, checkMode, checkMethod, visibleMode, visibleMethod } = checkboxOpts;
1554
+ const { checkMode, checkMethod, visibleMode, visibleMethod } = checkboxOpts;
1482
1555
  const isVisible = visibleMethod ? visibleMethod({ $cascader: $xeCascader, node }) : handleVisibleOrCheckMode(visibleMode, isExistChild, nLevel);
1483
- if (showIcon && isVisible) {
1556
+ if (showCheckbox && isVisible) {
1484
1557
  const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel);
1485
1558
  return h('div', {
1486
1559
  class: ['vxe-cascader--checkbox-option', {
@@ -1606,9 +1679,11 @@ export default {
1606
1679
  const $xeCascader = this;
1607
1680
  const props = $xeCascader;
1608
1681
  const reactData = $xeCascader.reactData;
1682
+ const internalData = $xeCascader.internalData;
1609
1683
  const slots = $xeCascader.$scopedSlots;
1610
1684
  const { className, value: modelValue, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton } = props;
1611
1685
  const { initialized, isActivated, isAniVisible, visiblePanel, searchValue, currentCunkList } = reactData;
1686
+ const { listVirtualYOpts } = internalData;
1612
1687
  const vSize = $xeCascader.computeSize;
1613
1688
  const isDisabled = $xeCascader.computeIsDisabled;
1614
1689
  const selectLabel = $xeCascader.computeSelectLabel;
@@ -1760,7 +1835,8 @@ export default {
1760
1835
  }, [
1761
1836
  h(VxeListComponent, {
1762
1837
  props: {
1763
- data: chunks
1838
+ data: chunks,
1839
+ virtualYConfig: listVirtualYOpts
1764
1840
  },
1765
1841
  scopedSlots: {
1766
1842
  default(slotParams) {
@@ -1819,6 +1895,7 @@ export default {
1819
1895
  const $xeCascader = this;
1820
1896
  const reactData = $xeCascader.reactData;
1821
1897
  if (!reactData.visiblePanel) {
1898
+ $xeCascader.updateModelChecked();
1822
1899
  $xeCascader.handleCurrentItems();
1823
1900
  $xeCascader.updateCurrentChunk();
1824
1901
  }
@@ -1832,6 +1909,10 @@ export default {
1832
1909
  created() {
1833
1910
  const $xeCascader = this;
1834
1911
  const props = $xeCascader;
1912
+ const reactData = $xeCascader.reactData;
1913
+ if (!props.multiple) {
1914
+ reactData.selectRadioKey = enNodeValue(props.value);
1915
+ }
1835
1916
  $xeCascader.loadData(props.options || []);
1836
1917
  },
1837
1918
  mounted() {
@@ -19,6 +19,18 @@ export function handleValueFormat(type, valueFormat) {
19
19
  }
20
20
  return 'yyyy-MM-dd';
21
21
  }
22
+ export function handleInputFormat(type, inputFormat) {
23
+ if (inputFormat) {
24
+ return inputFormat;
25
+ }
26
+ if (type === 'time') {
27
+ return 'HH:mm:ss';
28
+ }
29
+ if (type === 'datetime') {
30
+ return 'yyyy-MM-dd HH:mm:ss';
31
+ }
32
+ return 'yyyy-MM-dd';
33
+ }
22
34
  export function toStringTimeDate(str) {
23
35
  const rest = new Date(2e3, 0, 1);
24
36
  if (str) {
@@ -4,7 +4,7 @@ import { getConfig, getIcon, getI18n, commands, createEvent, globalEvents, GLOBA
4
4
  import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
5
5
  import { updatePanelPlacement, getEventTargetNode } from '../../ui/src/dom';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
- import { parseDateObj, parseDateValue, getDateByCode, handleValueFormat, hasDateValueType, hasTimestampValueType } from '../../date-panel/src/util';
7
+ import { parseDateObj, parseDateValue, getDateByCode, handleValueFormat, handleInputFormat, hasDateValueType, hasTimestampValueType } from '../../date-panel/src/util';
8
8
  import { errLog } from '../../ui/src/log';
9
9
  import VxeDatePanelComponent from '../../date-panel/src/date-panel';
10
10
  import VxeButtonComponent from '../../button/src/button';
@@ -78,6 +78,7 @@ export default {
78
78
  labelFormat: String,
79
79
  valueFormat: String,
80
80
  timeFormat: String,
81
+ inputFormat: String,
81
82
  editable: {
82
83
  type: Boolean,
83
84
  default: true
@@ -107,6 +108,7 @@ export default {
107
108
  type: Boolean,
108
109
  default: () => getConfig().datePicker.autoClose
109
110
  },
111
+ controlConfig: Object,
110
112
  prefixIcon: String,
111
113
  suffixIcon: String,
112
114
  placement: String,
@@ -158,7 +160,8 @@ export default {
158
160
  inputLabel: ''
159
161
  };
160
162
  const internalData = {
161
- hpTimeout: undefined
163
+ // hpTimeout: undefined,
164
+ parseInputKayMaps: {}
162
165
  };
163
166
  return {
164
167
  xID,
@@ -298,6 +301,12 @@ export default {
298
301
  const { type, valueFormat } = props;
299
302
  return handleValueFormat(type, valueFormat);
300
303
  },
304
+ computeDateInputFormat() {
305
+ const $xeDatePicker = this;
306
+ const props = $xeDatePicker;
307
+ const { type, inputFormat } = props;
308
+ return handleInputFormat(type, inputFormat);
309
+ },
301
310
  computeFirstDayOfWeek() {
302
311
  const $xeDatePicker = this;
303
312
  const props = $xeDatePicker;
@@ -322,6 +331,11 @@ export default {
322
331
  });
323
332
  return dateObj.label;
324
333
  }).join(', ');
334
+ },
335
+ computeControlOpts() {
336
+ const $xeDatePicker = this;
337
+ const props = $xeDatePicker;
338
+ return Object.assign({}, getConfig().datePicker.controlConfig, props.controlConfig);
325
339
  } }),
326
340
  methods: {
327
341
  //
@@ -430,6 +444,9 @@ export default {
430
444
  if (!trigger || trigger === 'default') {
431
445
  $xeDatePicker.datePickerOpenEvent(evnt);
432
446
  }
447
+ else if (trigger === 'icon') {
448
+ $xeDatePicker.hidePanel();
449
+ }
433
450
  $xeDatePicker.triggerEvent(evnt);
434
451
  },
435
452
  clickPrefixEvent(evnt) {
@@ -471,6 +488,35 @@ export default {
471
488
  $xeDatePicker.dispatchEvent('suffix-click', { value: inputValue }, evnt);
472
489
  }
473
490
  },
491
+ handleArrowInputDate(evnt, isUpArrow) {
492
+ const $xeDatePicker = this;
493
+ const props = $xeDatePicker;
494
+ const reactData = $xeDatePicker.reactData;
495
+ const internalData = $xeDatePicker.internalData;
496
+ const { multiple } = props;
497
+ if (multiple) {
498
+ return;
499
+ }
500
+ const { inputValue } = reactData;
501
+ if (!inputValue) {
502
+ return;
503
+ }
504
+ const targetElem = $xeDatePicker.$refs.refInputTarget;
505
+ if (!targetElem) {
506
+ return;
507
+ }
508
+ const { parseInputKayMaps } = internalData;
509
+ const inputFormat = $xeDatePicker.computeDateInputFormat;
510
+ const selectionStart = targetElem.selectionStart || 0;
511
+ let selectKey = inputFormat[selectionStart];
512
+ if (!parseInputKayMaps[selectKey]) {
513
+ selectKey = inputFormat[selectionStart - 1];
514
+ }
515
+ const inputPaesrFn = parseInputKayMaps[selectKey];
516
+ if (inputPaesrFn) {
517
+ inputPaesrFn(evnt, targetElem, isUpArrow);
518
+ }
519
+ },
474
520
  blurEvent(evnt) {
475
521
  const $xeDatePicker = this;
476
522
  const reactData = $xeDatePicker.reactData;
@@ -498,6 +544,14 @@ export default {
498
544
  },
499
545
  keydownEvent(evnt) {
500
546
  const $xeDatePicker = this;
547
+ const props = $xeDatePicker;
548
+ const { controlConfig } = props;
549
+ const controlOpts = $xeDatePicker.computeControlOpts;
550
+ const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
551
+ const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
552
+ if ((isUpArrow || isDwArrow) && controlOpts.isArrow && (controlConfig || controlOpts.enabled)) {
553
+ $xeDatePicker.handleArrowInputDate(evnt, isUpArrow);
554
+ }
501
555
  $xeDatePicker.triggerEvent(evnt);
502
556
  },
503
557
  keyupEvent(evnt) {
@@ -641,6 +695,9 @@ export default {
641
695
  const { panelIndex } = reactData;
642
696
  const targetElem = $xeDatePicker.$refs.refInputTarget;
643
697
  const panelElem = $xeDatePicker.$refs.refInputPanel;
698
+ if (!panelElem) {
699
+ return $xeDatePicker.$nextTick();
700
+ }
644
701
  const btnTransfer = $xeDatePicker.computeBtnTransfer;
645
702
  const popupOpts = $xeDatePicker.computePopupOpts;
646
703
  const handleStyle = () => {
@@ -667,13 +724,9 @@ export default {
667
724
  const btnTransfer = $xeDatePicker.computeBtnTransfer;
668
725
  const panelElem = $xeDatePicker.$refs.refInputPanel;
669
726
  if (!isDisabled && !visiblePanel) {
670
- if (!reactData.initialized) {
727
+ if (!reactData.initialized && btnTransfer && panelElem) {
671
728
  reactData.initialized = true;
672
- if (btnTransfer) {
673
- if (panelElem) {
674
- document.body.appendChild(panelElem);
675
- }
676
- }
729
+ document.body.appendChild(panelElem);
677
730
  }
678
731
  if (internalData.hpTimeout) {
679
732
  clearTimeout(internalData.hpTimeout);
@@ -700,10 +753,17 @@ export default {
700
753
  },
701
754
  clickIconEvent(evnt) {
702
755
  const $xeDatePicker = this;
756
+ const reactData = $xeDatePicker.reactData;
757
+ const { visiblePanel } = reactData;
703
758
  const popupOpts = $xeDatePicker.computePopupOpts;
704
759
  const { trigger } = popupOpts;
705
760
  if (!trigger || trigger === 'default' || trigger === 'icon') {
706
- $xeDatePicker.datePickerOpenEvent(evnt);
761
+ if (visiblePanel) {
762
+ $xeDatePicker.hidePanel();
763
+ }
764
+ else {
765
+ $xeDatePicker.datePickerOpenEvent(evnt);
766
+ }
707
767
  }
708
768
  },
709
769
  clickEvent(evnt) {
@@ -833,6 +893,10 @@ export default {
833
893
  const props = $xeDatePicker;
834
894
  const slots = $xeDatePicker.$scopedSlots;
835
895
  const reactData = $xeDatePicker.reactData;
896
+ const popupOpts = $xeDatePicker.computePopupOpts;
897
+ if (popupOpts.enabled === false) {
898
+ return renderEmptyElement($xeDatePicker);
899
+ }
836
900
  const { type, multiple, showClearButton, showConfirmButton } = props;
837
901
  const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, inputValue } = reactData;
838
902
  const vSize = $xeDatePicker.computeSize;
@@ -842,7 +906,6 @@ export default {
842
906
  const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
843
907
  const shortcutList = $xeDatePicker.computeShortcutList;
844
908
  const timeOpts = $xeDatePicker.computeTimeOpts;
845
- const popupOpts = $xeDatePicker.computePopupOpts;
846
909
  const { position } = shortcutOpts;
847
910
  const headerSlot = slots.header;
848
911
  const footerSlot = slots.footer;
@@ -1151,6 +1214,14 @@ export default {
1151
1214
  },
1152
1215
  created() {
1153
1216
  const $xeDatePicker = this;
1217
+ const internalData = $xeDatePicker.internalData;
1218
+ const { parseInputKayMaps } = internalData;
1219
+ const inputKeys = ['y', 'M', 'd', 'H', 'm', 'n'];
1220
+ inputKeys.forEach(key => {
1221
+ parseInputKayMaps[key] = (evnt) => {
1222
+ evnt.preventDefault();
1223
+ };
1224
+ });
1154
1225
  $xeDatePicker.updateModelValue();
1155
1226
  globalEvents.on($xeDatePicker, 'mousewheel', $xeDatePicker.handleGlobalMousewheelEvent);
1156
1227
  globalEvents.on($xeDatePicker, 'mousedown', $xeDatePicker.handleGlobalMousedownEvent);
@@ -533,6 +533,9 @@ export default {
533
533
  if (!trigger || trigger === 'default') {
534
534
  $xeDateRangePicker.dateRangePickerOpenEvent(evnt);
535
535
  }
536
+ else if (trigger === 'icon') {
537
+ $xeDateRangePicker.hidePanel();
538
+ }
536
539
  $xeDateRangePicker.triggerEvent(evnt);
537
540
  },
538
541
  clickPrefixEvent(evnt) {
@@ -891,6 +894,9 @@ export default {
891
894
  const { panelIndex } = reactData;
892
895
  const targetElem = $xeDateRangePicker.$refs.refInputTarget;
893
896
  const panelElem = $xeDateRangePicker.$refs.refInputPanel;
897
+ if (!panelElem) {
898
+ return $xeDateRangePicker.$nextTick();
899
+ }
894
900
  const btnTransfer = $xeDateRangePicker.computeBtnTransfer;
895
901
  const popupOpts = $xeDateRangePicker.computePopupOpts;
896
902
  const handleStyle = () => {
@@ -917,13 +923,9 @@ export default {
917
923
  const btnTransfer = $xeDateRangePicker.computeBtnTransfer;
918
924
  const panelElem = $xeDateRangePicker.$refs.refInputPanel;
919
925
  if (!isDisabled && !visiblePanel) {
920
- if (!reactData.initialized) {
926
+ if (!reactData.initialized && btnTransfer && panelElem) {
921
927
  reactData.initialized = true;
922
- if (btnTransfer) {
923
- if (panelElem) {
924
- document.body.appendChild(panelElem);
925
- }
926
- }
928
+ document.body.appendChild(panelElem);
927
929
  }
928
930
  if (internalData.hpTimeout) {
929
931
  clearTimeout(internalData.hpTimeout);
@@ -951,10 +953,17 @@ export default {
951
953
  },
952
954
  clickIconEvent(evnt) {
953
955
  const $xeDateRangePicker = this;
956
+ const reactData = $xeDateRangePicker.reactData;
957
+ const { visiblePanel } = reactData;
954
958
  const popupOpts = $xeDateRangePicker.computePopupOpts;
955
959
  const { trigger } = popupOpts;
956
960
  if (!trigger || trigger === 'default' || trigger === 'icon') {
957
- $xeDateRangePicker.dateRangePickerOpenEvent(evnt);
961
+ if (visiblePanel) {
962
+ $xeDateRangePicker.hidePanel();
963
+ }
964
+ else {
965
+ $xeDateRangePicker.dateRangePickerOpenEvent(evnt);
966
+ }
958
967
  }
959
968
  },
960
969
  clickEvent(evnt) {
@@ -1095,6 +1104,10 @@ export default {
1095
1104
  const props = $xeDateRangePicker;
1096
1105
  const slots = $xeDateRangePicker.$scopedSlots;
1097
1106
  const reactData = $xeDateRangePicker.reactData;
1107
+ const popupOpts = $xeDateRangePicker.computePopupOpts;
1108
+ if (popupOpts.enabled === false) {
1109
+ return renderEmptyElement($xeDateRangePicker);
1110
+ }
1098
1111
  const { type, separator, autoClose, showConfirmButton, showClearButton } = props;
1099
1112
  const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, startValue, endValue } = reactData;
1100
1113
  const vSize = $xeDateRangePicker.computeSize;
@@ -1107,7 +1120,6 @@ export default {
1107
1120
  const defaultDates = $xeDateRangePicker.computeDefaultDates;
1108
1121
  const defaultTimes = $xeDateRangePicker.computeDefaultTimes;
1109
1122
  const timeOpts = $xeDateRangePicker.computeTimeOpts;
1110
- const popupOpts = $xeDateRangePicker.computePopupOpts;
1111
1123
  const { startLabel, endLabel } = panelLabelObj;
1112
1124
  const { position } = shortcutOpts;
1113
1125
  const headerSlot = slots.header;
@@ -314,15 +314,15 @@ function oldFormItemRadioAndCheckboxRender(h, renderOpts, params) {
314
314
  */
315
315
  renderer.mixin({
316
316
  input: {
317
- formItemAutoFocus: 'input',
317
+ formItemAutoFocus: true,
318
318
  renderFormItemContent: nativeItemRender
319
319
  },
320
320
  textarea: {
321
- formItemAutoFocus: 'textarea',
321
+ formItemAutoFocus: true,
322
322
  renderFormItemContent: nativeItemRender
323
323
  },
324
324
  select: {
325
- formItemAutoFocus: 'input',
325
+ formItemAutoFocus: true,
326
326
  renderFormItemContent(h, renderOpts, params) {
327
327
  return [
328
328
  h('select', {
@@ -334,27 +334,27 @@ renderer.mixin({
334
334
  }
335
335
  },
336
336
  VxeInput: {
337
- formItemAutoFocus: 'input',
337
+ formItemAutoFocus: true,
338
338
  renderFormItemContent: defaultItemRender
339
339
  },
340
340
  VxeNumberInput: {
341
- formItemAutoFocus: 'input',
341
+ formItemAutoFocus: true,
342
342
  renderFormItemContent: defaultItemRender
343
343
  },
344
344
  VxePasswordInput: {
345
- formItemAutoFocus: 'input',
345
+ formItemAutoFocus: true,
346
346
  renderFormItemContent: defaultItemRender
347
347
  },
348
348
  VxeTextarea: {
349
- formItemAutoFocus: 'textarea',
349
+ formItemAutoFocus: true,
350
350
  renderFormItemContent: defaultItemRender
351
351
  },
352
352
  VxeDatePicker: {
353
- formItemAutoFocus: 'input',
353
+ formItemAutoFocus: true,
354
354
  renderFormItemContent: defaultItemRender
355
355
  },
356
356
  VxeDateRangePicker: {
357
- formItemAutoFocus: 'input',
357
+ formItemAutoFocus: true,
358
358
  renderFormItemContent(h, renderOpts, params) {
359
359
  const { startField, endField } = renderOpts;
360
360
  const { $form, data, field } = params;
@@ -412,7 +412,7 @@ renderer.mixin({
412
412
  }
413
413
  },
414
414
  VxeSelect: {
415
- formItemAutoFocus: 'input',
415
+ formItemAutoFocus: true,
416
416
  renderFormItemContent(h, renderOpts, params) {
417
417
  const { data, field } = params;
418
418
  const { options, optionProps, optionGroups, optionGroupProps } = renderOpts;
@@ -426,7 +426,21 @@ renderer.mixin({
426
426
  }
427
427
  },
428
428
  VxeTreeSelect: {
429
- formItemAutoFocus: 'input',
429
+ formItemAutoFocus: true,
430
+ renderFormItemContent(h, renderOpts, params) {
431
+ const { data, field } = params;
432
+ const { options, optionProps } = renderOpts;
433
+ const itemValue = XEUtils.get(data, field);
434
+ return [
435
+ h(getDefaultComponent(renderOpts), {
436
+ props: getComponentFormItemProps(renderOpts, params, itemValue, { options, optionProps }),
437
+ on: getItemOns(renderOpts, params)
438
+ })
439
+ ];
440
+ }
441
+ },
442
+ VxeCascader: {
443
+ formItemAutoFocus: true,
430
444
  renderFormItemContent(h, renderOpts, params) {
431
445
  const { data, field } = params;
432
446
  const { options, optionProps } = renderOpts;
@@ -440,7 +454,7 @@ renderer.mixin({
440
454
  }
441
455
  },
442
456
  VxeTableSelect: {
443
- formItemAutoFocus: 'input',
457
+ formItemAutoFocus: true,
444
458
  renderFormItemContent(h, renderOpts, params) {
445
459
  const { data, field } = params;
446
460
  const { options, optionProps } = renderOpts;
@@ -454,7 +468,7 @@ renderer.mixin({
454
468
  }
455
469
  },
456
470
  VxeColorPicker: {
457
- formItemAutoFocus: 'input',
471
+ formItemAutoFocus: true,
458
472
  renderFormItemContent(h, renderOpts, params) {
459
473
  const { data, field } = params;
460
474
  const { options } = renderOpts;
@@ -468,7 +482,7 @@ renderer.mixin({
468
482
  }
469
483
  },
470
484
  VxeIconPicker: {
471
- formItemAutoFocus: 'input',
485
+ formItemAutoFocus: true,
472
486
  renderFormItemContent(h, renderOpts, params) {
473
487
  const { data, field } = params;
474
488
  const { options } = renderOpts;
package/es/form/style.css CHANGED
@@ -357,7 +357,8 @@
357
357
  .vxe-form--item.is--span .vxe-select,
358
358
  .vxe-form--item.is--span .vxe-tree-select,
359
359
  .vxe-form--item.is--span .vxe-table-select,
360
- .vxe-form--item.is--span .vxe-ico-picker {
360
+ .vxe-form--item.is--span .vxe-ico-picker,
361
+ .vxe-form--item.is--span .vxe-cascader {
361
362
  width: 100%;
362
363
  }
363
364
  .vxe-form--item.is--error.show--err-msg > .vxe-form--item-content {
@@ -384,7 +385,8 @@
384
385
  .vxe-form--item.is--error .vxe-default-input,
385
386
  .vxe-form--item.is--error .vxe-default-textarea,
386
387
  .vxe-form--item.is--error .vxe-default-select,
387
- .vxe-form--item.is--error .vxe-ico-picker {
388
+ .vxe-form--item.is--error .vxe-ico-picker,
389
+ .vxe-form--item.is--error .vxe-cascader {
388
390
  border-color: var(--vxe-ui-form-validate-error-color);
389
391
  }
390
392
  .vxe-form--item.is--error .vxe-input:focus,