vxe-table 4.2.2 → 4.2.4-beta.0

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 (58) hide show
  1. package/es/filter/src/hook.js +2 -1
  2. package/es/footer/src/footer.js +5 -5
  3. package/es/header/src/header.js +6 -6
  4. package/es/header/style.css +1 -5
  5. package/es/input/src/input.js +138 -33
  6. package/es/input/style.css +42 -13
  7. package/es/keyboard/src/hook.js +5 -1
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/table/src/body.js +15 -11
  11. package/es/table/src/table.js +58 -48
  12. package/es/table/src/util.js +2 -2
  13. package/es/tools/log.js +1 -1
  14. package/es/v-x-e-table/index.js +1 -1
  15. package/helper/vetur/attributes.json +31 -19
  16. package/helper/vetur/tags.json +3 -0
  17. package/lib/filter/src/hook.js +2 -1
  18. package/lib/filter/src/hook.min.js +1 -1
  19. package/lib/footer/src/footer.js +5 -5
  20. package/lib/footer/src/footer.min.js +1 -1
  21. package/lib/header/src/header.js +6 -6
  22. package/lib/header/src/header.min.js +1 -1
  23. package/lib/header/style/style.css +1 -5
  24. package/lib/header/style/style.min.css +1 -1
  25. package/lib/index.umd.js +345 -121
  26. package/lib/index.umd.min.js +1 -1
  27. package/lib/input/src/input.js +180 -35
  28. package/lib/input/src/input.min.js +1 -1
  29. package/lib/input/style/style.css +42 -13
  30. package/lib/input/style/style.min.css +1 -1
  31. package/lib/keyboard/src/hook.js +7 -1
  32. package/lib/keyboard/src/hook.min.js +1 -1
  33. package/lib/style.css +1 -1
  34. package/lib/style.min.css +1 -1
  35. package/lib/table/src/body.js +15 -11
  36. package/lib/table/src/body.min.js +1 -1
  37. package/lib/table/src/table.js +65 -56
  38. package/lib/table/src/table.min.js +1 -1
  39. package/lib/table/src/util.js +1 -1
  40. package/lib/table/src/util.min.js +1 -1
  41. package/lib/tools/log.js +1 -1
  42. package/lib/tools/log.min.js +1 -1
  43. package/lib/v-x-e-table/index.js +1 -1
  44. package/lib/v-x-e-table/index.min.js +1 -1
  45. package/package.json +1 -1
  46. package/packages/filter/src/hook.ts +3 -2
  47. package/packages/footer/src/footer.ts +5 -5
  48. package/packages/header/src/header.ts +6 -6
  49. package/packages/input/src/input.ts +142 -34
  50. package/packages/keyboard/src/hook.ts +6 -2
  51. package/packages/table/src/body.ts +15 -11
  52. package/packages/table/src/table.ts +57 -46
  53. package/packages/table/src/util.ts +2 -2
  54. package/packages/tools/dom.ts +1 -1
  55. package/styles/header.scss +1 -1
  56. package/styles/input.scss +16 -4
  57. package/types/input.d.ts +11 -0
  58. package/types/table.d.ts +3 -1
