vxe-pc-ui 3.15.2 → 3.15.4

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 (144) hide show
  1. package/es/backtop/src/backtop.js +8 -7
  2. package/es/button/src/button.js +3 -2
  3. package/es/calendar/src/calendar.js +2 -1
  4. package/es/cascader/src/cascader.js +75 -35
  5. package/es/checkbox/src/group.js +16 -7
  6. package/es/context-menu/src/context-menu.js +2 -6
  7. package/es/date-panel/src/util.js +27 -16
  8. package/es/date-picker/src/date-picker.js +616 -88
  9. package/es/date-range-picker/src/date-range-picker.js +7 -4
  10. package/es/drawer/src/drawer.js +3 -0
  11. package/es/form/render/index.js +3 -2
  12. package/es/form/src/form.js +11 -12
  13. package/es/form/src/itemInfo.js +6 -5
  14. package/es/image/src/image.js +5 -6
  15. package/es/input/src/input.js +2 -1
  16. package/es/layout-body/src/layout-body.js +13 -6
  17. package/es/list/src/list.js +3 -6
  18. package/es/menu/src/menu.js +2 -1
  19. package/es/modal/src/modal.js +5 -1
  20. package/es/pager/src/pager.js +4 -3
  21. package/es/radio/src/group.js +11 -8
  22. package/es/select/src/select.js +34 -30
  23. package/es/splitter/src/splitter.js +6 -5
  24. package/es/table-select/src/table-select.js +27 -22
  25. package/es/tabs/src/tabs.js +4 -3
  26. package/es/textarea/src/textarea.js +2 -1
  27. package/es/tree/src/tree.js +6 -11
  28. package/es/tree-select/src/tree-select.js +27 -33
  29. package/es/ui/index.js +4 -1
  30. package/es/ui/src/log.js +14 -4
  31. package/es/upload/src/upload.js +11 -9
  32. package/lib/backtop/src/backtop.js +10 -6
  33. package/lib/backtop/src/backtop.min.js +1 -1
  34. package/lib/button/src/button.js +3 -1
  35. package/lib/button/src/button.min.js +1 -1
  36. package/lib/calendar/src/calendar.js +3 -1
  37. package/lib/calendar/src/calendar.min.js +1 -1
  38. package/lib/cascader/src/cascader.js +87 -34
  39. package/lib/cascader/src/cascader.min.js +1 -1
  40. package/lib/checkbox/src/group.js +18 -6
  41. package/lib/checkbox/src/group.min.js +1 -1
  42. package/lib/context-menu/src/context-menu.js +3 -4
  43. package/lib/context-menu/src/context-menu.min.js +1 -1
  44. package/lib/date-panel/src/util.js +37 -18
  45. package/lib/date-panel/src/util.min.js +1 -1
  46. package/lib/date-picker/src/date-picker.js +659 -86
  47. package/lib/date-picker/src/date-picker.min.js +1 -1
  48. package/lib/date-range-picker/src/date-range-picker.js +7 -3
  49. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  50. package/lib/drawer/src/drawer.js +3 -0
  51. package/lib/drawer/src/drawer.min.js +1 -1
  52. package/lib/form/render/index.js +3 -1
  53. package/lib/form/render/index.min.js +1 -1
  54. package/lib/form/src/form.js +12 -8
  55. package/lib/form/src/form.min.js +1 -1
  56. package/lib/form/src/itemInfo.js +6 -4
  57. package/lib/form/src/itemInfo.min.js +1 -1
  58. package/lib/image/src/image.js +7 -5
  59. package/lib/image/src/image.min.js +1 -1
  60. package/lib/index.umd.js +1140 -287
  61. package/lib/index.umd.min.js +1 -1
  62. package/lib/input/src/input.js +5 -3
  63. package/lib/input/src/input.min.js +1 -1
  64. package/lib/layout-body/src/layout-body.js +13 -4
  65. package/lib/layout-body/src/layout-body.min.js +1 -1
  66. package/lib/list/src/list.js +4 -5
  67. package/lib/list/src/list.min.js +1 -1
  68. package/lib/menu/src/menu.js +3 -1
  69. package/lib/menu/src/menu.min.js +1 -1
  70. package/lib/modal/src/modal.js +8 -2
  71. package/lib/modal/src/modal.min.js +1 -1
  72. package/lib/pager/src/pager.js +5 -2
  73. package/lib/pager/src/pager.min.js +1 -1
  74. package/lib/radio/src/group.js +13 -6
  75. package/lib/radio/src/group.min.js +1 -1
  76. package/lib/select/src/select.js +36 -29
  77. package/lib/select/src/select.min.js +1 -1
  78. package/lib/splitter/src/splitter.js +9 -6
  79. package/lib/splitter/src/splitter.min.js +1 -1
  80. package/lib/table-select/src/table-select.js +27 -19
  81. package/lib/table-select/src/table-select.min.js +1 -1
  82. package/lib/tabs/src/tabs.js +6 -3
  83. package/lib/tabs/src/tabs.min.js +1 -1
  84. package/lib/textarea/src/textarea.js +3 -1
  85. package/lib/textarea/src/textarea.min.js +1 -1
  86. package/lib/tree/src/tree.js +9 -8
  87. package/lib/tree/src/tree.min.js +1 -1
  88. package/lib/tree-select/src/tree-select.js +17 -15
  89. package/lib/tree-select/src/tree-select.min.js +1 -1
  90. package/lib/ui/index.js +4 -1
  91. package/lib/ui/index.min.js +1 -1
  92. package/lib/ui/src/log.js +14 -3
  93. package/lib/ui/src/log.min.js +1 -1
  94. package/lib/upload/src/upload.js +22 -7
  95. package/lib/upload/src/upload.min.js +1 -1
  96. package/package.json +1 -1
  97. package/packages/backtop/src/backtop.ts +11 -3
  98. package/packages/button/src/button.ts +4 -2
  99. package/packages/calendar/src/calendar.ts +3 -1
  100. package/packages/cascader/src/cascader.ts +77 -32
  101. package/packages/checkbox/src/group.ts +22 -5
  102. package/packages/context-menu/src/context-menu.ts +5 -2
  103. package/packages/date-panel/src/util.ts +28 -16
  104. package/packages/date-picker/src/date-picker.ts +630 -89
  105. package/packages/date-range-picker/src/date-range-picker.ts +8 -4
  106. package/packages/drawer/src/drawer.ts +3 -0
  107. package/packages/form/render/index.ts +4 -2
  108. package/packages/form/src/form.ts +14 -7
  109. package/packages/form/src/itemInfo.ts +7 -5
  110. package/packages/image/src/image.ts +9 -3
  111. package/packages/input/src/input.ts +3 -1
  112. package/packages/layout-body/src/layout-body.ts +16 -2
  113. package/packages/list/src/list.ts +6 -3
  114. package/packages/menu/src/menu.ts +3 -1
  115. package/packages/modal/src/modal.ts +6 -1
  116. package/packages/pager/src/pager.ts +5 -3
  117. package/packages/radio/src/group.ts +16 -5
  118. package/packages/select/src/select.ts +41 -29
  119. package/packages/splitter/src/splitter.ts +7 -5
  120. package/packages/table-select/src/table-select.ts +31 -20
  121. package/packages/tabs/src/tabs.ts +5 -3
  122. package/packages/textarea/src/textarea.ts +3 -1
  123. package/packages/tree/src/tree.ts +9 -4
  124. package/packages/tree-select/src/tree-select.ts +31 -30
  125. package/packages/ui/index.ts +3 -0
  126. package/packages/ui/src/log.ts +16 -4
  127. package/packages/upload/src/upload.ts +16 -6
  128. package/types/components/cascader.d.ts +4 -0
  129. package/types/components/date-picker.d.ts +14 -6
  130. package/types/components/drawer.d.ts +2 -0
  131. package/types/components/modal.d.ts +2 -0
  132. package/types/components/upload.d.ts +28 -1
  133. /package/es/icon/{iconfont.1781753586592.ttf → iconfont.1781876590487.ttf} +0 -0
  134. /package/es/icon/{iconfont.1781753586592.woff → iconfont.1781876590487.woff} +0 -0
  135. /package/es/icon/{iconfont.1781753586592.woff2 → iconfont.1781876590487.woff2} +0 -0
  136. /package/es/{iconfont.1781753586592.ttf → iconfont.1781876590487.ttf} +0 -0
  137. /package/es/{iconfont.1781753586592.woff → iconfont.1781876590487.woff} +0 -0
  138. /package/es/{iconfont.1781753586592.woff2 → iconfont.1781876590487.woff2} +0 -0
  139. /package/lib/icon/style/{iconfont.1781753586592.ttf → iconfont.1781876590487.ttf} +0 -0
  140. /package/lib/icon/style/{iconfont.1781753586592.woff → iconfont.1781876590487.woff} +0 -0
  141. /package/lib/icon/style/{iconfont.1781753586592.woff2 → iconfont.1781876590487.woff2} +0 -0
  142. /package/lib/{iconfont.1781753586592.ttf → iconfont.1781876590487.ttf} +0 -0
  143. /package/lib/{iconfont.1781753586592.woff → iconfont.1781876590487.woff} +0 -0
  144. /package/lib/{iconfont.1781753586592.woff2 → iconfont.1781876590487.woff2} +0 -0
