vxe-pc-ui 3.15.24 → 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 (46) hide show
  1. package/es/date-panel/src/date-panel.js +63 -40
  2. package/es/date-panel/src/util.js +11 -1
  3. package/es/date-picker/src/date-picker.js +19 -12
  4. package/es/date-range-picker/src/date-range-picker.js +102 -19
  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/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/date-panel/src/date-panel.js +65 -40
  11. package/lib/date-panel/src/date-panel.min.js +1 -1
  12. package/lib/date-panel/src/util.js +14 -2
  13. package/lib/date-panel/src/util.min.js +1 -1
  14. package/lib/date-picker/src/date-picker.js +19 -12
  15. package/lib/date-picker/src/date-picker.min.js +1 -1
  16. package/lib/date-range-picker/src/date-range-picker.js +111 -18
  17. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  18. package/lib/icon/style/style.css +1 -1
  19. package/lib/icon/style/style.min.css +1 -1
  20. package/lib/index.umd.js +213 -73
  21. package/lib/index.umd.min.js +1 -1
  22. package/lib/style.css +1 -1
  23. package/lib/style.min.css +1 -1
  24. package/lib/ui/index.js +1 -1
  25. package/lib/ui/index.min.js +1 -1
  26. package/lib/ui/src/log.js +1 -1
  27. package/lib/ui/src/log.min.js +1 -1
  28. package/package.json +1 -1
  29. package/packages/date-panel/src/date-panel.ts +65 -40
  30. package/packages/date-panel/src/util.ts +14 -2
  31. package/packages/date-picker/src/date-picker.ts +20 -12
  32. package/packages/date-range-picker/src/date-range-picker.ts +100 -19
  33. package/types/components/date-panel.d.ts +3 -1
  34. package/types/components/date-range-picker.d.ts +2 -2
  35. /package/es/icon/{iconfont.1783233735491.ttf → iconfont.1783247770465.ttf} +0 -0
  36. /package/es/icon/{iconfont.1783233735491.woff → iconfont.1783247770465.woff} +0 -0
  37. /package/es/icon/{iconfont.1783233735491.woff2 → iconfont.1783247770465.woff2} +0 -0
  38. /package/es/{iconfont.1783233735491.ttf → iconfont.1783247770465.ttf} +0 -0
  39. /package/es/{iconfont.1783233735491.woff → iconfont.1783247770465.woff} +0 -0
  40. /package/es/{iconfont.1783233735491.woff2 → iconfont.1783247770465.woff2} +0 -0
  41. /package/lib/icon/style/{iconfont.1783233735491.ttf → iconfont.1783247770465.ttf} +0 -0
  42. /package/lib/icon/style/{iconfont.1783233735491.woff → iconfont.1783247770465.woff} +0 -0
  43. /package/lib/icon/style/{iconfont.1783233735491.woff2 → iconfont.1783247770465.woff2} +0 -0
  44. /package/lib/{iconfont.1783233735491.ttf → iconfont.1783247770465.ttf} +0 -0
  45. /package/lib/{iconfont.1783233735491.woff → iconfont.1783247770465.woff} +0 -0
  46. /package/lib/{iconfont.1783233735491.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'
@@ -81,9 +83,9 @@ export default {
81
83
  currentDate: null
82
84
  };
83
85
  const internalData = {
84
- yearSize: 12,
85
- monthSize: 20,
86
- quarterSize: 8,
86
+ yearSize: 16,
87
+ monthSize: 12,
88
+ quarterSize: 4,
87
89
  hpTimeout: undefined
88
90
  };
89
91
  return {
@@ -92,17 +94,24 @@ export default {
92
94
  internalData
93
95
  };
94
96
  },
95
- computed: Object.assign(Object.assign({}, {}), { computeIsDateTimeType() {
97
+ computed: Object.assign(Object.assign({}, {}), { computeIsTimeType() {
96
98
  const $xeDatePanel = this;
97
99
  const props = $xeDatePanel;
98
100
  const { type } = props;
99
- 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';
100
109
  },
101
110
  computeIsDatePanelType() {
102
111
  const $xeDatePanel = this;
103
112
  const props = $xeDatePanel;
104
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
105
- 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;
106
115
  },
107
116
  computeDateStartDate() {
108
117
  const $xeDatePanel = this;
@@ -117,19 +126,25 @@ export default {
117
126
  computeDateListValue() {
118
127
  const $xeDatePanel = this;
119
128
  const props = $xeDatePanel;
120
- const { value: modelValue, multiple } = props;
129
+ const { value: modelValue, valueFormat } = props;
121
130
  const isDatePanelType = $xeDatePanel.computeIsDatePanelType;
122
131
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
123
- if (multiple && modelValue && isDatePanelType) {
124
- return XEUtils.toValueString(modelValue).split(',').map(item => {
125
- const date = $xeDatePanel.parseDate(item, dateValueFormat);
126
- if (XEUtils.isValidDate(date)) {
127
- 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);
128
144
  }
129
- return date;
130
145
  });
131
146
  }
132
- return [];
147
+ return restList;
133
148
  },
134
149
  computeDateMultipleValue() {
135
150
  const $xeDatePanel = this;
@@ -221,8 +236,8 @@ export default {
221
236
  computeDateHMSTime() {
222
237
  const $xeDatePanel = this;
223
238
  const dateValue = $xeDatePanel.computeDateValue;
224
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
225
- 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;
226
241
  },
227
242
  computeDateLabelFormat() {
228
243
  const $xeDatePanel = this;
@@ -245,7 +260,7 @@ export default {
245
260
  const currFullYear = currentDate.getFullYear();
246
261
  const selectFullYear = selectMonth.getFullYear();
247
262
  const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
248
- for (let index = -4; index < yearSize + 4; index++) {
263
+ for (let index = 0; index < yearSize; index++) {
249
264
  const date = XEUtils.getWhatYear(startYearDate, index, 'first');
250
265
  const itemFullYear = date.getFullYear();
251
266
  years.push({
@@ -356,7 +371,7 @@ export default {
356
371
  const currQuarter = getDateQuarter(currentDate);
357
372
  const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first');
358
373
  const selFullYear = firstYear.getFullYear();
359
- for (let index = -2; index < quarterSize - 2; index++) {
374
+ for (let index = 0; index < quarterSize; index++) {
360
375
  const date = XEUtils.getWhatQuarter(firstYear, index);
361
376
  const itemFullYear = date.getFullYear();
362
377
  const itemQuarter = getDateQuarter(date);
@@ -389,7 +404,7 @@ export default {
389
404
  const currFullYear = currentDate.getFullYear();
390
405
  const currMonth = currentDate.getMonth();
391
406
  const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear();
392
- for (let index = -4; index < monthSize - 4; index++) {
407
+ for (let index = 0; index < monthSize; index++) {
393
408
  const date = XEUtils.getWhatYear(selectMonth, 0, index);
394
409
  const itemFullYear = date.getFullYear();
395
410
  const itemMonth = date.getMonth();
@@ -473,8 +488,8 @@ export default {
473
488
  const timeOpts = $xeDatePanel.computeTimeOpts;
474
489
  const { hours: hourOptions, hourDisabledMethod } = timeOpts;
475
490
  const list = [];
476
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
477
- if (isDateTimeType) {
491
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
492
+ if (isTimeOrDateTimeType) {
478
493
  if (hourOptions && hourOptions.length) {
479
494
  hourOptions.forEach(item => {
480
495
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -513,8 +528,8 @@ export default {
513
528
  const timeOpts = $xeDatePanel.computeTimeOpts;
514
529
  const { minutes: minuteOptions, minuteDisabledMethod } = timeOpts;
515
530
  const list = [];
516
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
517
- if (isDateTimeType) {
531
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
532
+ if (isTimeOrDateTimeType) {
518
533
  if (minuteOptions && minuteOptions.length) {
519
534
  minuteOptions.forEach(item => {
520
535
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -567,8 +582,8 @@ export default {
567
582
  const timeOpts = $xeDatePanel.computeTimeOpts;
568
583
  const { seconds: secondOptions, secondDisabledMethod } = timeOpts;
569
584
  const list = [];
570
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
571
- if (isDateTimeType) {
585
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
586
+ if (isTimeOrDateTimeType) {
572
587
  if (secondOptions && secondOptions.length) {
573
588
  secondOptions.forEach(item => {
574
589
  if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
@@ -638,7 +653,7 @@ export default {
638
653
  const props = $xeDatePanel;
639
654
  const { type, multiple } = props;
640
655
  if (type === 'time') {
641
- return toStringTimeDate(XEUtils.isArray(value) ? value : XEUtils.last(value));
656
+ return toStringTimeDate(XEUtils.isArray(value) ? XEUtils.last(value) : value);
642
657
  }
643
658
  if (XEUtils.isArray(value)) {
644
659
  return XEUtils.toStringDate(XEUtils.last(value), format);
@@ -813,14 +828,15 @@ export default {
813
828
  const reactData = $xeDatePanel.reactData;
814
829
  const { value: modelValue, multiple, valueSort } = props;
815
830
  const { datetimePanelValue } = reactData;
816
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
831
+ const isTimeType = $xeDatePanel.computeIsTimeType;
832
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
817
833
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
818
834
  const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek;
819
835
  if (props.type === 'week') {
820
836
  const sWeek = XEUtils.toNumber(props.selectDay);
821
837
  date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
822
838
  }
823
- else if (isDateTimeType) {
839
+ else if (isTimeOrDateTimeType) {
824
840
  if (datetimePanelValue) {
825
841
  date.setHours(datetimePanelValue.getHours());
826
842
  date.setMinutes(datetimePanelValue.getMinutes());
@@ -829,10 +845,10 @@ export default {
829
845
  }
830
846
  const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek });
831
847
  $xeDatePanel.dateCheckMonth(date);
832
- if (multiple) {
848
+ if (!isTimeType && multiple) {
833
849
  const overCount = $xeDatePanel.computeOverCount;
834
850
  // 如果为多选
835
- if (isDateTimeType) {
851
+ if (isTimeOrDateTimeType) {
836
852
  // 如果是datetime特殊类型
837
853
  const dateListValue = isReload ? [] : [...$xeDatePanel.computeDateListValue];
838
854
  let datetimeRest = [];
@@ -1216,17 +1232,19 @@ export default {
1216
1232
  const { multiple } = props;
1217
1233
  const { datetimePanelValue } = reactData;
1218
1234
  const dateValue = $xeDatePanel.computeDateValue;
1219
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
1220
- if (isDateTimeType) {
1235
+ const isTimeType = $xeDatePanel.computeIsTimeType;
1236
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
1237
+ if (isTimeOrDateTimeType) {
1221
1238
  const dateValueFormat = $xeDatePanel.computeDateValueFormat;
1222
- if (multiple) {
1239
+ if (!isTimeType && multiple) {
1223
1240
  // 如果为多选
1224
1241
  const dateMultipleValue = $xeDatePanel.computeDateMultipleValue;
1225
- if (isDateTimeType) {
1242
+ const dateListValue = $xeDatePanel.computeDateListValue;
1243
+ if (isTimeOrDateTimeType) {
1226
1244
  // 如果是datetime特殊类型
1227
- const dateListValue = [...$xeDatePanel.computeDateListValue];
1245
+ const listVals = dateListValue.length ? [...dateListValue] : [];
1228
1246
  const datetimeRest = [];
1229
- dateListValue.forEach(item => {
1247
+ listVals.forEach(item => {
1230
1248
  if (item) {
1231
1249
  if (datetimePanelValue) {
1232
1250
  item.setHours(datetimePanelValue.getHours());
@@ -1277,7 +1295,7 @@ export default {
1277
1295
  const props = $xeDatePanel;
1278
1296
  const reactData = $xeDatePanel.reactData;
1279
1297
  const { type, defaultDate, defaultTime } = props;
1280
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType;
1298
+ const isTimeOrDateTimeType = $xeDatePanel.computeIsTimeOrDateTimeType;
1281
1299
  const dateValue = $xeDatePanel.computeDateValue;
1282
1300
  if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1283
1301
  reactData.datePanelType = type;
@@ -1305,7 +1323,7 @@ export default {
1305
1323
  $xeDatePanel.dateNowHandle();
1306
1324
  }
1307
1325
  }
1308
- if (isDateTimeType) {
1326
+ if (isTimeOrDateTimeType) {
1309
1327
  let dtPanelValue = reactData.datePanelValue;
1310
1328
  if (!dtPanelValue) {
1311
1329
  dtPanelValue = XEUtils.getWhatDay(Date.now(), 0, 'first');
@@ -1981,6 +1999,11 @@ export default {
1981
1999
  },
1982
2000
  created() {
1983
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
+ }
1984
2007
  $xeDatePanel.initValue();
1985
2008
  $xeDatePanel.dateOpenPanel();
1986
2009
  },
@@ -78,7 +78,7 @@ export function parseDateValue(val, type, options) {
78
78
  const { valueFormat } = options;
79
79
  if (val) {
80
80
  if (type === 'time') {
81
- return toStringTimeDate(XEUtils.isArray(val) ? val : XEUtils.last(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));
@@ -259,6 +259,16 @@ export function checkDateInputFormat(numStr, formatKey) {
259
259
  }
260
260
  return numVal;
261
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
+ };
262
272
  export const getPrevMonth = (date) => {
263
273
  const currtYear = date.getFullYear();
264
274
  const currMonth = date.getMonth();
@@ -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',
@@ -3,7 +3,7 @@ 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, getPrevMonth, getNextMonth } 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';
@@ -21,8 +21,8 @@ function createReactData() {
21
21
  isActivated: false,
22
22
  selectStValue: '',
23
23
  selectEdValue: '',
24
- paneStartVal: '',
25
- paneEndVal: ''
24
+ paneStartVal: [],
25
+ paneEndVal: []
26
26
  };
27
27
  }
28
28
  function createInternalData() {
@@ -260,11 +260,18 @@ export default {
260
260
  const { startValue, endValue } = props;
261
261
  return `${startValue || ''}${endValue || ''}`;
262
262
  },
263
- computeIsDateTimeType() {
263
+ computeIsTimeType() {
264
264
  const $xeDateRangePicker = this;
265
265
  const props = $xeDateRangePicker;
266
266
  const { type } = props;
267
- return type === 'time' || type === 'datetime';
267
+ return type === 'time';
268
+ },
269
+ computeIsTimeOrDateTimeType() {
270
+ const $xeDateRangePicker = this;
271
+ const props = $xeDateRangePicker;
272
+ const { type } = props;
273
+ const isTimeType = $xeDateRangePicker.computeIsTimeType;
274
+ return isTimeType || type === 'datetime';
268
275
  },
269
276
  computeIsDatePickerType() {
270
277
  const $xeDateRangePicker = this;
@@ -469,7 +476,7 @@ export default {
469
476
  const $xeDateRangePicker = this;
470
477
  const props = $xeDateRangePicker;
471
478
  const reactData = $xeDateRangePicker.reactData;
472
- const { value: modelValue, startValue, endValue } = props;
479
+ const { value: modelValue, startValue, endValue, valueFormat } = props;
473
480
  let restObj = {
474
481
  sValue: '',
475
482
  eValue: ''
@@ -490,8 +497,20 @@ export default {
490
497
  restObj = $xeDateRangePicker.paraeUpdateModel();
491
498
  }
492
499
  }
493
- reactData.selectStValue = restObj.sValue;
494
- reactData.selectEdValue = restObj.eValue;
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];
495
514
  },
496
515
  triggerEvent(evnt) {
497
516
  const $xeDateRangePicker = this;
@@ -686,12 +705,17 @@ export default {
686
705
  },
687
706
  confirmEvent(evnt) {
688
707
  const $xeDateRangePicker = this;
708
+ const isTimeType = $xeDateRangePicker.computeIsTimeType;
689
709
  const $startDatePanel = $xeDateRangePicker.$refs.refStartDatePanel;
690
710
  const $endDatePanel = $xeDateRangePicker.$refs.refEndDatePanel;
691
711
  if ($startDatePanel && $endDatePanel) {
692
712
  const startValue = $startDatePanel.getModelValue();
693
713
  const endValue = $endDatePanel.getModelValue();
694
- if ((startValue && !endValue) || (!startValue && endValue)) {
714
+ if (isTimeType) {
715
+ $startDatePanel.confirmByEvent(evnt);
716
+ $endDatePanel.confirmByEvent(evnt);
717
+ }
718
+ else if ((startValue && !endValue) || (!startValue && endValue)) {
695
719
  $xeDateRangePicker.handleChange('', '', evnt);
696
720
  }
697
721
  else {
@@ -724,11 +748,16 @@ export default {
724
748
  else {
725
749
  startValue = currValue || XEUtils.last(paneVals);
726
750
  }
727
- reactData.paneEndVal = [startValue, endValue].join(',');
728
- reactData.paneStartVal = [startValue, endValue].join(',');
751
+ reactData.paneEndVal = [startValue, endValue];
752
+ reactData.paneStartVal = [startValue, endValue];
729
753
  $xeDateRangePicker.handleChange(startValue, endValue, $event);
730
754
  $xeDateRangePicker.handleSelectClose();
731
- if (!selectStatus) {
755
+ if (selectStatus) {
756
+ if (startValue && endValue) {
757
+ internalData.selectStatus = false;
758
+ }
759
+ }
760
+ else {
732
761
  internalData.selectStatus = true;
733
762
  }
734
763
  $xeDateRangePicker.$nextTick(() => {
@@ -757,11 +786,16 @@ export default {
757
786
  else {
758
787
  endValue = currValue || XEUtils.last(paneVals);
759
788
  }
760
- reactData.paneEndVal = [startValue, endValue].join(',');
761
- reactData.paneStartVal = [startValue, endValue].join(',');
789
+ reactData.paneEndVal = [startValue, endValue];
790
+ reactData.paneStartVal = [startValue, endValue];
762
791
  $xeDateRangePicker.handleChange(startValue, endValue, $event);
763
792
  $xeDateRangePicker.handleSelectClose();
764
- if (!selectStatus) {
793
+ if (selectStatus) {
794
+ if (startValue && endValue) {
795
+ internalData.selectStatus = false;
796
+ }
797
+ }
798
+ else {
765
799
  internalData.selectStatus = true;
766
800
  }
767
801
  $xeDateRangePicker.$nextTick(() => {
@@ -794,6 +828,20 @@ export default {
794
828
  }
795
829
  break;
796
830
  }
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
+ }
797
845
  }
798
846
  },
799
847
  startPanelDateBtnChangeEvent() {
@@ -819,6 +867,16 @@ export default {
819
867
  $endDatePanel.setPanelDate(getNextMonth(startPanelDate));
820
868
  break;
821
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));
878
+ break;
879
+ }
822
880
  }
823
881
  }
824
882
  else {
@@ -851,6 +909,20 @@ export default {
851
909
  }
852
910
  break;
853
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
+ }
854
926
  }
855
927
  },
856
928
  endPanelDateBtnChangeEvent() {
@@ -876,6 +948,16 @@ export default {
876
948
  $startDatePanel.setPanelDate(getPrevMonth(endPanelDate));
877
949
  break;
878
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));
959
+ break;
960
+ }
879
961
  }
880
962
  }
881
963
  else {
@@ -1210,7 +1292,8 @@ export default {
1210
1292
  const isClearable = $xeDateRangePicker.computeIsClearable;
1211
1293
  const panelLabelObj = $xeDateRangePicker.computePanelLabelObj;
1212
1294
  const shortcutList = $xeDateRangePicker.computeShortcutList;
1213
- const isDateTimeType = $xeDateRangePicker.computeIsDateTimeType;
1295
+ const isTimeType = $xeDateRangePicker.computeIsTimeType;
1296
+ const isTimeOrDateTimeType = $xeDateRangePicker.computeIsTimeOrDateTimeType;
1214
1297
  const defaultDates = $xeDateRangePicker.computeDefaultDates;
1215
1298
  const defaultTimes = $xeDateRangePicker.computeDefaultTimes;
1216
1299
  const timeOpts = $xeDateRangePicker.computeTimeOpts;
@@ -1226,7 +1309,7 @@ export default {
1226
1309
  const [sdDate, edDate] = defaultDates;
1227
1310
  const [sdTime, edTime] = defaultTimes;
1228
1311
  const hasShortcutBtn = shortcutList.length > 0;
1229
- const showConfirmBtn = (showConfirmButton === null ? (isDateTimeType || !autoClose) : showConfirmButton);
1312
+ const showConfirmBtn = (showConfirmButton === null ? (isTimeOrDateTimeType || !autoClose) : showConfirmButton);
1230
1313
  const showClearBtn = (showClearButton === null ? isClearable : showClearButton);
1231
1314
  return h('div', {
1232
1315
  ref: 'refInputPanel',
@@ -1280,7 +1363,7 @@ export default {
1280
1363
  ref: 'refStartDatePanel',
1281
1364
  props: {
1282
1365
  value: paneStartVal,
1283
- multiple: true,
1366
+ multiple: !isTimeType,
1284
1367
  valueSort: true,
1285
1368
  limitCount: 3,
1286
1369
  defaultMode: 'first',
@@ -1311,7 +1394,7 @@ export default {
1311
1394
  ref: 'refEndDatePanel',
1312
1395
  props: {
1313
1396
  value: paneEndVal,
1314
- multiple: true,
1397
+ multiple: !isTimeType,
1315
1398
  valueSort: true,
1316
1399
  limitCount: 3,
1317
1400
  defaultMode: 'last',