@@ -198,7 +198,8 @@ var tableFilterHook = {
198
198
  var elemStore_1 = internalData.elemStore;
199
199
  var fixed_1 = column.fixed;
200
200
  return $xetable.scrollToColumn(column).then(function () {
201
- var headerWrapperElem = elemStore_1[(fixed_1 || 'main') + "-header-wrapper"] || elemStore_1['main-header-wrapper'];
201
+ var headerWrapperRef = elemStore_1[(fixed_1 || 'main') + "-header-wrapper"] || elemStore_1['main-header-wrapper'];
202
+ var headerWrapperElem = headerWrapperRef ? headerWrapperRef.value : null;
202
203
  if (headerWrapperElem) {
203
204
  var filterBtnElem = headerWrapperElem.querySelector(".vxe-header--column." + column.id + " .vxe-filter--btn");
204
205
  triggerEvent(filterBtnElem, 'click');
@@ -83,11 +83,11 @@ export default defineComponent({
83
83
  var fixedType = props.fixedType;
84
84
  var elemStore = tableInternalData.elemStore;
85
85
  var prefix = (fixedType || 'main') + "-footer-";
86
- elemStore[prefix + "wrapper"] = refElem.value;
87
- elemStore[prefix + "table"] = refFooterTable.value;
88
- elemStore[prefix + "colgroup"] = refFooterColgroup.value;
89
- elemStore[prefix + "list"] = refFooterTFoot.value;
90
- elemStore[prefix + "xSpace"] = refFooterXSpace.value;
86
+ elemStore[prefix + "wrapper"] = refElem;
87
+ elemStore[prefix + "table"] = refFooterTable;
88
+ elemStore[prefix + "colgroup"] = refFooterColgroup;
89
+ elemStore[prefix + "list"] = refFooterTFoot;
90
+ elemStore[prefix + "xSpace"] = refFooterXSpace;
91
91
  });
92
92
  });
93
93
  onUnmounted(function () {
@@ -136,12 +136,12 @@ export default defineComponent({
136
136
  var internalData = $xetable.internalData;
137
137
  var elemStore = internalData.elemStore;
138
138
  var prefix = (fixedType || 'main') + "-header-";
139
- elemStore[prefix + "wrapper"] = refElem.value;
140
- elemStore[prefix + "table"] = refHeaderTable.value;
141
- elemStore[prefix + "colgroup"] = refHeaderColgroup.value;
142
- elemStore[prefix + "list"] = refHeaderTHead.value;
143
- elemStore[prefix + "xSpace"] = refHeaderXSpace.value;
144
- elemStore[prefix + "repair"] = refHeaderBorderRepair.value;
139
+ elemStore[prefix + "wrapper"] = refElem;
140
+ elemStore[prefix + "table"] = refHeaderTable;
141
+ elemStore[prefix + "colgroup"] = refHeaderColgroup;
142
+ elemStore[prefix + "list"] = refHeaderTHead;
143
+ elemStore[prefix + "xSpace"] = refHeaderXSpace;
144
+ elemStore[prefix + "repair"] = refHeaderBorderRepair;
145
145
  uploadColumn();
146
146
  });
147
147
  });
@@ -62,11 +62,7 @@
62
62
 
63
63
  .vxe-header--column {
64
64
  position: relative;
65
- font-weight: 700;
66
- -webkit-user-select: none;
67
- -moz-user-select: none;
68
- -ms-user-select: none;
69
- user-select: none; }
65
+ font-weight: 700; }
70
66
  .vxe-header--column.col--ellipsis > .vxe-cell {
71
67
  display: flex;
72
68
  align-items: center; }
@@ -7,7 +7,7 @@ import { hasClass, getAbsolutePos, getEventTargetNode } from '../../tools/dom';
7
7
  import { GlobalEvent, hasEventKey, EVENT_KEYS } from '../../tools/event';
8
8
  import { toStringTimeDate, getDateQuarter } from './date';
9
9
  import { handleNumber, toFloatValueFixed } from './number';
10
- var yearSize = 20;
10
+ var yearSize = 12;
11
11
  var monthSize = 20;
12
12
  var quarterSize = 8;
13
13
  export default defineComponent({
@@ -27,6 +27,7 @@ export default defineComponent({
27
27
  form: String,
28
28
  className: String,
29
29
  size: { type: String, default: function () { return GlobalConfig.input.size || GlobalConfig.size; } },
30
+ multiple: Boolean,
30
31
  // number、integer、float
31
32
  min: { type: [String, Number], default: null },
32
33
  max: { type: [String, Number], default: null },
@@ -164,6 +165,34 @@ export default defineComponent({
164
165
  var computeDateMaxTime = computed(function () {
165
166
  return props.maxDate ? XEUtils.toStringDate(props.maxDate) : null;
166
167
  });
168
+ var computeSupportMultiples = computed(function () {
169
+ return ['date', 'week', 'month', 'quarter', 'year'].includes(props.type);
170
+ });
171
+ var computeDateListValue = computed(function () {
172
+ var modelValue = props.modelValue, multiple = props.multiple;
173
+ var isDatePickerType = computeIsDatePickerType.value;
174
+ var dateValueFormat = computeDateValueFormat.value;
175
+ if (multiple && modelValue && isDatePickerType) {
176
+ return XEUtils.toValueString(modelValue).split(',').map(function (item) {
177
+ var date = parseDate(item, dateValueFormat);
178
+ if (XEUtils.isValidDate(date)) {
179
+ return date;
180
+ }
181
+ return null;
182
+ });
183
+ }
184
+ return [];
185
+ });
186
+ var computeDateMultipleValue = computed(function () {
187
+ var dateListValue = computeDateListValue.value;
188
+ var dateValueFormat = computeDateValueFormat.value;
189
+ return dateListValue.map(function (date) { return XEUtils.toDateString(date, dateValueFormat); });
190
+ });
191
+ var computeDateMultipleLabel = computed(function () {
192
+ var dateListValue = computeDateListValue.value;
193
+ var dateLabelFormat = computeDateLabelFormat.value;
194
+ return dateListValue.map(function (date) { return XEUtils.toDateString(date, dateLabelFormat); }).join(', ');
195
+ });
167
196
  var computeDateValueFormat = computed(function () {
168
197
  var type = props.type;
169
198
  return type === 'time' ? 'HH:mm:ss' : (props.valueFormat || (type === 'datetime' ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'));
@@ -221,14 +250,17 @@ export default defineComponent({
221
250
  var years = [];
222
251
  if (selectMonth && currentDate) {
223
252
  var currFullYear = currentDate.getFullYear();
224
- var startYear = new Date(XEUtils.toNumber(('' + selectMonth.getFullYear()).replace(/\d{1}$/, '0')), 0, 1);
225
- for (var index = -10; index < yearSize - 10; index++) {
226
- var date = XEUtils.getWhatYear(startYear, index, 'first');
253
+ var selectFullYear = selectMonth.getFullYear();
254
+ var startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
255
+ for (var index = -4; index < yearSize + 4; index++) {
256
+ var date = XEUtils.getWhatYear(startYearDate, index, 'first');
227
257
  var itemFullYear = date.getFullYear();
228
258
  years.push({
229
259
  date: date,
230
260
  isCurrent: true,
261
+ isPrev: index < 0,
231
262
  isNow: currFullYear === itemFullYear,
263
+ isNext: index >= yearSize,
232
264
  year: itemFullYear
233
265
  });
234
266
  }
@@ -447,8 +479,8 @@ export default defineComponent({
447
479
  return minuteList;
448
480
  });
449
481
  var computeInpReadonly = computed(function () {
450
- var type = props.type, readonly = props.readonly, editable = props.editable;
451
- return readonly || !editable || type === 'week' || type === 'quarter';
482
+ var type = props.type, readonly = props.readonly, editable = props.editable, multiple = props.multiple;
483
+ return readonly || multiple || !editable || type === 'week' || type === 'quarter';
452
484
  });
453
485
  var computeInputType = computed(function () {
454
486
  var type = props.type;
@@ -537,10 +569,13 @@ export default defineComponent({
537
569
  };
538
570
  var hidePanelTimeout;
539
571
  var hidePanel = function () {
540
- reactData.visiblePanel = false;
541
- hidePanelTimeout = window.setTimeout(function () {
542
- reactData.animatVisible = false;
543
- }, 350);
572
+ return new Promise(function (resolve) {
573
+ reactData.visiblePanel = false;
574
+ hidePanelTimeout = window.setTimeout(function () {
575
+ reactData.animatVisible = false;
576
+ resolve();
577
+ }, 350);
578
+ });
544
579
  };
545
580
  var clearValueEvent = function (evnt, value) {
546
581
  var type = props.type;
@@ -607,7 +642,7 @@ export default defineComponent({
607
642
  var inputValue = reactData.inputValue;
608
643
  if (isDatePickerType) {
609
644
  dateParseValue(inputValue);
610
- reactData.inputValue = reactData.datePanelLabel;
645
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
611
646
  }
612
647
  };
613
648
  /**
@@ -637,7 +672,7 @@ export default defineComponent({
637
672
  return props.min === null || XEUtils.toNumber(num) >= XEUtils.toNumber(props.min);
638
673
  };
639
674
  var dateRevert = function () {
640
- reactData.inputValue = reactData.datePanelLabel;
675
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
641
676
  };
642
677
  var dateCheckMonth = function (date) {
643
678
  var month = XEUtils.getWhatMonth(date, 0, 'first');
@@ -646,7 +681,7 @@ export default defineComponent({
646
681
  }
647
682
  };
648
683
  var dateChange = function (date) {
649
- var modelValue = props.modelValue;
684
+ var modelValue = props.modelValue, multiple = props.multiple;
650
685
  var datetimePanelValue = reactData.datetimePanelValue;
651
686
  var isDateTimeType = computeIsDateTimeType.value;
652
687
  var dateValueFormat = computeDateValueFormat.value;
@@ -662,8 +697,39 @@ export default defineComponent({
662
697
  }
663
698
  var inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek });
664
699
  dateCheckMonth(date);
665
- if (!XEUtils.isEqual(modelValue, inpVal)) {
666
- emitModel(inpVal, { type: 'update' });
700
+ if (multiple) {
701
+ // 如果为多选
702
+ var dateMultipleValue = computeDateMultipleValue.value;
703
+ if (isDateTimeType) {
704
+ // 如果是datetime特殊类型
705
+ var dateListValue = computeDateListValue.value;
706
+ var datetimeRest_1 = [];
707
+ dateListValue.forEach(function (item) {
708
+ if (item && !XEUtils.isDateSame(date, item, 'yyyyMMdd')) {
709
+ item.setHours(datetimePanelValue.getHours());
710
+ item.setMinutes(datetimePanelValue.getMinutes());
711
+ item.setSeconds(datetimePanelValue.getSeconds());
712
+ datetimeRest_1.push(item);
713
+ }
714
+ });
715
+ datetimeRest_1.push(date);
716
+ emitModel(datetimeRest_1.map(function (date) { return XEUtils.toDateString(date, dateValueFormat); }).join(','), { type: 'update' });
717
+ }
718
+ else {
719
+ // 如果是日期类型
720
+ if (dateMultipleValue.some(function (val) { return XEUtils.isEqual(val, inpVal); })) {
721
+ emitModel(dateMultipleValue.filter(function (val) { return !XEUtils.isEqual(val, inpVal); }).join(','), { type: 'update' });
722
+ }
723
+ else {
724
+ emitModel(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' });
725
+ }
726
+ }
727
+ }
728
+ else {
729
+ // 如果为单选
730
+ if (!XEUtils.isEqual(modelValue, inpVal)) {
731
+ emitModel(inpVal, { type: 'update' });
732
+ }
667
733
  }
668
734
  };
669
735
  var afterCheckValue = function () {
@@ -933,8 +999,10 @@ export default defineComponent({
933
999
  };
934
1000
  var dateTodayMonthEvent = function (evnt) {
935
1001
  dateNowHandle();
936
- dateChange(reactData.currentDate);
937
- hidePanel();
1002
+ if (!props.multiple) {
1003
+ dateChange(reactData.currentDate);
1004
+ hidePanel();
1005
+ }
938
1006
  inputMethods.dispatchEvent('date-today', { type: props.type }, evnt);
939
1007
  };
940
1008
  var dateNextEvent = function (evnt) {
@@ -973,7 +1041,7 @@ export default defineComponent({
973
1041
  return disabledMethod && disabledMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $input: $xeinput });
974
1042
  };
975
1043
  var dateSelectItem = function (date) {
976
- var type = props.type;
1044
+ var type = props.type, multiple = props.multiple;
977
1045
  var datePanelType = reactData.datePanelType;
978
1046
  if (type === 'month') {
979
1047
  if (datePanelType === 'year') {
@@ -982,12 +1050,16 @@ export default defineComponent({
982
1050
  }
983
1051
  else {
984
1052
  dateChange(date);
985
- hidePanel();
1053
+ if (!multiple) {
1054
+ hidePanel();
1055
+ }
986
1056
  }
987
1057
  }
988
1058
  else if (type === 'year') {
989
1059
  dateChange(date);
990
- hidePanel();
1060
+ if (!multiple) {
1061
+ hidePanel();
1062
+ }
991
1063
  }
992
1064
  else if (type === 'quarter') {
993
1065
  if (datePanelType === 'year') {
@@ -996,7 +1068,9 @@ export default defineComponent({
996
1068
  }
997
1069
  else {
998
1070
  dateChange(date);
999
- hidePanel();
1071
+ if (!multiple) {
1072
+ hidePanel();
1073
+ }
1000
1074
  }
1001
1075
  }
1002
1076
  else {
@@ -1010,7 +1084,9 @@ export default defineComponent({
1010
1084
  }
1011
1085
  else {
1012
1086
  dateChange(date);
1013
- hidePanel();
1087
+ if (!multiple) {
1088
+ hidePanel();
1089
+ }
1014
1090
  }
1015
1091
  }
1016
1092
  };
@@ -1088,8 +1164,11 @@ export default defineComponent({
1088
1164
  dateTimeChangeEvent(evnt);
1089
1165
  };
1090
1166
  var dateConfirmEvent = function () {
1167
+ var type = props.type;
1091
1168
  var dateValue = computeDateValue.value;
1092
- dateChange(dateValue || reactData.currentDate);
1169
+ if (type === 'datetime') {
1170
+ dateChange(dateValue || reactData.currentDate);
1171
+ }
1093
1172
  hidePanel();
1094
1173
  };
1095
1174
  var dateMinuteEvent = function (evnt, item) {
@@ -1311,8 +1390,9 @@ export default defineComponent({
1311
1390
  reactData.visiblePanel = true;
1312
1391
  }, 10);
1313
1392
  updateZindex();
1314
- updatePlacement();
1393
+ return updatePlacement();
1315
1394
  }
1395
+ return nextTick();
1316
1396
  };
1317
1397
  var datePickerOpenEvent = function (evnt) {
1318
1398
  var readonly = props.readonly;
@@ -1488,10 +1568,12 @@ export default defineComponent({
1488
1568
  return label;
1489
1569
  };
1490
1570
  var renderDateDayTable = function () {
1571
+ var multiple = props.multiple;
1491
1572
  var datePanelType = reactData.datePanelType, datePanelValue = reactData.datePanelValue;
1492
1573
  var dateValue = computeDateValue.value;
1493
1574
  var dateHeaders = computeDateHeaders.value;
1494
1575
  var dayDatas = computeDayDatas.value;
1576
+ var dateListValue = computeDateListValue.value;
1495
1577
  var matchFormat = 'yyyyMMdd';
1496
1578
  return [
1497
1579
  h('table', {
@@ -1514,7 +1596,7 @@ export default defineComponent({
1514
1596
  'is--now': item.isNow,
1515
1597
  'is--next': item.isNext,
1516
1598
  'is--disabled': isDateDisabled(item),
1517
- 'is--selected': XEUtils.isDateSame(dateValue, item.date, matchFormat),
1599
+ 'is--selected': multiple ? dateListValue.some(function (val) { return XEUtils.isDateSame(val, item.date, matchFormat); }) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1518
1600
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1519
1601
  },
1520
1602
  onClick: function () { return dateSelectEvent(item); },
@@ -1526,10 +1608,12 @@ export default defineComponent({
1526
1608
  ];
1527
1609
  };
1528
1610
  var renderDateWeekTable = function () {
1611
+ var multiple = props.multiple;
1529
1612
  var datePanelType = reactData.datePanelType, datePanelValue = reactData.datePanelValue;
1530
1613
  var dateValue = computeDateValue.value;
1531
1614
  var weekHeaders = computeWeekHeaders.value;
1532
1615
  var weekDates = computeWeekDates.value;
1616
+ var dateListValue = computeDateListValue.value;
1533
1617
  var matchFormat = 'yyyyMMdd';
1534
1618
  return [
1535
1619
  h('table', {
@@ -1544,7 +1628,7 @@ export default defineComponent({
1544
1628
  }))
1545
1629
  ]),
1546
1630
  h('tbody', weekDates.map(function (rows) {
1547
- var isSelected = rows.some(function (item) { return XEUtils.isDateSame(dateValue, item.date, matchFormat); });
1631
+ var isSelected = multiple ? rows.some(function (item) { return dateListValue.some(function (val) { return XEUtils.isDateSame(val, item.date, matchFormat); }); }) : rows.some(function (item) { return XEUtils.isDateSame(dateValue, item.date, matchFormat); });
1548
1632
  var isHover = rows.some(function (item) { return XEUtils.isDateSame(datePanelValue, item.date, matchFormat); });
1549
1633
  return h('tr', rows.map(function (item) {
1550
1634
  return h('td', {
@@ -1567,9 +1651,11 @@ export default defineComponent({
1567
1651
  ];
1568
1652
  };
1569
1653
  var renderDateMonthTable = function () {
1654
+ var multiple = props.multiple;
1570
1655
  var datePanelType = reactData.datePanelType, datePanelValue = reactData.datePanelValue;
1571
1656
  var dateValue = computeDateValue.value;
1572
1657
  var monthDatas = computeMonthDatas.value;
1658
+ var dateListValue = computeDateListValue.value;
1573
1659
  var matchFormat = 'yyyyMM';
1574
1660
  return [
1575
1661
  h('table', {
@@ -1587,7 +1673,7 @@ export default defineComponent({
1587
1673
  'is--now': item.isNow,
1588
1674
  'is--next': item.isNext,
1589
1675
  'is--disabled': isDateDisabled(item),
1590
- 'is--selected': XEUtils.isDateSame(dateValue, item.date, matchFormat),
1676
+ 'is--selected': multiple ? dateListValue.some(function (val) { return XEUtils.isDateSame(val, item.date, matchFormat); }) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1591
1677
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1592
1678
  },
1593
1679
  onClick: function () { return dateSelectEvent(item); },
@@ -1599,9 +1685,11 @@ export default defineComponent({
1599
1685
  ];
1600
1686
  };
1601
1687
  var renderDateQuarterTable = function () {
1688
+ var multiple = props.multiple;
1602
1689
  var datePanelType = reactData.datePanelType, datePanelValue = reactData.datePanelValue;
1603
1690
  var dateValue = computeDateValue.value;
1604
1691
  var quarterDatas = computeQuarterDatas.value;
1692
+ var dateListValue = computeDateListValue.value;
1605
1693
  var matchFormat = 'yyyyq';
1606
1694
  return [
1607
1695
  h('table', {
@@ -1619,7 +1707,7 @@ export default defineComponent({
1619
1707
  'is--now': item.isNow,
1620
1708
  'is--next': item.isNext,
1621
1709
  'is--disabled': isDateDisabled(item),
1622
- 'is--selected': XEUtils.isDateSame(dateValue, item.date, matchFormat),
1710
+ 'is--selected': multiple ? dateListValue.some(function (val) { return XEUtils.isDateSame(val, item.date, matchFormat); }) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1623
1711
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1624
1712
  },
1625
1713
  onClick: function () { return dateSelectEvent(item); },
@@ -1631,9 +1719,11 @@ export default defineComponent({
1631
1719
  ];
1632
1720
  };
1633
1721
  var renderDateYearTable = function () {
1722
+ var multiple = props.multiple;
1634
1723
  var datePanelType = reactData.datePanelType, datePanelValue = reactData.datePanelValue;
1635
1724
  var dateValue = computeDateValue.value;
1636
1725
  var yearDatas = computeYearDatas.value;
1726
+ var dateListValue = computeDateListValue.value;
1637
1727
  var matchFormat = 'yyyy';
1638
1728
  return [
1639
1729
  h('table', {
@@ -1646,10 +1736,12 @@ export default defineComponent({
1646
1736
  return h('tr', rows.map(function (item) {
1647
1737
  return h('td', {
1648
1738
  class: {
1649
- 'is--disabled': isDateDisabled(item),
1739
+ 'is--prev': item.isPrev,
1650
1740
  'is--current': item.isCurrent,
1651
1741
  'is--now': item.isNow,
1652
- 'is--selected': XEUtils.isDateSame(dateValue, item.date, matchFormat),
1742
+ 'is--next': item.isNext,
1743
+ 'is--disabled': isDateDisabled(item),
1744
+ 'is--selected': multiple ? dateListValue.some(function (val) { return XEUtils.isDateSame(val, item.date, matchFormat); }) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1653
1745
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1654
1746
  },
1655
1747
  onClick: function () { return dateSelectEvent(item); },
@@ -1675,6 +1767,7 @@ export default defineComponent({
1675
1767
  return renderDateDayTable();
1676
1768
  };
1677
1769
  var renderDatePanel = function () {
1770
+ var multiple = props.multiple;
1678
1771
  var datePanelType = reactData.datePanelType;
1679
1772
  var isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
1680
1773
  var isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
@@ -1723,7 +1816,16 @@ export default defineComponent({
1723
1816
  h('i', {
1724
1817
  class: 'vxe-icon--caret-right'
1725
1818
  })
1726
- ])
1819
+ ]),
1820
+ multiple && computeSupportMultiples.value ? h('span', {
1821
+ class: 'vxe-input--date-picker-btn vxe-input--date-picker-confirm-btn'
1822
+ }, [
1823
+ h('button', {
1824
+ class: 'vxe-input--date-picker-confirm',
1825
+ type: 'button',
1826
+ onClick: dateConfirmEvent
1827
+ }, GlobalConfig.i18n('vxe.button.confirm'))
1828
+ ]) : null
1727
1829
  ])
1728
1830
  ]),
1729
1831
  h('div', {
@@ -1983,7 +2085,10 @@ export default defineComponent({
1983
2085
  inputElem.blur();
1984
2086
  reactData.isActivated = false;
1985
2087
  return nextTick();
1986
- }
2088
+ },
2089
+ showPanel: showPanel,
2090
+ hidePanel: hidePanel,
2091
+ updatePlacement: updatePlacement
1987
2092
  };
1988
2093
  Object.assign($xeinput, inputMethods);
1989
2094
  watch(function () { return props.modelValue; }, function (val) {
@@ -2007,7 +2112,7 @@ export default defineComponent({
2007
2112
  var isDatePickerType = computeIsDatePickerType.value;
2008
2113
  if (isDatePickerType) {
2009
2114
  dateParseValue(reactData.datePanelValue);
2010
- reactData.inputValue = reactData.datePanelLabel;
2115
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
2011
2116
  }
2012
2117
  });
2013
2118
  nextTick(function () {
@@ -271,7 +271,10 @@
271
271
  .vxe-input--time-picker-confirm {
272
272
  position: absolute;
273
273
  right: 0;
274
- top: 0;
274
+ top: 0; }
275
+
276
+ .vxe-input--time-picker-confirm,
277
+ .vxe-input--date-picker-confirm {
275
278
  outline: 0;
276
279
  border: 1px solid #dcdfe6;
277
280
  border-radius: 4px;
@@ -279,10 +282,12 @@
279
282
  color: #fff;
280
283
  border-color: #409eff;
281
284
  background-color: #409eff; }
282
- .vxe-input--time-picker-confirm:hover {
285
+ .vxe-input--time-picker-confirm:hover,
286
+ .vxe-input--date-picker-confirm:hover {
283
287
  background-color: #5faeff;
284
288
  border-color: #5faeff; }
285
- .vxe-input--time-picker-confirm:active {
289
+ .vxe-input--time-picker-confirm:active,
290
+ .vxe-input--date-picker-confirm:active {
286
291
  background-color: #3196ff;
287
292
  border-color: #3196ff; }
288
293
 
@@ -316,8 +321,6 @@
316
321
  .vxe-input--date-picker-btn {
317
322
  display: inline-block;
318
323
  display: flex;
319
- border-radius: 4px;
320
- border: 1px solid #dcdfe6;
321
324
  align-items: center;
322
325
  justify-content: center;
323
326
  background-color: #fff; }
@@ -370,6 +373,8 @@
370
373
  .vxe-input--date-picker-body td.is--selected {
371
374
  color: #fff;
372
375
  background-color: #409eff; }
376
+ .vxe-input--date-picker-body td.is--selected.is--prev, .vxe-input--date-picker-body td.is--selected.is--next {
377
+ background-color: #73b8ff; }
373
378
  .vxe-input--date-picker-body td.is--selected .vxe-input--date-label,
374
379
  .vxe-input--date-picker-body td.is--selected .vxe-input--date-festival {
375
380
  color: #fff; }
@@ -558,8 +563,13 @@
558
563
  height: 30px;
559
564
  line-height: 30px; }
560
565
  .vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn {
561
- width: 30px;
562
566
  margin-left: 8px; }
567
+ .vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn,
568
+ .vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,
569
+ .vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn {
570
+ width: 30px;
571
+ border-radius: 4px;
572
+ border: 1px solid #dcdfe6; }
563
573
  .vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label,
564
574
  .vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn {
565
575
  padding: 0 9px; }
@@ -590,7 +600,8 @@
590
600
  height: 48px; }
591
601
  .vxe-input--panel .vxe-input--date-picker-body th {
592
602
  height: 30px; }
593
- .vxe-input--panel .vxe-input--time-picker-confirm {
603
+ .vxe-input--panel .vxe-input--time-picker-confirm,
604
+ .vxe-input--panel .vxe-input--date-picker-confirm {
594
605
  height: 30px;
595
606
  padding: 0 9px; }
596
607
  .vxe-input--panel .vxe-input--date-label {
@@ -621,8 +632,13 @@
621
632
  height: 29px;
622
633
  line-height: 29px; }
623
634
  .vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn {
624
- width: 29px;
625
635
  margin-left: 7px; }
636
+ .vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn,
637
+ .vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,
638
+ .vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn {
639
+ width: 29px;
640
+ border-radius: 4px;
641
+ border: 1px solid #dcdfe6; }
626
642
  .vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label,
627
643
  .vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn {
628
644
  padding: 0 8px; }
@@ -653,7 +669,8 @@
653
669
  height: 46px; }
654
670
  .vxe-input--panel.size--medium .vxe-input--date-picker-body th {
655
671
  height: 29px; }
656
- .vxe-input--panel.size--medium .vxe-input--time-picker-confirm {
672
+ .vxe-input--panel.size--medium .vxe-input--time-picker-confirm,
673
+ .vxe-input--panel.size--medium .vxe-input--date-picker-confirm {
657
674
  height: 29px;
658
675
  padding: 0 8px; }
659
676
  .vxe-input--panel.size--medium .vxe-input--date-label {
@@ -684,8 +701,13 @@
684
701
  height: 28px;
685
702
  line-height: 28px; }
686
703
  .vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn {
687
- width: 28px;
688
704
  margin-left: 6px; }
705
+ .vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn,
706
+ .vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,
707
+ .vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn {
708
+ width: 28px;
709
+ border-radius: 4px;
710
+ border: 1px solid #dcdfe6; }
689
711
  .vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label,
690
712
  .vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn {
691
713
  padding: 0 7px; }
@@ -716,7 +738,8 @@
716
738
  height: 44px; }
717
739
  .vxe-input--panel.size--small .vxe-input--date-picker-body th {
718
740
  height: 28px; }
719
- .vxe-input--panel.size--small .vxe-input--time-picker-confirm {
741
+ .vxe-input--panel.size--small .vxe-input--time-picker-confirm,
742
+ .vxe-input--panel.size--small .vxe-input--date-picker-confirm {
720
743
  height: 28px;
721
744
  padding: 0 7px; }
722
745
  .vxe-input--panel.size--small .vxe-input--date-label {
@@ -747,8 +770,13 @@
747
770
  height: 27px;
748
771
  line-height: 27px; }
749
772
  .vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn {
750
- width: 27px;
751
773
  margin-left: 5px; }
774
+ .vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn,
775
+ .vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,
776
+ .vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn {
777
+ width: 27px;
778
+ border-radius: 4px;
779
+ border: 1px solid #dcdfe6; }
752
780
  .vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label,
753
781
  .vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn {
754
782
  padding: 0 6px; }
@@ -779,7 +807,8 @@
779
807
  height: 42px; }
780
808
  .vxe-input--panel.size--mini .vxe-input--date-picker-body th {
781
809
  height: 26px; }
782
- .vxe-input--panel.size--mini .vxe-input--time-picker-confirm {
810
+ .vxe-input--panel.size--mini .vxe-input--time-picker-confirm,
811
+ .vxe-input--panel.size--mini .vxe-input--date-picker-confirm {
783
812
  height: 27px;
784
813
  padding: 0 6px; }
785
814
  .vxe-input--panel.size--mini .vxe-input--date-label {
@@ -62,7 +62,11 @@ var tableKeyboardHook = {
62
62
  var elemStore = internalData.elemStore;
63
63
  var disX_1 = evnt.clientX;
64
64
  var disY_1 = evnt.clientY;
65
- var bodyWrapperElem_1 = elemStore[(column.fixed || 'main') + "-body-wrapper"] || elemStore['main-body-wrapper'];
65
+ var bodyWrapperRef = elemStore[(column.fixed || 'main') + "-body-wrapper"] || elemStore['main-body-wrapper'];
66
+ var bodyWrapperElem_1 = bodyWrapperRef ? bodyWrapperRef.value : null;
67
+ if (!bodyWrapperElem_1) {
68
+ return;
69
+ }
66
70
  var checkboxRangeElem_1 = bodyWrapperElem_1.querySelector('.vxe-table--checkbox-range');
67
71
  var domMousemove_1 = document.onmousemove;
68
72
  var domMouseup_1 = document.onmouseup;