@@ -2,13 +2,40 @@ import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { getConfig, getIcon, getI18n, commands, createEvent, globalEvents, GLOBAL_EVENT_KEYS, globalMixins, renderEmptyElement } from '../../ui';
4
4
  import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
5
- import { updatePanelPlacement, getEventTargetNode } from '../../ui/src/dom';
5
+ import { updatePanelPlacement, getEventTargetNode, hasControlKey } from '../../ui/src/dom';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
- import { parseDateObj, parseDateValue, getDateByCode, handleValueFormat, handleInputFormat, hasDateValueType, hasTimestampValueType } from '../../date-panel/src/util';
8
- import { errLog } from '../../ui/src/log';
7
+ import { parseDateObj, parseDateValue, getDateByCode, handleValueFormat, hasDateValueType, hasTimestampValueType, isAllSameChar, getChunkDefaultNum } from '../../date-panel/src/util';
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
+ const { warnLog, errLog } = createComponentLog('date-picker');
13
+ const maskedTypes = ['year', 'month', 'date', 'datetime', 'time'];
14
+ const inputMaskedKeys = ['y', 'M', 'd', 'H', 'm', 'n', 's'];
15
+ const parseInputKayMaps = {};
16
+ inputMaskedKeys.forEach(key => {
17
+ parseInputKayMaps[key] = true;
18
+ });
19
+ function createReactData() {
20
+ return {
21
+ initialized: false,
22
+ panelIndex: 0,
23
+ visiblePanel: false,
24
+ isAniVisible: false,
25
+ panelStyle: {},
26
+ panelPlacement: '',
27
+ isActivated: false,
28
+ inputValue: '',
29
+ labelFlag: 0
30
+ };
31
+ }
32
+ function createInternalData() {
33
+ return {
34
+ // hpTimeout: undefined,
35
+ inputLabel: '',
36
+ laseFocusMasked: 0
37
+ };
38
+ }
12
39
  export default {
13
40
  name: 'VxeDatePicker',
14
41
  mixins: [
@@ -78,7 +105,6 @@ export default {
78
105
  labelFormat: String,
79
106
  valueFormat: String,
80
107
  timeFormat: String,
81
- inputFormat: String,
82
108
  editable: {
83
109
  type: Boolean,
84
110
  default: true
@@ -108,7 +134,7 @@ export default {
108
134
  type: Boolean,
109
135
  default: () => getConfig().datePicker.autoClose
110
136
  },
111
- controlConfig: Object,
137
+ maskedConfig: Object,
112
138
  prefixIcon: String,
113
139
  suffixIcon: String,
114
140
  placement: String,
@@ -148,26 +174,9 @@ export default {
148
174
  },
149
175
  data() {
150
176
  const xID = XEUtils.uniqueId();
151
- const reactData = {
152
- initialized: false,
153
- panelIndex: 0,
154
- visiblePanel: false,
155
- isAniVisible: false,
156
- panelStyle: {},
157
- panelPlacement: '',
158
- isActivated: false,
159
- inputValue: '',
160
- inputLabel: ''
161
- };
162
- const internalData = {
163
- // hpTimeout: undefined,
164
- parseInputKayMaps: {}
165
- };
166
- return {
167
- xID,
168
- reactData,
169
- internalData
170
- };
177
+ const reactData = createReactData();
178
+ return Object.assign(Object.assign({}, {}), { xID,
179
+ reactData });
171
180
  },
172
181
  computed: Object.assign(Object.assign({}, {}), { computeBtnTransfer() {
173
182
  const $xeDatePicker = this;
@@ -235,6 +244,53 @@ export default {
235
244
  const props = $xeDatePicker;
236
245
  return props.clearable;
237
246
  },
247
+ computeIsDatePanelType() {
248
+ const $xeDatePicker = this;
249
+ const props = $xeDatePicker;
250
+ const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
251
+ return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
252
+ },
253
+ computeDateListValue() {
254
+ const $xeDatePicker = this;
255
+ const props = $xeDatePicker;
256
+ const { value: modelValue, type, multiple } = props;
257
+ const isDatePanelType = $xeDatePicker.computeIsDatePanelType;
258
+ const dateValueFormat = $xeDatePicker.computeDateValueFormat;
259
+ if (multiple && modelValue && isDatePanelType) {
260
+ return XEUtils.toValueString(modelValue).split(',').map(item => {
261
+ const date = parseDateValue(item, type, {
262
+ valueFormat: dateValueFormat
263
+ });
264
+ if (XEUtils.isValidDate(date)) {
265
+ return date;
266
+ }
267
+ return date;
268
+ });
269
+ }
270
+ return [];
271
+ },
272
+ computeLimitMaxCount() {
273
+ const $xeDatePicker = this;
274
+ const props = $xeDatePicker;
275
+ return props.multiple ? XEUtils.toNumber(props.limitCount) : 0;
276
+ },
277
+ computeDateMultipleValue() {
278
+ const $xeDatePicker = this;
279
+ const dateListValue = $xeDatePicker.computeDateListValue;
280
+ const dateValueFormat = $xeDatePicker.computeDateValueFormat;
281
+ return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat));
282
+ },
283
+ computeOverCount() {
284
+ const $xeDatePicker = this;
285
+ const props = $xeDatePicker;
286
+ const { multiple } = props;
287
+ const limitMaxCount = $xeDatePicker.computeLimitMaxCount;
288
+ const dateMultipleValue = $xeDatePicker.computeDateMultipleValue;
289
+ if (multiple && limitMaxCount) {
290
+ return dateMultipleValue.length >= limitMaxCount;
291
+ }
292
+ return false;
293
+ },
238
294
  computeInputReadonly() {
239
295
  const $xeDatePicker = this;
240
296
  const props = $xeDatePicker;
@@ -301,11 +357,10 @@ export default {
301
357
  const { type, valueFormat } = props;
302
358
  return handleValueFormat(type, valueFormat);
303
359
  },
304
- computeDateInputFormat() {
360
+ computeDateMaskedFormat() {
305
361
  const $xeDatePicker = this;
306
- const props = $xeDatePicker;
307
- const { type, inputFormat } = props;
308
- return handleInputFormat(type, inputFormat);
362
+ const dateLabelFormat = $xeDatePicker.computeDateLabelFormat;
363
+ return dateLabelFormat;
309
364
  },
310
365
  computeFirstDayOfWeek() {
311
366
  const $xeDatePicker = this;
@@ -332,10 +387,16 @@ export default {
332
387
  return dateObj.label;
333
388
  }).join(', ');
334
389
  },
335
- computeControlOpts() {
390
+ computeMaskedOpts() {
336
391
  const $xeDatePicker = this;
337
392
  const props = $xeDatePicker;
338
- return Object.assign({}, getConfig().datePicker.controlConfig, props.controlConfig);
393
+ return Object.assign({}, getConfig().datePicker.maskedConfig, props.maskedConfig);
394
+ },
395
+ computeMaskChar() {
396
+ const $xeDatePicker = this;
397
+ const maskedOpts = $xeDatePicker.computeMaskedOpts;
398
+ const { maskPlaceholder } = maskedOpts;
399
+ return (maskPlaceholder ? ('' + maskPlaceholder)[0] : '') || '*';
339
400
  } }),
340
401
  methods: {
341
402
  //
@@ -371,6 +432,15 @@ export default {
371
432
  }
372
433
  reactData.inputValue = val;
373
434
  },
435
+ handleInputLabel(text, isUpdate) {
436
+ const $xeDatePicker = this;
437
+ const reactData = $xeDatePicker.reactData;
438
+ const internalData = $xeDatePicker.internalData;
439
+ internalData.inputLabel = text;
440
+ if (isUpdate) {
441
+ reactData.labelFlag++;
442
+ }
443
+ },
374
444
  triggerEvent(evnt) {
375
445
  const $xeDatePicker = this;
376
446
  const reactData = $xeDatePicker.reactData;
@@ -422,10 +492,9 @@ export default {
422
492
  },
423
493
  inputEvent(evnt) {
424
494
  const $xeDatePicker = this;
425
- const reactData = $xeDatePicker.reactData;
426
495
  const inputElem = evnt.target;
427
496
  const value = inputElem.value;
428
- reactData.inputLabel = value;
497
+ $xeDatePicker.handleInputLabel(value, true);
429
498
  $xeDatePicker.dispatchEvent('input', { value }, evnt);
430
499
  },
431
500
  changeEvent(evnt) {
@@ -435,20 +504,6 @@ export default {
435
504
  $xeDatePicker.triggerEvent(evnt);
436
505
  }
437
506
  },
438
- focusEvent(evnt) {
439
- const $xeDatePicker = this;
440
- const reactData = $xeDatePicker.reactData;
441
- const popupOpts = $xeDatePicker.computePopupOpts;
442
- const { trigger } = popupOpts;
443
- reactData.isActivated = true;
444
- if (!trigger || trigger === 'default') {
445
- $xeDatePicker.datePickerOpenEvent(evnt);
446
- }
447
- else if (trigger === 'icon') {
448
- $xeDatePicker.hidePanel();
449
- }
450
- $xeDatePicker.triggerEvent(evnt);
451
- },
452
507
  clickPrefixEvent(evnt) {
453
508
  const $xeDatePicker = this;
454
509
  const reactData = $xeDatePicker.reactData;
@@ -470,6 +525,114 @@ export default {
470
525
  }, 350);
471
526
  });
472
527
  },
528
+ dateChange(date, isReload) {
529
+ const $xeDatePicker = this;
530
+ const props = $xeDatePicker;
531
+ const { value: modelValue, multiple } = props;
532
+ const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
533
+ const dateValueFormat = $xeDatePicker.computeDateValueFormat;
534
+ const firstDayOfWeek = $xeDatePicker.computeFirstDayOfWeek;
535
+ if (props.type === 'week') {
536
+ const sWeek = XEUtils.toNumber(props.selectDay);
537
+ date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
538
+ }
539
+ const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek });
540
+ if (multiple) {
541
+ const overCount = $xeDatePicker.computeOverCount;
542
+ // 如果为多选
543
+ if (isDateTimeType) {
544
+ // 如果是datetime特殊类型
545
+ const dateListValue = isReload ? [] : [...$xeDatePicker.computeDateListValue];
546
+ const datetimeRest = [];
547
+ const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'));
548
+ if (eqIndex === -1) {
549
+ if (overCount) {
550
+ // 如果超出最大多选数量
551
+ return;
552
+ }
553
+ dateListValue.push(date);
554
+ }
555
+ else {
556
+ dateListValue.splice(eqIndex, 1);
557
+ }
558
+ dateListValue.forEach(item => {
559
+ if (item) {
560
+ datetimeRest.push(item);
561
+ }
562
+ });
563
+ $xeDatePicker.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' });
564
+ }
565
+ else {
566
+ const dateMultipleValue = isReload ? [] : $xeDatePicker.computeDateMultipleValue;
567
+ // 如果是日期类型
568
+ if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
569
+ $xeDatePicker.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' });
570
+ }
571
+ else {
572
+ if (overCount) {
573
+ // 如果超出最大多选数量
574
+ return;
575
+ }
576
+ $xeDatePicker.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' });
577
+ }
578
+ }
579
+ }
580
+ else {
581
+ // 如果为单选
582
+ if (!XEUtils.isEqual(modelValue, inpVal)) {
583
+ $xeDatePicker.handleChange(inpVal, { type: 'update' });
584
+ }
585
+ }
586
+ },
587
+ dateRevert() {
588
+ const $xeDatePicker = this;
589
+ const panelLabel = $xeDatePicker.computePanelLabel;
590
+ $xeDatePicker.handleInputLabel(panelLabel, true);
591
+ },
592
+ afterCheckValue(inpVal) {
593
+ const $xeDatePicker = this;
594
+ const props = $xeDatePicker;
595
+ const reactData = $xeDatePicker.reactData;
596
+ const internalData = $xeDatePicker.internalData;
597
+ const { type } = props;
598
+ const { inputLabel } = internalData;
599
+ const dateLabelFormat = $xeDatePicker.computeDateLabelFormat;
600
+ if (!inpVal) {
601
+ $xeDatePicker.handleChange('', { type: 'check' });
602
+ return;
603
+ }
604
+ let inpDateVal = parseDateValue(inpVal, type, {
605
+ valueFormat: dateLabelFormat
606
+ });
607
+ if (!XEUtils.isValidDate(inpDateVal)) {
608
+ $xeDatePicker.dateRevert();
609
+ return;
610
+ }
611
+ if (type === 'time') {
612
+ inpDateVal = XEUtils.toDateString(inpDateVal, dateLabelFormat);
613
+ if (inputLabel !== inpDateVal) {
614
+ $xeDatePicker.handleChange(inpDateVal, { type: 'check' });
615
+ }
616
+ $xeDatePicker.handleInputLabel(inpDateVal, true);
617
+ return;
618
+ }
619
+ let isChange = false;
620
+ const firstDayOfWeek = $xeDatePicker.computeFirstDayOfWeek;
621
+ if (type === 'datetime') {
622
+ const dateValue = reactData.inputValue;
623
+ if (inpVal !== XEUtils.toDateString(dateValue, dateLabelFormat) || inpVal !== XEUtils.toDateString(inpDateVal, dateLabelFormat)) {
624
+ isChange = true;
625
+ }
626
+ }
627
+ else {
628
+ isChange = true;
629
+ }
630
+ const label = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek });
631
+ $xeDatePicker.handleInputLabel(label, true);
632
+ if (isChange) {
633
+ $xeDatePicker.dateChange(inpDateVal);
634
+ }
635
+ },
473
636
  clearValueEvent(evnt, value) {
474
637
  const $xeDatePicker = this;
475
638
  const isDatePickerType = $xeDatePicker.computeIsDatePickerType;
@@ -488,38 +651,311 @@ export default {
488
651
  $xeDatePicker.dispatchEvent('suffix-click', { value: inputValue }, evnt);
489
652
  }
490
653
  },
