vxe-pc-ui 3.15.22 → 3.15.24

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 (52) hide show
  1. package/es/date-panel/src/date-panel.js +34 -14
  2. package/es/date-panel/src/util.js +30 -3
  3. package/es/date-picker/src/date-picker.js +1 -1
  4. package/es/date-range-picker/src/date-range-picker.js +236 -134
  5. package/es/icon/style.css +1 -1
  6. package/es/style.css +1 -1
  7. package/es/style.min.css +1 -1
  8. package/es/tooltip/src/tooltip.js +34 -21
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/log.js +1 -1
  11. package/lib/date-panel/src/date-panel.js +46 -15
  12. package/lib/date-panel/src/date-panel.min.js +1 -1
  13. package/lib/date-panel/src/util.js +31 -5
  14. package/lib/date-panel/src/util.min.js +1 -1
  15. package/lib/date-picker/src/date-picker.js +1 -1
  16. package/lib/date-picker/src/date-picker.min.js +1 -1
  17. package/lib/date-range-picker/src/date-range-picker.js +259 -142
  18. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  19. package/lib/icon/style/style.css +1 -1
  20. package/lib/icon/style/style.min.css +1 -1
  21. package/lib/index.umd.js +381 -192
  22. package/lib/index.umd.min.js +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/tooltip/src/tooltip.js +36 -21
  26. package/lib/tooltip/src/tooltip.min.js +1 -1
  27. package/lib/ui/index.js +1 -1
  28. package/lib/ui/index.min.js +1 -1
  29. package/lib/ui/src/log.js +1 -1
  30. package/lib/ui/src/log.min.js +1 -1
  31. package/package.json +1 -1
  32. package/packages/date-panel/src/date-panel.ts +38 -15
  33. package/packages/date-panel/src/util.ts +31 -4
  34. package/packages/date-picker/src/date-picker.ts +1 -1
  35. package/packages/date-range-picker/src/date-range-picker.ts +238 -134
  36. package/packages/tooltip/src/tooltip.ts +41 -20
  37. package/types/components/date-panel.d.ts +15 -2
  38. package/types/components/date-range-picker.d.ts +5 -3
  39. package/types/components/tooltip.d.ts +1 -1
  40. package/types/ui/commands.d.ts +3 -3
  41. /package/es/icon/{iconfont.1783065884505.ttf → iconfont.1783233735491.ttf} +0 -0
  42. /package/es/icon/{iconfont.1783065884505.woff → iconfont.1783233735491.woff} +0 -0
  43. /package/es/icon/{iconfont.1783065884505.woff2 → iconfont.1783233735491.woff2} +0 -0
  44. /package/es/{iconfont.1783065884505.ttf → iconfont.1783233735491.ttf} +0 -0
  45. /package/es/{iconfont.1783065884505.woff → iconfont.1783233735491.woff} +0 -0
  46. /package/es/{iconfont.1783065884505.woff2 → iconfont.1783233735491.woff2} +0 -0
  47. /package/lib/icon/style/{iconfont.1783065884505.ttf → iconfont.1783233735491.ttf} +0 -0
  48. /package/lib/icon/style/{iconfont.1783065884505.woff → iconfont.1783233735491.woff} +0 -0
  49. /package/lib/icon/style/{iconfont.1783065884505.woff2 → iconfont.1783233735491.woff2} +0 -0
  50. /package/lib/{iconfont.1783065884505.ttf → iconfont.1783233735491.ttf} +0 -0
  51. /package/lib/{iconfont.1783065884505.woff → iconfont.1783233735491.woff} +0 -0
  52. /package/lib/{iconfont.1783065884505.woff2 → iconfont.1783233735491.woff2} +0 -0
@@ -3,13 +3,34 @@ import XEUtils from 'xe-utils';
3
3
  import { getConfig, getIcon, getI18n, commands, globalEvents, createEvent, GLOBAL_EVENT_KEYS, globalMixins, renderEmptyElement } from '../../ui';
4
4
  import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
5
5
  import { updatePanelPlacement, getEventTargetNode } from '../../ui/src/dom';
