vxe-pc-ui 3.15.23 → 3.15.25
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/date-panel/src/date-panel.js +96 -53
- package/es/date-panel/src/util.js +40 -3
- package/es/date-picker/src/date-picker.js +20 -13
- package/es/date-range-picker/src/date-range-picker.js +296 -132
- package/es/icon/style.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tooltip/src/tooltip.js +34 -21
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/lib/date-panel/src/date-panel.js +110 -54
- package/lib/date-panel/src/date-panel.min.js +1 -1
- package/lib/date-panel/src/util.js +43 -5
- package/lib/date-panel/src/util.min.js +1 -1
- package/lib/date-picker/src/date-picker.js +20 -13
- package/lib/date-picker/src/date-picker.min.js +1 -1
- package/lib/date-range-picker/src/date-range-picker.js +318 -139
- package/lib/date-range-picker/src/date-range-picker.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 +538 -240
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tooltip/src/tooltip.js +36 -21
- package/lib/tooltip/src/tooltip.min.js +1 -1
- package/lib/ui/index.js +1 -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/package.json +1 -1
- package/packages/date-panel/src/date-panel.ts +102 -54
- package/packages/date-panel/src/util.ts +42 -3
- package/packages/date-picker/src/date-picker.ts +21 -13
- package/packages/date-range-picker/src/date-range-picker.ts +296 -131
- package/packages/tooltip/src/tooltip.ts +41 -20
- package/types/components/date-panel.d.ts +18 -3
- package/types/components/date-range-picker.d.ts +5 -3
- package/types/components/tooltip.d.ts +1 -1
- /package/es/icon/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
- /package/es/icon/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
- /package/es/icon/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
- /package/es/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
- /package/es/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
- /package/es/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
- /package/lib/icon/style/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
- /package/lib/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
- /package/lib/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
- /package/lib/{iconfont.1783073807010.woff2 → iconfont.1783247770465.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, hasTimestampValueType, hasDateValueType, parseDateValue } from '../../date-panel/src/util';
|
|
6
|
+
import { parseDateString, parseDateObj, getRangeDateByCode, handleValueFormat, hasTimestampValueType, hasDateValueType, parseDateValue, getNextMonth, getPrevMonth, getNextYear, getPrevYear } 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
|
-
|
|
155
|
-
|
|
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;
|
|
@@ -256,11 +260,18 @@ export default {
|
|
|
256
260
|
const { startValue, endValue } = props;
|
|
257
261
|
return `${startValue || ''}${endValue || ''}`;
|
|
258
262
|
},
|
|
259
|
-
|
|
263
|
+
computeIsTimeType() {
|
|
264
|
+
const $xeDateRangePicker = this;
|
|
265
|
+
const props = $xeDateRangePicker;
|
|
266
|
+
const { type } = props;
|
|
267
|
+
return type === 'time';
|
|
268
|
+
},
|
|
269
|
+
computeIsTimeOrDateTimeType() {
|
|
260
270
|
const $xeDateRangePicker = this;
|
|
261
271
|
const props = $xeDateRangePicker;
|
|
262
272
|
const { type } = props;
|
|
263
|
-
|
|
273
|
+
const isTimeType = $xeDateRangePicker.computeIsTimeType;
|
|
274
|
+
return isTimeType || type === 'datetime';
|
|
264
275
|
},
|
|
265
276
|
computeIsDatePickerType() {
|
|
266
277
|
const $xeDateRangePicker = this;
|
|
@@ -340,8 +351,8 @@ export default {
|
|
|
340
351
|
computePanelLabelObj() {
|
|
341
352
|
const $xeDateRangePicker = this;
|
|
342
353
|
const reactData = $xeDateRangePicker.reactData;
|
|
343
|
-
const {
|
|
344
|
-
const vals =
|
|
354
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
355
|
+
const vals = selectStValue || selectEdValue ? [selectStValue || '', selectEdValue || ''] : [];
|
|
345
356
|
return $xeDateRangePicker.formatRangeLabel(vals);
|
|
346
357
|
},
|
|
347
358
|
computeInputLabel() {
|
|
@@ -465,7 +476,7 @@ export default {
|
|
|
465
476
|
const $xeDateRangePicker = this;
|
|
466
477
|
const props = $xeDateRangePicker;
|
|
467
478
|
const reactData = $xeDateRangePicker.reactData;
|
|
468
|
-
const { value: modelValue, startValue, endValue } = props;
|
|
479
|
+
const { value: modelValue, startValue, endValue, valueFormat } = props;
|
|
469
480
|
let restObj = {
|
|
470
481
|
sValue: '',
|
|
471
482
|
eValue: ''
|
|
@@ -486,15 +497,27 @@ export default {
|
|
|
486
497
|
restObj = $xeDateRangePicker.paraeUpdateModel();
|
|
487
498
|
}
|
|
488
499
|
}
|
|
489
|
-
|
|
490
|
-
|
|
500
|
+
let startRest = restObj.sValue;
|
|
501
|
+
let endRest = restObj.eValue;
|
|
502
|
+
if (valueFormat === 'timestamp') {
|
|
503
|
+
if (XEUtils.isString(startRest) && /^\d+$/.test(startRest)) {
|
|
504
|
+
startRest = Number(startRest);
|
|
505
|
+
}
|
|
506
|
+
if (XEUtils.isString(endRest) && /^\d+$/.test(endRest)) {
|
|
507
|
+
endRest = Number(endRest);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
reactData.selectStValue = startRest;
|
|
511
|
+
reactData.selectEdValue = endRest;
|
|
512
|
+
reactData.paneEndVal = [startRest, endRest];
|
|
513
|
+
reactData.paneStartVal = [startRest, endRest];
|
|
491
514
|
},
|
|
492
515
|
triggerEvent(evnt) {
|
|
493
516
|
const $xeDateRangePicker = this;
|
|
494
517
|
const reactData = $xeDateRangePicker.reactData;
|
|
495
|
-
const {
|
|
496
|
-
const value = $xeDateRangePicker.getRangeValue(
|
|
497
|
-
$xeDateRangePicker.dispatchEvent(evnt.type, { value, startValue, endValue }, evnt);
|
|
518
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
519
|
+
const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
|
|
520
|
+
$xeDateRangePicker.dispatchEvent(evnt.type, { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
|
|
498
521
|
},
|
|
499
522
|
handleChange(sValue, eValue, evnt) {
|
|
500
523
|
const $xeDateRangePicker = this;
|
|
@@ -524,8 +547,8 @@ export default {
|
|
|
524
547
|
endRest = parseDateValue(endRest, type, { valueFormat: dateValueFormat });
|
|
525
548
|
}
|
|
526
549
|
}
|
|
527
|
-
reactData.
|
|
528
|
-
reactData.
|
|
550
|
+
reactData.selectStValue = startRest;
|
|
551
|
+
reactData.selectEdValue = endRest;
|
|
529
552
|
const value = $xeDateRangePicker.getRangeValue(startRest, endRest);
|
|
530
553
|
const isFinish = (startRest && endRest) || (!startRest && !endRest);
|
|
531
554
|
$xeDateRangePicker.$emit('update:modelValue', value);
|
|
@@ -565,9 +588,9 @@ export default {
|
|
|
565
588
|
const reactData = $xeDateRangePicker.reactData;
|
|
566
589
|
const isDisabled = $xeDateRangePicker.computeIsDisabled;
|
|
567
590
|
if (!isDisabled) {
|
|
568
|
-
const {
|
|
569
|
-
const value = $xeDateRangePicker.getRangeValue(
|
|
570
|
-
$xeDateRangePicker.dispatchEvent('prefix-click', { value, startValue, endValue }, evnt);
|
|
591
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
592
|
+
const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
|
|
593
|
+
$xeDateRangePicker.dispatchEvent('prefix-click', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
|
|
571
594
|
}
|
|
572
595
|
},
|
|
573
596
|
hidePanel() {
|
|
@@ -608,8 +631,8 @@ export default {
|
|
|
608
631
|
panelCellClassName({ date }) {
|
|
609
632
|
const $xeDateRangePicker = this;
|
|
610
633
|
const reactData = $xeDateRangePicker.reactData;
|
|
611
|
-
const startValue = reactData.
|
|
612
|
-
const endValue = reactData.
|
|
634
|
+
const startValue = reactData.selectStValue;
|
|
635
|
+
const endValue = reactData.selectEdValue;
|
|
613
636
|
if (startValue && endValue) {
|
|
614
637
|
const currTime = date.getTime();
|
|
615
638
|
const startTime = XEUtils.toStringDate(startValue).getTime();
|
|
@@ -626,18 +649,18 @@ export default {
|
|
|
626
649
|
const reactData = $xeDateRangePicker.reactData;
|
|
627
650
|
const internalData = $xeDateRangePicker.internalData;
|
|
628
651
|
const { autoClose } = props;
|
|
629
|
-
const {
|
|
652
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
630
653
|
const { selectStatus } = internalData;
|
|
631
654
|
const isDatePickerType = $xeDateRangePicker.computeIsDatePickerType;
|
|
632
655
|
if (autoClose) {
|
|
633
656
|
if (selectStatus && isDatePickerType) {
|
|
634
|
-
if (
|
|
657
|
+
if (selectStValue && selectEdValue) {
|
|
635
658
|
$xeDateRangePicker.hidePanel();
|
|
636
659
|
}
|
|
637
660
|
}
|
|
638
661
|
}
|
|
639
662
|
else {
|
|
640
|
-
if (
|
|
663
|
+
if (selectStValue && selectEdValue) {
|
|
641
664
|
internalData.selectStatus = false;
|
|
642
665
|
}
|
|
643
666
|
}
|
|
@@ -647,9 +670,9 @@ export default {
|
|
|
647
670
|
const reactData = $xeDateRangePicker.reactData;
|
|
648
671
|
const isDisabled = $xeDateRangePicker.computeIsDisabled;
|
|
649
672
|
if (!isDisabled) {
|
|
650
|
-
const {
|
|
651
|
-
const value = $xeDateRangePicker.getRangeValue(
|
|
652
|
-
$xeDateRangePicker.dispatchEvent('suffix-click', { value, startValue, endValue }, evnt);
|
|
673
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
674
|
+
const value = $xeDateRangePicker.getRangeValue(selectStValue, selectEdValue);
|
|
675
|
+
$xeDateRangePicker.dispatchEvent('suffix-click', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
|
|
653
676
|
}
|
|
654
677
|
},
|
|
655
678
|
blurEvent(evnt) {
|
|
@@ -657,16 +680,16 @@ export default {
|
|
|
657
680
|
const reactData = $xeDateRangePicker.reactData;
|
|
658
681
|
const $xeForm = $xeDateRangePicker.$xeForm;
|
|
659
682
|
const formItemInfo = $xeDateRangePicker.formItemInfo;
|
|
660
|
-
const {
|
|
683
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
661
684
|
const inpImmediate = $xeDateRangePicker.computeInpImmediate;
|
|
662
685
|
const value = '';
|
|
663
686
|
if (!inpImmediate) {
|
|
664
|
-
$xeDateRangePicker.handleChange(
|
|
687
|
+
$xeDateRangePicker.handleChange(selectStValue, selectEdValue, evnt);
|
|
665
688
|
}
|
|
666
689
|
if (!reactData.visiblePanel) {
|
|
667
690
|
reactData.isActivated = false;
|
|
668
691
|
}
|
|
669
|
-
$xeDateRangePicker.dispatchEvent('blur', { value, startValue, endValue }, evnt);
|
|
692
|
+
$xeDateRangePicker.dispatchEvent('blur', { value, startValue: selectStValue, endValue: selectEdValue }, evnt);
|
|
670
693
|
// 自动更新校验状态
|
|
671
694
|
if ($xeForm && formItemInfo) {
|
|
672
695
|
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
|
|
@@ -682,12 +705,17 @@ export default {
|
|
|
682
705
|
},
|
|
683
706
|
confirmEvent(evnt) {
|
|
684
707
|
const $xeDateRangePicker = this;
|
|
708
|
+
const isTimeType = $xeDateRangePicker.computeIsTimeType;
|
|
685
709
|
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
686
710
|
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
687
711
|
if ($startDatePanel && $endDatePanel) {
|
|
688
712
|
const startValue = $startDatePanel.getModelValue();
|
|
689
713
|
const endValue = $endDatePanel.getModelValue();
|
|
690
|
-
if (
|
|
714
|
+
if (isTimeType) {
|
|
715
|
+
$startDatePanel.confirmByEvent(evnt);
|
|
716
|
+
$endDatePanel.confirmByEvent(evnt);
|
|
717
|
+
}
|
|
718
|
+
else if ((startValue && !endValue) || (!startValue && endValue)) {
|
|
691
719
|
$xeDateRangePicker.handleChange('', '', evnt);
|
|
692
720
|
}
|
|
693
721
|
else {
|
|
@@ -704,22 +732,36 @@ export default {
|
|
|
704
732
|
const reactData = $xeDateRangePicker.reactData;
|
|
705
733
|
const internalData = $xeDateRangePicker.internalData;
|
|
706
734
|
const { selectStatus } = internalData;
|
|
707
|
-
const { value, $event } = params;
|
|
708
|
-
const
|
|
709
|
-
|
|
735
|
+
const { value, currValue, $event } = params;
|
|
736
|
+
const paneVals = value ? (XEUtils.isString(value) ? value.split(',') : [value]) : [];
|
|
737
|
+
let startValue = '';
|
|
738
|
+
let endValue = '';
|
|
739
|
+
if (selectStatus) {
|
|
740
|
+
startValue = paneVals[0];
|
|
741
|
+
if (paneVals[1]) {
|
|
742
|
+
endValue = paneVals[1];
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
endValue = reactData.selectEdValue;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
else {
|
|
749
|
+
startValue = currValue || XEUtils.last(paneVals);
|
|
750
|
+
}
|
|
751
|
+
reactData.paneEndVal = [startValue, endValue];
|
|
752
|
+
reactData.paneStartVal = [startValue, endValue];
|
|
753
|
+
$xeDateRangePicker.handleChange(startValue, endValue, $event);
|
|
710
754
|
$xeDateRangePicker.handleSelectClose();
|
|
711
|
-
if (
|
|
755
|
+
if (selectStatus) {
|
|
756
|
+
if (startValue && endValue) {
|
|
757
|
+
internalData.selectStatus = false;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
else {
|
|
712
761
|
internalData.selectStatus = true;
|
|
713
762
|
}
|
|
714
763
|
$xeDateRangePicker.$nextTick(() => {
|
|
715
|
-
|
|
716
|
-
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
717
|
-
if ($startDatePanel && $endDatePanel) {
|
|
718
|
-
const startValue = $startDatePanel.getModelValue();
|
|
719
|
-
if (!endValue && startValue) {
|
|
720
|
-
$endDatePanel.setPanelDate(XEUtils.toStringDate(startValue));
|
|
721
|
-
}
|
|
722
|
-
}
|
|
764
|
+
$xeDateRangePicker.handleUpdateStartPanelDate();
|
|
723
765
|
});
|
|
724
766
|
},
|
|
725
767
|
endPanelChangeEvent(params) {
|
|
@@ -727,91 +769,200 @@ export default {
|
|
|
727
769
|
const reactData = $xeDateRangePicker.reactData;
|
|
728
770
|
const internalData = $xeDateRangePicker.internalData;
|
|
729
771
|
const { selectStatus } = internalData;
|
|
730
|
-
const { value, $event } = params;
|
|
731
|
-
const
|
|
732
|
-
|
|
772
|
+
const { value, currValue, $event } = params;
|
|
773
|
+
const paneVals = value ? (XEUtils.isString(value) ? value.split(',') : [value]) : [];
|
|
774
|
+
let startValue = '';
|
|
775
|
+
let endValue = '';
|
|
776
|
+
if (selectStatus) {
|
|
777
|
+
endValue = paneVals[0];
|
|
778
|
+
if (paneVals[1]) {
|
|
779
|
+
startValue = paneVals[0];
|
|
780
|
+
endValue = paneVals[1];
|
|
781
|
+
}
|
|
782
|
+
else {
|
|
783
|
+
startValue = reactData.selectStValue;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
endValue = currValue || XEUtils.last(paneVals);
|
|
788
|
+
}
|
|
789
|
+
reactData.paneEndVal = [startValue, endValue];
|
|
790
|
+
reactData.paneStartVal = [startValue, endValue];
|
|
791
|
+
$xeDateRangePicker.handleChange(startValue, endValue, $event);
|
|
733
792
|
$xeDateRangePicker.handleSelectClose();
|
|
734
|
-
if (
|
|
793
|
+
if (selectStatus) {
|
|
794
|
+
if (startValue && endValue) {
|
|
795
|
+
internalData.selectStatus = false;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
else {
|
|
735
799
|
internalData.selectStatus = true;
|
|
736
800
|
}
|
|
737
801
|
$xeDateRangePicker.$nextTick(() => {
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
802
|
+
$xeDateRangePicker.handleUpdateEndPanelDate();
|
|
803
|
+
});
|
|
804
|
+
},
|
|
805
|
+
handleUpdateStartPanelDate() {
|
|
806
|
+
const $xeDateRangePicker = this;
|
|
807
|
+
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
808
|
+
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
809
|
+
if (!$startDatePanel || !$endDatePanel) {
|
|
810
|
+
return;
|
|
811
|
+
}
|
|
812
|
+
const startPanelDate = $startDatePanel.getPanelDate();
|
|
813
|
+
const endPanelDate = $endDatePanel.getPanelDate();
|
|
814
|
+
if (!startPanelDate || !endPanelDate) {
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
const viewType = $startDatePanel.getViewType();
|
|
818
|
+
const startYear = startPanelDate.getFullYear();
|
|
819
|
+
const startMonth = startPanelDate.getMonth();
|
|
820
|
+
const endYear = endPanelDate.getFullYear();
|
|
821
|
+
const endMonth = endPanelDate.getMonth();
|
|
822
|
+
switch (viewType) {
|
|
823
|
+
case 'day':
|
|
824
|
+
case 'date':
|
|
825
|
+
case 'week': {
|
|
826
|
+
if (endYear <= startYear && endMonth <= startMonth) {
|
|
827
|
+
$endDatePanel.setPanelDate(getNextMonth(startPanelDate));
|
|
744
828
|
}
|
|
829
|
+
break;
|
|
745
830
|
}
|
|
746
|
-
|
|
831
|
+
case 'month':
|
|
832
|
+
case 'quarter': {
|
|
833
|
+
if (endYear <= startYear) {
|
|
834
|
+
$endDatePanel.setPanelDate(getNextYear(startPanelDate));
|
|
835
|
+
}
|
|
836
|
+
break;
|
|
837
|
+
}
|
|
838
|
+
case 'year': {
|
|
839
|
+
const yearList = $startDatePanel.computeYearList;
|
|
840
|
+
if (yearList.some((item) => XEUtils.isDateSame(item.date, endPanelDate, 'yyyy'))) {
|
|
841
|
+
$endDatePanel.setPanelDate(getNextYear(startPanelDate, yearList.length));
|
|
842
|
+
}
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
747
846
|
},
|
|
748
|
-
startPanelDateBtnChangeEvent(
|
|
847
|
+
startPanelDateBtnChangeEvent() {
|
|
749
848
|
const $xeDateRangePicker = this;
|
|
750
849
|
const props = $xeDateRangePicker;
|
|
751
850
|
const { linkedPanels } = props;
|
|
851
|
+
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
852
|
+
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
853
|
+
if (!$startDatePanel || !$endDatePanel) {
|
|
854
|
+
return;
|
|
855
|
+
}
|
|
856
|
+
const startPanelDate = $startDatePanel.getPanelDate();
|
|
857
|
+
const endPanelDate = $endDatePanel.getPanelDate();
|
|
858
|
+
if (!startPanelDate || !endPanelDate) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
const viewType = $startDatePanel.getViewType();
|
|
752
862
|
if (linkedPanels) {
|
|
753
|
-
const { viewType } = params;
|
|
754
|
-
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
755
|
-
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
756
|
-
if (!$startDatePanel || !$endDatePanel) {
|
|
757
|
-
return;
|
|
758
|
-
}
|
|
759
|
-
const startPanelDate = $startDatePanel.getPanelDate();
|
|
760
|
-
if (!startPanelDate) {
|
|
761
|
-
return;
|
|
762
|
-
}
|
|
763
|
-
const endYear = startPanelDate.getFullYear();
|
|
764
|
-
const endMonth = startPanelDate.getMonth();
|
|
765
863
|
switch (viewType) {
|
|
766
864
|
case 'day':
|
|
767
865
|
case 'date':
|
|
768
866
|
case 'week': {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
867
|
+
$endDatePanel.setPanelDate(getNextMonth(startPanelDate));
|
|
868
|
+
break;
|
|
869
|
+
}
|
|
870
|
+
case 'month':
|
|
871
|
+
case 'quarter': {
|
|
872
|
+
$endDatePanel.setPanelDate(getNextYear(startPanelDate));
|
|
873
|
+
break;
|
|
874
|
+
}
|
|
875
|
+
case 'year': {
|
|
876
|
+
const yearList = $startDatePanel.computeYearList;
|
|
877
|
+
$endDatePanel.setPanelDate(getNextYear(startPanelDate, yearList.length));
|
|
777
878
|
break;
|
|
778
879
|
}
|
|
779
880
|
}
|
|
780
881
|
}
|
|
882
|
+
else {
|
|
883
|
+
$xeDateRangePicker.handleUpdateStartPanelDate();
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
handleUpdateEndPanelDate() {
|
|
887
|
+
const $xeDateRangePicker = this;
|
|
888
|
+
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
889
|
+
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
890
|
+
if (!$startDatePanel || !$endDatePanel) {
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
const startPanelDate = $startDatePanel.getPanelDate();
|
|
894
|
+
const endPanelDate = $endDatePanel.getPanelDate();
|
|
895
|
+
if (!startPanelDate || !endPanelDate) {
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
const viewType = $endDatePanel.getViewType();
|
|
899
|
+
const startYear = startPanelDate.getFullYear();
|
|
900
|
+
const startMonth = startPanelDate.getMonth();
|
|
901
|
+
const endYear = endPanelDate.getFullYear();
|
|
902
|
+
const endMonth = endPanelDate.getMonth();
|
|
903
|
+
switch (viewType) {
|
|
904
|
+
case 'day':
|
|
905
|
+
case 'date':
|
|
906
|
+
case 'week': {
|
|
907
|
+
if (startYear >= endYear && startMonth >= endMonth) {
|
|
908
|
+
$startDatePanel.setPanelDate(getPrevMonth(endPanelDate));
|
|
909
|
+
}
|
|
910
|
+
break;
|
|
911
|
+
}
|
|
912
|
+
case 'month':
|
|
913
|
+
case 'quarter': {
|
|
914
|
+
if (startYear >= endYear) {
|
|
915
|
+
$startDatePanel.setPanelDate(getPrevYear(endPanelDate));
|
|
916
|
+
}
|
|
917
|
+
break;
|
|
918
|
+
}
|
|
919
|
+
case 'year': {
|
|
920
|
+
const yearList = $endDatePanel.computeYearList;
|
|
921
|
+
if (yearList.some((item) => XEUtils.isDateSame(item.date, startPanelDate, 'yyyy'))) {
|
|
922
|
+
$startDatePanel.setPanelDate(getPrevYear(endPanelDate, yearList.length));
|
|
923
|
+
}
|
|
924
|
+
break;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
781
927
|
},
|
|
782
|
-
endPanelDateBtnChangeEvent(
|
|
928
|
+
endPanelDateBtnChangeEvent() {
|
|
783
929
|
const $xeDateRangePicker = this;
|
|
784
930
|
const props = $xeDateRangePicker;
|
|
785
931
|
const { linkedPanels } = props;
|
|
932
|
+
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
933
|
+
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
934
|
+
if (!$startDatePanel || !$endDatePanel) {
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
const startPanelDate = $startDatePanel.getPanelDate();
|
|
938
|
+
const endPanelDate = $endDatePanel.getPanelDate();
|
|
939
|
+
if (!startPanelDate || !endPanelDate) {
|
|
940
|
+
return;
|
|
941
|
+
}
|
|
942
|
+
const viewType = $endDatePanel.getViewType();
|
|
786
943
|
if (linkedPanels) {
|
|
787
|
-
const { viewType } = params;
|
|
788
|
-
const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
|
|
789
|
-
const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
|
|
790
|
-
if (!$startDatePanel || !$endDatePanel) {
|
|
791
|
-
return;
|
|
792
|
-
}
|
|
793
|
-
const endPanelDate = $endDatePanel.getPanelDate();
|
|
794
|
-
if (!endPanelDate) {
|
|
795
|
-
return;
|
|
796
|
-
}
|
|
797
|
-
const endYear = endPanelDate.getFullYear();
|
|
798
|
-
const endMonth = endPanelDate.getMonth();
|
|
799
944
|
switch (viewType) {
|
|
800
945
|
case 'day':
|
|
801
946
|
case 'date':
|
|
802
947
|
case 'week': {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
948
|
+
$startDatePanel.setPanelDate(getPrevMonth(endPanelDate));
|
|
949
|
+
break;
|
|
950
|
+
}
|
|
951
|
+
case 'month':
|
|
952
|
+
case 'quarter': {
|
|
953
|
+
$startDatePanel.setPanelDate(getPrevYear(endPanelDate));
|
|
954
|
+
break;
|
|
955
|
+
}
|
|
956
|
+
case 'year': {
|
|
957
|
+
const yearList = $endDatePanel.computeYearList;
|
|
958
|
+
$startDatePanel.setPanelDate(getPrevYear(endPanelDate, yearList.length));
|
|
811
959
|
break;
|
|
812
960
|
}
|
|
813
961
|
}
|
|
814
962
|
}
|
|
963
|
+
else {
|
|
964
|
+
$xeDateRangePicker.handleUpdateEndPanelDate();
|
|
965
|
+
}
|
|
815
966
|
},
|
|
816
967
|
// 全局事件
|
|
817
968
|
handleGlobalMousedownEvent(evnt) {
|
|
@@ -960,6 +1111,7 @@ export default {
|
|
|
960
1111
|
reactData.isAniVisible = true;
|
|
961
1112
|
setTimeout(() => {
|
|
962
1113
|
reactData.visiblePanel = true;
|
|
1114
|
+
$xeDateRangePicker.handleUpdateStartPanelDate();
|
|
963
1115
|
$xeDateRangePicker.updatePlacement();
|
|
964
1116
|
}, 10);
|
|
965
1117
|
$xeDateRangePicker.updateZindex();
|
|
@@ -1002,8 +1154,8 @@ export default {
|
|
|
1002
1154
|
const shortcutOpts = $xeDateRangePicker.computeShortcutOpts;
|
|
1003
1155
|
const { autoClose } = shortcutOpts;
|
|
1004
1156
|
const { code, clickMethod } = option;
|
|
1005
|
-
let startValue = reactData.
|
|
1006
|
-
let endValue = reactData.
|
|
1157
|
+
let startValue = reactData.selectStValue;
|
|
1158
|
+
let endValue = reactData.selectEdValue;
|
|
1007
1159
|
let value = $xeDateRangePicker.getRangeValue(startValue, endValue);
|
|
1008
1160
|
const shortcutParams = {
|
|
1009
1161
|
$dateRangePicker: $xeDateRangePicker,
|
|
@@ -1063,8 +1215,8 @@ export default {
|
|
|
1063
1215
|
setModelValue(startValue, endValue) {
|
|
1064
1216
|
const $xeDateRangePicker = this;
|
|
1065
1217
|
const reactData = $xeDateRangePicker.reactData;
|
|
1066
|
-
reactData.
|
|
1067
|
-
reactData.
|
|
1218
|
+
reactData.selectStValue = startValue || '';
|
|
1219
|
+
reactData.selectEdValue = endValue || '';
|
|
1068
1220
|
const value = $xeDateRangePicker.getRangeValue(startValue, endValue);
|
|
1069
1221
|
$xeDateRangePicker.emitModel(value);
|
|
1070
1222
|
},
|
|
@@ -1132,15 +1284,16 @@ export default {
|
|
|
1132
1284
|
if (popupOpts.enabled === false) {
|
|
1133
1285
|
return renderEmptyElement($xeDateRangePicker);
|
|
1134
1286
|
}
|
|
1135
|
-
const { type, separator, autoClose, showConfirmButton, showClearButton } = props;
|
|
1136
|
-
const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle,
|
|
1287
|
+
const { type, separator, autoClose, valueFormat, showConfirmButton, showClearButton } = props;
|
|
1288
|
+
const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, selectStValue, selectEdValue, paneStartVal, paneEndVal } = reactData;
|
|
1137
1289
|
const vSize = $xeDateRangePicker.computeSize;
|
|
1138
1290
|
const btnTransfer = $xeDateRangePicker.computeBtnTransfer;
|
|
1139
1291
|
const shortcutOpts = $xeDateRangePicker.computeShortcutOpts;
|
|
1140
1292
|
const isClearable = $xeDateRangePicker.computeIsClearable;
|
|
1141
1293
|
const panelLabelObj = $xeDateRangePicker.computePanelLabelObj;
|
|
1142
1294
|
const shortcutList = $xeDateRangePicker.computeShortcutList;
|
|
1143
|
-
const
|
|
1295
|
+
const isTimeType = $xeDateRangePicker.computeIsTimeType;
|
|
1296
|
+
const isTimeOrDateTimeType = $xeDateRangePicker.computeIsTimeOrDateTimeType;
|
|
1144
1297
|
const defaultDates = $xeDateRangePicker.computeDefaultDates;
|
|
1145
1298
|
const defaultTimes = $xeDateRangePicker.computeDefaultTimes;
|
|
1146
1299
|
const timeOpts = $xeDateRangePicker.computeTimeOpts;
|
|
@@ -1156,7 +1309,7 @@ export default {
|
|
|
1156
1309
|
const [sdDate, edDate] = defaultDates;
|
|
1157
1310
|
const [sdTime, edTime] = defaultTimes;
|
|
1158
1311
|
const hasShortcutBtn = shortcutList.length > 0;
|
|
1159
|
-
const showConfirmBtn = (showConfirmButton === null ? (
|
|
1312
|
+
const showConfirmBtn = (showConfirmButton === null ? (isTimeOrDateTimeType || !autoClose) : showConfirmButton);
|
|
1160
1313
|
const showClearBtn = (showClearButton === null ? isClearable : showClearButton);
|
|
1161
1314
|
return h('div', {
|
|
1162
1315
|
ref: 'refInputPanel',
|
|
@@ -1209,15 +1362,18 @@ export default {
|
|
|
1209
1362
|
h(VxeDatePanelComponent, {
|
|
1210
1363
|
ref: 'refStartDatePanel',
|
|
1211
1364
|
props: {
|
|
1212
|
-
value:
|
|
1365
|
+
value: paneStartVal,
|
|
1366
|
+
multiple: !isTimeType,
|
|
1367
|
+
valueSort: true,
|
|
1368
|
+
limitCount: 3,
|
|
1369
|
+
defaultMode: 'first',
|
|
1213
1370
|
type: props.type,
|
|
1214
1371
|
className: props.className,
|
|
1215
1372
|
minDate: props.minDate,
|
|
1216
1373
|
maxDate: props.maxDate,
|
|
1217
|
-
endDate: endValue,
|
|
1218
1374
|
startDay: props.startDay,
|
|
1219
1375
|
labelFormat: props.labelFormat,
|
|
1220
|
-
valueFormat:
|
|
1376
|
+
valueFormat: valueFormat === 'date' || valueFormat === 'timestamp' ? '' : valueFormat,
|
|
1221
1377
|
timeFormat: props.timeFormat,
|
|
1222
1378
|
defaultDate: sdDate,
|
|
1223
1379
|
defaultTime: sdTime,
|
|
@@ -1237,15 +1393,18 @@ export default {
|
|
|
1237
1393
|
h(VxeDatePanelComponent, {
|
|
1238
1394
|
ref: 'refEndDatePanel',
|
|
1239
1395
|
props: {
|
|
1240
|
-
value:
|
|
1396
|
+
value: paneEndVal,
|
|
1397
|
+
multiple: !isTimeType,
|
|
1398
|
+
valueSort: true,
|
|
1399
|
+
limitCount: 3,
|
|
1400
|
+
defaultMode: 'last',
|
|
1241
1401
|
type: props.type,
|
|
1242
1402
|
className: props.className,
|
|
1243
1403
|
minDate: props.minDate,
|
|
1244
1404
|
maxDate: props.maxDate,
|
|
1245
|
-
startDate: startValue,
|
|
1246
1405
|
startDay: props.startDay,
|
|
1247
1406
|
labelFormat: props.labelFormat,
|
|
1248
|
-
valueFormat:
|
|
1407
|
+
valueFormat: valueFormat === 'date' || valueFormat === 'timestamp' ? '' : valueFormat,
|
|
1249
1408
|
timeFormat: props.timeFormat,
|
|
1250
1409
|
defaultDate: edDate,
|
|
1251
1410
|
defaultTime: edTime,
|
|
@@ -1285,7 +1444,7 @@ export default {
|
|
|
1285
1444
|
? h(VxeButtonComponent, {
|
|
1286
1445
|
props: {
|
|
1287
1446
|
size: 'mini',
|
|
1288
|
-
disabled: !(
|
|
1447
|
+
disabled: !(selectStValue || selectEdValue),
|
|
1289
1448
|
content: getI18n('vxe.button.clear')
|
|
1290
1449
|
},
|
|
1291
1450
|
on: {
|
|
@@ -1354,13 +1513,13 @@ export default {
|
|
|
1354
1513
|
const slots = $xeDateRangePicker.$scopedSlots;
|
|
1355
1514
|
const reactData = $xeDateRangePicker.reactData;
|
|
1356
1515
|
const { suffixIcon } = props;
|
|
1357
|
-
const {
|
|
1516
|
+
const { selectStValue, selectEdValue } = reactData;
|
|
1358
1517
|
const suffixSlot = slots.suffix;
|
|
1359
1518
|
const isDisabled = $xeDateRangePicker.computeIsDisabled;
|
|
1360
1519
|
const isClearable = $xeDateRangePicker.computeIsClearable;
|
|
1361
1520
|
return h('div', {
|
|
1362
1521
|
class: ['vxe-date-range-picker--suffix', {
|
|
1363
|
-
'is--clear': isClearable && !isDisabled && (
|
|
1522
|
+
'is--clear': isClearable && !isDisabled && (selectStValue || selectEdValue)
|
|
1364
1523
|
}]
|
|
1365
1524
|
}, [
|
|
1366
1525
|
isClearable
|
|
@@ -1410,7 +1569,7 @@ export default {
|
|
|
1410
1569
|
const props = $xeDateRangePicker;
|
|
1411
1570
|
const reactData = $xeDateRangePicker.reactData;
|
|
1412
1571
|
const { className, type, name, autoComplete } = props;
|
|
1413
|
-
const {
|
|
1572
|
+
const { selectStValue, selectEdValue, visiblePanel, isActivated } = reactData;
|
|
1414
1573
|
const vSize = $xeDateRangePicker.computeSize;
|
|
1415
1574
|
const isDisabled = $xeDateRangePicker.computeIsDisabled;
|
|
1416
1575
|
const formReadonly = $xeDateRangePicker.computeFormReadonly;
|
|
@@ -1434,7 +1593,7 @@ export default {
|
|
|
1434
1593
|
'is--visible': visiblePanel,
|
|
1435
1594
|
'is--disabled': isDisabled,
|
|
1436
1595
|
'is--active': isActivated,
|
|
1437
|
-
'show--clear': isClearable && !isDisabled && (
|
|
1596
|
+
'show--clear': isClearable && !isDisabled && (selectStValue || selectEdValue)
|
|
1438
1597
|
}],
|
|
1439
1598
|
attrs: {
|
|
1440
1599
|
spellcheck: false
|
|
@@ -1486,6 +1645,7 @@ export default {
|
|
|
1486
1645
|
},
|
|
1487
1646
|
created() {
|
|
1488
1647
|
const $xeDateRangePicker = this;
|
|
1648
|
+
$xeDateRangePicker.internalData = createInternalData();
|
|
1489
1649
|
$xeDateRangePicker.updateModelValue(true);
|
|
1490
1650
|
globalEvents.on($xeDateRangePicker, 'mousewheel', $xeDateRangePicker.handleGlobalMousewheelEvent);
|
|
1491
1651
|
globalEvents.on($xeDateRangePicker, 'mousedown', $xeDateRangePicker.handleGlobalMousedownEvent);
|
|
@@ -1499,6 +1659,8 @@ export default {
|
|
|
1499
1659
|
},
|
|
1500
1660
|
beforeDestroy() {
|
|
1501
1661
|
const $xeDateRangePicker = this;
|
|
1662
|
+
const reactData = $xeDateRangePicker.reactData;
|
|
1663
|
+
const internalData = $xeDateRangePicker.internalData;
|
|
1502
1664
|
const panelElem = $xeDateRangePicker.$refs.refInputPanel;
|
|
1503
1665
|
if (panelElem && panelElem.parentNode) {
|
|
1504
1666
|
panelElem.parentNode.removeChild(panelElem);
|
|
@@ -1508,6 +1670,8 @@ export default {
|
|
|
1508
1670
|
globalEvents.off($xeDateRangePicker, 'mousedown');
|
|
1509
1671
|
globalEvents.off($xeDateRangePicker, 'blur');
|
|
1510
1672
|
globalEvents.off($xeDateRangePicker, 'resize');
|
|
1673
|
+
XEUtils.assign(reactData, createReactData());
|
|
1674
|
+
XEUtils.assign(internalData, createInternalData());
|
|
1511
1675
|
},
|
|
1512
1676
|
render(h) {
|
|
1513
1677
|
return this.renderVN(h);
|