vxe-pc-ui 4.15.1 → 4.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/dist/all.esm.js +834 -175
- package/es/backtop/src/backtop.js +2 -1
- package/es/button/src/button.js +3 -2
- package/es/calendar/src/calendar.js +2 -1
- package/es/cascader/src/cascader.js +2 -1
- package/es/checkbox/src/group.js +5 -1
- package/es/date-panel/src/util.js +27 -4
- package/es/date-picker/src/date-picker.js +609 -45
- package/es/date-range-picker/src/date-range-picker.js +20 -4
- package/es/drawer/src/drawer.js +2 -0
- package/es/form/render/index.js +3 -2
- package/es/form/src/form.js +6 -5
- package/es/form/src/itemInfo.js +6 -5
- package/es/input/src/input.js +2 -1
- package/es/menu/src/menu.js +2 -1
- package/es/modal/src/modal.js +5 -2
- package/es/number-input/src/number-input.js +2 -3
- package/es/pager/src/pager.js +4 -3
- package/es/radio/src/group.js +5 -1
- package/es/select/src/select.js +25 -20
- package/es/splitter/src/splitter.js +12 -7
- package/es/table-select/src/table-select.js +21 -16
- package/es/tabs/src/tabs.js +4 -3
- package/es/textarea/src/textarea.js +2 -1
- package/es/tree/src/tree.js +3 -2
- package/es/tree-select/src/tree-select.js +2 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +7 -1
- package/es/upload/src/upload.js +12 -3
- package/lib/backtop/src/backtop.js +5 -2
- package/lib/backtop/src/backtop.min.js +1 -1
- package/lib/button/src/button.js +4 -1
- package/lib/button/src/button.min.js +1 -1
- package/lib/calendar/src/calendar.js +4 -1
- package/lib/calendar/src/calendar.min.js +1 -1
- package/lib/cascader/src/cascader.js +4 -1
- package/lib/cascader/src/cascader.min.js +1 -1
- package/lib/checkbox/src/group.js +5 -1
- package/lib/checkbox/src/group.min.js +1 -1
- package/lib/date-panel/src/util.js +37 -6
- package/lib/date-panel/src/util.min.js +1 -1
- package/lib/date-picker/src/date-picker.js +665 -43
- package/lib/date-picker/src/date-picker.min.js +1 -1
- package/lib/date-range-picker/src/date-range-picker.js +21 -3
- package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
- package/lib/drawer/src/drawer.js +2 -0
- package/lib/drawer/src/drawer.min.js +1 -1
- package/lib/form/render/index.js +4 -1
- package/lib/form/render/index.min.js +1 -1
- package/lib/form/src/form.js +8 -4
- package/lib/form/src/form.min.js +1 -1
- package/lib/form/src/itemInfo.js +7 -4
- package/lib/form/src/itemInfo.min.js +1 -1
- package/lib/index.umd.js +916 -137
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +6 -3
- package/lib/input/src/input.min.js +1 -1
- package/lib/menu/src/menu.js +4 -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 +6 -2
- package/lib/pager/src/pager.min.js +1 -1
- package/lib/radio/src/group.js +5 -1
- package/lib/radio/src/group.min.js +1 -1
- package/lib/select/src/select.js +27 -20
- package/lib/select/src/select.min.js +1 -1
- package/lib/splitter/src/splitter.js +17 -9
- package/lib/splitter/src/splitter.min.js +1 -1
- package/lib/table-select/src/table-select.js +22 -15
- package/lib/table-select/src/table-select.min.js +1 -1
- package/lib/tabs/src/tabs.js +7 -3
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/textarea/src/textarea.js +4 -1
- package/lib/textarea/src/textarea.min.js +1 -1
- package/lib/tree/src/tree.js +7 -4
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree-select/src/tree-select.js +7 -3
- 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 +20 -3
- package/lib/upload/src/upload.min.js +1 -1
- package/package.json +1 -1
- package/packages/backtop/src/backtop.ts +3 -1
- package/packages/button/src/button.ts +4 -2
- package/packages/calendar/src/calendar.ts +3 -1
- package/packages/cascader/src/cascader.ts +3 -1
- package/packages/checkbox/src/group.ts +6 -2
- package/packages/date-panel/src/util.ts +28 -3
- package/packages/date-picker/src/date-picker.ts +624 -48
- package/packages/date-range-picker/src/date-range-picker.ts +19 -4
- package/packages/drawer/src/drawer.ts +2 -0
- package/packages/form/render/index.ts +4 -2
- package/packages/form/src/form.ts +7 -5
- package/packages/form/src/itemInfo.ts +7 -5
- package/packages/input/src/input.ts +3 -1
- package/packages/menu/src/menu.ts +3 -1
- package/packages/modal/src/modal.ts +6 -2
- package/packages/number-input/src/number-input.ts +2 -6
- package/packages/pager/src/pager.ts +5 -3
- package/packages/radio/src/group.ts +6 -2
- package/packages/select/src/select.ts +29 -22
- package/packages/splitter/src/splitter.ts +13 -7
- package/packages/table-select/src/table-select.ts +24 -17
- package/packages/tabs/src/tabs.ts +5 -3
- package/packages/textarea/src/textarea.ts +3 -1
- package/packages/tree/src/tree.ts +4 -2
- package/packages/tree-select/src/tree-select.ts +3 -1
- package/packages/ui/src/log.ts +7 -0
- package/packages/upload/src/upload.ts +14 -3
- 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 +29 -3
- package/types/components/upload.d.ts +28 -1
- /package/es/icon/{iconfont.1781675429363.ttf → iconfont.1781852740683.ttf} +0 -0
- /package/es/icon/{iconfont.1781675429363.woff → iconfont.1781852740683.woff} +0 -0
- /package/es/icon/{iconfont.1781675429363.woff2 → iconfont.1781852740683.woff2} +0 -0
- /package/es/{iconfont.1781675429363.ttf → iconfont.1781852740683.ttf} +0 -0
- /package/es/{iconfont.1781675429363.woff → iconfont.1781852740683.woff} +0 -0
- /package/es/{iconfont.1781675429363.woff2 → iconfont.1781852740683.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1781675429363.ttf → iconfont.1781852740683.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1781675429363.woff → iconfont.1781852740683.woff} +0 -0
- /package/lib/icon/style/{iconfont.1781675429363.woff2 → iconfont.1781852740683.woff2} +0 -0
- /package/lib/{iconfont.1781675429363.ttf → iconfont.1781852740683.ttf} +0 -0
- /package/lib/{iconfont.1781675429363.woff → iconfont.1781852740683.woff} +0 -0
- /package/lib/{iconfont.1781675429363.woff2 → iconfont.1781852740683.woff2} +0 -0
|
@@ -17,6 +17,36 @@ var _datePanel = _interopRequireDefault(require("../../date-panel/src/date-panel
|
|
|
17
17
|
var _button = _interopRequireDefault(require("../../button/src/button"));
|
|
18
18
|
var _buttonGroup = _interopRequireDefault(require("../../button/src/button-group"));
|
|
19
19
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
+
const {
|
|
21
|
+
warnLog,
|
|
22
|
+
errLog
|
|
23
|
+
} = (0, _log.createComponentLog)('date-picker');
|
|
24
|
+
const maskedTypes = ['year', 'month', 'date', 'datetime', 'time'];
|
|
25
|
+
const inputMaskedKeys = ['y', 'M', 'd', 'H', 'm', 'n', 's'];
|
|
26
|
+
const parseInputKayMaps = {};
|
|
27
|
+
inputMaskedKeys.forEach(key => {
|
|
28
|
+
parseInputKayMaps[key] = true;
|
|
29
|
+
});
|
|
30
|
+
function createReactData() {
|
|
31
|
+
return {
|
|
32
|
+
initialized: false,
|
|
33
|
+
panelIndex: 0,
|
|
34
|
+
visiblePanel: false,
|
|
35
|
+
isAniVisible: false,
|
|
36
|
+
panelStyle: {},
|
|
37
|
+
panelPlacement: '',
|
|
38
|
+
isActivated: false,
|
|
39
|
+
inputValue: '',
|
|
40
|
+
labelFlag: 0
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function createInternalData() {
|
|
44
|
+
return {
|
|
45
|
+
// hpTimeout: undefined,
|
|
46
|
+
inputLabel: '',
|
|
47
|
+
laseFocusMasked: 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
20
50
|
var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
21
51
|
name: 'VxeDatePicker',
|
|
22
52
|
props: {
|
|
@@ -108,6 +138,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
108
138
|
type: Boolean,
|
|
109
139
|
default: () => (0, _ui.getConfig)().datePicker.autoClose
|
|
110
140
|
},
|
|
141
|
+
maskedConfig: Object,
|
|
111
142
|
prefixIcon: String,
|
|
112
143
|
suffixIcon: String,
|
|
113
144
|
placement: String,
|
|
@@ -136,20 +167,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
136
167
|
const {
|
|
137
168
|
computeSize
|
|
138
169
|
} = (0, _ui.useSize)(props);
|
|
139
|
-
const reactData = (0, _vue.reactive)(
|
|
140
|
-
|
|
141
|
-
panelIndex: 0,
|
|
142
|
-
visiblePanel: false,
|
|
143
|
-
isAniVisible: false,
|
|
144
|
-
panelStyle: {},
|
|
145
|
-
panelPlacement: '',
|
|
146
|
-
isActivated: false,
|
|
147
|
-
inputValue: '',
|
|
148
|
-
inputLabel: ''
|
|
149
|
-
});
|
|
150
|
-
const internalData = {
|
|
151
|
-
hpTimeout: undefined
|
|
152
|
-
};
|
|
170
|
+
const reactData = (0, _vue.reactive)(createReactData());
|
|
171
|
+
const internalData = createInternalData();
|
|
153
172
|
const refElem = (0, _vue.ref)();
|
|
154
173
|
const refInputTarget = (0, _vue.ref)();
|
|
155
174
|
const refInputPanel = (0, _vue.ref)();
|
|
@@ -223,6 +242,50 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
223
242
|
const computeIsClearable = (0, _vue.computed)(() => {
|
|
224
243
|
return props.clearable;
|
|
225
244
|
});
|
|
245
|
+
const computeIsDatePanelType = (0, _vue.computed)(() => {
|
|
246
|
+
const isDateTimeType = computeIsDateTimeType.value;
|
|
247
|
+
return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
|
|
248
|
+
});
|
|
249
|
+
const computeDateListValue = (0, _vue.computed)(() => {
|
|
250
|
+
const {
|
|
251
|
+
modelValue,
|
|
252
|
+
type,
|
|
253
|
+
multiple
|
|
254
|
+
} = props;
|
|
255
|
+
const isDatePanelType = computeIsDatePanelType.value;
|
|
256
|
+
const dateValueFormat = computeDateValueFormat.value;
|
|
257
|
+
if (multiple && modelValue && isDatePanelType) {
|
|
258
|
+
return _xeUtils.default.toValueString(modelValue).split(',').map(item => {
|
|
259
|
+
const date = (0, _util.parseDateValue)(item, type, {
|
|
260
|
+
valueFormat: dateValueFormat
|
|
261
|
+
});
|
|
262
|
+
if (_xeUtils.default.isValidDate(date)) {
|
|
263
|
+
return date;
|
|
264
|
+
}
|
|
265
|
+
return date;
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return [];
|
|
269
|
+
});
|
|
270
|
+
const computeLimitMaxCount = (0, _vue.computed)(() => {
|
|
271
|
+
return props.multiple ? _xeUtils.default.toNumber(props.limitCount) : 0;
|
|
272
|
+
});
|
|
273
|
+
const computeDateMultipleValue = (0, _vue.computed)(() => {
|
|
274
|
+
const dateListValue = computeDateListValue.value;
|
|
275
|
+
const dateValueFormat = computeDateValueFormat.value;
|
|
276
|
+
return dateListValue.map(date => _xeUtils.default.toDateString(date, dateValueFormat));
|
|
277
|
+
});
|
|
278
|
+
const computeOverCount = (0, _vue.computed)(() => {
|
|
279
|
+
const {
|
|
280
|
+
multiple
|
|
281
|
+
} = props;
|
|
282
|
+
const limitMaxCount = computeLimitMaxCount.value;
|
|
283
|
+
const dateMultipleValue = computeDateMultipleValue.value;
|
|
284
|
+
if (multiple && limitMaxCount) {
|
|
285
|
+
return dateMultipleValue.length >= limitMaxCount;
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
});
|
|
226
289
|
const computeInputReadonly = (0, _vue.computed)(() => {
|
|
227
290
|
const {
|
|
228
291
|
type,
|
|
@@ -287,6 +350,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
287
350
|
} = props;
|
|
288
351
|
return (0, _util.handleValueFormat)(type, valueFormat);
|
|
289
352
|
});
|
|
353
|
+
const computeDateMaskedFormat = (0, _vue.computed)(() => {
|
|
354
|
+
const dateLabelFormat = computeDateLabelFormat.value;
|
|
355
|
+
return dateLabelFormat;
|
|
356
|
+
});
|
|
290
357
|
const computeFirstDayOfWeek = (0, _vue.computed)(() => {
|
|
291
358
|
const {
|
|
292
359
|
startDay
|
|
@@ -314,6 +381,16 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
314
381
|
return dateObj.label;
|
|
315
382
|
}).join(', ');
|
|
316
383
|
});
|
|
384
|
+
const computeMaskedOpts = (0, _vue.computed)(() => {
|
|
385
|
+
return Object.assign({}, (0, _ui.getConfig)().datePicker.maskedConfig, props.maskedConfig);
|
|
386
|
+
});
|
|
387
|
+
const computeMaskChar = (0, _vue.computed)(() => {
|
|
388
|
+
const maskedOpts = computeMaskedOpts.value;
|
|
389
|
+
const {
|
|
390
|
+
maskPlaceholder
|
|
391
|
+
} = maskedOpts;
|
|
392
|
+
return (maskPlaceholder ? ('' + maskPlaceholder)[0] : '') || '*';
|
|
393
|
+
});
|
|
317
394
|
const updateModelValue = () => {
|
|
318
395
|
const {
|
|
319
396
|
modelValue
|
|
@@ -328,6 +405,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
328
405
|
}
|
|
329
406
|
reactData.inputValue = val;
|
|
330
407
|
};
|
|
408
|
+
const handleInputLabel = (text, isUpdate) => {
|
|
409
|
+
internalData.inputLabel = text;
|
|
410
|
+
if (isUpdate) {
|
|
411
|
+
reactData.labelFlag++;
|
|
412
|
+
}
|
|
413
|
+
};
|
|
331
414
|
const triggerEvent = evnt => {
|
|
332
415
|
const {
|
|
333
416
|
inputValue
|
|
@@ -389,7 +472,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
389
472
|
const inputEvent = evnt => {
|
|
390
473
|
const inputElem = evnt.target;
|
|
391
474
|
const value = inputElem.value;
|
|
392
|
-
|
|
475
|
+
handleInputLabel(value, true);
|
|
393
476
|
dispatchEvent('input', {
|
|
394
477
|
value
|
|
395
478
|
}, evnt);
|
|
@@ -400,17 +483,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
400
483
|
triggerEvent(evnt);
|
|
401
484
|
}
|
|
402
485
|
};
|
|
403
|
-
const focusEvent = evnt => {
|
|
404
|
-
const popupOpts = computePopupOpts.value;
|
|
405
|
-
const {
|
|
406
|
-
trigger
|
|
407
|
-
} = popupOpts;
|
|
408
|
-
reactData.isActivated = true;
|
|
409
|
-
if (!trigger || trigger === 'default') {
|
|
410
|
-
datePickerOpenEvent(evnt);
|
|
411
|
-
}
|
|
412
|
-
triggerEvent(evnt);
|
|
413
|
-
};
|
|
414
486
|
const clickPrefixEvent = evnt => {
|
|
415
487
|
const isDisabled = computeIsDisabled.value;
|
|
416
488
|
if (!isDisabled) {
|
|
@@ -431,6 +503,125 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
431
503
|
}, 350);
|
|
432
504
|
});
|
|
433
505
|
};
|
|
506
|
+
const dateChange = (date, isReload) => {
|
|
507
|
+
const {
|
|
508
|
+
modelValue,
|
|
509
|
+
multiple
|
|
510
|
+
} = props;
|
|
511
|
+
const isDateTimeType = computeIsDateTimeType.value;
|
|
512
|
+
const dateValueFormat = computeDateValueFormat.value;
|
|
513
|
+
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
514
|
+
if (props.type === 'week') {
|
|
515
|
+
const sWeek = _xeUtils.default.toNumber(props.selectDay);
|
|
516
|
+
date = _xeUtils.default.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
|
|
517
|
+
}
|
|
518
|
+
const inpVal = _xeUtils.default.toDateString(date, dateValueFormat, {
|
|
519
|
+
firstDay: firstDayOfWeek
|
|
520
|
+
});
|
|
521
|
+
if (multiple) {
|
|
522
|
+
const overCount = computeOverCount.value;
|
|
523
|
+
// 如果为多选
|
|
524
|
+
if (isDateTimeType) {
|
|
525
|
+
// 如果是datetime特殊类型
|
|
526
|
+
const dateListValue = isReload ? [] : [...computeDateListValue.value];
|
|
527
|
+
const datetimeRest = [];
|
|
528
|
+
const eqIndex = _xeUtils.default.findIndexOf(dateListValue, val => _xeUtils.default.isDateSame(date, val, 'yyyyMMdd'));
|
|
529
|
+
if (eqIndex === -1) {
|
|
530
|
+
if (overCount) {
|
|
531
|
+
// 如果超出最大多选数量
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
dateListValue.push(date);
|
|
535
|
+
} else {
|
|
536
|
+
dateListValue.splice(eqIndex, 1);
|
|
537
|
+
}
|
|
538
|
+
dateListValue.forEach(item => {
|
|
539
|
+
if (item) {
|
|
540
|
+
datetimeRest.push(item);
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
handleChange(datetimeRest.map(date => _xeUtils.default.toDateString(date, dateValueFormat)).join(','), {
|
|
544
|
+
type: 'update'
|
|
545
|
+
});
|
|
546
|
+
} else {
|
|
547
|
+
const dateMultipleValue = isReload ? [] : computeDateMultipleValue.value;
|
|
548
|
+
// 如果是日期类型
|
|
549
|
+
if (dateMultipleValue.some(val => _xeUtils.default.isEqual(val, inpVal))) {
|
|
550
|
+
handleChange(dateMultipleValue.filter(val => !_xeUtils.default.isEqual(val, inpVal)).join(','), {
|
|
551
|
+
type: 'update'
|
|
552
|
+
});
|
|
553
|
+
} else {
|
|
554
|
+
if (overCount) {
|
|
555
|
+
// 如果超出最大多选数量
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
handleChange(dateMultipleValue.concat([inpVal]).join(','), {
|
|
559
|
+
type: 'update'
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
} else {
|
|
564
|
+
// 如果为单选
|
|
565
|
+
if (!_xeUtils.default.isEqual(modelValue, inpVal)) {
|
|
566
|
+
handleChange(inpVal, {
|
|
567
|
+
type: 'update'
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
};
|
|
572
|
+
const dateRevert = () => {
|
|
573
|
+
const panelLabel = computePanelLabel.value;
|
|
574
|
+
handleInputLabel(panelLabel, true);
|
|
575
|
+
};
|
|
576
|
+
const afterCheckValue = inpVal => {
|
|
577
|
+
const {
|
|
578
|
+
type
|
|
579
|
+
} = props;
|
|
580
|
+
const {
|
|
581
|
+
inputLabel
|
|
582
|
+
} = internalData;
|
|
583
|
+
const dateLabelFormat = computeDateLabelFormat.value;
|
|
584
|
+
if (!inpVal) {
|
|
585
|
+
handleChange('', {
|
|
586
|
+
type: 'check'
|
|
587
|
+
});
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
let inpDateVal = (0, _util.parseDateValue)(inpVal, type, {
|
|
591
|
+
valueFormat: dateLabelFormat
|
|
592
|
+
});
|
|
593
|
+
if (!_xeUtils.default.isValidDate(inpDateVal)) {
|
|
594
|
+
dateRevert();
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
if (type === 'time') {
|
|
598
|
+
inpDateVal = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat);
|
|
599
|
+
if (inputLabel !== inpDateVal) {
|
|
600
|
+
handleChange(inpDateVal, {
|
|
601
|
+
type: 'check'
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
handleInputLabel(inpDateVal, true);
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
let isChange = false;
|
|
608
|
+
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
609
|
+
if (type === 'datetime') {
|
|
610
|
+
const dateValue = reactData.inputValue;
|
|
611
|
+
if (inpVal !== _xeUtils.default.toDateString(dateValue, dateLabelFormat) || inpVal !== _xeUtils.default.toDateString(inpDateVal, dateLabelFormat)) {
|
|
612
|
+
isChange = true;
|
|
613
|
+
}
|
|
614
|
+
} else {
|
|
615
|
+
isChange = true;
|
|
616
|
+
}
|
|
617
|
+
const label = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat, {
|
|
618
|
+
firstDay: firstDayOfWeek
|
|
619
|
+
});
|
|
620
|
+
handleInputLabel(label, true);
|
|
621
|
+
if (isChange) {
|
|
622
|
+
dateChange(inpDateVal);
|
|
623
|
+
}
|
|
624
|
+
};
|
|
434
625
|
const clearValueEvent = (evnt, value) => {
|
|
435
626
|
const isDatePickerType = computeIsDatePickerType.value;
|
|
436
627
|
if (isDatePickerType) {
|
|
@@ -452,6 +643,307 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
452
643
|
}, evnt);
|
|
453
644
|
}
|
|
454
645
|
};
|
|
646
|
+
const handleArrowInputDate = (evnt, isUpArrow, isDwArrow, isLtArrow, isRtArrow) => {
|
|
647
|
+
const {
|
|
648
|
+
type,
|
|
649
|
+
multiple
|
|
650
|
+
} = props;
|
|
651
|
+
if (multiple) {
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
const targetElem = refInputTarget.value;
|
|
655
|
+
if (!targetElem) {
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
const inpValue = targetElem.value;
|
|
659
|
+
if (!inpValue) {
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
const dateMaskedFormat = computeDateMaskedFormat.value;
|
|
663
|
+
const dateLabelFormat = computeDateLabelFormat.value;
|
|
664
|
+
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
665
|
+
const maskChar = computeMaskChar.value;
|
|
666
|
+
const selectionStart = targetElem.selectionStart || 0;
|
|
667
|
+
let selectKey = dateMaskedFormat[selectionStart];
|
|
668
|
+
if (!parseInputKayMaps[selectKey]) {
|
|
669
|
+
selectKey = dateMaskedFormat[selectionStart - 1];
|
|
670
|
+
}
|
|
671
|
+
const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
|
|
672
|
+
if (!skRest) {
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
if (isUpArrow || isDwArrow) {
|
|
676
|
+
const chunkFormat = skRest[0] || '';
|
|
677
|
+
const chunkStartIndex = skRest.index || 0;
|
|
678
|
+
const chunkEndIndex = chunkStartIndex + chunkFormat.length;
|
|
679
|
+
const chunkValue = inpValue.slice(chunkStartIndex, chunkEndIndex);
|
|
680
|
+
if (parseInputKayMaps[selectKey]) {
|
|
681
|
+
const chunkNum = ((0, _util.isAllSameChar)(chunkValue, maskChar) ? (0, _util.getChunkDefaultNum)(selectKey) : _xeUtils.default.toNumber(chunkValue)) + (isUpArrow ? 1 : -1);
|
|
682
|
+
const restValue = inpValue.slice(0, chunkStartIndex) + _xeUtils.default.padStart(chunkNum, chunkFormat.length, '0') + inpValue.slice(chunkEndIndex);
|
|
683
|
+
evnt.preventDefault();
|
|
684
|
+
if (restValue.indexOf(maskChar) === -1) {
|
|
685
|
+
// 解析日期
|
|
686
|
+
const inpDateVal = (0, _util.parseDateValue)(restValue, type, {
|
|
687
|
+
valueFormat: dateLabelFormat
|
|
688
|
+
});
|
|
689
|
+
if (_xeUtils.default.isValidDate(inpDateVal)) {
|
|
690
|
+
const label = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat, {
|
|
691
|
+
firstDay: firstDayOfWeek
|
|
692
|
+
});
|
|
693
|
+
targetElem.value = label;
|
|
694
|
+
handleInputLabel(label, false);
|
|
695
|
+
}
|
|
696
|
+
} else {
|
|
697
|
+
targetElem.value = restValue;
|
|
698
|
+
handleInputLabel(restValue, false);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
targetElem.setSelectionRange(chunkStartIndex, chunkEndIndex);
|
|
702
|
+
} else if (isLtArrow || isRtArrow) {
|
|
703
|
+
const currKeyIndex = inputMaskedKeys.indexOf(selectKey);
|
|
704
|
+
if (currKeyIndex > -1) {
|
|
705
|
+
const allMaskedKeys = _xeUtils.default.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
|
|
706
|
+
const currIndex = _xeUtils.default.findIndexOf(allMaskedKeys, key => selectKey === key[0]);
|
|
707
|
+
const targetFormatKey = isLtArrow ? allMaskedKeys[currIndex - 1] || allMaskedKeys[0] : allMaskedKeys[currIndex + 1] || allMaskedKeys[allMaskedKeys.length - 1];
|
|
708
|
+
const targetKey = targetFormatKey ? targetFormatKey[0] : '';
|
|
709
|
+
const sktRest = dateMaskedFormat.match(new RegExp(targetKey + '+'));
|
|
710
|
+
if (sktRest) {
|
|
711
|
+
evnt.preventDefault();
|
|
712
|
+
const mtStartIndex = sktRest.index || 0;
|
|
713
|
+
const mtEndIndex = mtStartIndex + sktRest[0].length;
|
|
714
|
+
targetElem.setSelectionRange(mtStartIndex, mtEndIndex);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
internalData.isTriggerMasked = true;
|
|
719
|
+
};
|
|
720
|
+
const handleMaskedInputDate = evnt => {
|
|
721
|
+
const {
|
|
722
|
+
multiple
|
|
723
|
+
} = props;
|
|
724
|
+
if (multiple) {
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
const targetElem = refInputTarget.value;
|
|
728
|
+
if (!targetElem) {
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
732
|
+
if (isControlKey) {
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
evnt.preventDefault();
|
|
736
|
+
const eKey = evnt.key;
|
|
737
|
+
const isDeleleKey = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.DELETE);
|
|
738
|
+
const isBackspaceKey = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.BACKSPACE);
|
|
739
|
+
const isNumKey = eKey >= '0' && eKey <= '9';
|
|
740
|
+
const numKey = isNumKey ? evnt.key : '';
|
|
741
|
+
if (!(isDeleleKey || isBackspaceKey || isNumKey)) {
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
const {
|
|
745
|
+
isTriggerMasked
|
|
746
|
+
} = internalData;
|
|
747
|
+
const dateMaskedFormat = computeDateMaskedFormat.value;
|
|
748
|
+
const maskChar = computeMaskChar.value;
|
|
749
|
+
let inpValue = targetElem.value || dateMaskedFormat;
|
|
750
|
+
const selectionStart = targetElem.selectionStart || 0;
|
|
751
|
+
const selectionEnd = targetElem.selectionEnd || 0;
|
|
752
|
+
let selectKey = dateMaskedFormat[selectionStart];
|
|
753
|
+
if (!parseInputKayMaps[selectKey]) {
|
|
754
|
+
selectKey = dateMaskedFormat[selectionStart - 1];
|
|
755
|
+
}
|
|
756
|
+
const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
|
|
757
|
+
if (!skRest) {
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
const allMaskedKeys = _xeUtils.default.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
|
|
761
|
+
const chunkFormat = skRest[0] || '';
|
|
762
|
+
const chunkStartIndex = skRest.index || 0;
|
|
763
|
+
const chunkEndIndex = chunkStartIndex + chunkFormat.length;
|
|
764
|
+
const currKeyIndex = allMaskedKeys.indexOf(selectKey);
|
|
765
|
+
// 全选 | 如果无效字符
|
|
766
|
+
const isAllSelected = !selectionStart && selectionEnd === inpValue.length;
|
|
767
|
+
const isNotMasked = inpValue && inpValue.length !== dateMaskedFormat.length;
|
|
768
|
+
if (isAllSelected || isNotMasked) {
|
|
769
|
+
inpValue = dateMaskedFormat;
|
|
770
|
+
}
|
|
771
|
+
let chunkValue = isDeleleKey ? '' : inpValue.slice(chunkStartIndex, chunkEndIndex);
|
|
772
|
+
const chunkNums = chunkValue.match(/\d/g) || [];
|
|
773
|
+
const chunkNumList = isTriggerMasked && !isBackspaceKey ? [] : chunkNums.slice(0);
|
|
774
|
+
if (isNumKey) {
|
|
775
|
+
chunkNumList.push(numKey);
|
|
776
|
+
} else if (isBackspaceKey) {
|
|
777
|
+
chunkNumList.pop();
|
|
778
|
+
}
|
|
779
|
+
chunkValue = chunkNumList.join('').padEnd(chunkFormat.length, maskChar);
|
|
780
|
+
let restValue = inpValue.slice(0, chunkStartIndex) + chunkValue + inpValue.slice(chunkEndIndex);
|
|
781
|
+
restValue = restValue.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
|
|
782
|
+
targetElem.value = restValue;
|
|
783
|
+
handleInputLabel(restValue, false);
|
|
784
|
+
// 如果是全选/删除
|
|
785
|
+
if (isAllSelected) {
|
|
786
|
+
if (isBackspaceKey || isDeleleKey) {
|
|
787
|
+
const firstMaskedKeys = allMaskedKeys[0];
|
|
788
|
+
const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
|
|
789
|
+
if (firstSkRest) {
|
|
790
|
+
const firstChunkFormat = firstSkRest[0];
|
|
791
|
+
targetElem.setSelectionRange(0, firstChunkFormat.length);
|
|
792
|
+
internalData.isTriggerMasked = true;
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
} else {
|
|
797
|
+
if (isBackspaceKey && !chunkNums.length) {
|
|
798
|
+
// 回退到上一个数字块
|
|
799
|
+
for (let i = currKeyIndex - 1; i >= 0; i--) {
|
|
800
|
+
const prveChunkKey = allMaskedKeys[i];
|
|
801
|
+
const prveSkRest = dateMaskedFormat.match(new RegExp(`${prveChunkKey}+`));
|
|
802
|
+
if (prveSkRest) {
|
|
803
|
+
const prveChunkFormat = prveSkRest[0];
|
|
804
|
+
const prveChunkStartIndex = prveSkRest.index || 0;
|
|
805
|
+
const prveChunkEndIndex = prveChunkStartIndex + prveChunkFormat.length;
|
|
806
|
+
let prveChunkValue = restValue.slice(prveChunkStartIndex, prveChunkEndIndex);
|
|
807
|
+
const prveChunkNums = prveChunkValue.match(/\d/g) || [];
|
|
808
|
+
if (prveChunkNums.length) {
|
|
809
|
+
prveChunkNums.pop();
|
|
810
|
+
prveChunkValue = prveChunkNums.join('').padEnd(prveChunkFormat.length, maskChar);
|
|
811
|
+
restValue = restValue.slice(0, prveChunkStartIndex) + prveChunkValue + restValue.slice(prveChunkEndIndex);
|
|
812
|
+
targetElem.value = restValue;
|
|
813
|
+
handleInputLabel(restValue, false);
|
|
814
|
+
targetElem.setSelectionRange(prveChunkStartIndex, prveChunkEndIndex);
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
const firstMaskedKeys = allMaskedKeys[0];
|
|
820
|
+
const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
|
|
821
|
+
if (firstSkRest) {
|
|
822
|
+
const firstChunkFormat = firstSkRest[0];
|
|
823
|
+
restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
|
|
824
|
+
targetElem.value = restValue;
|
|
825
|
+
handleInputLabel(restValue, false);
|
|
826
|
+
targetElem.setSelectionRange(0, firstChunkFormat.length);
|
|
827
|
+
internalData.isTriggerMasked = true;
|
|
828
|
+
return;
|
|
829
|
+
}
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
let maskStartIndex = skRest.index || 0;
|
|
834
|
+
let maskEndIndex = maskStartIndex + skRest[0].length;
|
|
835
|
+
// 如果输入完成,跳转下一个
|
|
836
|
+
if (chunkNumList.length >= chunkValue.length) {
|
|
837
|
+
const nextKeys = allMaskedKeys.slice(currKeyIndex + 1);
|
|
838
|
+
if (currKeyIndex > -1) {
|
|
839
|
+
const nextRest = nextKeys.length ? dateMaskedFormat.match(new RegExp(`(${nextKeys.join('|')})+`)) : null;
|
|
840
|
+
// 如果当前数字块已输入,则跳转下一个数字块
|
|
841
|
+
if (nextRest) {
|
|
842
|
+
maskStartIndex = nextRest.index || 0;
|
|
843
|
+
maskEndIndex = maskStartIndex + nextRest[0].length;
|
|
844
|
+
targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
|
|
845
|
+
} else {
|
|
846
|
+
targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
internalData.isTriggerMasked = true;
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
852
|
+
targetElem.setSelectionRange(maskStartIndex, maskEndIndex);
|
|
853
|
+
internalData.isTriggerMasked = false;
|
|
854
|
+
};
|
|
855
|
+
const handleMaskedSelectedDate = (evnt, isFocus) => {
|
|
856
|
+
const {
|
|
857
|
+
type,
|
|
858
|
+
multiple,
|
|
859
|
+
modelValue
|
|
860
|
+
} = props;
|
|
861
|
+
if (multiple) {
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
if (!maskedTypes.includes(type)) {
|
|
865
|
+
return;
|
|
866
|
+
}
|
|
867
|
+
const targetElem = refInputTarget.value;
|
|
868
|
+
if (!targetElem) {
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
const {
|
|
872
|
+
laseFocusMasked
|
|
873
|
+
} = internalData;
|
|
874
|
+
if (laseFocusMasked && Date.now() - laseFocusMasked < 100) {
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
const dateMaskedFormat = computeDateMaskedFormat.value;
|
|
878
|
+
const maskChar = computeMaskChar.value;
|
|
879
|
+
const selectionStart = targetElem.selectionStart || 0;
|
|
880
|
+
const selectionEnd = targetElem.selectionEnd || 0;
|
|
881
|
+
const inpValue = targetElem.value;
|
|
882
|
+
const allMaskedKeys = _xeUtils.default.map(dateMaskedFormat.match(new RegExp(`(${inputMaskedKeys.join('|')})+`, 'g')) || [], fullKey => fullKey[0]);
|
|
883
|
+
// 如果为空
|
|
884
|
+
if (!inpValue) {
|
|
885
|
+
let restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
|
|
886
|
+
// 还原值
|
|
887
|
+
if (isFocus && modelValue) {
|
|
888
|
+
const chunkNums = ('' + _xeUtils.default.toNumber(modelValue)).match(/\d/g) || [];
|
|
889
|
+
let useNumIndex = 0;
|
|
890
|
+
restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), txt => chunkNums[useNumIndex++] || txt);
|
|
891
|
+
}
|
|
892
|
+
const firstMaskedKeys = allMaskedKeys[0];
|
|
893
|
+
const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
|
|
894
|
+
if (firstSkRest) {
|
|
895
|
+
evnt.preventDefault();
|
|
896
|
+
const firstChunkFormat = firstSkRest[0];
|
|
897
|
+
targetElem.value = restValue;
|
|
898
|
+
handleInputLabel(restValue, false);
|
|
899
|
+
targetElem.setSelectionRange(0, firstChunkFormat.length);
|
|
900
|
+
internalData.laseFocusMasked = Date.now();
|
|
901
|
+
return;
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
// 全选 | 如果无效字符
|
|
905
|
+
const isAllSelected = !selectionStart && selectionEnd === inpValue.length;
|
|
906
|
+
const isNotMasked = inpValue && inpValue.length !== dateMaskedFormat.length;
|
|
907
|
+
if (isAllSelected || isNotMasked) {
|
|
908
|
+
let restValue = '';
|
|
909
|
+
// 还原值
|
|
910
|
+
if (isNotMasked && inpValue) {
|
|
911
|
+
const chunkNums = inpValue.match(/\d/g) || [];
|
|
912
|
+
let useNumIndex = 0;
|
|
913
|
+
restValue = dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), () => chunkNums[useNumIndex++] || maskChar);
|
|
914
|
+
} else {
|
|
915
|
+
dateMaskedFormat.replace(new RegExp(`(${inputMaskedKeys.join('|')})`, 'g'), maskChar);
|
|
916
|
+
}
|
|
917
|
+
const firstMaskedKeys = allMaskedKeys[0];
|
|
918
|
+
const firstSkRest = dateMaskedFormat.match(new RegExp(`${firstMaskedKeys}+`));
|
|
919
|
+
if (firstSkRest) {
|
|
920
|
+
evnt.preventDefault();
|
|
921
|
+
const firstChunkFormat = firstSkRest[0];
|
|
922
|
+
targetElem.value = restValue;
|
|
923
|
+
handleInputLabel(restValue, false);
|
|
924
|
+
targetElem.setSelectionRange(0, firstChunkFormat.length);
|
|
925
|
+
internalData.laseFocusMasked = Date.now();
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
// 是否选择数字块
|
|
930
|
+
let selectKey = dateMaskedFormat[selectionStart];
|
|
931
|
+
if (!parseInputKayMaps[selectKey]) {
|
|
932
|
+
selectKey = dateMaskedFormat[selectionStart - 1];
|
|
933
|
+
}
|
|
934
|
+
if (selectKey) {
|
|
935
|
+
evnt.preventDefault();
|
|
936
|
+
const skRest = dateMaskedFormat.match(new RegExp(selectKey + '+'));
|
|
937
|
+
if (skRest) {
|
|
938
|
+
const chunkFormat = skRest[0] || '';
|
|
939
|
+
const chunkStartIndex = skRest.index || 0;
|
|
940
|
+
const chunkEndIndex = chunkStartIndex + chunkFormat.length;
|
|
941
|
+
targetElem.setSelectionRange(chunkStartIndex, chunkEndIndex);
|
|
942
|
+
internalData.isTriggerMasked = true;
|
|
943
|
+
internalData.laseFocusMasked = Date.now();
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
};
|
|
455
947
|
const blurEvent = evnt => {
|
|
456
948
|
const $datePanel = refDatePanel.value;
|
|
457
949
|
const {
|
|
@@ -463,10 +955,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
463
955
|
handleChange(value, evnt);
|
|
464
956
|
}
|
|
465
957
|
if (!reactData.visiblePanel) {
|
|
958
|
+
const {
|
|
959
|
+
inputLabel
|
|
960
|
+
} = internalData;
|
|
466
961
|
reactData.isActivated = false;
|
|
467
962
|
// 未打开面板时才校验
|
|
468
963
|
if ($datePanel) {
|
|
469
|
-
$datePanel.checkValue(
|
|
964
|
+
$datePanel.checkValue(inputLabel);
|
|
965
|
+
} else {
|
|
966
|
+
afterCheckValue(inputLabel);
|
|
470
967
|
}
|
|
471
968
|
}
|
|
472
969
|
dispatchEvent('blur', {
|
|
@@ -477,7 +974,93 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
477
974
|
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
|
|
478
975
|
}
|
|
479
976
|
};
|
|
977
|
+
const focusEvent = evnt => {
|
|
978
|
+
const {
|
|
979
|
+
multiple,
|
|
980
|
+
editable,
|
|
981
|
+
maskedConfig
|
|
982
|
+
} = props;
|
|
983
|
+
const maskedOpts = computeMaskedOpts.value;
|
|
984
|
+
const popupOpts = computePopupOpts.value;
|
|
985
|
+
const {
|
|
986
|
+
trigger
|
|
987
|
+
} = popupOpts;
|
|
988
|
+
reactData.isActivated = true;
|
|
989
|
+
if (!trigger || trigger === 'default') {
|
|
990
|
+
datePickerOpenEvent(evnt);
|
|
991
|
+
setTimeout(() => {
|
|
992
|
+
if (editable && !multiple && ((0, _utils.isEnableConf)(maskedConfig) || maskedOpts.enabled)) {
|
|
993
|
+
handleMaskedSelectedDate(evnt, true);
|
|
994
|
+
}
|
|
995
|
+
}, 15);
|
|
996
|
+
} else if (trigger === 'icon') {
|
|
997
|
+
hidePanel();
|
|
998
|
+
setTimeout(() => {
|
|
999
|
+
if (editable && !multiple && ((0, _utils.isEnableConf)(maskedConfig) || maskedOpts.enabled)) {
|
|
1000
|
+
handleMaskedSelectedDate(evnt, true);
|
|
1001
|
+
}
|
|
1002
|
+
}, 15);
|
|
1003
|
+
} else {
|
|
1004
|
+
if (editable && !multiple && ((0, _utils.isEnableConf)(maskedConfig) || maskedOpts.enabled)) {
|
|
1005
|
+
handleMaskedSelectedDate(evnt, true);
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
triggerEvent(evnt);
|
|
1009
|
+
};
|
|
1010
|
+
const clickEvent = evnt => {
|
|
1011
|
+
const {
|
|
1012
|
+
editable,
|
|
1013
|
+
maskedConfig
|
|
1014
|
+
} = props;
|
|
1015
|
+
const maskedOpts = computeMaskedOpts.value;
|
|
1016
|
+
if (editable && ((0, _utils.isEnableConf)(maskedConfig) || maskedOpts.enabled)) {
|
|
1017
|
+
handleMaskedSelectedDate(evnt);
|
|
1018
|
+
}
|
|
1019
|
+
triggerEvent(evnt);
|
|
1020
|
+
};
|
|
480
1021
|
const keydownEvent = evnt => {
|
|
1022
|
+
const {
|
|
1023
|
+
type,
|
|
1024
|
+
editable,
|
|
1025
|
+
maskedConfig
|
|
1026
|
+
} = props;
|
|
1027
|
+
const {
|
|
1028
|
+
visiblePanel
|
|
1029
|
+
} = reactData;
|
|
1030
|
+
const maskedOpts = computeMaskedOpts.value;
|
|
1031
|
+
const isUpArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_UP);
|
|
1032
|
+
const isDwArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_DOWN);
|
|
1033
|
+
const isLtArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_LEFT);
|
|
1034
|
+
const isRtArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_RIGHT);
|
|
1035
|
+
const isEnter = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ENTER);
|
|
1036
|
+
if (editable) {
|
|
1037
|
+
if (isEnter) {
|
|
1038
|
+
const $datePanel = refDatePanel.value;
|
|
1039
|
+
const {
|
|
1040
|
+
inputLabel
|
|
1041
|
+
} = internalData;
|
|
1042
|
+
const targetElem = refInputTarget.value;
|
|
1043
|
+
if (visiblePanel) {
|
|
1044
|
+
hidePanel();
|
|
1045
|
+
}
|
|
1046
|
+
if ($datePanel) {
|
|
1047
|
+
$datePanel.checkValue(inputLabel);
|
|
1048
|
+
} else {
|
|
1049
|
+
afterCheckValue(inputLabel);
|
|
1050
|
+
}
|
|
1051
|
+
if (targetElem) {
|
|
1052
|
+
targetElem.blur();
|
|
1053
|
+
}
|
|
1054
|
+
} else if (maskedTypes.includes(type)) {
|
|
1055
|
+
if ((0, _utils.isEnableConf)(maskedConfig) || maskedOpts.enabled) {
|
|
1056
|
+
if (maskedOpts.isArrow && (isUpArrow || isDwArrow || isLtArrow || isRtArrow)) {
|
|
1057
|
+
handleArrowInputDate(evnt, isUpArrow, isDwArrow, isLtArrow, isRtArrow);
|
|
1058
|
+
} else if (maskedOpts.isMasked) {
|
|
1059
|
+
handleMaskedInputDate(evnt);
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
481
1064
|
triggerEvent(evnt);
|
|
482
1065
|
};
|
|
483
1066
|
const keyupEvent = evnt => {
|
|
@@ -511,7 +1094,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
511
1094
|
dispatchEvent('confirm', params, params.$event);
|
|
512
1095
|
};
|
|
513
1096
|
const panelRevertEvent = params => {
|
|
514
|
-
|
|
1097
|
+
handleInputLabel(params.label, true);
|
|
515
1098
|
};
|
|
516
1099
|
// 全局事件
|
|
517
1100
|
const handleGlobalMousedownEvent = evnt => {
|
|
@@ -524,12 +1107,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
524
1107
|
const panelWrapperElem = refPanelWrapper.value;
|
|
525
1108
|
const isDisabled = computeIsDisabled.value;
|
|
526
1109
|
if (!isDisabled && isActivated) {
|
|
527
|
-
|
|
528
|
-
if (
|
|
1110
|
+
const currActivated = (0, _dom.getEventTargetNode)(evnt, el).flag || (0, _dom.getEventTargetNode)(evnt, panelWrapperElem).flag;
|
|
1111
|
+
if (currActivated !== isActivated) {
|
|
1112
|
+
reactData.isActivated = currActivated;
|
|
1113
|
+
}
|
|
1114
|
+
if (!currActivated) {
|
|
529
1115
|
if (visiblePanel) {
|
|
530
1116
|
hidePanel();
|
|
1117
|
+
const {
|
|
1118
|
+
inputLabel
|
|
1119
|
+
} = internalData;
|
|
531
1120
|
if ($datePanel) {
|
|
532
|
-
$datePanel.checkValue(
|
|
1121
|
+
$datePanel.checkValue(inputLabel);
|
|
1122
|
+
} else {
|
|
1123
|
+
afterCheckValue(inputLabel);
|
|
533
1124
|
}
|
|
534
1125
|
}
|
|
535
1126
|
}
|
|
@@ -537,6 +1128,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
537
1128
|
};
|
|
538
1129
|
const handleGlobalKeydownEvent = evnt => {
|
|
539
1130
|
const {
|
|
1131
|
+
isActivated,
|
|
540
1132
|
visiblePanel
|
|
541
1133
|
} = reactData;
|
|
542
1134
|
const isDisabled = computeIsDisabled.value;
|
|
@@ -544,7 +1136,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
544
1136
|
const isTab = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.TAB);
|
|
545
1137
|
const isEsc = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ESCAPE);
|
|
546
1138
|
if (isTab) {
|
|
547
|
-
|
|
1139
|
+
if (isActivated) {
|
|
1140
|
+
reactData.isActivated = false;
|
|
1141
|
+
}
|
|
548
1142
|
}
|
|
549
1143
|
if (visiblePanel) {
|
|
550
1144
|
if (isEsc || isTab) {
|
|
@@ -583,7 +1177,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
583
1177
|
}
|
|
584
1178
|
if (visiblePanel || isActivated) {
|
|
585
1179
|
if ($datePanel) {
|
|
586
|
-
$datePanel.checkValue(
|
|
1180
|
+
$datePanel.checkValue(internalData.inputLabel);
|
|
587
1181
|
}
|
|
588
1182
|
const targetElem = refInputTarget.value;
|
|
589
1183
|
if (targetElem) {
|
|
@@ -618,6 +1212,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
618
1212
|
} = reactData;
|
|
619
1213
|
const targetElem = refInputTarget.value;
|
|
620
1214
|
const panelElem = refInputPanel.value;
|
|
1215
|
+
if (!panelElem) {
|
|
1216
|
+
return (0, _vue.nextTick)();
|
|
1217
|
+
}
|
|
621
1218
|
const btnTransfer = computeBtnTransfer.value;
|
|
622
1219
|
const popupOpts = computePopupOpts.value;
|
|
623
1220
|
const handleStyle = () => {
|
|
@@ -667,17 +1264,21 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
667
1264
|
}
|
|
668
1265
|
};
|
|
669
1266
|
const clickIconEvent = evnt => {
|
|
1267
|
+
const {
|
|
1268
|
+
visiblePanel
|
|
1269
|
+
} = reactData;
|
|
670
1270
|
const popupOpts = computePopupOpts.value;
|
|
671
1271
|
const {
|
|
672
1272
|
trigger
|
|
673
1273
|
} = popupOpts;
|
|
674
1274
|
if (!trigger || trigger === 'default' || trigger === 'icon') {
|
|
675
|
-
|
|
1275
|
+
if (visiblePanel) {
|
|
1276
|
+
hidePanel();
|
|
1277
|
+
} else {
|
|
1278
|
+
datePickerOpenEvent(evnt);
|
|
1279
|
+
}
|
|
676
1280
|
}
|
|
677
1281
|
};
|
|
678
|
-
const clickEvent = evnt => {
|
|
679
|
-
triggerEvent(evnt);
|
|
680
|
-
};
|
|
681
1282
|
const handleShortcutEvent = ({
|
|
682
1283
|
option,
|
|
683
1284
|
$event
|
|
@@ -728,7 +1329,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
728
1329
|
break;
|
|
729
1330
|
}
|
|
730
1331
|
default:
|
|
731
|
-
|
|
1332
|
+
errLog('vxe.error.notCommands', [code]);
|
|
732
1333
|
break;
|
|
733
1334
|
}
|
|
734
1335
|
}
|
|
@@ -802,6 +1403,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
802
1403
|
return (0, _ui.renderEmptyElement)($xeDatePicker);
|
|
803
1404
|
};
|
|
804
1405
|
const renderPanel = () => {
|
|
1406
|
+
const popupOpts = computePopupOpts.value;
|
|
1407
|
+
if (popupOpts.enabled === false) {
|
|
1408
|
+
return (0, _ui.renderEmptyElement)($xeDatePicker);
|
|
1409
|
+
}
|
|
805
1410
|
const {
|
|
806
1411
|
type,
|
|
807
1412
|
multiple,
|
|
@@ -823,7 +1428,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
823
1428
|
const isDateTimeType = computeIsDateTimeType.value;
|
|
824
1429
|
const shortcutList = computeShortcutList.value;
|
|
825
1430
|
const timeOpts = computeTimeOpts.value;
|
|
826
|
-
const popupOpts = computePopupOpts.value;
|
|
827
1431
|
const {
|
|
828
1432
|
position
|
|
829
1433
|
} = shortcutOpts;
|
|
@@ -976,10 +1580,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
976
1580
|
} = props;
|
|
977
1581
|
const {
|
|
978
1582
|
inputValue,
|
|
979
|
-
inputLabel,
|
|
980
1583
|
visiblePanel,
|
|
981
|
-
isActivated
|
|
1584
|
+
isActivated,
|
|
1585
|
+
labelFlag
|
|
982
1586
|
} = reactData;
|
|
1587
|
+
const {
|
|
1588
|
+
inputLabel
|
|
1589
|
+
} = internalData;
|
|
983
1590
|
const vSize = computeSize.value;
|
|
984
1591
|
const isDisabled = computeIsDisabled.value;
|
|
985
1592
|
const formReadonly = computeFormReadonly.value;
|
|
@@ -1012,7 +1619,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1012
1619
|
}, [(0, _vue.h)('input', {
|
|
1013
1620
|
ref: refInputTarget,
|
|
1014
1621
|
class: 'vxe-date-picker--inner',
|
|
1015
|
-
value: inputLabel,
|
|
1622
|
+
value: labelFlag ? inputLabel : '',
|
|
1016
1623
|
name,
|
|
1017
1624
|
type: 'text',
|
|
1018
1625
|
placeholder: inpPlaceholder,
|
|
@@ -1031,7 +1638,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1031
1638
|
renderPanel()]);
|
|
1032
1639
|
};
|
|
1033
1640
|
(0, _vue.watch)(computePanelLabel, val => {
|
|
1034
|
-
|
|
1641
|
+
handleInputLabel(val, true);
|
|
1035
1642
|
});
|
|
1036
1643
|
(0, _vue.watch)(() => props.modelValue, () => {
|
|
1037
1644
|
updateModelValue();
|
|
@@ -1043,6 +1650,21 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1043
1650
|
_ui.globalEvents.on($xeDatePicker, 'blur', handleGlobalBlurEvent);
|
|
1044
1651
|
_ui.globalEvents.on($xeDatePicker, 'resize', handleGlobalResizeEvent);
|
|
1045
1652
|
});
|
|
1653
|
+
(0, _vue.onMounted)(() => {
|
|
1654
|
+
const {
|
|
1655
|
+
type,
|
|
1656
|
+
multiple,
|
|
1657
|
+
maskedConfig
|
|
1658
|
+
} = props;
|
|
1659
|
+
if ((0, _utils.isEnableConf)(maskedConfig)) {
|
|
1660
|
+
if (multiple) {
|
|
1661
|
+
errLog('vxe.error.notSupportProp', ['multiple', 'control-config.enabled=true', 'control-config.enabled=false']);
|
|
1662
|
+
}
|
|
1663
|
+
if (!maskedTypes.includes(type)) {
|
|
1664
|
+
warnLog('vxe.error.notSupportProp', ['control-config.enabled=true', `type=${type}`, `type=${maskedTypes.join('|')}`]);
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
});
|
|
1046
1668
|
(0, _vue.onUnmounted)(() => {
|
|
1047
1669
|
_ui.globalEvents.off($xeDatePicker, 'mousewheel');
|
|
1048
1670
|
_ui.globalEvents.off($xeDatePicker, 'mousedown');
|