vxe-pc-ui 3.15.1 → 3.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/backtop/src/backtop.js +8 -7
- package/es/button/src/button.js +3 -2
- package/es/calendar/src/calendar.js +2 -1
- package/es/cascader/src/cascader.js +5 -7
- package/es/checkbox/src/group.js +16 -7
- package/es/context-menu/src/context-menu.js +2 -6
- package/es/date-panel/src/util.js +27 -4
- package/es/date-picker/src/date-picker.js +656 -57
- package/es/date-range-picker/src/date-range-picker.js +23 -8
- package/es/drawer/src/drawer.js +3 -0
- package/es/form/render/index.js +3 -2
- package/es/form/src/form.js +11 -12
- package/es/form/src/itemInfo.js +6 -5
- package/es/image/src/image.js +5 -6
- package/es/input/src/input.js +2 -1
- package/es/layout-body/src/layout-body.js +13 -6
- package/es/list/src/list.js +3 -6
- package/es/menu/src/menu.js +2 -1
- package/es/modal/src/modal.js +5 -1
- package/es/number-input/src/number-input.js +2 -3
- package/es/pager/src/pager.js +4 -3
- package/es/radio/src/group.js +11 -8
- package/es/select/src/select.js +34 -30
- package/es/splitter/src/splitter.js +12 -6
- package/es/table-select/src/table-select.js +27 -22
- package/es/tabs/src/tabs.js +4 -3
- package/es/textarea/src/textarea.js +2 -1
- package/es/tree/src/tree.js +6 -11
- package/es/tree-select/src/tree-select.js +5 -7
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +7 -1
- package/es/upload/src/upload.js +11 -9
- package/lib/backtop/src/backtop.js +10 -6
- package/lib/backtop/src/backtop.min.js +1 -1
- package/lib/button/src/button.js +3 -1
- package/lib/button/src/button.min.js +1 -1
- package/lib/calendar/src/calendar.js +3 -1
- package/lib/calendar/src/calendar.min.js +1 -1
- package/lib/cascader/src/cascader.js +7 -6
- package/lib/cascader/src/cascader.min.js +1 -1
- package/lib/checkbox/src/group.js +18 -6
- package/lib/checkbox/src/group.min.js +1 -1
- package/lib/context-menu/src/context-menu.js +3 -4
- package/lib/context-menu/src/context-menu.min.js +1 -1
- package/lib/date-panel/src/util.js +37 -5
- package/lib/date-panel/src/util.min.js +1 -1
- package/lib/date-picker/src/date-picker.js +698 -55
- package/lib/date-picker/src/date-picker.min.js +1 -1
- package/lib/date-range-picker/src/date-range-picker.js +21 -7
- package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
- package/lib/drawer/src/drawer.js +3 -0
- package/lib/drawer/src/drawer.min.js +1 -1
- package/lib/form/render/index.js +3 -1
- package/lib/form/render/index.min.js +1 -1
- package/lib/form/src/form.js +12 -8
- package/lib/form/src/form.min.js +1 -1
- package/lib/form/src/itemInfo.js +6 -4
- package/lib/form/src/itemInfo.min.js +1 -1
- package/lib/image/src/image.js +7 -5
- package/lib/image/src/image.min.js +1 -1
- package/lib/index.umd.js +1051 -217
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +5 -3
- package/lib/input/src/input.min.js +1 -1
- package/lib/layout-body/src/layout-body.js +13 -4
- package/lib/layout-body/src/layout-body.min.js +1 -1
- package/lib/list/src/list.js +4 -5
- package/lib/list/src/list.min.js +1 -1
- package/lib/menu/src/menu.js +3 -1
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/modal/src/modal.js +8 -2
- package/lib/modal/src/modal.min.js +1 -1
- package/lib/number-input/src/number-input.js +2 -3
- package/lib/pager/src/pager.js +5 -2
- package/lib/pager/src/pager.min.js +1 -1
- package/lib/radio/src/group.js +13 -6
- package/lib/radio/src/group.min.js +1 -1
- package/lib/select/src/select.js +36 -29
- package/lib/select/src/select.min.js +1 -1
- package/lib/splitter/src/splitter.js +15 -7
- package/lib/splitter/src/splitter.min.js +1 -1
- package/lib/table-select/src/table-select.js +27 -19
- package/lib/table-select/src/table-select.min.js +1 -1
- package/lib/tabs/src/tabs.js +6 -3
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/textarea/src/textarea.js +3 -1
- package/lib/textarea/src/textarea.min.js +1 -1
- package/lib/tree/src/tree.js +9 -8
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree-select/src/tree-select.js +10 -8
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +8 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/upload/src/upload.js +22 -7
- package/lib/upload/src/upload.min.js +1 -1
- package/package.json +1 -1
- package/packages/backtop/src/backtop.ts +11 -3
- package/packages/button/src/button.ts +4 -2
- package/packages/calendar/src/calendar.ts +3 -1
- package/packages/cascader/src/cascader.ts +9 -4
- package/packages/checkbox/src/group.ts +22 -5
- package/packages/context-menu/src/context-menu.ts +5 -2
- package/packages/date-panel/src/util.ts +28 -3
- package/packages/date-picker/src/date-picker.ts +673 -60
- package/packages/date-range-picker/src/date-range-picker.ts +22 -8
- package/packages/drawer/src/drawer.ts +3 -0
- package/packages/form/render/index.ts +4 -2
- package/packages/form/src/form.ts +14 -7
- package/packages/form/src/itemInfo.ts +7 -5
- package/packages/image/src/image.ts +9 -3
- package/packages/input/src/input.ts +3 -1
- package/packages/layout-body/src/layout-body.ts +16 -2
- package/packages/list/src/list.ts +6 -3
- package/packages/menu/src/menu.ts +3 -1
- package/packages/modal/src/modal.ts +6 -1
- package/packages/number-input/src/number-input.ts +2 -6
- package/packages/pager/src/pager.ts +5 -3
- package/packages/radio/src/group.ts +16 -5
- package/packages/select/src/select.ts +41 -29
- package/packages/splitter/src/splitter.ts +13 -6
- package/packages/table-select/src/table-select.ts +31 -20
- package/packages/tabs/src/tabs.ts +5 -3
- package/packages/textarea/src/textarea.ts +3 -1
- package/packages/tree/src/tree.ts +9 -4
- package/packages/tree-select/src/tree-select.ts +9 -4
- package/packages/ui/src/log.ts +7 -0
- package/packages/upload/src/upload.ts +16 -6
- package/types/components/date-picker.d.ts +27 -1
- package/types/components/date-range-picker.d.ts +4 -0
- package/types/components/drawer.d.ts +2 -0
- package/types/components/modal.d.ts +2 -0
- package/types/components/splitter.d.ts +1 -0
- package/types/components/table.d.ts +33 -4
- package/types/components/upload.d.ts +28 -1
- /package/es/icon/{iconfont.1781675403709.ttf → iconfont.1781852732213.ttf} +0 -0
- /package/es/icon/{iconfont.1781675403709.woff → iconfont.1781852732213.woff} +0 -0
- /package/es/icon/{iconfont.1781675403709.woff2 → iconfont.1781852732213.woff2} +0 -0
- /package/es/{iconfont.1781675403709.ttf → iconfont.1781852732213.ttf} +0 -0
- /package/es/{iconfont.1781675403709.woff → iconfont.1781852732213.woff} +0 -0
- /package/es/{iconfont.1781675403709.woff2 → iconfont.1781852732213.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1781675403709.ttf → iconfont.1781852732213.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1781675403709.woff → iconfont.1781852732213.woff} +0 -0
- /package/lib/icon/style/{iconfont.1781675403709.woff2 → iconfont.1781852732213.woff2} +0 -0
- /package/lib/{iconfont.1781675403709.ttf → iconfont.1781852732213.ttf} +0 -0
- /package/lib/{iconfont.1781675403709.woff → iconfont.1781852732213.woff} +0 -0
- /package/lib/{iconfont.1781675403709.woff2 → iconfont.1781852732213.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, hasDateValueType, hasTimestampValueType } from '../../date-panel/src/util';
|
|
8
|
-
import {
|
|
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: [
|
|
@@ -107,6 +134,7 @@ export default {
|
|
|
107
134
|
type: Boolean,
|
|
108
135
|
default: () => getConfig().datePicker.autoClose
|
|
109
136
|
},
|
|
137
|
+
maskedConfig: Object,
|
|
110
138
|
prefixIcon: String,
|
|
111
139
|
suffixIcon: String,
|
|
112
140
|
placement: String,
|
|
@@ -146,25 +174,9 @@ export default {
|
|
|
146
174
|
},
|
|
147
175
|
data() {
|
|
148
176
|
const xID = XEUtils.uniqueId();
|
|
149
|
-
const reactData =
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
visiblePanel: false,
|
|
153
|
-
isAniVisible: false,
|
|
154
|
-
panelStyle: {},
|
|
155
|
-
panelPlacement: '',
|
|
156
|
-
isActivated: false,
|
|
157
|
-
inputValue: '',
|
|
158
|
-
inputLabel: ''
|
|
159
|
-
};
|
|
160
|
-
const internalData = {
|
|
161
|
-
hpTimeout: undefined
|
|
162
|
-
};
|
|
163
|
-
return {
|
|
164
|
-
xID,
|
|
165
|
-
reactData,
|
|
166
|
-
internalData
|
|
167
|
-
};
|
|
177
|
+
const reactData = createReactData();
|
|
178
|
+
return Object.assign(Object.assign({}, {}), { xID,
|
|
179
|
+
reactData });
|
|
168
180
|
},
|
|
169
181
|
computed: Object.assign(Object.assign({}, {}), { computeBtnTransfer() {
|
|
170
182
|
const $xeDatePicker = this;
|
|
@@ -232,6 +244,53 @@ export default {
|
|
|
232
244
|
const props = $xeDatePicker;
|
|
233
245
|
return props.clearable;
|
|
234
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
|
+
},
|
|
235
294
|
computeInputReadonly() {
|
|
236
295
|
const $xeDatePicker = this;
|
|
237
296
|
const props = $xeDatePicker;
|
|
@@ -298,6 +357,11 @@ export default {
|
|
|
298
357
|
const { type, valueFormat } = props;
|
|
299
358
|
return handleValueFormat(type, valueFormat);
|
|
300
359
|
},
|
|
360
|
+
computeDateMaskedFormat() {
|
|
361
|
+
const $xeDatePicker = this;
|
|
362
|
+
const dateLabelFormat = $xeDatePicker.computeDateLabelFormat;
|
|
363
|
+
return dateLabelFormat;
|
|
364
|
+
},
|
|
301
365
|
computeFirstDayOfWeek() {
|
|
302
366
|
const $xeDatePicker = this;
|
|
303
367
|
const props = $xeDatePicker;
|
|
@@ -322,6 +386,17 @@ export default {
|
|
|
322
386
|
});
|
|
323
387
|
return dateObj.label;
|
|
324
388
|
}).join(', ');
|
|
389
|
+
},
|
|
390
|
+
computeMaskedOpts() {
|
|
391
|
+
const $xeDatePicker = this;
|
|
392
|
+
const props = $xeDatePicker;
|
|
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] : '') || '*';
|
|
325
400
|
} }),
|
|
326
401
|
methods: {
|
|
327
402
|
//
|
|
@@ -357,6 +432,15 @@ export default {
|
|
|
357
432
|
}
|
|
358
433
|
reactData.inputValue = val;
|
|
359
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
|
+
},
|
|
360
444
|
triggerEvent(evnt) {
|
|
361
445
|
const $xeDatePicker = this;
|
|
362
446
|
const reactData = $xeDatePicker.reactData;
|
|
@@ -408,10 +492,9 @@ export default {
|
|
|
408
492
|
},
|
|
409
493
|
inputEvent(evnt) {
|
|
410
494
|
const $xeDatePicker = this;
|
|
411
|
-
const reactData = $xeDatePicker.reactData;
|
|
412
495
|
const inputElem = evnt.target;
|
|
413
496
|
const value = inputElem.value;
|
|
414
|
-
|
|
497
|
+
$xeDatePicker.handleInputLabel(value, true);
|
|
415
498
|
$xeDatePicker.dispatchEvent('input', { value }, evnt);
|
|
416
499
|
},
|
|
417
500
|
changeEvent(evnt) {
|
|
@@ -421,17 +504,6 @@ export default {
|
|
|
421
504
|
$xeDatePicker.triggerEvent(evnt);
|
|
422
505
|
}
|
|
423
506
|
},
|
|
424
|
-
focusEvent(evnt) {
|
|
425
|
-
const $xeDatePicker = this;
|
|
426
|
-
const reactData = $xeDatePicker.reactData;
|
|
427
|
-
const popupOpts = $xeDatePicker.computePopupOpts;
|
|
428
|
-
const { trigger } = popupOpts;
|
|
429
|
-
reactData.isActivated = true;
|
|
430
|
-
if (!trigger || trigger === 'default') {
|
|
431
|
-
$xeDatePicker.datePickerOpenEvent(evnt);
|
|
432
|
-
}
|
|
433
|
-
$xeDatePicker.triggerEvent(evnt);
|
|
434
|
-
},
|
|
435
507
|
clickPrefixEvent(evnt) {
|
|
436
508
|
const $xeDatePicker = this;
|
|
437
509
|
const reactData = $xeDatePicker.reactData;
|
|
@@ -453,6 +525,114 @@ export default {
|
|
|
453
525
|
}, 350);
|
|
454
526
|
});
|
|
455
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
|
+
},
|
|
456
636
|
clearValueEvent(evnt, value) {
|
|
457
637
|
const $xeDatePicker = this;
|
|
458
638
|
const isDatePickerType = $xeDatePicker.computeIsDatePickerType;
|
|
@@ -471,9 +651,311 @@ export default {
|
|
|
471
651
|
$xeDatePicker.dispatchEvent('suffix-click', { value: inputValue }, evnt);
|
|
472
652
|
}
|
|
473
653
|
},
|
|
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) {
|
|
729
|
+
const $xeDatePicker = this;
|
|
730
|
+
const props = $xeDatePicker;
|
|
731
|
+
const internalData = $xeDatePicker.internalData;
|
|
732
|
+
const { multiple } = props;
|
|
733
|
+
if (multiple) {
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
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)) {
|
|
874
|
+
return;
|
|
875
|
+
}
|
|
876
|
+
const targetElem = $xeDatePicker.$refs.refInputTarget;
|
|
877
|
+
if (!targetElem) {
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
const { laseFocusMasked } = internalData;
|
|
881
|
+
if (laseFocusMasked && Date.now() - laseFocusMasked < 100) {
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
const dateMaskedFormat = $xeDatePicker.computeDateMaskedFormat;
|
|
885
|
+
const maskChar = $xeDatePicker.computeMaskChar;
|
|
886
|
+
const selectionStart = targetElem.selectionStart || 0;
|
|
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];
|
|
939
|
+
if (!parseInputKayMaps[selectKey]) {
|
|
940
|
+
selectKey = dateMaskedFormat[selectionStart - 1];
|
|
941
|
+
}
|
|
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
|
+
}
|
|
953
|
+
}
|
|
954
|
+
},
|
|
474
955
|
blurEvent(evnt) {
|
|
475
956
|
const $xeDatePicker = this;
|
|
476
957
|
const reactData = $xeDatePicker.reactData;
|
|
958
|
+
const internalData = $xeDatePicker.internalData;
|
|
477
959
|
const $xeForm = $xeDatePicker.$xeForm;
|
|
478
960
|
const formItemInfo = $xeDatePicker.formItemInfo;
|
|
479
961
|
const $datePanel = $xeDatePicker.$refs.refDatePanel;
|
|
@@ -484,10 +966,14 @@ export default {
|
|
|
484
966
|
$xeDatePicker.handleChange(value, evnt);
|
|
485
967
|
}
|
|
486
968
|
if (!reactData.visiblePanel) {
|
|
969
|
+
const { inputLabel } = internalData;
|
|
487
970
|
reactData.isActivated = false;
|
|
488
971
|
// 未打开面板时才校验
|
|
489
972
|
if ($datePanel) {
|
|
490
|
-
$datePanel.checkValue(
|
|
973
|
+
$datePanel.checkValue(inputLabel);
|
|
974
|
+
}
|
|
975
|
+
else {
|
|
976
|
+
$xeDatePicker.afterCheckValue(inputLabel);
|
|
491
977
|
}
|
|
492
978
|
}
|
|
493
979
|
$xeDatePicker.dispatchEvent('blur', { value }, evnt);
|
|
@@ -496,8 +982,90 @@ export default {
|
|
|
496
982
|
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
|
|
497
983
|
}
|
|
498
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
|
+
},
|
|
499
1027
|
keydownEvent(evnt) {
|
|
500
1028
|
const $xeDatePicker = this;
|
|
1029
|
+
const props = $xeDatePicker;
|
|
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;
|
|
1035
|
+
const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
|
|
1036
|
+
const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
|
|
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
|
+
}
|
|
1068
|
+
}
|
|
501
1069
|
$xeDatePicker.triggerEvent(evnt);
|
|
502
1070
|
},
|
|
503
1071
|
keyupEvent(evnt) {
|
|
@@ -531,25 +1099,32 @@ export default {
|
|
|
531
1099
|
},
|
|
532
1100
|
panelRevertEvent(params) {
|
|
533
1101
|
const $xeDatePicker = this;
|
|
534
|
-
|
|
535
|
-
reactData.inputLabel = params.label;
|
|
1102
|
+
$xeDatePicker.handleInputLabel(params.label, true);
|
|
536
1103
|
},
|
|
537
1104
|
// 全局事件
|
|
538
1105
|
handleGlobalMousedownEvent(evnt) {
|
|
539
1106
|
const $xeDatePicker = this;
|
|
540
1107
|
const reactData = $xeDatePicker.reactData;
|
|
1108
|
+
const internalData = $xeDatePicker.internalData;
|
|
541
1109
|
const $datePanel = $xeDatePicker.$refs.refDatePanel;
|
|
542
1110
|
const { visiblePanel, isActivated } = reactData;
|
|
543
1111
|
const el = $xeDatePicker.$refs.refElem;
|
|
544
1112
|
const panelWrapperElem = $xeDatePicker.$refs.refPanelWrapper;
|
|
545
1113
|
const isDisabled = $xeDatePicker.computeIsDisabled;
|
|
546
1114
|
if (!isDisabled && isActivated) {
|
|
547
|
-
|
|
548
|
-
if (
|
|
1115
|
+
const currActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
|
|
1116
|
+
if (currActivated !== isActivated) {
|
|
1117
|
+
reactData.isActivated = currActivated;
|
|
1118
|
+
}
|
|
1119
|
+
if (!currActivated) {
|
|
549
1120
|
if (visiblePanel) {
|
|
550
1121
|
$xeDatePicker.hidePanel();
|
|
1122
|
+
const { inputLabel } = internalData;
|
|
551
1123
|
if ($datePanel) {
|
|
552
|
-
$datePanel.checkValue(
|
|
1124
|
+
$datePanel.checkValue(inputLabel);
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
$xeDatePicker.afterCheckValue(inputLabel);
|
|
553
1128
|
}
|
|
554
1129
|
}
|
|
555
1130
|
}
|
|
@@ -593,6 +1168,7 @@ export default {
|
|
|
593
1168
|
handleGlobalBlurEvent() {
|
|
594
1169
|
const $xeDatePicker = this;
|
|
595
1170
|
const reactData = $xeDatePicker.reactData;
|
|
1171
|
+
const internalData = $xeDatePicker.internalData;
|
|
596
1172
|
const $datePanel = $xeDatePicker.$refs.refDatePanel;
|
|
597
1173
|
const { isActivated, visiblePanel } = reactData;
|
|
598
1174
|
if (visiblePanel) {
|
|
@@ -603,7 +1179,7 @@ export default {
|
|
|
603
1179
|
}
|
|
604
1180
|
if (visiblePanel || isActivated) {
|
|
605
1181
|
if ($datePanel) {
|
|
606
|
-
$datePanel.checkValue(
|
|
1182
|
+
$datePanel.checkValue(internalData.inputLabel);
|
|
607
1183
|
}
|
|
608
1184
|
const targetElem = $xeDatePicker.$refs.refInputTarget;
|
|
609
1185
|
if (targetElem) {
|
|
@@ -641,6 +1217,9 @@ export default {
|
|
|
641
1217
|
const { panelIndex } = reactData;
|
|
642
1218
|
const targetElem = $xeDatePicker.$refs.refInputTarget;
|
|
643
1219
|
const panelElem = $xeDatePicker.$refs.refInputPanel;
|
|
1220
|
+
if (!panelElem) {
|
|
1221
|
+
return $xeDatePicker.$nextTick();
|
|
1222
|
+
}
|
|
644
1223
|
const btnTransfer = $xeDatePicker.computeBtnTransfer;
|
|
645
1224
|
const popupOpts = $xeDatePicker.computePopupOpts;
|
|
646
1225
|
const handleStyle = () => {
|
|
@@ -669,10 +1248,8 @@ export default {
|
|
|
669
1248
|
if (!isDisabled && !visiblePanel) {
|
|
670
1249
|
if (!reactData.initialized) {
|
|
671
1250
|
reactData.initialized = true;
|
|
672
|
-
if (btnTransfer) {
|
|
673
|
-
|
|
674
|
-
document.body.appendChild(panelElem);
|
|
675
|
-
}
|
|
1251
|
+
if (btnTransfer && panelElem) {
|
|
1252
|
+
document.body.appendChild(panelElem);
|
|
676
1253
|
}
|
|
677
1254
|
}
|
|
678
1255
|
if (internalData.hpTimeout) {
|
|
@@ -700,16 +1277,19 @@ export default {
|
|
|
700
1277
|
},
|
|
701
1278
|
clickIconEvent(evnt) {
|
|
702
1279
|
const $xeDatePicker = this;
|
|
1280
|
+
const reactData = $xeDatePicker.reactData;
|
|
1281
|
+
const { visiblePanel } = reactData;
|
|
703
1282
|
const popupOpts = $xeDatePicker.computePopupOpts;
|
|
704
1283
|
const { trigger } = popupOpts;
|
|
705
1284
|
if (!trigger || trigger === 'default' || trigger === 'icon') {
|
|
706
|
-
|
|
1285
|
+
if (visiblePanel) {
|
|
1286
|
+
$xeDatePicker.hidePanel();
|
|
1287
|
+
}
|
|
1288
|
+
else {
|
|
1289
|
+
$xeDatePicker.datePickerOpenEvent(evnt);
|
|
1290
|
+
}
|
|
707
1291
|
}
|
|
708
1292
|
},
|
|
709
|
-
clickEvent(evnt) {
|
|
710
|
-
const $xeDatePicker = this;
|
|
711
|
-
$xeDatePicker.triggerEvent(evnt);
|
|
712
|
-
},
|
|
713
1293
|
handleShortcutEvent({ option, $event }) {
|
|
714
1294
|
const $xeDatePicker = this;
|
|
715
1295
|
const props = $xeDatePicker;
|
|
@@ -751,7 +1331,7 @@ export default {
|
|
|
751
1331
|
break;
|
|
752
1332
|
}
|
|
753
1333
|
default:
|
|
754
|
-
errLog('vxe.error.notCommands', [
|
|
1334
|
+
errLog('vxe.error.notCommands', [code]);
|
|
755
1335
|
break;
|
|
756
1336
|
}
|
|
757
1337
|
}
|
|
@@ -833,6 +1413,10 @@ export default {
|
|
|
833
1413
|
const props = $xeDatePicker;
|
|
834
1414
|
const slots = $xeDatePicker.$scopedSlots;
|
|
835
1415
|
const reactData = $xeDatePicker.reactData;
|
|
1416
|
+
const popupOpts = $xeDatePicker.computePopupOpts;
|
|
1417
|
+
if (popupOpts.enabled === false) {
|
|
1418
|
+
return renderEmptyElement($xeDatePicker);
|
|
1419
|
+
}
|
|
836
1420
|
const { type, multiple, showClearButton, showConfirmButton } = props;
|
|
837
1421
|
const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, inputValue } = reactData;
|
|
838
1422
|
const vSize = $xeDatePicker.computeSize;
|
|
@@ -842,7 +1426,6 @@ export default {
|
|
|
842
1426
|
const isDateTimeType = $xeDatePicker.computeIsDateTimeType;
|
|
843
1427
|
const shortcutList = $xeDatePicker.computeShortcutList;
|
|
844
1428
|
const timeOpts = $xeDatePicker.computeTimeOpts;
|
|
845
|
-
const popupOpts = $xeDatePicker.computePopupOpts;
|
|
846
1429
|
const { position } = shortcutOpts;
|
|
847
1430
|
const headerSlot = slots.header;
|
|
848
1431
|
const footerSlot = slots.footer;
|
|
@@ -1071,8 +1654,10 @@ export default {
|
|
|
1071
1654
|
const $xeDatePicker = this;
|
|
1072
1655
|
const props = $xeDatePicker;
|
|
1073
1656
|
const reactData = $xeDatePicker.reactData;
|
|
1657
|
+
const internalData = $xeDatePicker.internalData;
|
|
1074
1658
|
const { className, type, name, autoComplete } = props;
|
|
1075
|
-
const { inputValue,
|
|
1659
|
+
const { inputValue, visiblePanel, isActivated, labelFlag } = reactData;
|
|
1660
|
+
const { inputLabel } = internalData;
|
|
1076
1661
|
const vSize = $xeDatePicker.computeSize;
|
|
1077
1662
|
const isDisabled = $xeDatePicker.computeIsDisabled;
|
|
1078
1663
|
const formReadonly = $xeDatePicker.computeFormReadonly;
|
|
@@ -1111,7 +1696,7 @@ export default {
|
|
|
1111
1696
|
ref: 'refInputTarget',
|
|
1112
1697
|
class: 'vxe-date-picker--inner',
|
|
1113
1698
|
domProps: {
|
|
1114
|
-
value: inputLabel
|
|
1699
|
+
value: labelFlag ? inputLabel : ''
|
|
1115
1700
|
},
|
|
1116
1701
|
attrs: {
|
|
1117
1702
|
name,
|
|
@@ -1141,8 +1726,7 @@ export default {
|
|
|
1141
1726
|
watch: {
|
|
1142
1727
|
computePanelLabel(val) {
|
|
1143
1728
|
const $xeDatePicker = this;
|
|
1144
|
-
|
|
1145
|
-
reactData.inputLabel = val;
|
|
1729
|
+
$xeDatePicker.handleInputLabel(val, true);
|
|
1146
1730
|
},
|
|
1147
1731
|
value() {
|
|
1148
1732
|
const $xeDatePicker = this;
|
|
@@ -1151,6 +1735,17 @@ export default {
|
|
|
1151
1735
|
},
|
|
1152
1736
|
created() {
|
|
1153
1737
|
const $xeDatePicker = this;
|
|
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
|
+
}
|
|
1154
1749
|
$xeDatePicker.updateModelValue();
|
|
1155
1750
|
globalEvents.on($xeDatePicker, 'mousewheel', $xeDatePicker.handleGlobalMousewheelEvent);
|
|
1156
1751
|
globalEvents.on($xeDatePicker, 'mousedown', $xeDatePicker.handleGlobalMousedownEvent);
|
|
@@ -1160,6 +1755,8 @@ export default {
|
|
|
1160
1755
|
},
|
|
1161
1756
|
beforeDestroy() {
|
|
1162
1757
|
const $xeDatePicker = this;
|
|
1758
|
+
const reactData = $xeDatePicker.reactData;
|
|
1759
|
+
const internalData = $xeDatePicker.internalData;
|
|
1163
1760
|
const panelElem = $xeDatePicker.$refs.refInputPanel;
|
|
1164
1761
|
if (panelElem && panelElem.parentNode) {
|
|
1165
1762
|
panelElem.parentNode.removeChild(panelElem);
|
|
@@ -1168,6 +1765,8 @@ export default {
|
|
|
1168
1765
|
globalEvents.off($xeDatePicker, 'mousedown');
|
|
1169
1766
|
globalEvents.off($xeDatePicker, 'blur');
|
|
1170
1767
|
globalEvents.off($xeDatePicker, 'resize');
|
|
1768
|
+
XEUtils.assign(reactData, createReactData());
|
|
1769
|
+
XEUtils.assign(internalData, createInternalData());
|
|
1171
1770
|
},
|
|
1172
1771
|
render(h) {
|
|
1173
1772
|
return this.renderVN(h);
|