491
- handleArrowInputDate(evnt, isUpArrow) {
654
+ handleArrowInputDate(evnt, isUpArrow, isDwArrow, isLtArrow, isRtArrow) {
655
+ const $xeDatePicker = this;
656
+ const props = $xeDatePicker;
657
+ const internalData = $xeDatePicker.internalData;
658
+ const { type, multiple } = props;
659
+ if (multiple) {
660
+ return;
661
+ }
662
+ const targetElem = $xeDatePicker.$refs.refInputTarget;
663
+ if (!targetElem) {
664
+ return;
665
+ }
666
+ const inpValue = targetElem.value;
667
+ if (!inpValue) {
668
+ return;
669
+ }
670
+ const dateMaskedFormat = $xeDatePicker.computeDateMaskedFormat;
671
+ const dateLabelFormat = $xeDatePicker.computeDateLabelFormat;
672
+ const firstDayOfWeek = $xeDatePicker.computeFirstDayOfWeek;
673
+ const maskChar = $xeDatePicker.computeMaskChar;
674
+ const selectionStart = targetElem.selectionStart || 0;
675
+ let selectKey = dateMaskedFormat[selectionStart];
676
+ if (!parseInputKayMaps[selectKey]) {
677
+ selectKey = dateMaskedFormat[selectionStart - 1];
678
+ }
679
+ const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
680
+ if (!skRest) {
681
+ return;
682
+ }
683
+ if (isUpArrow || isDwArrow) {
684
+ const chunkFormat = skRest[0] || '';
685
+ const chunkStartIndex = skRest.index || 0;
686
+ const chunkEndIndex = chunkStartIndex + chunkFormat.length;
687
+ const chunkValue = inpValue.slice(chunkStartIndex, chunkEndIndex);
688
+ if (parseInputKayMaps[selectKey]) {
689
+ const chunkNum = (isAllSameChar(chunkValue, maskChar) ? getChunkDefaultNum(selectKey) : XEUtils.toNumber(chunkValue)) + (isUpArrow ? 1 : -1);
690
+ const restValue = inpValue.slice(0, chunkStartIndex) + XEUtils.padStart(chunkNum, chunkFormat.length, '0') + inpValue.slice(chunkEndIndex);
691
+ evnt.preventDefault();
692
+ if (restValue.indexOf(maskChar) === -1) {
693
+ // 解析日期
694
+ const inpDateVal = parseDateValue(restValue, type, {
695
+ valueFormat: dateLabelFormat
696
+ });
697
+ if (XEUtils.isValidDate(inpDateVal)) {
698
+ const label = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek });
699
+ targetElem.value = label;
700
+ $xeDatePicker.handleInputLabel(label, false);
701
+ }
702
+ }
703
+ else {
704
+ targetElem.value = restValue;
705
+ $xeDatePicker.handleInputLabel(restValue, false);
706
+ }
707
+ }
708
+ targetElem.setSelectionRange(chunkStartIndex, chunkEndIndex);
709
+ }
710
+ else if (isLtArrow || isRtArrow) {
711
+ const currKeyIndex = inputMaskedKeys.indexOf(selectKey);
712
+ if (currKeyIndex > -1) {
713
+ const allMaskedKeys = XEUtils.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
714
+ const currIndex = XEUtils.findIndexOf(allMaskedKeys, key => selectKey === key[0]);
715
+ const targetFormatKey = isLtArrow ? (allMaskedKeys[currIndex - 1] || allMaskedKeys[0]) : (allMaskedKeys[currIndex + 1] || allMaskedKeys[allMaskedKeys.length - 1]);
716
+ const targetKey = targetFormatKey ? targetFormatKey[0] : '';
717
+ const sktRest = dateMaskedFormat.match(new RegExp(targetKey + '+'));
718
+ if (sktRest) {
719
+ evnt.preventDefault();
720
+ const mtStartIndex = sktRest.index || 0;
721
+ const mtEndIndex = mtStartIndex + sktRest[0].length;
722
+ targetElem.setSelectionRange(mtStartIndex, mtEndIndex);
723
+ }
724
+ }
725
+ }
726
+ internalData.isTriggerMasked = true;
727
+ },
728
+ handleMaskedInputDate(evnt) {
492
729
  const $xeDatePicker = this;
493
730
  const props = $xeDatePicker;
494
- const reactData = $xeDatePicker.reactData;
495
731
  const internalData = $xeDatePicker.internalData;
496
732
  const { multiple } = props;
497
733
  if (multiple) {
498
734
  return;
499
735
  }
500
- const { inputValue } = reactData;
501
- if (!inputValue) {
736
+ const targetElem = $xeDatePicker.$refs.refInputTarget;
737
+ if (!targetElem) {
738
+ return;
739
+ }
740
+ const isControlKey = hasControlKey(evnt);
741
+ if (isControlKey) {
742
+ return;
743
+ }
744
+ evnt.preventDefault();
745
+ const eKey = evnt.key;
746
+ const isDeleleKey = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
747
+ const isBackspaceKey = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.BACKSPACE);
748
+ const isNumKey = eKey >= '0' && eKey <= '9';
749
+ const numKey = isNumKey ? evnt.key : '';
750
+ if (!(isDeleleKey || isBackspaceKey || isNumKey)) {
751
+ return;
752
+ }
753
+ const { isTriggerMasked } = internalData;
754
+ const dateMaskedFormat = $xeDatePicker.computeDateMaskedFormat;
755
+ const maskChar = $xeDatePicker.computeMaskChar;
756
+ let inpValue = targetElem.value || dateMaskedFormat;
757
+ const selectionStart = targetElem.selectionStart || 0;
758
+ const selectionEnd = targetElem.selectionEnd || 0;
759
+ let selectKey = dateMaskedFormat[selectionStart];
760
+ if (!parseInputKayMaps[selectKey]) {
761
+ selectKey = dateMaskedFormat[selectionStart - 1];
762
+ }
763
+ const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
764
+ if (!skRest) {
765
+ return;
766
+ }
767
+ const allMaskedKeys = XEUtils.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
768
+ const chunkFormat = skRest[0] || '';
769
+ const chunkStartIndex = skRest.index || 0;
770
+ const chunkEndIndex = chunkStartIndex + chunkFormat.length;
771
+ const currKeyIndex = allMaskedKeys.indexOf(selectKey);
772
+ // 全选 | 如果无效字符
773
+ const isAllSelected = !selectionStart && selectionEnd === inpValue.length;
774
+ const isNotMasked = inpValue && inpValue.length !== dateMaskedFormat.length;
775
+ if (isAllSelected || isNotMasked) {
776
+ inpValue = dateMaskedFormat;
777
+ }
778
+ let chunkValue = isDeleleKey ? '' : inpValue.slice(chunkStartIndex, chunkEndIndex);
779
+ const chunkNums = (chunkValue.match(/\d/g) || []);
780
+ const chunkNumList = isTriggerMasked && !isBackspaceKey ? [] : chunkNums.slice(0);
781
+ if (isNumKey) {
782
+ chunkNumList.push(numKey);
783
+ }
784
+ else if (isBackspaceKey) {
785
+ chunkNumList.pop();
786
+ }
787
+ chunkValue = chunkNumList.join('').padEnd(chunkFormat.length, maskChar);
788
+ let restValue = inpValue.slice(0, chunkStartIndex) + chunkValue + inpValue.slice(chunkEndIndex);
789
+ restValue = restValue.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
790
+ targetElem.value = restValue;
791
+ $xeDatePicker.handleInputLabel(restValue, false);
792
+ // 如果是全选/删除
793
+ if (isAllSelected) {
794
+ if (isBackspaceKey || isDeleleKey) {
795
+ const firstMaskedKeys = allMaskedKeys[0];
796
+ const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
797
+ if (firstSkRest) {
798
+ const firstChunkFormat = firstSkRest[0];
799
+ targetElem.setSelectionRange(0, firstChunkFormat.length);
800
+ internalData.isTriggerMasked = true;
801
+ return;
802
+ }
803
+ }
804
+ }
805
+ else {
806
+ if (isBackspaceKey && !chunkNums.length) {
807
+ // 回退到上一个数字块
808
+ for (let i = currKeyIndex - 1; i >= 0; i--) {
809
+ const prveChunkKey = allMaskedKeys[i];
810
+ const prveSkRest = dateMaskedFormat.match(new RegExp(`${prveChunkKey}+`));
811
+ if (prveSkRest) {
812
+ const prveChunkFormat = prveSkRest[0];
813
+ const prveChunkStartIndex = prveSkRest.index || 0;
814
+ const prveChunkEndIndex = prveChunkStartIndex + prveChunkFormat.length;
815
+ let prveChunkValue = restValue.slice(prveChunkStartIndex, prveChunkEndIndex);
816
+ const prveChunkNums = (prveChunkValue.match(/\d/g) || []);
817
+ if (prveChunkNums.length) {
818
+ prveChunkNums.pop();
819
+ prveChunkValue = prveChunkNums.join('').padEnd(prveChunkFormat.length, maskChar);
820
+ restValue = restValue.slice(0, prveChunkStartIndex) + prveChunkValue + restValue.slice(prveChunkEndIndex);
821
+ targetElem.value = restValue;
822
+ $xeDatePicker.handleInputLabel(restValue, false);
823
+ targetElem.setSelectionRange(prveChunkStartIndex, prveChunkEndIndex);
824
+ return;
825
+ }
826
+ }
827
+ }
828
+ const firstMaskedKeys = allMaskedKeys[0];
829
+ const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
830
+ if (firstSkRest) {
831
+ const firstChunkFormat = firstSkRest[0];
832
+ restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
833
+ targetElem.value = restValue;
834
+ $xeDatePicker.handleInputLabel(restValue, false);
835
+ targetElem.setSelectionRange(0, firstChunkFormat.length);
836
+ internalData.isTriggerMasked = true;
837
+ return;
838
+ }
839
+ return;
840
+ }
841
+ }
842
+ let maskStartIndex = skRest.index || 0;
843
+ let maskEndIndex = maskStartIndex + skRest[0].length;
844
+ // 如果输入完成,跳转下一个
845
+ if (chunkNumList.length >= chunkValue.length) {
846
+ const nextKeys = allMaskedKeys.slice(currKeyIndex + 1);
847
+ if (currKeyIndex > -1) {
848
+ const nextRest = nextKeys.length ? dateMaskedFormat.match(new RegExp(`(${nextKeys.join('|')})+`)) : null;
849
+ // 如果当前数字块已输入,则跳转下一个数字块
850
+ if (nextRest) {
851
+ maskStartIndex = nextRest.index || 0;
852
+ maskEndIndex = maskStartIndex + nextRest[0].length;
853
+ targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
854
+ }
855
+ else {
856
+ targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
857
+ }
858
+ }
859
+ internalData.isTriggerMasked = true;
860
+ return;
861
+ }
862
+ targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
863
+ internalData.isTriggerMasked = false;
864
+ },
865
+ handleMaskedSelectedDate(evnt, isFocus) {
866
+ const $xeDatePicker = this;
867
+ const props = $xeDatePicker;
868
+ const internalData = $xeDatePicker.internalData;
869
+ const { type, multiple, value: modelValue } = props;
870
+ if (multiple) {
871
+ return;
872
+ }
873
+ if (!maskedTypes.includes(type)) {
502
874
  return;
503
875
  }
504
876
  const targetElem = $xeDatePicker.$refs.refInputTarget;
505
877
  if (!targetElem) {
506
878
  return;
507
879
  }
508
- const { parseInputKayMaps } = internalData;
509
- const inputFormat = $xeDatePicker.computeDateInputFormat;
880
+ const { laseFocusMasked } = internalData;
881
+ if (laseFocusMasked && Date.now() - laseFocusMasked < 100) {
882
+ return;
883
+ }
884
+ const dateMaskedFormat = $xeDatePicker.computeDateMaskedFormat;
885
+ const maskChar = $xeDatePicker.computeMaskChar;
510
886
  const selectionStart = targetElem.selectionStart || 0;
511
- let selectKey = inputFormat[selectionStart];
887
+ const selectionEnd = targetElem.selectionEnd || 0;
888
+ const inpValue = targetElem.value;
889
+ const allMaskedKeys = XEUtils.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
890
+ // 如果为空
891
+ if (!inpValue) {
892
+ let restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
893
+ // 还原值
894
+ if (isFocus && modelValue) {
895
+ const chunkNums = (('' + XEUtils.toNumber(modelValue)).match(/\d/g) || []);
896
+ let useNumIndex = 0;
897
+ restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), (txt) => chunkNums[useNumIndex++] || txt);
898
+ }
899
+ const firstMaskedKeys = allMaskedKeys[0];
900
+ const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
901
+ if (firstSkRest) {
902
+ evnt.preventDefault();
903
+ const firstChunkFormat = firstSkRest[0];
904
+ targetElem.value = restValue;
905
+ $xeDatePicker.handleInputLabel(restValue, false);
906
+ targetElem.setSelectionRange(0, firstChunkFormat.length);
907
+ internalData.laseFocusMasked = Date.now();
908
+ return;
909
+ }
910
+ }
911
+ // 全选 | 如果无效字符
912
+ const isAllSelected = !selectionStart && selectionEnd === inpValue.length;
913
+ const isNotMasked = inpValue && inpValue.length !== dateMaskedFormat.length;
914
+ if (isAllSelected || isNotMasked) {
915
+ let restValue = '';
916
+ // 还原值
917
+ if (isNotMasked && inpValue) {
918
+ const chunkNums = inpValue.match(/\d/g) || [];
919
+ let useNumIndex = 0;
920
+ restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), () => chunkNums[useNumIndex++] || maskChar);
921
+ }
922
+ else {
923
+ dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
924
+ }
925
+ const firstMaskedKeys = allMaskedKeys[0];
926
+ const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
927
+ if (firstSkRest) {
928
+ evnt.preventDefault();
929
+ const firstChunkFormat = firstSkRest[0];
930
+ targetElem.value = restValue;
931
+ $xeDatePicker.handleInputLabel(restValue, false);
932
+ targetElem.setSelectionRange(0, firstChunkFormat.length);
933
+ internalData.laseFocusMasked = Date.now();
934
+ return;
935
+ }
936
+ }
937
+ // 是否选择数字块
938
+ let selectKey = dateMaskedFormat[selectionStart];
512
939
  if (!parseInputKayMaps[selectKey]) {
513
- selectKey = inputFormat[selectionStart - 1];
940
+ selectKey = dateMaskedFormat[selectionStart - 1];
514
941
  }
