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.
Files changed (51) hide show
  1. package/es/date-panel/src/date-panel.js +96 -53
  2. package/es/date-panel/src/util.js +40 -3
  3. package/es/date-picker/src/date-picker.js +20 -13
  4. package/es/date-range-picker/src/date-range-picker.js +296 -132
  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 +110 -54
  12. package/lib/date-panel/src/date-panel.min.js +1 -1
  13. package/lib/date-panel/src/util.js +43 -5
  14. package/lib/date-panel/src/util.min.js +1 -1
  15. package/lib/date-picker/src/date-picker.js +20 -13
  16. package/lib/date-picker/src/date-picker.min.js +1 -1
  17. package/lib/date-range-picker/src/date-range-picker.js +318 -139
  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 +538 -240
  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 +102 -54
  33. package/packages/date-panel/src/util.ts +42 -3
  34. package/packages/date-picker/src/date-picker.ts +21 -13
  35. package/packages/date-range-picker/src/date-range-picker.ts +296 -131
  36. package/packages/tooltip/src/tooltip.ts +41 -20
  37. package/types/components/date-panel.d.ts +18 -3
  38. package/types/components/date-range-picker.d.ts +5 -3
  39. package/types/components/tooltip.d.ts +1 -1
  40. /package/es/icon/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
  41. /package/es/icon/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
  42. /package/es/icon/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
  43. /package/es/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
  44. /package/es/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
  45. /package/es/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
  46. /package/lib/icon/style/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
  47. /package/lib/icon/style/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
  48. /package/lib/icon/style/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
  49. /package/lib/{iconfont.1783073807010.ttf → iconfont.1783247770465.ttf} +0 -0
  50. /package/lib/{iconfont.1783073807010.woff → iconfont.1783247770465.woff} +0 -0
  51. /package/lib/{iconfont.1783073807010.woff2 → iconfont.1783247770465.woff2} +0 -0
@@ -2,6 +2,8 @@ import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { getConfig, getI18n, createEvent, globalMixins, renderEmptyElement } from '../../ui';
4
4
  import { toStringTimeDate, getDateQuarter, parseDateValue, parseDateObj, handleValueFormat, hasDateValueType, hasTimestampValueType } from './util';