6
- import { parseDateString, parseDateObj, getRangeDateByCode, handleValueFormat } from '../../date-panel/src/util';
6
+ import { parseDateString, parseDateObj, getRangeDateByCode, handleValueFormat, hasTimestampValueType, hasDateValueType, parseDateValue, getPrevMonth, getNextMonth } from '../../date-panel/src/util';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { createComponentLog } from '../../ui/src/log';
9
9
  import VxeDatePanelComponent from '../../date-panel/src/date-panel';
10
10
  import VxeButtonComponent from '../../button/src/button';
11
11
  import VxeButtonGroupComponent from '../../button/src/button-group';
12
12
  const { errLog } = createComponentLog('date-range-picker');
13
+ function createReactData() {
14
+ return {
15
+ initialized: false,
16
+ panelIndex: 0,
17
+ visiblePanel: false,
18
+ isAniVisible: false,
19
+ panelStyle: {},
20
+ panelPlacement: '',
21
+ isActivated: false,
22
+ selectStValue: '',
23
+ selectEdValue: '',
24
+ paneStartVal: '',
25
+ paneEndVal: ''
26
+ };
27
+ }
28
+ function createInternalData() {
29
+ return {
30
+ // selectStatus: false
31
+ // hpTimeout: undefined
32
+ };
33
+ }
13
34
  export default {
14
35
  name: 'VxeDateRangePicker',
15
36
  mixins: [
@@ -150,26 +171,9 @@ export default {
150
171
  },
151
172
  data() {
152
173
  const xID = XEUtils.uniqueId();
153
- const reactData = {
154
- initialized: false,
155
- panelIndex: 0,
156
- visiblePanel: false,
157
- isAniVisible: false,
158
- panelStyle: {},
159
- panelPlacement: '',
160
- isActivated: false,
161
- startValue: '',
162
- endValue: ''
163
- };
164
- const internalData = {
165
- // selectStatus: false
166
- // hpTimeout: undefined
167
- };
168
- return {
169
- xID,
170
- reactData,
171
- internalData
172
- };
174
+ const reactData = createReactData();
175
+ return Object.assign(Object.assign({}, {}), { xID,
176
+ reactData });
173
177
  },
174
178
  computed: Object.assign(Object.assign({}, {}), { computeBtnTransfer() {
175
179
  const $xeDateRangePicker = this;
@@ -340,8 +344,8 @@ export default {
340
344
  computePanelLabelObj() {
341
345
  const $xeDateRangePicker = this;
342
346
  const reactData = $xeDateRangePicker.reactData;
343
- const { startValue, endValue } = reactData;
344
- const vals = startValue || endValue ? [startValue || '', endValue || ''] : [];
347
+ const { selectStValue, selectEdValue } = reactData;
348
+ const vals = selectStValue || selectEdValue ? [selectStValue || '', selectEdValue || ''] : [];
345
349
  return $xeDateRangePicker.formatRangeLabel(vals);
346
350
  },
347
351
  computeInputLabel() {
@@ -399,8 +403,8 @@ export default {
399
403
  getRangeValue(sValue, eValue) {
400
404
  const $xeDateRangePicker = this;
401
405
  const props = $xeDateRangePicker;
402
- const { value: modelValue, valueType } = props;
403
- let isArr = XEUtils.isArray(modelValue);
406
+ const { value: modelValue, valueType, valueFormat } = props;
407
+ let isArr = valueFormat === 'date' || XEUtils.isArray(modelValue);
404
408
  if (valueType) {
405
409
  switch (valueType) {
406
410
  case 'array':
@@ -412,7 +416,7 @@ export default {
412
416
  }
413
417
  }
414
418
  if (sValue || eValue) {
415
- const rest = [sValue || '', eValue || ''];
419
+ const rest = [sValue || null, eValue || null];
416
420
  if (isArr) {
417
421
  return rest;
418
422
  }
@@ -486,15 +490,15 @@ export default {
486
490
  restObj = $xeDateRangePicker.paraeUpdateModel();
487
491
  }
488
492
  }
489
- reactData.startValue = restObj.sValue;
490
- reactData.endValue = restObj.eValue;
493
+ reactData.selectStValue = restObj.sValue;
494
+ reactData.selectEdValue = restObj.eValue;
491
495
  },
492
496
  triggerEvent(evnt) {
493
497
  const $xeDateRangePicker = this;
494
498
  const reactData = $xeDateRangePicker.reactData;
495
- const { startValue, endValue } = reactData;
496
- const value = $xeDateRangePicker.getRangeValue(startValue, endValue);
497
- $xeDateRangePicker.dispatchEvent(evnt.type, { value, startValue, endValue }, evnt);
499
+ const { selectStValue, selectEdValue } = reactData;
500
+ const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
501
+ $xeDateRangePicker.dispatchEvent(evnt.type, { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
498
502
  },
499
503
  handleChange(sValue, eValue, evnt) {
500
504
  const $xeDateRangePicker = this;
@@ -502,16 +506,37 @@ export default {
502
506
  const reactData = $xeDateRangePicker.reactData;
503
507
  const $xeForm = $xeDateRangePicker.$xeForm;
504
508
  const formItemInfo = $xeDateRangePicker.formItemInfo;
505
- const { value: modelValue } = props;
506
- reactData.startValue = sValue;
507
- reactData.endValue = eValue;
508
- const value = $xeDateRangePicker.getRangeValue(sValue, eValue);
509
- const isFinish = (sValue && eValue) || (!sValue && !eValue);
510
- $xeDateRangePicker.emitModel(value);
511
- $xeDateRangePicker.$emit('update:startValue', sValue || '');
512
- $xeDateRangePicker.$emit('update:endValue', eValue || '');
509
+ const { type, value: modelValue, valueFormat } = props;
510
+ const dateValueFormat = $xeDateRangePicker.computeDateValueFormat;
511
+ let startRest = sValue;
512
+ let endRest = eValue;
513
+ if (hasTimestampValueType(valueFormat)) {
514
+ if (startRest) {
515
+ const dateVal = parseDateValue(startRest, type, { valueFormat: dateValueFormat });
516
+ startRest = dateVal ? dateVal.getTime() : null;
517
+ }
518
+ if (endRest) {
519
+ const dateVal = parseDateValue(endRest, type, { valueFormat: dateValueFormat });
520
+ endRest = dateVal ? dateVal.getTime() : null;
521
+ }
522
+ }
523
+ else if (hasDateValueType(valueFormat)) {
524
+ if (startRest) {
525
+ startRest = parseDateValue(startRest, type, { valueFormat: dateValueFormat });
526
+ }
527
+ if (endRest) {
528
+ endRest = parseDateValue(endRest, type, { valueFormat: dateValueFormat });
529
+ }
530
+ }
531
+ reactData.selectStValue = startRest;
532
+ reactData.selectEdValue = endRest;
533
+ const value = $xeDateRangePicker.getRangeValue(startRest, endRest);
534
+ const isFinish = (startRest && endRest) || (!startRest && !endRest);
535
+ $xeDateRangePicker.$emit('update:modelValue', value);
536
+ $xeDateRangePicker.$emit('update:startValue', startRest || '');
537
+ $xeDateRangePicker.$emit('update:endValue', endRest || '');
513
538
  if (XEUtils.toValueString(modelValue) !== value) {
514
- $xeDateRangePicker.dispatchEvent('change', { value, startValue: sValue, endValue: eValue, isFinish }, evnt);
539
+ $xeDateRangePicker.dispatchEvent('change', { value, startValue: startRest, endValue: endRest, isFinish }, evnt);
515
540
  // 自动更新校验状态
516
541
  if ($xeForm && formItemInfo) {
517
542
  $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
@@ -544,9 +569,9 @@ export default {
544
569
  const reactData = $xeDateRangePicker.reactData;
545
570
  const isDisabled = $xeDateRangePicker.computeIsDisabled;
546
571
  if (!isDisabled) {
547
- const { startValue, endValue } = reactData;
548
- const value = $xeDateRangePicker.getRangeValue(startValue, endValue);
549
- $xeDateRangePicker.dispatchEvent('prefix-click', { value, startValue, endValue }, evnt);
572
+ const { selectStValue, selectEdValue } = reactData;
573
+ const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
574
+ $xeDateRangePicker.dispatchEvent('prefix-click', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
550
575
  }
551
576
  },
552
577
  hidePanel() {
@@ -587,8 +612,8 @@ export default {
587
612
  panelCellClassName({ date }) {
588
613
  const $xeDateRangePicker = this;
589
614
  const reactData = $xeDateRangePicker.reactData;
590
- const startValue = reactData.startValue;
591
- const endValue = reactData.endValue;
615
+ const startValue = reactData.selectStValue;
616
+ const endValue = reactData.selectEdValue;
592
617
  if (startValue && endValue) {
593
618
  const currTime = date.getTime();
594
619
  const startTime = XEUtils.toStringDate(startValue).getTime();
@@ -605,18 +630,18 @@ export default {
605
630
  const reactData = $xeDateRangePicker.reactData;
606
631
  const internalData = $xeDateRangePicker.internalData;
607
632
  const { autoClose } = props;
608
- const { startValue, endValue } = reactData;
633
+ const { selectStValue, selectEdValue } = reactData;
609
634
  const { selectStatus } = internalData;
610
635
  const isDatePickerType = $xeDateRangePicker.computeIsDatePickerType;
611
636
  if (autoClose) {
612
637
  if (selectStatus && isDatePickerType) {
613
- if (startValue && endValue) {
638
+ if (selectStValue && selectEdValue) {
614
639
  $xeDateRangePicker.hidePanel();
615
640
  }
616
641
  }
617
642
  }
618
643
  else {
619
- if (startValue && endValue) {
644
+ if (selectStValue && selectEdValue) {
620
645
  internalData.selectStatus = false;
621
646
  }
622
647
  }
@@ -626,9 +651,9 @@ export default {
626
651
  const reactData = $xeDateRangePicker.reactData;
627
652
  const isDisabled = $xeDateRangePicker.computeIsDisabled;
628
653
  if (!isDisabled) {
629
- const { startValue, endValue } = reactData;
630
- const value = $xeDateRangePicker.getRangeValue(startValue, endValue);
631
- $xeDateRangePicker.dispatchEvent('suffix-click', { value, startValue, endValue }, evnt);
654
+ const { selectStValue, selectEdValue } = reactData;
655
+ const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
656
+ $xeDateRangePicker.dispatchEvent('suffix-click', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
632
657
  }
633
658
  },
634
659
  blurEvent(evnt) {
@@ -636,16 +661,16 @@ export default {
636
661
  const reactData = $xeDateRangePicker.reactData;
637
662
  const $xeForm = $xeDateRangePicker.$xeForm;
638
663
  const formItemInfo = $xeDateRangePicker.formItemInfo;
639
- const { startValue, endValue } = reactData;
664
+ const { selectStValue, selectEdValue } = reactData;
640
665
  const inpImmediate = $xeDateRangePicker.computeInpImmediate;
641
666
  const value = '';
642
667
  if (!inpImmediate) {
643
- $xeDateRangePicker.handleChange(startValue, endValue, evnt);
668
+ $xeDateRangePicker.handleChange(selectStValue, selectEdValue, evnt);
644
669
  }
645
670
  if (!reactData.visiblePanel) {
646
671
  reactData.isActivated = false;
647
672
  }
648
- $xeDateRangePicker.dispatchEvent('blur', { value, startValue, endValue }, evnt);
673
+ $xeDateRangePicker.dispatchEvent('blur', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
649
674
  // 自动更新校验状态
650
675
  if ($xeForm && formItemInfo) {
651
676
  $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
@@ -683,22 +708,31 @@ export default {
683
708
  const reactData = $xeDateRangePicker.reactData;
684
709
  const internalData = $xeDateRangePicker.internalData;
685
710
  const { selectStatus } = internalData;
686
- const { value, $event } = params;
687
- const endValue = selectStatus ? reactData.endValue : '';
688
- $xeDateRangePicker.handleChange(value, endValue, $event);
711
+ const { value, currValue, $event } = params;
712
+ const paneVals = value ? (XEUtils.isString(value) ? value.split(',') : [value]) : [];
713
+ let startValue = '';
714
+ let endValue = '';
715
+ if (selectStatus) {
716
+ startValue = paneVals[0];
717
+ if (paneVals[1]) {
718
+ endValue = paneVals[1];
719
+ }
720
+ else {
721
+ endValue = reactData.selectEdValue;
722
+ }
723
+ }
724
+ else {
725
+ startValue = currValue || XEUtils.last(paneVals);
726
+ }
727
+ reactData.paneEndVal = [startValue, endValue].join(',');
728
+ reactData.paneStartVal = [startValue, endValue].join(',');
729
+ $xeDateRangePicker.handleChange(startValue, endValue, $event);
689
730
  $xeDateRangePicker.handleSelectClose();
690
731
  if (!selectStatus) {
691
732
  internalData.selectStatus = true;
692
733
  }
693
734
  $xeDateRangePicker.$nextTick(() => {
694
- const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
695
- const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
696
- if ($startDatePanel && $endDatePanel) {
697
- const startValue = $startDatePanel.getModelValue();
698
- if (!endValue && startValue) {
699
- $endDatePanel.setPanelDate(XEUtils.toStringDate(startValue));
700
- }
701
- }
735
+ $xeDateRangePicker.handleUpdateStartPanelDate();
702
736
  });
703
737
  },
704
738
  endPanelChangeEvent(params) {
@@ -706,91 +740,147 @@ export default {
706
740
  const reactData = $xeDateRangePicker.reactData;
707
741
  const internalData = $xeDateRangePicker.internalData;
708
742
  const { selectStatus } = internalData;
709
- const { value, $event } = params;
710
- const startValue = selectStatus ? reactData.startValue : '';
711
- $xeDateRangePicker.handleChange(startValue, value, $event);
743
+ const { value, currValue, $event } = params;
744
+ const paneVals = value ? (XEUtils.isString(value) ? value.split(',') : [value]) : [];
745
+ let startValue = '';
746
+ let endValue = '';
747
+ if (selectStatus) {
748
+ endValue = paneVals[0];
749
+ if (paneVals[1]) {
750
+ startValue = paneVals[0];
751
+ endValue = paneVals[1];
752
+ }
753
+ else {
754
+ startValue = reactData.selectStValue;
755
+ }
756
+ }
757
+ else {
758
+ endValue = currValue || XEUtils.last(paneVals);
759
+ }
760
+ reactData.paneEndVal = [startValue, endValue].join(',');
761
+ reactData.paneStartVal = [startValue, endValue].join(',');
762
+ $xeDateRangePicker.handleChange(startValue, endValue, $event);
712
763
  $xeDateRangePicker.handleSelectClose();
713
764
  if (!selectStatus) {
714
765
  internalData.selectStatus = true;
715
766
  }
716
767
  $xeDateRangePicker.$nextTick(() => {
717
- const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
718
- const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
719
- if ($startDatePanel && $endDatePanel) {
720
- const endValue = $endDatePanel.getModelValue();
721
- if (!startValue && endValue) {
722
- $startDatePanel.setPanelDate(XEUtils.toStringDate(endValue));
768
+ $xeDateRangePicker.handleUpdateEndPanelDate();
769
+ });
770
+ },
771
+ handleUpdateStartPanelDate() {
772
+ const $xeDateRangePicker = this;
773
+ const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
774
+ const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
775
+ if (!$startDatePanel || !$endDatePanel) {
776
+ return;
777
+ }
778
+ const startPanelDate = $startDatePanel.getPanelDate();
779
+ const endPanelDate = $endDatePanel.getPanelDate();
780
+ if (!startPanelDate || !endPanelDate) {
781
+ return;
782
+ }
783
+ const viewType = $startDatePanel.getViewType();
784
+ const startYear = startPanelDate.getFullYear();
785
+ const startMonth = startPanelDate.getMonth();
786
+ const endYear = endPanelDate.getFullYear();
787
+ const endMonth = endPanelDate.getMonth();
788
+ switch (viewType) {
789
+ case 'day':
790
+ case 'date':
791
+ case 'week': {
792
+ if (endYear <= startYear && endMonth <= startMonth) {
793
+ $endDatePanel.setPanelDate(getNextMonth(startPanelDate));
723
794
  }
795
+ break;
724
796
  }
725
- });
797
+ }
726
798
  },
727
- startPanelDateBtnChangeEvent(params) {
799
+ startPanelDateBtnChangeEvent() {
728
800
  const $xeDateRangePicker = this;
729
801
  const props = $xeDateRangePicker;
730
802
  const { linkedPanels } = props;
803
+ const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
804
+ const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
805
+ if (!$startDatePanel || !$endDatePanel) {
806
+ return;
807
+ }
808
+ const startPanelDate = $startDatePanel.getPanelDate();
809
+ const endPanelDate = $endDatePanel.getPanelDate();
810
+ if (!startPanelDate || !endPanelDate) {
811
+ return;
812
+ }
813
+ const viewType = $startDatePanel.getViewType();
731
814
  if (linkedPanels) {
732
- const { viewType } = params;
733
- const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
734
- const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
735
- if (!$startDatePanel || !$endDatePanel) {
736
- return;
737
- }
738
- const startPanelDate = $startDatePanel.getPanelDate();
739
- if (!startPanelDate) {
740
- return;
741
- }
742
- const endYear = startPanelDate.getFullYear();
743
- const endMonth = startPanelDate.getMonth();
744
815
  switch (viewType) {
745
816
  case 'day':
746
817
  case 'date':
747
818
  case 'week': {
748
- if (endMonth < 11) {
749
- startPanelDate.setMonth(endMonth + 1);
750
- }
751
- else {
752
- startPanelDate.setFullYear(endYear + 1);
753
- startPanelDate.setMonth(0);
754
- }
755
- $endDatePanel.setPanelDate(startPanelDate);
819
+ $endDatePanel.setPanelDate(getNextMonth(startPanelDate));
756
820
  break;
757
821
  }
758
822
  }
759
823
  }
824
+ else {
825
+ $xeDateRangePicker.handleUpdateStartPanelDate();
826
+ }
760
827
  },
761
- endPanelDateBtnChangeEvent(params) {
828
+ handleUpdateEndPanelDate() {
829
+ const $xeDateRangePicker = this;
830
+ const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
831
+ const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
832
+ if (!$startDatePanel || !$endDatePanel) {
833
+ return;
834
+ }
835
+ const startPanelDate = $startDatePanel.getPanelDate();
836
+ const endPanelDate = $endDatePanel.getPanelDate();
837
+ if (!startPanelDate || !endPanelDate) {
838
+ return;
839
+ }
840
+ const viewType = $endDatePanel.getViewType();
841
+ const startYear = startPanelDate.getFullYear();
842
+ const startMonth = startPanelDate.getMonth();
843
+ const endYear = endPanelDate.getFullYear();
844
+ const endMonth = endPanelDate.getMonth();
845
+ switch (viewType) {
846
+ case 'day':
847
+ case 'date':
848
+ case 'week': {
849
+ if (startYear >= endYear && startMonth >= endMonth) {
850
+ $startDatePanel.setPanelDate(getPrevMonth(endPanelDate));
851
+ }
852
+ break;
853
+ }
854
+ }
855
+ },
856
+ endPanelDateBtnChangeEvent() {
762
857
  const $xeDateRangePicker = this;
763
858
  const props = $xeDateRangePicker;
764
859
  const { linkedPanels } = props;
860
+ const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
861
+ const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
862
+ if (!$startDatePanel || !$endDatePanel) {
863
+ return;
864
+ }
865
+ const startPanelDate = $startDatePanel.getPanelDate();
866
+ const endPanelDate = $endDatePanel.getPanelDate();
867
+ if (!startPanelDate || !endPanelDate) {
868
+ return;
869
+ }
870
+ const viewType = $endDatePanel.getViewType();
765
871
  if (linkedPanels) {
766
- const { viewType } = params;
767
- const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
768
- const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
769
- if (!$startDatePanel || !$endDatePanel) {
770
- return;
771
- }
772
- const endPanelDate = $endDatePanel.getPanelDate();
773
- if (!endPanelDate) {
774
- return;
775
- }
776
- const endYear = endPanelDate.getFullYear();
777
- const endMonth = endPanelDate.getMonth();
778
872
  switch (viewType) {
779
873
  case 'day':
780
874
  case 'date':
781
875
  case 'week': {
782
- if (endMonth) {
783
- endPanelDate.setMonth(endMonth - 1);
784
- }
785
- else {
786
- endPanelDate.setFullYear(endYear - 1);
787
- endPanelDate.setMonth(11);
788
- }
789
- $startDatePanel.setPanelDate(endPanelDate);
876
+ $startDatePanel.setPanelDate(getPrevMonth(endPanelDate));
790
877
  break;
791
878
  }
792
879
  }
793
880
  }
881
+ else {
882
+ $xeDateRangePicker.handleUpdateEndPanelDate();
883
+ }
794
884
  },
795
885
  // 全局事件
796
886
  handleGlobalMousedownEvent(evnt) {
@@ -939,6 +1029,7 @@ export default {
939
1029
  reactData.isAniVisible = true;
940
1030
  setTimeout(() => {
941
1031
  reactData.visiblePanel = true;
1032
+ $xeDateRangePicker.handleUpdateStartPanelDate();
942
1033
  $xeDateRangePicker.updatePlacement();
943
1034
  }, 10);
944
1035
  $xeDateRangePicker.updateZindex();
@@ -981,8 +1072,8 @@ export default {
981
1072
  const shortcutOpts = $xeDateRangePicker.computeShortcutOpts;
982
1073
  const { autoClose } = shortcutOpts;
983
1074
  const { code, clickMethod } = option;
984
- let startValue = reactData.startValue;
985
- let endValue = reactData.endValue;
1075
+ let startValue = reactData.selectStValue;
1076
+ let endValue = reactData.selectEdValue;
986
1077
  let value = $xeDateRangePicker.getRangeValue(startValue, endValue);
987
1078
  const shortcutParams = {
988
1079
  $dateRangePicker: $xeDateRangePicker,
@@ -1042,8 +1133,8 @@ export default {
1042
1133
  setModelValue(startValue, endValue) {
1043
1134
  const $xeDateRangePicker = this;
1044
1135
  const reactData = $xeDateRangePicker.reactData;
1045
- reactData.startValue = startValue || '';
1046
- reactData.endValue = endValue || '';
1136
+ reactData.selectStValue = startValue || '';
1137
+ reactData.selectEdValue = endValue || '';
1047
1138
  const value = $xeDateRangePicker.getRangeValue(startValue, endValue);
1048
1139
  $xeDateRangePicker.emitModel(value);
1049
1140
  },
@@ -1111,8 +1202,8 @@ export default {
1111
1202
  if (popupOpts.enabled === false) {
1112
1203
  return renderEmptyElement($xeDateRangePicker);
1113
1204
  }
1114
- const { type, separator, autoClose, showConfirmButton, showClearButton } = props;
1115
- const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, startValue, endValue } = reactData;
1205
+ const { type, separator, autoClose, valueFormat, showConfirmButton, showClearButton } = props;
1206
+ const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, selectStValue, selectEdValue, paneStartVal, paneEndVal } = reactData;
1116
1207
  const vSize = $xeDateRangePicker.computeSize;
1117
1208
  const btnTransfer = $xeDateRangePicker.computeBtnTransfer;
1118
1209
  const shortcutOpts = $xeDateRangePicker.computeShortcutOpts;
@@ -1188,15 +1279,18 @@ export default {
1188
1279
  h(VxeDatePanelComponent, {
1189
1280
  ref: 'refStartDatePanel',
1190
1281
  props: {
1191
- value: startValue,
1282
+ value: paneStartVal,
1283
+ multiple: true,
1284
+ valueSort: true,
1285
+ limitCount: 3,
1286
+ defaultMode: 'first',
1192
1287
  type: props.type,
1193
1288
  className: props.className,
1194
1289
  minDate: props.minDate,
1195
1290
  maxDate: props.maxDate,
1196
- endDate: endValue,
1197
1291
  startDay: props.startDay,
1198
1292
  labelFormat: props.labelFormat,
1199
- valueFormat: props.valueFormat,
1293
+ valueFormat: valueFormat === 'date' || valueFormat === 'timestamp' ? '' : valueFormat,
1200
1294
  timeFormat: props.timeFormat,
1201
1295
  defaultDate: sdDate,
1202
1296
  defaultTime: sdTime,
@@ -1216,15 +1310,18 @@ export default {
1216
1310
  h(VxeDatePanelComponent, {
1217
1311
  ref: 'refEndDatePanel',
1218
1312
  props: {
1219
- value: endValue,
1313
+ value: paneEndVal,
1314
+ multiple: true,
1315
+ valueSort: true,
1316
+ limitCount: 3,
1317
+ defaultMode: 'last',
1220
1318
  type: props.type,
1221
1319
  className: props.className,
1222
1320
  minDate: props.minDate,
1223
1321
  maxDate: props.maxDate,
1224
- startDate: startValue,
1225
1322
  startDay: props.startDay,
1226
1323
  labelFormat: props.labelFormat,
1227
- valueFormat: props.valueFormat,
1324
+ valueFormat: valueFormat === 'date' || valueFormat === 'timestamp' ? '' : valueFormat,
1228
1325
  timeFormat: props.timeFormat,
1229
1326
  defaultDate: edDate,
1230
1327
  defaultTime: edTime,
@@ -1264,7 +1361,7 @@ export default {
1264
1361
  ? h(VxeButtonComponent, {
1265
1362
  props: {
1266
1363
  size: 'mini',
1267
- disabled: !(startValue || endValue),
1364
+ disabled: !(selectStValue || selectEdValue),
1268
1365
  content: getI18n('vxe.button.clear')
1269
1366
  },
1270
1367
  on: {
@@ -1333,13 +1430,13 @@ export default {
1333
1430
  const slots = $xeDateRangePicker.$scopedSlots;
1334
1431
  const reactData = $xeDateRangePicker.reactData;
1335
1432
  const { suffixIcon } = props;
1336
- const { startValue, endValue } = reactData;
1433
+ const { selectStValue, selectEdValue } = reactData;
1337
1434
  const suffixSlot = slots.suffix;
1338
1435
  const isDisabled = $xeDateRangePicker.computeIsDisabled;
1339
1436
  const isClearable = $xeDateRangePicker.computeIsClearable;
1340
1437
  return h('div', {
1341
1438
  class: ['vxe-date-range-picker--suffix', {
1342
- 'is--clear': isClearable && !isDisabled && (startValue || endValue)
1439
+ 'is--clear': isClearable && !isDisabled && (selectStValue || selectEdValue)
1343
1440
  }]
1344
1441
  }, [
1345
1442
  isClearable
@@ -1389,7 +1486,7 @@ export default {
1389
1486
  const props = $xeDateRangePicker;
1390
1487
  const reactData = $xeDateRangePicker.reactData;
1391
1488
  const { className, type, name, autoComplete } = props;
1392
- const { startValue, endValue, visiblePanel, isActivated } = reactData;
1489
+ const { selectStValue, selectEdValue, visiblePanel, isActivated } = reactData;
1393
1490
  const vSize = $xeDateRangePicker.computeSize;
1394
1491
  const isDisabled = $xeDateRangePicker.computeIsDisabled;
1395
1492
  const formReadonly = $xeDateRangePicker.computeFormReadonly;
@@ -1413,7 +1510,7 @@ export default {
1413
1510
  'is--visible': visiblePanel,
1414
1511
  'is--disabled': isDisabled,
1415
1512
  'is--active': isActivated,
1416
- 'show--clear': isClearable && !isDisabled && (startValue || endValue)
1513
+ 'show--clear': isClearable && !isDisabled && (selectStValue || selectEdValue)
1417
1514
  }],
1418
1515
  attrs: {
1419
1516
  spellcheck: false
@@ -1465,6 +1562,7 @@ export default {
1465
1562
  },
1466
1563
  created() {
1467
1564
  const $xeDateRangePicker = this;
1565
+ $xeDateRangePicker.internalData = createInternalData();
1468
1566
  $xeDateRangePicker.updateModelValue(true);
1469
1567
  globalEvents.on($xeDateRangePicker, 'mousewheel', $xeDateRangePicker.handleGlobalMousewheelEvent);
1470
1568
  globalEvents.on($xeDateRangePicker, 'mousedown', $xeDateRangePicker.handleGlobalMousedownEvent);
@@ -1478,6 +1576,8 @@ export default {
1478
1576
  },
1479
1577
  beforeDestroy() {
1480
1578
  const $xeDateRangePicker = this;
1579
+ const reactData = $xeDateRangePicker.reactData;
1580
+ const internalData = $xeDateRangePicker.internalData;
1481
1581
  const panelElem = $xeDateRangePicker.$refs.refInputPanel;
1482
1582
  if (panelElem && panelElem.parentNode) {
1483
1583
  panelElem.parentNode.removeChild(panelElem);
@@ -1487,6 +1587,8 @@ export default {
1487
1587
  globalEvents.off($xeDateRangePicker, 'mousedown');
1488
1588
  globalEvents.off($xeDateRangePicker, 'blur');
1489
1589
  globalEvents.off($xeDateRangePicker, 'resize');
1590
+ XEUtils.assign(reactData, createReactData());
1591
+ XEUtils.assign(internalData, createInternalData());
1490
1592
  },
1491
1593
  render(h) {
1492
1594
  return this.renderVN(h);