515
- const inputPaesrFn = parseInputKayMaps[selectKey];
516
- if (inputPaesrFn) {
517
- inputPaesrFn(evnt, targetElem, isUpArrow);
942
+ if (selectKey) {
943
+ evnt.preventDefault();
944
+ const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
945
+ if (skRest) {
946
+ const chunkFormat = skRest[0] || '';
947
+ const chunkStartIndex = skRest.index || 0;
948
+ const chunkEndIndex = chunkStartIndex + chunkFormat.length;
949
+ targetElem.setSelectionRange(chunkStartIndex, chunkEndIndex);
950
+ internalData.isTriggerMasked = true;
951
+ internalData.laseFocusMasked = Date.now();
952
+ }
518
953
  }
519
954
  },
520
955
  blurEvent(evnt) {
521
956
  const $xeDatePicker = this;
522
957
  const reactData = $xeDatePicker.reactData;
958
+ const internalData = $xeDatePicker.internalData;
523
959
  const $xeForm = $xeDatePicker.$xeForm;
524
960
  const formItemInfo = $xeDatePicker.formItemInfo;
525
961
  const $datePanel = $xeDatePicker.$refs.refDatePanel;
@@ -530,10 +966,14 @@ export default {
530
966
  $xeDatePicker.handleChange(value, evnt);
531
967
  }
532
968
  if (!reactData.visiblePanel) {
969
+ const { inputLabel } = internalData;
533
970
  reactData.isActivated = false;
534
971
  // 未打开面板时才校验
535
972
  if ($datePanel) {
536
- $datePanel.checkValue(reactData.inputLabel);
973
+ $datePanel.checkValue(inputLabel);
974
+ }
975
+ else {
976
+ $xeDatePicker.afterCheckValue(inputLabel);
537
977
  }
538
978
  }
539
979
  $xeDatePicker.dispatchEvent('blur', { value }, evnt);
@@ -542,15 +982,89 @@ export default {
542
982
  $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
543
983
  }
544
984
  },