5
+ import { createComponentLog } from '../../ui/src/log';
6
+ const { errLog } = createComponentLog('date-panel');
5
7
  export default {
6
8
  name: 'VxeDatePanel',
7
9
  mixins: [
@@ -12,7 +14,7 @@ export default {
12
14
  event: 'modelValue'
13
15
  },
14
16
  props: {
15
- value: [String, Number, Date],
17
+ value: [String, Number, Date, Array],
16
18
  type: {
17
19
  type: String,
18
20
  default: 'date'
@@ -37,6 +39,7 @@ export default {
37
39
  type: [String, Number, Date],
38
40
  default: () => getConfig().datePanel.endDate
39
41
  },
42
+ defaultMode: String,
40
43
  defaultDate: [String, Number, Date],
41
44
  defaultTime: [String, Number, Date],
42
45
  minDate: [String, Number, Date],
@@ -48,6 +51,7 @@ export default {
48
51
  labelFormat: String,
49
52
  valueFormat: String,
50
53
  timeFormat: String,
54
+ valueSort: Boolean,
51
55
  festivalMethod: {
52
56
  type: Function,
53
57
  default: () => getConfig().datePanel.festivalMethod
@@ -79,9 +83,9 @@ export default {
79
83
  currentDate: null
80
84
  };
81
85
  const internalData = {
82
- yearSize: 12,
83
- monthSize: 20,
84
- quarterSize: 8,
86
+ yearSize: 16,
87
+ monthSize: 12,
88
+ quarterSize: 4,
85
89
  hpTimeout: undefined
86
90
  };
87
91
  return {
@@ -90,17 +94,24 @@ export default {
90
94
  internalData
91
95
  };
92
96
  },
93
- computed: Object.assign(Object.assign({}, {}), { computeIsDateTimeType() {
97
+ computed: Object.assign(Object.assign({}, {}), { computeIsTimeType() {
94
98
  const $xeDatePanel = this;
95
99
  const props = $xeDatePanel;
96
100
  const { type } = props;
97
- return type === 'time' || type === 'datetime';
101
+ return type === 'time';
102
+ },
103
+ computeIsTimeOrDateTimeType() {
104
+ const $xeDatePanel = this;
105
+ const props = $xeDatePanel;
106
+ const { type } = props;
107
+ const isTimeType = $xeDatePanel.computeIsTimeType;
108
+ return isTimeType || type === 'datetime';
98
109
  },
99
110
  computeIsDatePanelType() {
100
111
  const $xeDatePanel = this;
101
112
  const props = $xeDatePanel;
102
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
103
- return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
113
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
114
+ return isTimeOrDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
104
115
  },
105
116
  computeDateStartDate() {
106
117
  const $xeDatePanel = this;
@@ -115,19 +126,25 @@ export default {
115
126
  computeDateListValue() {
116
127
  const $xeDatePanel = this;
117
128
  const props = $xeDatePanel;
118
- const { value: modelValue, multiple } = props;
129
+ const { value: modelValue, valueFormat } = props;
119
130
  const isDatePanelType = $xeDatePanel.computeIsDatePanelType;
120
131
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
121
- if (multiple && modelValue && isDatePanelType) {
122
- return XEUtils.toValueString(modelValue).split(',').map(item => {
123
- const date = $xeDatePanel.parseDate(item, dateValueFormat);
124
- if (XEUtils.isValidDate(date)) {
125
- return date;
132
+ const restList = [];
133
+ if (modelValue && isDatePanelType) {
134
+ (XEUtils.isArray(modelValue) ? modelValue : XEUtils.toValueString(modelValue).split(',')).forEach(val => {
135
+ let strVal = val;
136
+ if (val) {
137
+ if (valueFormat === 'timestamp') {
138
+ if (XEUtils.isString(val) && /^\d+$/.test(val)) {
139
+ strVal = Number(strVal);
140
+ }
141
+ }
142
+ const date = $xeDatePanel.parseDate(strVal, dateValueFormat);
143
+ restList.push(date);
126
144
  }
127
- return date;
128
145
  });
129
146
  }
130
- return [];
147
+ return restList;
131
148
  },
132
149
  computeDateMultipleValue() {
133
150
  const $xeDatePanel = this;
@@ -171,12 +188,14 @@ export default {
171
188
  computeDateValue() {
172
189
  const $xeDatePanel = this;
173
190
  const props = $xeDatePanel;
174
- const { value: modelValue } = props;
191
+ const { value: modelValue, defaultMode } = props;
175
192
  const isDatePanelType = $xeDatePanel.computeIsDatePanelType;
176
193
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
177
194
  let val = null;
178
195
  if (modelValue && isDatePanelType) {
179
- const date = $xeDatePanel.parseDate(modelValue, dateValueFormat);
196
+ const vals = XEUtils.isString(modelValue) ? modelValue.split(',') : modelValue;
197
+ const currVal = defaultMode === 'last' ? XEUtils.last(vals) : XEUtils.first(vals);
198
+ const date = $xeDatePanel.parseDate(currVal, dateValueFormat);
180
199
  if (XEUtils.isValidDate(date)) {
181
200
  val = date;
182
201
  }
@@ -217,8 +236,8 @@ export default {
217
236
  computeDateHMSTime() {
218
237
  const $xeDatePanel = this;
219
238
  const dateValue = $xeDatePanel.computeDateValue;
220
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
221
- return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0;
239
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
240
+ return dateValue && isTimeOrDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0;
222
241
  },
223
242
  computeDateLabelFormat() {
224
243
  const $xeDatePanel = this;
@@ -241,7 +260,7 @@ export default {
241
260
  const currFullYear = currentDate.getFullYear();
242
261
  const selectFullYear = selectMonth.getFullYear();
243
262
  const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
244
- for (let index = -4; index < yearSize + 4; index++) {
263
+ for (let index = 0; index < yearSize; index++) {
245
264
  const date = XEUtils.getWhatYear(startYearDate, index, 'first');
246
265
  const itemFullYear = date.getFullYear();
247
266
  years.push({
@@ -352,7 +371,7 @@ export default {
352
371
  const currQuarter = getDateQuarter(currentDate);
353
372
  const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first');
354
373
  const selFullYear = firstYear.getFullYear();
355
- for (let index = -2; index < quarterSize - 2; index++) {
374
+ for (let index = 0; index < quarterSize; index++) {
356
375
  const date = XEUtils.getWhatQuarter(firstYear, index);
357
376
  const itemFullYear = date.getFullYear();
358
377
  const itemQuarter = getDateQuarter(date);
@@ -385,7 +404,7 @@ export default {
385
404
  const currFullYear = currentDate.getFullYear();
386
405
  const currMonth = currentDate.getMonth();
387
406
  const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear();
388
- for (let index = -4; index < monthSize - 4; index++) {
407
+ for (let index = 0; index < monthSize; index++) {
389
408
  const date = XEUtils.getWhatYear(selectMonth, 0, index);
390
409
  const itemFullYear = date.getFullYear();
391
410
  const itemMonth = date.getMonth();
@@ -469,8 +488,8 @@ export default {
469
488
  const timeOpts = $xeDatePanel.computeTimeOpts;
470
489
  const { hours: hourOptions, hourDisabledMethod } = timeOpts;
471
490
  const list = [];
472
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
473
- if (isDateTimeType) {
491
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
492
+ if (isTimeOrDateTimeType) {
474
493
  if (hourOptions && hourOptions.length) {
475
494
  hourOptions.forEach(item => {
476
495
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -509,8 +528,8 @@ export default {
509
528
  const timeOpts = $xeDatePanel.computeTimeOpts;
510
529
  const { minutes: minuteOptions, minuteDisabledMethod } = timeOpts;
511
530
  const list = [];
512
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
513
- if (isDateTimeType) {
531
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
532
+ if (isTimeOrDateTimeType) {
514
533
  if (minuteOptions && minuteOptions.length) {
515
534
  minuteOptions.forEach(item => {
516
535
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -563,8 +582,8 @@ export default {
563
582
  const timeOpts = $xeDatePanel.computeTimeOpts;
564
583
  const { seconds: secondOptions, secondDisabledMethod } = timeOpts;
565
584
  const list = [];
566
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
567
- if (isDateTimeType) {
585
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
586
+ if (isTimeOrDateTimeType) {
568
587
  if (secondOptions && secondOptions.length) {
569
588
  secondOptions.forEach(item => {
570
589
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -634,10 +653,10 @@ export default {
634
653
  const props = $xeDatePanel;
635
654
  const { type, multiple } = props;
636
655
  if (type === 'time') {
637
- return toStringTimeDate(value);
656
+ return toStringTimeDate(XEUtils.isArray(value) ? XEUtils.last(value) : value);
638
657
  }
639
658
  if (XEUtils.isArray(value)) {
640
- return XEUtils.toStringDate(value[0], format);
659
+ return XEUtils.toStringDate(XEUtils.last(value), format);
641
660
  }
642
661
  if (XEUtils.isString(value)) {
643
662
  return XEUtils.toStringDate(multiple ? XEUtils.last(value.split(',')) : value, format);
@@ -708,7 +727,7 @@ export default {
708
727
  $xeDatePanel.handleChange('', { type: 'check' });
709
728
  }
710
729
  },
711
- handleChange(value, evnt) {
730
+ handleChange(value, evnt, params) {
712
731
  const $xeDatePanel = this;
713
732
  const props = $xeDatePanel;
714
733
  const reactData = $xeDatePanel.reactData;
@@ -720,20 +739,20 @@ export default {
720
739
  const timeNum = dateVal ? dateVal.getTime() : null;
721
740
  $xeDatePanel.emitModel(timeNum);
722
741
  if (modelValue !== timeNum) {
723
- $xeDatePanel.dispatchEvent('change', { value: timeNum }, evnt);
742
+ $xeDatePanel.dispatchEvent('change', { value: timeNum, currValue: params ? params.currValue : '' }, evnt);
724
743
  }
725
744
  }
726
745
  else if (hasDateValueType(valueFormat)) {
727
746
  const dateVal = parseDateValue(value, type, { valueFormat: dateValueFormat });
728
747
  $xeDatePanel.emitModel(dateVal);
729
748
  if (modelValue && dateVal ? XEUtils.toStringDate(modelValue).getTime() !== dateVal.getTime() : modelValue !== dateVal) {
730
- $xeDatePanel.dispatchEvent('change', { value: dateVal }, evnt);
749
+ $xeDatePanel.dispatchEvent('change', { value: dateVal, currValue: params ? params.currValue : '' }, evnt);
731
750
  }
732
751
  }
733
752
  else {
734
753
  $xeDatePanel.emitModel(value);
735
754
  if (XEUtils.toValueString(modelValue) !== value) {
736
- $xeDatePanel.dispatchEvent('change', { value }, evnt);
755
+ $xeDatePanel.dispatchEvent('change', { value, currValue: params ? params.currValue : '' }, evnt);
737
756
  }
738
757
  }
739
758
  },
@@ -807,16 +826,17 @@ export default {
807
826
  const $xeDatePanel = this;
808
827
  const props = $xeDatePanel;
809
828
  const reactData = $xeDatePanel.reactData;
810
- const { value: modelValue, multiple } = props;
829
+ const { value: modelValue, multiple, valueSort } = props;
811
830
  const { datetimePanelValue } = reactData;
812
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
831
+ const isTimeType = $xeDatePanel.computeIsTimeType;
832
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
813
833
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
814
834
  const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek;
815
835
  if (props.type === 'week') {
816
836
  const sWeek = XEUtils.toNumber(props.selectDay);
817
837
  date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
818
838
  }
819
- else if (isDateTimeType) {
839
+ else if (isTimeOrDateTimeType) {
820
840
  if (datetimePanelValue) {
821
841
  date.setHours(datetimePanelValue.getHours());
822
842
  date.setMinutes(datetimePanelValue.getMinutes());
@@ -825,13 +845,13 @@ export default {
825
845
  }
826
846
  const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek });
827
847
  $xeDatePanel.dateCheckMonth(date);
828
- if (multiple) {
848
+ if (!isTimeType && multiple) {
829
849
  const overCount = $xeDatePanel.computeOverCount;
830
850
  // 如果为多选
831
- if (isDateTimeType) {
851
+ if (isTimeOrDateTimeType) {
832
852
  // 如果是datetime特殊类型
833
853
  const dateListValue = isReload ? [] : [...$xeDatePanel.computeDateListValue];
834
- const datetimeRest = [];
854
+ let datetimeRest = [];
835
855
  const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'));
836
856
  if (eqIndex === -1) {
837
857
  if (overCount) {
@@ -853,27 +873,37 @@ export default {
853
873
  datetimeRest.push(item);
854
874
  }
855
875
  });
856
- $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' });
876
+ // 排序
877
+ if (valueSort) {
878
+ datetimeRest = datetimeRest.sort((a, b) => a.getTime() - b.getTime());
879
+ }
880
+ $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' }, { currValue: inpVal });
857
881
  }
858
882
  else {
859
883
  const dateMultipleValue = isReload ? [] : $xeDatePanel.computeDateMultipleValue;
884
+ let dateRest = [];
860
885
  // 如果是日期类型
861
886
  if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
862
- $xeDatePanel.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' });
887
+ dateRest = dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal));
863
888
  }
864
889
  else {
865
890
  if (overCount) {
866
891
  // 如果超出最大多选数量
867
892
  return;
868
893
  }
869
- $xeDatePanel.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' });
894
+ dateRest = dateMultipleValue.concat([inpVal]);
870
895
  }
896
+ // 排序
897
+ if (valueSort) {
898
+ dateRest = dateRest.sort();
899
+ }
900
+ $xeDatePanel.handleChange(dateRest.join(','), { type: 'update' }, { currValue: inpVal });
871
901
  }
872
902
  }
873
903
  else {
874
904
  // 如果为单选
875
905
  if (!XEUtils.isEqual(modelValue, inpVal)) {
876
- $xeDatePanel.handleChange(inpVal, { type: 'update' });
906
+ $xeDatePanel.handleChange(inpVal, { type: 'update' }, { currValue: inpVal });
877
907
  }
878
908
  }
879
909
  },
@@ -1202,17 +1232,19 @@ export default {
1202
1232
  const { multiple } = props;
1203
1233
  const { datetimePanelValue } = reactData;
1204
1234
  const dateValue = $xeDatePanel.computeDateValue;
1205
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
1206
- if (isDateTimeType) {
1235
+ const isTimeType = $xeDatePanel.computeIsTimeType;
1236
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
1237
+ if (isTimeOrDateTimeType) {
1207
1238
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
1208
- if (multiple) {
1239
+ if (!isTimeType && multiple) {
1209
1240
  // 如果为多选
1210
1241
  const dateMultipleValue = $xeDatePanel.computeDateMultipleValue;
1211
- if (isDateTimeType) {
1242
+ const dateListValue = $xeDatePanel.computeDateListValue;
1243
+ if (isTimeOrDateTimeType) {
1212
1244
  // 如果是datetime特殊类型
1213
- const dateListValue = [...$xeDatePanel.computeDateListValue];
1245
+ const listVals = dateListValue.length ? [...dateListValue] : [];
1214
1246
  const datetimeRest = [];
1215
- dateListValue.forEach(item => {
1247
+ listVals.forEach(item => {
1216
1248
  if (item) {
1217
1249
  if (datetimePanelValue) {
1218
1250
  item.setHours(datetimePanelValue.getHours());
@@ -1263,7 +1295,7 @@ export default {
1263
1295
  const props = $xeDatePanel;
1264
1296
  const reactData = $xeDatePanel.reactData;
1265
1297
  const { type, defaultDate, defaultTime } = props;
1266
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
1298
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
1267
1299
  const dateValue = $xeDatePanel.computeDateValue;
1268
1300
  if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1269
1301
  reactData.datePanelType = type;
@@ -1291,7 +1323,7 @@ export default {
1291
1323
  $xeDatePanel.dateNowHandle();
1292
1324
  }
1293
1325
  }
1294
- if (isDateTimeType) {
1326
+ if (isTimeOrDateTimeType) {
1295
1327
  let dtPanelValue = reactData.datePanelValue;
1296
1328
  if (!dtPanelValue) {
1297
1329
  dtPanelValue = XEUtils.getWhatDay(Date.now(), 0, 'first');
@@ -1318,6 +1350,12 @@ export default {
1318
1350
  const reactData = $xeDatePanel.reactData;
1319
1351
  return reactData.inputValue;
1320
1352
  },
1353
+ getViewType() {
1354
+ const $xeDatePanel = this;
1355
+ const reactData = $xeDatePanel.reactData;
1356
+ const { datePanelType } = reactData;
1357
+ return datePanelType;
1358
+ },
1321
1359
  setPanelDate(date) {
1322
1360
  const $xeDatePanel = this;
1323
1361
  if (date) {
@@ -1961,6 +1999,11 @@ export default {
1961
1999
  },
1962
2000
  created() {
1963
2001
  const $xeDatePanel = this;
2002
+ const props = $xeDatePanel;
2003
+ const { type, multiple } = props;
2004
+ if (multiple && type === 'time') {
2005
+ errLog('vxe.error.notSupportProp', [`type=${type}`, 'multiple=true', 'multiple=false']);
2006
+ }
1964
2007
  $xeDatePanel.initValue();
1965
2008
  $xeDatePanel.dateOpenPanel();
1966
2009
  },
@@ -74,11 +74,11 @@ export function getDateQuarter(date) {
74
74
  }
75
75
  return 4;
76
76
  }
77
- export const parseDateValue = (val, type, options) => {
77
+ export function parseDateValue(val, type, options) {
78
78
  const { valueFormat } = options;
79
79
  if (val) {
80
80
  if (type === 'time') {
81
- return toStringTimeDate(val);
81
+ return toStringTimeDate(XEUtils.isArray(val) ? XEUtils.last(val) : val);
82
82
  }
83
83
  if (XEUtils.isNumber(val) || /^[0-9]{10,15}$/.test(`${val}`)) {
84
84
  return new Date(Number(val));
@@ -86,10 +86,13 @@ export const parseDateValue = (val, type, options) => {
86
86
  if (XEUtils.isString(val)) {
87
87
  return XEUtils.toStringDate(XEUtils.last(val.split(',')), valueFormat);
88
88
  }
89
+ if (XEUtils.isArray(val)) {
90
+ return XEUtils.toStringDate(XEUtils.last(val), valueFormat);
91
+ }
89
92
  return XEUtils.toStringDate(val, valueFormat);
90
93
  }
91
94
  return null;
92
- };
95
+ }
93
96
  export function parseDateString(val, type, options) {
94
97
  const dValue = parseDateValue(val, type, options);
95
98
  return dValue ? XEUtils.toDateString(dValue, options.valueFormat) : '';
@@ -256,3 +259,37 @@ export function checkDateInputFormat(numStr, formatKey) {
256
259
  }
257
260
  return numVal;
258
261
  }
262
+ export const getPrevYear = (date, size = 1) => {
263
+ const currtYear = date.getFullYear();
264
+ date.setFullYear(currtYear - size);
265
+ return date;
266
+ };
267
+ export const getNextYear = (date, size = 1) => {
268
+ const currtYear = date.getFullYear();
269
+ date.setFullYear(currtYear + size);
270
+ return date;
271
+ };
272
+ export const getPrevMonth = (date) => {
273
+ const currtYear = date.getFullYear();
274
+ const currMonth = date.getMonth();
275
+ if (currMonth) {
276
+ date.setMonth(currMonth - 1);
277
+ }
278
+ else {
279
+ date.setFullYear(currtYear - 1);
280
+ date.setMonth(11);
281
+ }
282
+ return date;
283
+ };
284
+ export const getNextMonth = (date) => {
285
+ const currtYear = date.getFullYear();
286
+ const currMonth = date.getMonth();
287
+ if (currMonth < 11) {
288
+ date.setMonth(currMonth + 1);
289
+ }
290
+ else {
291
+ date.setFullYear(currtYear + 1);
292
+ date.setMonth(0);
293
+ }
294
+ return date;
295
+ };
@@ -48,7 +48,7 @@ export default {
48
48
  event: 'modelValue'
49
49
  },
50
50
  props: {
51
- value: [String, Number, Date],
51
+ value: [String, Number, Date, Array],
52
52
  immediate: {
53
53
  type: Boolean,
54
54
  default: true
@@ -229,17 +229,24 @@ export default {
229
229
  }
230
230
  return disabled;
231
231
  },
232
- computeIsDateTimeType() {
232
+ computeIsTimeType() {
233
233
  const $xeDatePicker = this;
234
234
  const props = $xeDatePicker;
235
235
  const { type } = props;
236
- return type === 'time' || type === 'datetime';
236
+ return type === 'time';
237
+ },
238
+ computeIsTimeOrDateTimeType() {
239
+ const $xeDatePicker = this;
240
+ const props = $xeDatePicker;
241
+ const { type } = props;
242
+ const isTimeType = $xeDatePicker.computeIsTimeType;
243
+ return isTimeType || type === 'datetime';
237
244
  },
238
245
  computeIsDatePickerType() {
239
246
  const $xeDatePicker = this;
240
247
  const props = $xeDatePicker;
241
- const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
242
- return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
248
+ const isTimeOrDateTimeType = $xeDatePicker.computeIsTimeOrDateTimeType;
249
+ return isTimeOrDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
243
250
  },
244
251
  computeIsClearable() {
245
252
  const $xeDatePicker = this;
@@ -249,8 +256,8 @@ export default {
249
256
  computeIsDatePanelType() {
250
257
  const $xeDatePicker = this;
251
258
  const props = $xeDatePicker;
252
- const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
253
- return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
259
+ const isTimeOrDateTimeType = $xeDatePicker.computeIsTimeOrDateTimeType;
260
+ return isTimeOrDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
254
261
  },
255
262
  computeDateListValue() {
256
263
  const $xeDatePicker = this;
@@ -541,7 +548,7 @@ export default {
541
548
  const $xeDatePicker = this;
542
549
  const props = $xeDatePicker;
543
550
  const { value: modelValue, multiple } = props;
544
- const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
551
+ const isTimeOrDateTimeType = $xeDatePicker.computeIsTimeOrDateTimeType;
545
552
  const dateValueFormat = $xeDatePicker.computeDateValueFormat;
546
553
  const firstDayOfWeek = $xeDatePicker.computeFirstDayOfWeek;
547
554
  if (props.type === 'week') {
@@ -552,7 +559,7 @@ export default {
552
559
  if (multiple) {
553
560
  const overCount = $xeDatePicker.computeOverCount;
554
561
  // 如果为多选
555
- if (isDateTimeType) {
562
+ if (isTimeOrDateTimeType) {
556
563
  // 如果是datetime特殊类型
557
564
  const dateListValue = isReload ? [] : [...$xeDatePicker.computeDateListValue];
558
565
  const datetimeRest = [];
@@ -1143,9 +1150,9 @@ export default {
1143
1150
  const props = $xeDatePicker;
1144
1151
  const { multiple, autoClose } = props;
1145
1152
  const { value, $event } = params;
1146
- const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
1153
+ const isTimeOrDateTimeType = $xeDatePicker.computeIsTimeOrDateTimeType;
1147
1154
  $xeDatePicker.handleChange(value, $event);
1148
- if (!multiple && !isDateTimeType) {
1155
+ if (!multiple && !isTimeOrDateTimeType) {
1149
1156
  if (autoClose) {
1150
1157
  $xeDatePicker.hidePanel();
1151
1158
  }
@@ -1472,7 +1479,7 @@ export default {
1472
1479
  const btnTransfer = $xeDatePicker.computeBtnTransfer;
1473
1480
  const shortcutOpts = $xeDatePicker.computeShortcutOpts;
1474
1481
  const isClearable = $xeDatePicker.computeIsClearable;
1475
- const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
1482
+ const isTimeOrDateTimeType = $xeDatePicker.computeIsTimeOrDateTimeType;
1476
1483
  const shortcutList = $xeDatePicker.computeShortcutList;
1477
1484
  const timeOpts = $xeDatePicker.computeTimeOpts;
1478
1485
  const dateStartDate = $xeDatePicker.computeDateStartDate;
@@ -1486,7 +1493,7 @@ export default {
1486
1493
  const rightSlot = slots.right;
1487
1494
  const ppClassName = popupOpts.className;
1488
1495
  const hasShortcutBtn = shortcutList.length > 0;
1489
- const showConfirmBtn = (showConfirmButton === null ? (isDateTimeType || multiple) : showConfirmButton);
1496
+ const showConfirmBtn = (showConfirmButton === null ? (isTimeOrDateTimeType || multiple) : showConfirmButton);
1490
1497
  const showClearBtn = (showClearButton === null ? (isClearable && showConfirmBtn && type !== 'time') : showClearButton);
1491
1498
  return h('div', {
1492
1499
  ref: 'refInputPanel',