985
+ focusEvent(evnt) {
986
+ const $xeDatePicker = this;
987
+ const props = $xeDatePicker;
988
+ const reactData = $xeDatePicker.reactData;
989
+ const { multiple, editable, maskedConfig } = props;
990
+ const maskedOpts = $xeDatePicker.computeMaskedOpts;
991
+ const popupOpts = $xeDatePicker.computePopupOpts;
992
+ const { trigger } = popupOpts;
993
+ reactData.isActivated = true;
994
+ if (!trigger || trigger === 'default') {
995
+ $xeDatePicker.datePickerOpenEvent(evnt);
996
+ setTimeout(() => {
997
+ if (editable && !multiple && (isEnableConf(maskedConfig) || maskedOpts.enabled)) {
998
+ $xeDatePicker.handleMaskedSelectedDate(evnt, true);
999
+ }
1000
+ }, 15);
1001
+ }
1002
+ else if (trigger === 'icon') {
1003
+ $xeDatePicker.hidePanel();
1004
+ setTimeout(() => {
1005
+ if (editable && !multiple && (isEnableConf(maskedConfig) || maskedOpts.enabled)) {
1006
+ $xeDatePicker.handleMaskedSelectedDate(evnt, true);
1007
+ }
1008
+ }, 15);
1009
+ }
1010
+ else {
1011
+ if (editable && !multiple && (isEnableConf(maskedConfig) || maskedOpts.enabled)) {
1012
+ $xeDatePicker.handleMaskedSelectedDate(evnt, true);
1013
+ }
1014
+ }
1015
+ $xeDatePicker.triggerEvent(evnt);
1016
+ },
1017
+ clickEvent(evnt) {
1018
+ const $xeDatePicker = this;
1019
+ const props = $xeDatePicker;
1020
+ const { editable, maskedConfig } = props;
1021
+ const maskedOpts = $xeDatePicker.computeMaskedOpts;
1022
+ if (editable && (isEnableConf(maskedConfig) || maskedOpts.enabled)) {
1023
+ $xeDatePicker.handleMaskedSelectedDate(evnt);
1024
+ }
1025
+ $xeDatePicker.triggerEvent(evnt);
1026
+ },
545
1027
  keydownEvent(evnt) {
546
1028
  const $xeDatePicker = this;
547
1029
  const props = $xeDatePicker;
548
- const { controlConfig } = props;
549
- const controlOpts = $xeDatePicker.computeControlOpts;
1030
+ const reactData = $xeDatePicker.reactData;
1031
+ const internalData = $xeDatePicker.internalData;
1032
+ const { type, editable, maskedConfig } = props;
1033
+ const { visiblePanel } = reactData;
1034
+ const maskedOpts = $xeDatePicker.computeMaskedOpts;
550
1035
  const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
551
1036
  const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
552
- if ((isUpArrow || isDwArrow) && controlOpts.isArrow && (controlConfig || controlOpts.enabled)) {
553
- $xeDatePicker.handleArrowInputDate(evnt, isUpArrow);
1037
+ const isLtArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_LEFT);
1038
+ const isRtArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_RIGHT);
1039
+ const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
1040
+ if (editable) {
1041
+ if (isEnter) {
1042
+ const $datePanel = $xeDatePicker.$refs.refDatePanel;
1043
+ const { inputLabel } = internalData;
1044
+ const targetElem = $xeDatePicker.$refs.refInputTarget;
1045
+ if (visiblePanel) {
1046
+ $xeDatePicker.hidePanel();
1047
+ }
1048
+ if ($datePanel) {
1049
+ $datePanel.checkValue(inputLabel);
1050
+ }
1051
+ else {
1052
+ $xeDatePicker.afterCheckValue(inputLabel);
1053
+ }
1054
+ if (targetElem) {
1055
+ targetElem.blur();
1056
+ }
1057
+ }
1058
+ else if (maskedTypes.includes(type)) {
1059
+ if (isEnableConf(maskedConfig) || maskedOpts.enabled) {
1060
+ if (maskedOpts.isArrow && (isUpArrow || isDwArrow || isLtArrow || isRtArrow)) {
1061
+ $xeDatePicker.handleArrowInputDate(evnt, isUpArrow, isDwArrow, isLtArrow, isRtArrow);
1062
+ }
1063
+ else if (maskedOpts.isMasked) {
1064
+ $xeDatePicker.handleMaskedInputDate(evnt);
1065
+ }
1066
+ }
1067
+ }
554
1068
  }
555
1069
  $xeDatePicker.triggerEvent(evnt);
556
1070
  },
@@ -585,25 +1099,32 @@ export default {
585
1099
  },
586
1100
  panelRevertEvent(params) {
587
1101
  const $xeDatePicker = this;
588
- const reactData = $xeDatePicker.reactData;
589
- reactData.inputLabel = params.label;
1102
+ $xeDatePicker.handleInputLabel(params.label, true);
590
1103
  },
591
1104
  // 全局事件
592
1105
  handleGlobalMousedownEvent(evnt) {
593
1106
  const $xeDatePicker = this;
594
1107
  const reactData = $xeDatePicker.reactData;
1108
+ const internalData = $xeDatePicker.internalData;
595
1109
  const $datePanel = $xeDatePicker.$refs.refDatePanel;
596
1110
  const { visiblePanel, isActivated } = reactData;
597
1111
  const el = $xeDatePicker.$refs.refElem;
598
1112
  const panelWrapperElem = $xeDatePicker.$refs.refPanelWrapper;
599
1113
  const isDisabled = $xeDatePicker.computeIsDisabled;
600
1114
  if (!isDisabled && isActivated) {
601
- reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
602
- if (!reactData.isActivated) {
1115
+ const currActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
1116
+ if (currActivated !== isActivated) {
1117
+ reactData.isActivated = currActivated;
1118
+ }
1119
+ if (!currActivated) {
603
1120
  if (visiblePanel) {
604
1121
  $xeDatePicker.hidePanel();
1122
+ const { inputLabel } = internalData;
605
1123
  if ($datePanel) {
606
- $datePanel.checkValue(reactData.inputLabel);
1124
+ $datePanel.checkValue(inputLabel);
1125
+ }
1126
+ else {
1127
+ $xeDatePicker.afterCheckValue(inputLabel);
607
1128
  }
608
1129
  }
609
1130
  }
@@ -647,6 +1168,7 @@ export default {
647
1168
  handleGlobalBlurEvent() {
648
1169
  const $xeDatePicker = this;
649
1170
  const reactData = $xeDatePicker.reactData;
1171
+ const internalData = $xeDatePicker.internalData;
650
1172
  const $datePanel = $xeDatePicker.$refs.refDatePanel;
651
1173
  const { isActivated, visiblePanel } = reactData;
652
1174
  if (visiblePanel) {
@@ -657,7 +1179,7 @@ export default {
657
1179
  }
658
1180
  if (visiblePanel || isActivated) {
659
1181
  if ($datePanel) {
660
- $datePanel.checkValue(reactData.inputLabel);
1182
+ $datePanel.checkValue(internalData.inputLabel);
661
1183
  }
662
1184
  const targetElem = $xeDatePicker.$refs.refInputTarget;
663
1185
  if (targetElem) {
@@ -724,9 +1246,11 @@ export default {
724
1246
  const btnTransfer = $xeDatePicker.computeBtnTransfer;
725
1247
  const panelElem = $xeDatePicker.$refs.refInputPanel;
726
1248
  if (!isDisabled && !visiblePanel) {
727
- if (!reactData.initialized && btnTransfer && panelElem) {
1249
+ if (!reactData.initialized) {
728
1250
  reactData.initialized = true;
729
- document.body.appendChild(panelElem);
1251
+ if (btnTransfer && panelElem) {
1252
+ document.body.appendChild(panelElem);
1253
+ }
730
1254
  }
731
1255
  if (internalData.hpTimeout) {
732
1256
  clearTimeout(internalData.hpTimeout);
@@ -766,10 +1290,6 @@ export default {
766
1290
  }
767
1291
  }
768
1292
  },
769
- clickEvent(evnt) {
770
- const $xeDatePicker = this;
771
- $xeDatePicker.triggerEvent(evnt);
772
- },
773
1293
  handleShortcutEvent({ option, $event }) {
774
1294
  const $xeDatePicker = this;
775
1295
  const props = $xeDatePicker;
@@ -811,7 +1331,7 @@ export default {
811
1331
  break;
812
1332
  }
813
1333
  default:
814
- errLog('vxe.error.notCommands', [`[date-picker] ${code}`]);
1334
+ errLog('vxe.error.notCommands', [code]);
815
1335
  break;
816
1336
  }
817
1337
  }
@@ -1134,8 +1654,10 @@ export default {
1134
1654
  const $xeDatePicker = this;
1135
1655
  const props = $xeDatePicker;
1136
1656
  const reactData = $xeDatePicker.reactData;
1657
+ const internalData = $xeDatePicker.internalData;
1137
1658
  const { className, type, name, autoComplete } = props;
1138
- const { inputValue, inputLabel, visiblePanel, isActivated } = reactData;
1659
+ const { inputValue, visiblePanel, isActivated, labelFlag } = reactData;
1660
+ const { inputLabel } = internalData;
1139
1661
  const vSize = $xeDatePicker.computeSize;
1140
1662
  const isDisabled = $xeDatePicker.computeIsDisabled;
1141
1663
  const formReadonly = $xeDatePicker.computeFormReadonly;
@@ -1174,7 +1696,7 @@ export default {
1174
1696
  ref: 'refInputTarget',
1175
1697
  class: 'vxe-date-picker--inner',
1176
1698
  domProps: {
1177
- value: inputLabel
1699
+ value: labelFlag ? inputLabel : ''
1178
1700
  },
1179
1701
  attrs: {
1180
1702
  name,
@@ -1204,8 +1726,7 @@ export default {
1204
1726
  watch: {
1205
1727
  computePanelLabel(val) {
1206
1728
  const $xeDatePicker = this;
1207
- const reactData = $xeDatePicker.reactData;
1208
- reactData.inputLabel = val;
1729
+ $xeDatePicker.handleInputLabel(val, true);
1209
1730
  },
1210
1731
  value() {
1211
1732
  const $xeDatePicker = this;
@@ -1214,14 +1735,17 @@ export default {
1214
1735
  },
1215
1736
  created() {
1216
1737
  const $xeDatePicker = this;
1217
- const internalData = $xeDatePicker.internalData;
1218
- const { parseInputKayMaps } = internalData;
1219
- const inputKeys = ['y', 'M', 'd', 'H', 'm', 'n'];
1220
- inputKeys.forEach(key => {
1221
- parseInputKayMaps[key] = (evnt) => {
1222
- evnt.preventDefault();
1223
- };
1224
- });
1738
+ const props = $xeDatePicker;
1739
+ $xeDatePicker.internalData = createInternalData();
1740
+ const { type, multiple, maskedConfig } = props;
1741
+ if (isEnableConf(maskedConfig)) {
1742
+ if (multiple) {
1743
+ errLog('vxe.error.notSupportProp', ['multiple', 'control-config.enabled=true', 'control-config.enabled=false']);
1744
+ }
1745
+ if (!maskedTypes.includes(type)) {
1746
+ warnLog('vxe.error.notSupportProp', ['control-config.enabled=true', `type=${type}`, `type=${maskedTypes.join('|')}`]);
1747
+ }
1748
+ }
1225
1749
  $xeDatePicker.updateModelValue();
1226
1750
  globalEvents.on($xeDatePicker, 'mousewheel', $xeDatePicker.handleGlobalMousewheelEvent);
1227
1751
  globalEvents.on($xeDatePicker, 'mousedown', $xeDatePicker.handleGlobalMousedownEvent);
@@ -1231,6 +1755,8 @@ export default {
1231
1755
  },
1232
1756
  beforeDestroy() {
1233
1757
  const $xeDatePicker = this;
1758
+ const reactData = $xeDatePicker.reactData;
1759
+ const internalData = $xeDatePicker.internalData;
1234
1760
  const panelElem = $xeDatePicker.$refs.refInputPanel;
1235
1761
  if (panelElem && panelElem.parentNode) {
1236
1762
  panelElem.parentNode.removeChild(panelElem);
@@ -1239,6 +1765,8 @@ export default {
1239
1765
  globalEvents.off($xeDatePicker, 'mousedown');
1240
1766
  globalEvents.off($xeDatePicker, 'blur');
1241
1767
  globalEvents.off($xeDatePicker, 'resize');
1768
+ XEUtils.assign(reactData, createReactData());
1769
+ XEUtils.assign(internalData, createInternalData());
1242
1770
  },
1243
1771
  render(h) {
1244
1772
  return this.renderVN(h);