vxe-pc-ui 4.5.36 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/calendar/src/calendar.js +1 -1
- package/es/components.js +6 -0
- package/es/date-panel/index.js +12 -0
- package/es/date-panel/src/date-panel.js +1587 -0
- package/es/date-panel/src/util.js +191 -0
- package/es/date-panel/style.css +443 -0
- package/es/date-panel/style.min.css +1 -0
- package/es/date-picker/index.js +0 -1
- package/es/date-picker/src/date-picker.js +274 -1663
- package/es/date-picker/style.css +68 -810
- package/es/date-picker/style.min.css +1 -1
- package/es/date-range-picker/index.js +12 -0
- package/es/date-range-picker/src/date-range-picker.js +1121 -0
- package/es/date-range-picker/style.css +284 -0
- package/es/date-range-picker/style.min.css +1 -0
- package/es/form/render/index.js +21 -15
- package/es/icon/style.css +1 -1
- package/es/input/src/input.js +1 -1
- package/es/language/ar-EG.js +1 -1
- package/es/language/de-DE.js +1 -1
- package/es/language/en-US.js +1 -1
- package/es/language/es-ES.js +1 -1
- package/es/language/fr-FR.d.ts +2 -0
- package/es/language/fr-FR.js +1 -1
- package/es/language/hu-HU.js +1 -1
- package/es/language/hy-AM.d.ts +2 -0
- package/es/language/hy-AM.js +1 -1
- package/es/language/id-ID.d.ts +2 -0
- package/es/language/id-ID.js +1 -1
- package/es/language/it-IT.d.ts +2 -0
- package/es/language/it-IT.js +1 -1
- package/es/language/ja-JP.js +1 -1
- package/es/language/ko-KR.js +1 -1
- package/es/language/ms-MY.d.ts +2 -0
- package/es/language/ms-MY.js +708 -0
- package/es/language/nb-NO.d.ts +2 -0
- package/es/language/nb-NO.js +1 -1
- package/es/language/pt-BR.js +1 -1
- package/es/language/ru-RU.js +1 -1
- package/es/language/th-TH.d.ts +2 -0
- package/es/language/th-TH.js +1 -1
- package/es/language/ug-CN.d.ts +2 -0
- package/es/language/ug-CN.js +1 -1
- package/es/language/uk-UA.js +1 -1
- package/es/language/uz-UZ.d.ts +2 -0
- package/es/language/uz-UZ.js +708 -0
- package/es/language/vi-VN.d.ts +2 -0
- package/es/language/vi-VN.js +1 -1
- package/es/language/zh-CHT.d.ts +2 -0
- package/es/language/zh-CHT.js +1 -1
- package/es/language/zh-CN.js +1 -1
- package/es/print/src/print.js +4 -0
- package/es/print/src/util.js +46 -3
- package/es/pulldown/style.css +15 -0
- package/es/pulldown/style.min.css +1 -1
- package/es/select/style.css +15 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table-select/style.css +15 -0
- package/es/table-select/style.min.css +1 -1
- package/es/tree-select/style.css +15 -0
- package/es/tree-select/style.min.css +1 -1
- package/es/ui/index.js +31 -6
- package/es/ui/src/log.js +1 -1
- package/es/vxe-date-panel/index.js +3 -0
- package/es/vxe-date-panel/style.css +443 -0
- package/es/vxe-date-panel/style.min.css +1 -0
- package/es/vxe-date-picker/style.css +68 -810
- package/es/vxe-date-picker/style.min.css +1 -1
- package/es/vxe-date-range-picker/index.js +3 -0
- package/es/vxe-date-range-picker/style.css +284 -0
- package/es/vxe-date-range-picker/style.min.css +1 -0
- package/es/vxe-pulldown/style.css +15 -0
- package/es/vxe-pulldown/style.min.css +1 -1
- package/es/vxe-select/style.css +15 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-table-select/style.css +15 -0
- package/es/vxe-table-select/style.min.css +1 -1
- package/es/vxe-tree-select/style.css +15 -0
- package/es/vxe-tree-select/style.min.css +1 -1
- package/lib/calendar/src/calendar.js +1 -1
- package/lib/calendar/src/calendar.min.js +1 -1
- package/lib/components.js +25 -1
- package/lib/components.min.js +1 -1
- package/lib/date-panel/index.js +19 -0
- package/lib/date-panel/index.min.js +1 -0
- package/lib/date-panel/src/date-panel.js +1667 -0
- package/lib/date-panel/src/date-panel.min.js +1 -0
- package/lib/date-panel/src/util.js +219 -0
- package/lib/date-panel/src/util.min.js +1 -0
- package/lib/date-panel/style/index.js +1 -0
- package/lib/date-panel/style/style.css +443 -0
- package/lib/date-panel/style/style.min.css +1 -0
- package/lib/date-picker/index.js +0 -1
- package/lib/date-picker/index.min.js +1 -1
- package/lib/date-picker/src/date-picker.js +288 -1717
- package/lib/date-picker/src/date-picker.min.js +1 -1
- package/lib/date-picker/style/style.css +68 -810
- package/lib/date-picker/style/style.min.css +1 -1
- package/lib/date-range-picker/index.js +19 -0
- package/lib/date-range-picker/index.min.js +1 -0
- package/lib/date-range-picker/src/date-range-picker.js +1194 -0
- package/lib/date-range-picker/src/date-range-picker.min.js +1 -0
- package/lib/date-range-picker/style/index.js +1 -0
- package/lib/date-range-picker/style/style.css +284 -0
- package/lib/date-range-picker/style/style.min.css +1 -0
- package/lib/form/render/index.js +21 -15
- package/lib/form/render/index.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +2954 -1252
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +1 -1
- package/lib/input/src/input.min.js +1 -1
- package/lib/language/ar-EG.d.ts +2 -0
- package/lib/language/ar-EG.js +1 -1
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +728 -0
- package/lib/language/de-DE.d.ts +2 -0
- package/lib/language/de-DE.js +1 -1
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +728 -0
- package/lib/language/en-US.js +1 -1
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +1 -1
- package/lib/language/es-ES.js +1 -1
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +1 -1
- package/lib/language/fr-FR.d.ts +2 -0
- package/lib/language/fr-FR.js +1 -1
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +728 -0
- package/lib/language/hu-HU.js +1 -1
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +1 -1
- package/lib/language/hy-AM.d.ts +2 -0
- package/lib/language/hy-AM.js +1 -1
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +728 -0
- package/lib/language/id-ID.d.ts +2 -0
- package/lib/language/id-ID.js +1 -1
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +728 -0
- package/lib/language/it-IT.d.ts +2 -0
- package/lib/language/it-IT.js +1 -1
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +728 -0
- package/lib/language/ja-JP.js +1 -1
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +1 -1
- package/lib/language/ko-KR.js +1 -1
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +1 -1
- package/lib/language/ms-MY.d.ts +2 -0
- package/lib/language/ms-MY.js +714 -0
- package/lib/language/ms-MY.min.js +1 -0
- package/lib/language/ms-MY.umd.js +728 -0
- package/lib/language/nb-NO.d.ts +2 -0
- package/lib/language/nb-NO.js +1 -1
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +728 -0
- package/lib/language/pt-BR.js +1 -1
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +1 -1
- package/lib/language/ru-RU.js +1 -1
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +1 -1
- package/lib/language/th-TH.d.ts +2 -0
- package/lib/language/th-TH.js +1 -1
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +728 -0
- package/lib/language/ug-CN.d.ts +2 -0
- package/lib/language/ug-CN.js +1 -1
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +728 -0
- package/lib/language/uk-UA.js +1 -1
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +1 -1
- package/lib/language/uz-UZ.d.ts +2 -0
- package/lib/language/uz-UZ.js +714 -0
- package/lib/language/uz-UZ.min.js +1 -0
- package/lib/language/uz-UZ.umd.js +728 -0
- package/lib/language/vi-VN.d.ts +2 -0
- package/lib/language/vi-VN.js +1 -1
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +728 -0
- package/lib/language/zh-CHT.d.ts +2 -0
- package/lib/language/zh-CHT.js +1 -1
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +728 -0
- package/lib/language/zh-CN.js +1 -1
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +1 -1
- package/lib/language/zh-TC.min.js +1 -1
- package/lib/print/src/print.js +4 -0
- package/lib/print/src/print.min.js +1 -1
- package/lib/print/src/util.js +45 -2
- package/lib/print/src/util.min.js +1 -1
- package/lib/pulldown/style/style.css +15 -0
- package/lib/pulldown/style/style.min.css +1 -1
- package/lib/select/style/style.css +15 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table-select/style/style.css +15 -0
- package/lib/table-select/style/style.min.css +1 -1
- package/lib/tree-select/style/style.css +15 -0
- package/lib/tree-select/style/style.min.css +1 -1
- package/lib/ui/index.js +31 -6
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-date-panel/index.js +22 -0
- package/lib/vxe-date-panel/index.min.js +1 -0
- package/lib/vxe-date-panel/style/index.js +1 -0
- package/lib/vxe-date-panel/style/style.css +443 -0
- package/lib/vxe-date-panel/style/style.min.css +1 -0
- package/lib/vxe-date-picker/style/style.css +68 -810
- package/lib/vxe-date-picker/style/style.min.css +1 -1
- package/lib/vxe-date-range-picker/index.js +22 -0
- package/lib/vxe-date-range-picker/index.min.js +1 -0
- package/lib/vxe-date-range-picker/style/index.js +1 -0
- package/lib/vxe-date-range-picker/style/style.css +284 -0
- package/lib/vxe-date-range-picker/style/style.min.css +1 -0
- package/lib/vxe-pulldown/style/style.css +15 -0
- package/lib/vxe-pulldown/style/style.min.css +1 -1
- package/lib/vxe-select/style/style.css +15 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-table-select/style/style.css +15 -0
- package/lib/vxe-table-select/style/style.min.css +1 -1
- package/lib/vxe-tree-select/style/style.css +15 -0
- package/lib/vxe-tree-select/style/style.min.css +1 -1
- package/package.json +4 -5
- package/packages/calendar/src/calendar.ts +10 -10
- package/packages/components.ts +6 -0
- package/packages/date-panel/index.ts +16 -0
- package/packages/date-panel/src/date-panel.ts +1654 -0
- package/packages/date-panel/src/util.ts +212 -0
- package/packages/date-picker/index.ts +0 -1
- package/packages/date-picker/src/date-picker.ts +298 -1697
- package/packages/date-range-picker/index.ts +16 -0
- package/packages/date-range-picker/src/date-range-picker.ts +1196 -0
- package/packages/form/render/index.ts +21 -15
- package/packages/input/src/input.ts +15 -15
- package/packages/language/ar-EG.ts +1 -1
- package/packages/language/de-DE.ts +1 -1
- package/packages/language/en-US.ts +1 -1
- package/packages/language/es-ES.ts +1 -1
- package/packages/language/fr-FR.ts +1 -1
- package/packages/language/hu-HU.ts +1 -1
- package/packages/language/hy-AM.ts +1 -1
- package/packages/language/id-ID.ts +1 -1
- package/packages/language/it-IT.ts +1 -1
- package/packages/language/ja-JP.ts +1 -1
- package/packages/language/ko-KR.ts +1 -1
- package/packages/language/ms-MY.ts +708 -0
- package/packages/language/nb-NO.ts +1 -1
- package/packages/language/pt-BR.ts +1 -1
- package/packages/language/ru-RU.ts +1 -1
- package/packages/language/th-TH.ts +1 -1
- package/packages/language/ug-CN.ts +1 -1
- package/packages/language/uk-UA.ts +1 -1
- package/packages/language/uz-UZ.ts +708 -0
- package/packages/language/vi-VN.ts +1 -1
- package/packages/language/zh-CHT.ts +1 -1
- package/packages/language/zh-CN.ts +1 -1
- package/packages/print/src/print.ts +4 -0
- package/packages/print/src/util.ts +47 -4
- package/packages/ui/index.ts +30 -5
- package/styles/all.scss +2 -0
- package/styles/components/date-panel.scss +491 -0
- package/styles/components/date-picker.scss +62 -652
- package/styles/components/date-range-picker.scss +284 -0
- package/styles/components/pulldown.scss +10 -0
- package/styles/components/select.scss +8 -0
- package/styles/components/table-select.scss +8 -0
- package/styles/components/tree-select.scss +8 -0
- package/styles/helpers/baseMixin.scss +13 -0
- package/types/all.d.ts +6 -0
- package/types/components/button-group.d.ts +1 -1
- package/types/components/date-panel.d.ts +240 -0
- package/types/components/date-picker.d.ts +35 -142
- package/types/components/date-range-picker.d.ts +267 -0
- package/types/components/print.d.ts +8 -0
- package/types/ui/commands.d.ts +28 -2
- package/types/ui/global-config.d.ts +4 -0
- package/es/date-picker/src/util.js +0 -41
- package/lib/date-picker/src/util.js +0 -46
- package/lib/date-picker/src/util.min.js +0 -1
- package/lib/language/zh-TC.umd.js +0 -23
- package/packages/date-picker/src/util.ts +0 -42
- /package/es/icon/{iconfont.1746417522210.ttf → iconfont.1746782659171.ttf} +0 -0
- /package/es/icon/{iconfont.1746417522210.woff → iconfont.1746782659171.woff} +0 -0
- /package/es/icon/{iconfont.1746417522210.woff2 → iconfont.1746782659171.woff2} +0 -0
- /package/es/{iconfont.1746417522210.ttf → iconfont.1746782659171.ttf} +0 -0
- /package/es/{iconfont.1746417522210.woff → iconfont.1746782659171.woff} +0 -0
- /package/es/{iconfont.1746417522210.woff2 → iconfont.1746782659171.woff2} +0 -0
- /package/es/language/{zh-TC.d.ts → ar-EG.d.ts} +0 -0
- /package/{lib/language/zh-TC.d.ts → es/language/de-DE.d.ts} +0 -0
- /package/lib/icon/style/{iconfont.1746417522210.ttf → iconfont.1746782659171.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1746417522210.woff → iconfont.1746782659171.woff} +0 -0
- /package/lib/icon/style/{iconfont.1746417522210.woff2 → iconfont.1746782659171.woff2} +0 -0
- /package/lib/{iconfont.1746417522210.ttf → iconfont.1746782659171.ttf} +0 -0
- /package/lib/{iconfont.1746417522210.woff → iconfont.1746782659171.woff} +0 -0
- /package/lib/{iconfont.1746417522210.woff2 → iconfont.1746782659171.woff2} +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { defineComponent, h, Teleport, ref, computed, reactive, inject, nextTick, watch, onUnmounted
|
|
1
|
+
import { defineComponent, h, Teleport, ref, computed, provide, reactive, inject, nextTick, watch, onUnmounted } from 'vue';
|
|
2
2
|
import XEUtils from 'xe-utils';
|
|
3
|
-
import { getConfig, getIcon, getI18n,
|
|
3
|
+
import { getConfig, getIcon, getI18n, commands, createEvent, globalEvents, useSize, renderEmptyElement } from '../../ui';
|
|
4
4
|
import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
|
|
5
5
|
import { getAbsolutePos, getEventTargetNode } from '../../ui/src/dom';
|
|
6
|
-
import { toStringTimeDate, getDateQuarter } from './util';
|
|
7
6
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
7
|
+
import { parseDateObj, getDateByCode } from '../../date-panel/src/util';
|
|
8
|
+
import { errLog } from '../../ui/src/log';
|
|
9
|
+
import VxeDatePanelComponent from '../../date-panel/src/date-panel';
|
|
10
|
+
import VxeButtonComponent from '../../button/src/button';
|
|
8
11
|
import VxeButtonGroupComponent from '../../button/src/button-group';
|
|
9
12
|
export default defineComponent({
|
|
10
13
|
name: 'VxeDatePicker',
|
|
@@ -32,12 +35,10 @@ export default defineComponent({
|
|
|
32
35
|
default: null
|
|
33
36
|
},
|
|
34
37
|
placeholder: String,
|
|
35
|
-
maxLength: [String, Number],
|
|
36
38
|
autoComplete: {
|
|
37
39
|
type: String,
|
|
38
40
|
default: 'off'
|
|
39
41
|
},
|
|
40
|
-
align: String,
|
|
41
42
|
form: String,
|
|
42
43
|
className: String,
|
|
43
44
|
size: {
|
|
@@ -83,6 +84,18 @@ export default defineComponent({
|
|
|
83
84
|
type: [String, Number],
|
|
84
85
|
default: () => getConfig().datePicker.selectDay
|
|
85
86
|
},
|
|
87
|
+
showClearButton: {
|
|
88
|
+
type: Boolean,
|
|
89
|
+
default: () => getConfig().datePicker.showClearButton
|
|
90
|
+
},
|
|
91
|
+
showConfirmButton: {
|
|
92
|
+
type: Boolean,
|
|
93
|
+
default: () => getConfig().datePicker.showConfirmButton
|
|
94
|
+
},
|
|
95
|
+
autoClose: {
|
|
96
|
+
type: Boolean,
|
|
97
|
+
default: () => getConfig().datePicker.autoClose
|
|
98
|
+
},
|
|
86
99
|
prefixIcon: String,
|
|
87
100
|
suffixIcon: String,
|
|
88
101
|
placement: String,
|
|
@@ -92,11 +105,7 @@ export default defineComponent({
|
|
|
92
105
|
},
|
|
93
106
|
shortcutConfig: Object,
|
|
94
107
|
// 已废弃 startWeek,被 startDay 替换
|
|
95
|
-
startWeek: Number
|
|
96
|
-
// 已废弃
|
|
97
|
-
maxlength: [String, Number],
|
|
98
|
-
// 已废弃
|
|
99
|
-
autocomplete: String
|
|
108
|
+
startWeek: Number
|
|
100
109
|
},
|
|
101
110
|
emits: [
|
|
102
111
|
'update:modelValue',
|
|
@@ -133,24 +142,16 @@ export default defineComponent({
|
|
|
133
142
|
panelPlacement: '',
|
|
134
143
|
isActivated: false,
|
|
135
144
|
inputValue: '',
|
|
136
|
-
|
|
137
|
-
datePanelValue: null,
|
|
138
|
-
datePanelLabel: '',
|
|
139
|
-
datePanelType: 'day',
|
|
140
|
-
selectMonth: null,
|
|
141
|
-
currentDate: null
|
|
145
|
+
inputLabel: ''
|
|
142
146
|
});
|
|
143
147
|
const internalData = {
|
|
144
|
-
yearSize: 12,
|
|
145
|
-
monthSize: 20,
|
|
146
|
-
quarterSize: 8,
|
|
147
148
|
hpTimeout: undefined
|
|
148
149
|
};
|
|
149
150
|
const refElem = ref();
|
|
150
151
|
const refInputTarget = ref();
|
|
151
152
|
const refInputPanel = ref();
|
|
152
153
|
const refPanelWrapper = ref();
|
|
153
|
-
const
|
|
154
|
+
const refDatePanel = ref();
|
|
154
155
|
const refMaps = {
|
|
155
156
|
refElem,
|
|
156
157
|
refInput: refInputTarget
|
|
@@ -163,7 +164,6 @@ export default defineComponent({
|
|
|
163
164
|
internalData,
|
|
164
165
|
getRefMaps: () => refMaps
|
|
165
166
|
};
|
|
166
|
-
let datePickerMethods = {};
|
|
167
167
|
const computeBtnTransfer = computed(() => {
|
|
168
168
|
const { transfer } = props;
|
|
169
169
|
if (transfer === null) {
|
|
@@ -208,51 +208,44 @@ export default defineComponent({
|
|
|
208
208
|
const computeIsClearable = computed(() => {
|
|
209
209
|
return props.clearable;
|
|
210
210
|
});
|
|
211
|
-
const
|
|
212
|
-
|
|
211
|
+
const computeInputReadonly = computed(() => {
|
|
212
|
+
const { type, editable, multiple } = props;
|
|
213
|
+
const formReadonly = computeFormReadonly.value;
|
|
214
|
+
return formReadonly || multiple || !editable || type === 'week' || type === 'quarter';
|
|
215
|
+
});
|
|
216
|
+
const computeInpPlaceholder = computed(() => {
|
|
217
|
+
const { placeholder } = props;
|
|
218
|
+
if (placeholder) {
|
|
219
|
+
return getFuncText(placeholder);
|
|
220
|
+
}
|
|
221
|
+
const globalPlaceholder = getConfig().datePicker.placeholder;
|
|
222
|
+
if (globalPlaceholder) {
|
|
223
|
+
return getFuncText(globalPlaceholder);
|
|
224
|
+
}
|
|
225
|
+
return getI18n('vxe.base.pleaseSelect');
|
|
213
226
|
});
|
|
214
|
-
const
|
|
215
|
-
|
|
227
|
+
const computeInpImmediate = computed(() => {
|
|
228
|
+
const { immediate } = props;
|
|
229
|
+
return immediate;
|
|
216
230
|
});
|
|
217
|
-
const
|
|
218
|
-
return
|
|
231
|
+
const computeShortcutOpts = computed(() => {
|
|
232
|
+
return Object.assign({}, getConfig().datePicker.shortcutConfig, props.shortcutConfig);
|
|
219
233
|
});
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return date;
|
|
229
|
-
}
|
|
230
|
-
return date;
|
|
234
|
+
const computeShortcutList = computed(() => {
|
|
235
|
+
const shortcutOpts = computeShortcutOpts.value;
|
|
236
|
+
const { options } = shortcutOpts;
|
|
237
|
+
if (options) {
|
|
238
|
+
return options.map((option, index) => {
|
|
239
|
+
return Object.assign({
|
|
240
|
+
name: `${option.name || option.code || index}`
|
|
241
|
+
}, option);
|
|
231
242
|
});
|
|
232
243
|
}
|
|
233
244
|
return [];
|
|
234
245
|
});
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat));
|
|
239
|
-
});
|
|
240
|
-
const computeDateMultipleLabel = computed(() => {
|
|
241
|
-
const dateListValue = computeDateListValue.value;
|
|
242
|
-
const dateLabelFormat = computeDateLabelFormat.value;
|
|
243
|
-
return dateListValue.map(date => XEUtils.toDateString(date, dateLabelFormat)).join(', ');
|
|
244
|
-
});
|
|
245
|
-
const computeLimitMaxCount = computed(() => {
|
|
246
|
-
return props.multiple ? XEUtils.toNumber(props.limitCount) : 0;
|
|
247
|
-
});
|
|
248
|
-
const computeOverCount = computed(() => {
|
|
249
|
-
const { multiple } = props;
|
|
250
|
-
const limitMaxCount = computeLimitMaxCount.value;
|
|
251
|
-
const dateMultipleValue = computeDateMultipleValue.value;
|
|
252
|
-
if (multiple && limitMaxCount) {
|
|
253
|
-
return dateMultipleValue.length >= limitMaxCount;
|
|
254
|
-
}
|
|
255
|
-
return false;
|
|
246
|
+
const computeDateLabelFormat = computed(() => {
|
|
247
|
+
const { labelFormat } = props;
|
|
248
|
+
return labelFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`);
|
|
256
249
|
});
|
|
257
250
|
const computeDateValueFormat = computed(() => {
|
|
258
251
|
const { type, valueFormat } = props;
|
|
@@ -267,333 +260,28 @@ export default defineComponent({
|
|
|
267
260
|
}
|
|
268
261
|
return 'yyyy-MM-dd';
|
|
269
262
|
});
|
|
270
|
-
const computeDateValue = computed(() => {
|
|
271
|
-
const { modelValue } = props;
|
|
272
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
273
|
-
const dateValueFormat = computeDateValueFormat.value;
|
|
274
|
-
let val = null;
|
|
275
|
-
if (modelValue && isDatePickerType) {
|
|
276
|
-
const date = parseDate(modelValue, dateValueFormat);
|
|
277
|
-
if (XEUtils.isValidDate(date)) {
|
|
278
|
-
val = date;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
return val;
|
|
282
|
-
});
|
|
283
|
-
const computeIsDisabledPrevDateBtn = computed(() => {
|
|
284
|
-
const dateStartTime = computeDateStartTime.value;
|
|
285
|
-
const { selectMonth } = reactData;
|
|
286
|
-
if (selectMonth && dateStartTime) {
|
|
287
|
-
return selectMonth <= dateStartTime;
|
|
288
|
-
}
|
|
289
|
-
return false;
|
|
290
|
-
});
|
|
291
|
-
const computeIsDisabledNextDateBtn = computed(() => {
|
|
292
|
-
const dateEndTime = computeDateEndTime.value;
|
|
293
|
-
const { selectMonth } = reactData;
|
|
294
|
-
if (selectMonth && dateEndTime) {
|
|
295
|
-
return selectMonth >= dateEndTime;
|
|
296
|
-
}
|
|
297
|
-
return false;
|
|
298
|
-
});
|
|
299
|
-
const computeDateTimeLabel = computed(() => {
|
|
300
|
-
const { datetimePanelValue } = reactData;
|
|
301
|
-
const hasTimeSecond = computeHasTimeSecond.value;
|
|
302
|
-
if (datetimePanelValue) {
|
|
303
|
-
return XEUtils.toDateString(datetimePanelValue, hasTimeSecond ? 'HH:mm:ss' : 'HH:mm');
|
|
304
|
-
}
|
|
305
|
-
return '';
|
|
306
|
-
});
|
|
307
|
-
const computeDateHMSTime = computed(() => {
|
|
308
|
-
const dateValue = computeDateValue.value;
|
|
309
|
-
const isDateTimeType = computeIsDateTimeType.value;
|
|
310
|
-
return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0;
|
|
311
|
-
});
|
|
312
|
-
const computeDateLabelFormat = computed(() => {
|
|
313
|
-
const { labelFormat } = props;
|
|
314
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
315
|
-
if (isDatePickerType) {
|
|
316
|
-
return labelFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`);
|
|
317
|
-
}
|
|
318
|
-
return null;
|
|
319
|
-
});
|
|
320
|
-
const computeYearList = computed(() => {
|
|
321
|
-
const { yearSize } = internalData;
|
|
322
|
-
const { selectMonth, currentDate } = reactData;
|
|
323
|
-
const years = [];
|
|
324
|
-
if (selectMonth && currentDate) {
|
|
325
|
-
const currFullYear = currentDate.getFullYear();
|
|
326
|
-
const selectFullYear = selectMonth.getFullYear();
|
|
327
|
-
const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
|
|
328
|
-
for (let index = -4; index < yearSize + 4; index++) {
|
|
329
|
-
const date = XEUtils.getWhatYear(startYearDate, index, 'first');
|
|
330
|
-
const itemFullYear = date.getFullYear();
|
|
331
|
-
years.push({
|
|
332
|
-
date,
|
|
333
|
-
isCurrent: true,
|
|
334
|
-
isPrev: index < 0,
|
|
335
|
-
isNow: currFullYear === itemFullYear,
|
|
336
|
-
isNext: index >= yearSize,
|
|
337
|
-
year: itemFullYear
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
return years;
|
|
342
|
-
});
|
|
343
|
-
const computeSelectDatePanelObj = computed(() => {
|
|
344
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
345
|
-
let y = '';
|
|
346
|
-
let m = '';
|
|
347
|
-
if (isDatePickerType) {
|
|
348
|
-
const { datePanelType, selectMonth } = reactData;
|
|
349
|
-
const yearList = computeYearList.value;
|
|
350
|
-
let year = '';
|
|
351
|
-
let month;
|
|
352
|
-
if (selectMonth) {
|
|
353
|
-
year = selectMonth.getFullYear();
|
|
354
|
-
month = selectMonth.getMonth() + 1;
|
|
355
|
-
}
|
|
356
|
-
if (datePanelType === 'quarter' || datePanelType === 'month') {
|
|
357
|
-
y = getI18n('vxe.datePicker.yearTitle', [year]);
|
|
358
|
-
}
|
|
359
|
-
else if (datePanelType === 'year') {
|
|
360
|
-
y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : '';
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
363
|
-
y = getI18n('vxe.datePicker.yearTitle', [year]);
|
|
364
|
-
m = month ? getI18n(`vxe.input.date.m${month}`) : '-';
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
return {
|
|
368
|
-
y,
|
|
369
|
-
m
|
|
370
|
-
};
|
|
371
|
-
});
|
|
372
263
|
const computeFirstDayOfWeek = computed(() => {
|
|
373
|
-
const { startDay
|
|
374
|
-
return XEUtils.toNumber(
|
|
375
|
-
});
|
|
376
|
-
const computeWeekDatas = computed(() => {
|
|
377
|
-
const weeks = [];
|
|
378
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
379
|
-
if (isDatePickerType) {
|
|
380
|
-
let sWeek = computeFirstDayOfWeek.value;
|
|
381
|
-
weeks.push(sWeek);
|
|
382
|
-
for (let index = 0; index < 6; index++) {
|
|
383
|
-
if (sWeek >= 6) {
|
|
384
|
-
sWeek = 0;
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
sWeek++;
|
|
388
|
-
}
|
|
389
|
-
weeks.push(sWeek);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
return weeks;
|
|
393
|
-
});
|
|
394
|
-
const computeDateHeaders = computed(() => {
|
|
395
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
396
|
-
if (isDatePickerType) {
|
|
397
|
-
const weekDatas = computeWeekDatas.value;
|
|
398
|
-
return weekDatas.map((day) => {
|
|
399
|
-
return {
|
|
400
|
-
value: day,
|
|
401
|
-
label: getI18n(`vxe.input.date.weeks.w${day}`)
|
|
402
|
-
};
|
|
403
|
-
});
|
|
404
|
-
}
|
|
405
|
-
return [];
|
|
406
|
-
});
|
|
407
|
-
const computeWeekHeaders = computed(() => {
|
|
408
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
409
|
-
if (isDatePickerType) {
|
|
410
|
-
const dateHeaders = computeDateHeaders.value;
|
|
411
|
-
return [{ label: getI18n('vxe.input.date.weeks.w') }].concat(dateHeaders);
|
|
412
|
-
}
|
|
413
|
-
return [];
|
|
414
|
-
});
|
|
415
|
-
const computeYearDatas = computed(() => {
|
|
416
|
-
const yearList = computeYearList.value;
|
|
417
|
-
return XEUtils.chunk(yearList, 4);
|
|
418
|
-
});
|
|
419
|
-
const computeQuarterList = computed(() => {
|
|
420
|
-
const { quarterSize } = internalData;
|
|
421
|
-
const { selectMonth, currentDate } = reactData;
|
|
422
|
-
const quarters = [];
|
|
423
|
-
if (selectMonth && currentDate) {
|
|
424
|
-
const currFullYear = currentDate.getFullYear();
|
|
425
|
-
const currQuarter = getDateQuarter(currentDate);
|
|
426
|
-
const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first');
|
|
427
|
-
const selFullYear = firstYear.getFullYear();
|
|
428
|
-
for (let index = -2; index < quarterSize - 2; index++) {
|
|
429
|
-
const date = XEUtils.getWhatQuarter(firstYear, index);
|
|
430
|
-
const itemFullYear = date.getFullYear();
|
|
431
|
-
const itemQuarter = getDateQuarter(date);
|
|
432
|
-
const isPrev = itemFullYear < selFullYear;
|
|
433
|
-
quarters.push({
|
|
434
|
-
date,
|
|
435
|
-
isPrev,
|
|
436
|
-
isCurrent: itemFullYear === selFullYear,
|
|
437
|
-
isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
|
|
438
|
-
isNext: !isPrev && itemFullYear > selFullYear,
|
|
439
|
-
quarter: itemQuarter
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
return quarters;
|
|
444
|
-
});
|
|
445
|
-
const computeQuarterDatas = computed(() => {
|
|
446
|
-
const quarterList = computeQuarterList.value;
|
|
447
|
-
return XEUtils.chunk(quarterList, 2);
|
|
448
|
-
});
|
|
449
|
-
const computeMonthList = computed(() => {
|
|
450
|
-
const { monthSize } = internalData;
|
|
451
|
-
const { selectMonth, currentDate } = reactData;
|
|
452
|
-
const months = [];
|
|
453
|
-
if (selectMonth && currentDate) {
|
|
454
|
-
const currFullYear = currentDate.getFullYear();
|
|
455
|
-
const currMonth = currentDate.getMonth();
|
|
456
|
-
const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear();
|
|
457
|
-
for (let index = -4; index < monthSize - 4; index++) {
|
|
458
|
-
const date = XEUtils.getWhatYear(selectMonth, 0, index);
|
|
459
|
-
const itemFullYear = date.getFullYear();
|
|
460
|
-
const itemMonth = date.getMonth();
|
|
461
|
-
const isPrev = itemFullYear < selFullYear;
|
|
462
|
-
months.push({
|
|
463
|
-
date,
|
|
464
|
-
isPrev,
|
|
465
|
-
isCurrent: itemFullYear === selFullYear,
|
|
466
|
-
isNow: itemFullYear === currFullYear && itemMonth === currMonth,
|
|
467
|
-
isNext: !isPrev && itemFullYear > selFullYear,
|
|
468
|
-
month: itemMonth
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
return months;
|
|
473
|
-
});
|
|
474
|
-
const computeMonthDatas = computed(() => {
|
|
475
|
-
const monthList = computeMonthList.value;
|
|
476
|
-
return XEUtils.chunk(monthList, 4);
|
|
477
|
-
});
|
|
478
|
-
const computeDayList = computed(() => {
|
|
479
|
-
const { selectMonth, currentDate } = reactData;
|
|
480
|
-
const days = [];
|
|
481
|
-
if (selectMonth && currentDate) {
|
|
482
|
-
const dateHMSTime = computeDateHMSTime.value;
|
|
483
|
-
const weekDatas = computeWeekDatas.value;
|
|
484
|
-
const currFullYear = currentDate.getFullYear();
|
|
485
|
-
const currMonth = currentDate.getMonth();
|
|
486
|
-
const currDate = currentDate.getDate();
|
|
487
|
-
const selFullYear = selectMonth.getFullYear();
|
|
488
|
-
const selMonth = selectMonth.getMonth();
|
|
489
|
-
const selDay = selectMonth.getDay();
|
|
490
|
-
const prevOffsetDate = -weekDatas.indexOf(selDay);
|
|
491
|
-
const startDayDate = new Date(XEUtils.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime);
|
|
492
|
-
for (let index = 0; index < 42; index++) {
|
|
493
|
-
const date = XEUtils.getWhatDay(startDayDate, index);
|
|
494
|
-
const itemFullYear = date.getFullYear();
|
|
495
|
-
const itemMonth = date.getMonth();
|
|
496
|
-
const itemDate = date.getDate();
|
|
497
|
-
const isPrev = date < selectMonth;
|
|
498
|
-
days.push({
|
|
499
|
-
date,
|
|
500
|
-
isPrev,
|
|
501
|
-
isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
|
|
502
|
-
isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
|
|
503
|
-
isNext: !isPrev && selMonth !== itemMonth,
|
|
504
|
-
label: itemDate
|
|
505
|
-
});
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
return days;
|
|
264
|
+
const { startDay } = props;
|
|
265
|
+
return XEUtils.toNumber(startDay);
|
|
509
266
|
});
|
|
510
|
-
const
|
|
511
|
-
const
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
const computeWeekDates = computed(() => {
|
|
515
|
-
const dayDatas = computeDayDatas.value;
|
|
516
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
517
|
-
return dayDatas.map((list) => {
|
|
518
|
-
const firstItem = list[0];
|
|
519
|
-
const item = {
|
|
520
|
-
date: firstItem.date,
|
|
521
|
-
isWeekNumber: true,
|
|
522
|
-
isPrev: false,
|
|
523
|
-
isCurrent: false,
|
|
524
|
-
isNow: false,
|
|
525
|
-
isNext: false,
|
|
526
|
-
label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
|
|
527
|
-
};
|
|
528
|
-
return [item].concat(list);
|
|
529
|
-
});
|
|
530
|
-
});
|
|
531
|
-
const computeHourList = computed(() => {
|
|
532
|
-
const list = [];
|
|
533
|
-
const isDateTimeType = computeIsDateTimeType.value;
|
|
534
|
-
if (isDateTimeType) {
|
|
535
|
-
for (let index = 0; index < 24; index++) {
|
|
536
|
-
list.push({
|
|
537
|
-
value: index,
|
|
538
|
-
label: ('' + index).padStart(2, '0')
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
return list;
|
|
543
|
-
});
|
|
544
|
-
const computeMinuteList = computed(() => {
|
|
545
|
-
const list = [];
|
|
546
|
-
const isDateTimeType = computeIsDateTimeType.value;
|
|
547
|
-
if (isDateTimeType) {
|
|
548
|
-
for (let index = 0; index < 60; index++) {
|
|
549
|
-
list.push({
|
|
550
|
-
value: index,
|
|
551
|
-
label: ('' + index).padStart(2, '0')
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
return list;
|
|
556
|
-
});
|
|
557
|
-
const computeHasTimeMinute = computed(() => {
|
|
558
|
-
const dateValueFormat = computeDateValueFormat.value;
|
|
559
|
-
return !/HH/.test(dateValueFormat) || /mm/.test(dateValueFormat);
|
|
560
|
-
});
|
|
561
|
-
const computeHasTimeSecond = computed(() => {
|
|
267
|
+
const computePanelLabel = computed(() => {
|
|
268
|
+
const { type, multiple } = props;
|
|
269
|
+
const { inputValue } = reactData;
|
|
270
|
+
const dateLabelFormat = computeDateLabelFormat.value;
|
|
562
271
|
const dateValueFormat = computeDateValueFormat.value;
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
});
|
|
574
|
-
const computeDatePickerType = computed(() => {
|
|
575
|
-
return 'text';
|
|
576
|
-
});
|
|
577
|
-
const computeInpPlaceholder = computed(() => {
|
|
578
|
-
const { placeholder } = props;
|
|
579
|
-
if (placeholder) {
|
|
580
|
-
return getFuncText(placeholder);
|
|
581
|
-
}
|
|
582
|
-
const globalPlaceholder = getConfig().datePicker.placeholder;
|
|
583
|
-
if (globalPlaceholder) {
|
|
584
|
-
return getFuncText(globalPlaceholder);
|
|
585
|
-
}
|
|
586
|
-
return getI18n('vxe.base.pleaseSelect');
|
|
587
|
-
});
|
|
588
|
-
const computeInpImmediate = computed(() => {
|
|
589
|
-
const { immediate } = props;
|
|
590
|
-
return immediate;
|
|
591
|
-
});
|
|
592
|
-
const computeShortcutOpts = computed(() => {
|
|
593
|
-
return Object.assign({}, getConfig().datePicker.shortcutConfig, props.shortcutConfig);
|
|
272
|
+
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
273
|
+
const vals = inputValue ? (multiple ? inputValue.split(',') : [inputValue]) : [];
|
|
274
|
+
return vals.map(val => {
|
|
275
|
+
const dateObj = parseDateObj(val, type, {
|
|
276
|
+
valueFormat: dateValueFormat,
|
|
277
|
+
labelFormat: dateLabelFormat,
|
|
278
|
+
firstDay: firstDayOfWeek
|
|
279
|
+
});
|
|
280
|
+
return dateObj.label;
|
|
281
|
+
}).join(', ');
|
|
594
282
|
});
|
|
595
|
-
const updateModelValue = (
|
|
596
|
-
const {
|
|
283
|
+
const updateModelValue = () => {
|
|
284
|
+
const { modelValue } = props;
|
|
597
285
|
let val = '';
|
|
598
286
|
if (modelValue) {
|
|
599
287
|
if (XEUtils.isNumber(modelValue) && /^[0-9]{11,15}$/.test(`${modelValue}`)) {
|
|
@@ -604,31 +292,16 @@ export default defineComponent({
|
|
|
604
292
|
}
|
|
605
293
|
}
|
|
606
294
|
reactData.inputValue = val;
|
|
607
|
-
if (isActivated && visiblePanel) {
|
|
608
|
-
dateOpenPanel();
|
|
609
|
-
}
|
|
610
|
-
};
|
|
611
|
-
const parseDate = (value, format) => {
|
|
612
|
-
const { type, multiple } = props;
|
|
613
|
-
if (type === 'time') {
|
|
614
|
-
return toStringTimeDate(value);
|
|
615
|
-
}
|
|
616
|
-
if (XEUtils.isArray(value)) {
|
|
617
|
-
return XEUtils.toStringDate(value[0], format);
|
|
618
|
-
}
|
|
619
|
-
if (XEUtils.isString(value)) {
|
|
620
|
-
return XEUtils.toStringDate(multiple ? XEUtils.last(value.split(',')) : value, format);
|
|
621
|
-
}
|
|
622
|
-
return XEUtils.toStringDate(value, format);
|
|
623
295
|
};
|
|
624
296
|
const triggerEvent = (evnt) => {
|
|
625
297
|
const { inputValue } = reactData;
|
|
626
298
|
dispatchEvent(evnt.type, { value: inputValue }, evnt);
|
|
627
299
|
};
|
|
628
300
|
const handleChange = (value, evnt) => {
|
|
301
|
+
const { modelValue } = props;
|
|
629
302
|
reactData.inputValue = value;
|
|
630
303
|
emit('update:modelValue', value);
|
|
631
|
-
if (XEUtils.toValueString(
|
|
304
|
+
if (XEUtils.toValueString(modelValue) !== value) {
|
|
632
305
|
dispatchEvent('change', { value }, evnt);
|
|
633
306
|
// 自动更新校验状态
|
|
634
307
|
if ($xeForm && formItemInfo) {
|
|
@@ -637,19 +310,10 @@ export default defineComponent({
|
|
|
637
310
|
}
|
|
638
311
|
};
|
|
639
312
|
const inputEvent = (evnt) => {
|
|
640
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
641
|
-
const inpImmediate = computeInpImmediate.value;
|
|
642
313
|
const inputElem = evnt.target;
|
|
643
314
|
const value = inputElem.value;
|
|
644
|
-
reactData.
|
|
645
|
-
|
|
646
|
-
if (inpImmediate) {
|
|
647
|
-
handleChange(value, evnt);
|
|
648
|
-
}
|
|
649
|
-
else {
|
|
650
|
-
dispatchEvent('input', { value }, evnt);
|
|
651
|
-
}
|
|
652
|
-
}
|
|
315
|
+
reactData.inputLabel = value;
|
|
316
|
+
dispatchEvent('input', { value }, evnt);
|
|
653
317
|
};
|
|
654
318
|
const changeEvent = (evnt) => {
|
|
655
319
|
const inpImmediate = computeInpImmediate.value;
|
|
@@ -696,665 +360,97 @@ export default defineComponent({
|
|
|
696
360
|
dispatchEvent('suffix-click', { value: inputValue }, evnt);
|
|
697
361
|
}
|
|
698
362
|
};
|
|
699
|
-
const dateParseValue = (value) => {
|
|
700
|
-
const { type } = props;
|
|
701
|
-
const dateLabelFormat = computeDateLabelFormat.value;
|
|
702
|
-
const dateValueFormat = computeDateValueFormat.value;
|
|
703
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
704
|
-
let dValue = null;
|
|
705
|
-
let dLabel = '';
|
|
706
|
-
if (value) {
|
|
707
|
-
dValue = parseDate(value, dateValueFormat);
|
|
708
|
-
}
|
|
709
|
-
if (XEUtils.isValidDate(dValue)) {
|
|
710
|
-
dLabel = XEUtils.toDateString(dValue, dateLabelFormat, { firstDay: firstDayOfWeek });
|
|
711
|
-
// 周选择器,由于年份和第几周是冲突的行为,所以需要特殊处理,判断是否跨年,例如
|
|
712
|
-
// '2024-12-31' 'yyyy-MM-dd W' >> '2024-12-31 1'
|
|
713
|
-
// '2025-01-01' 'yyyy-MM-dd W' >> '2025-01-01 1'
|
|
714
|
-
if (dateLabelFormat && type === 'week') {
|
|
715
|
-
const weekNum = XEUtils.getYearWeek(dValue, firstDayOfWeek);
|
|
716
|
-
const weekDate = XEUtils.getWhatWeek(dValue, 0, weekNum === 1 ? ((6 + firstDayOfWeek) % 7) : firstDayOfWeek, firstDayOfWeek);
|
|
717
|
-
const weekFullYear = weekDate.getFullYear();
|
|
718
|
-
if (weekFullYear !== dValue.getFullYear()) {
|
|
719
|
-
const yyIndex = dateLabelFormat.indexOf('yyyy');
|
|
720
|
-
if (yyIndex > -1) {
|
|
721
|
-
const yyNum = Number(dLabel.substring(yyIndex, yyIndex + 4));
|
|
722
|
-
if (yyNum && !isNaN(yyNum)) {
|
|
723
|
-
dLabel = dLabel.replace(`${yyNum}`, `${weekFullYear}`);
|
|
724
|
-
}
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
else {
|
|
730
|
-
dValue = null;
|
|
731
|
-
}
|
|
732
|
-
reactData.datePanelValue = dValue;
|
|
733
|
-
reactData.datePanelLabel = dLabel;
|
|
734
|
-
};
|
|
735
|
-
/**
|
|
736
|
-
* 值变化时处理
|
|
737
|
-
*/
|
|
738
|
-
const changeValue = () => {
|
|
739
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
740
|
-
const { inputValue } = reactData;
|
|
741
|
-
if (isDatePickerType) {
|
|
742
|
-
dateParseValue(inputValue);
|
|
743
|
-
reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
|
|
744
|
-
}
|
|
745
|
-
};
|
|
746
|
-
/**
|
|
747
|
-
* 检查初始值
|
|
748
|
-
*/
|
|
749
|
-
const initValue = () => {
|
|
750
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
751
|
-
updateModelValue(props.modelValue);
|
|
752
|
-
if (isDatePickerType) {
|
|
753
|
-
changeValue();
|
|
754
|
-
}
|
|
755
|
-
};
|
|
756
|
-
const dateRevert = () => {
|
|
757
|
-
reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
|
|
758
|
-
};
|
|
759
|
-
const dateCheckMonth = (date) => {
|
|
760
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
761
|
-
const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek);
|
|
762
|
-
const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
|
|
763
|
-
const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, 0, 'first');
|
|
764
|
-
if (!XEUtils.isEqual(month, reactData.selectMonth)) {
|
|
765
|
-
reactData.selectMonth = month;
|
|
766
|
-
}
|
|
767
|
-
};
|
|
768
|
-
const dateChange = (date, isReload) => {
|
|
769
|
-
const { modelValue, multiple } = props;
|
|
770
|
-
const { datetimePanelValue } = reactData;
|
|
771
|
-
const isDateTimeType = computeIsDateTimeType.value;
|
|
772
|
-
const dateValueFormat = computeDateValueFormat.value;
|
|
773
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
774
|
-
if (props.type === 'week') {
|
|
775
|
-
const sWeek = XEUtils.toNumber(props.selectDay);
|
|
776
|
-
date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
|
|
777
|
-
}
|
|
778
|
-
else if (isDateTimeType) {
|
|
779
|
-
if (datetimePanelValue) {
|
|
780
|
-
date.setHours(datetimePanelValue.getHours());
|
|
781
|
-
date.setMinutes(datetimePanelValue.getMinutes());
|
|
782
|
-
date.setSeconds(datetimePanelValue.getSeconds());
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek });
|
|
786
|
-
dateCheckMonth(date);
|
|
787
|
-
if (multiple) {
|
|
788
|
-
const overCount = computeOverCount.value;
|
|
789
|
-
// 如果为多选
|
|
790
|
-
if (isDateTimeType) {
|
|
791
|
-
// 如果是datetime特殊类型
|
|
792
|
-
const dateListValue = isReload ? [] : [...computeDateListValue.value];
|
|
793
|
-
const datetimeRest = [];
|
|
794
|
-
const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'));
|
|
795
|
-
if (eqIndex === -1) {
|
|
796
|
-
if (overCount) {
|
|
797
|
-
// 如果超出最大多选数量
|
|
798
|
-
return;
|
|
799
|
-
}
|
|
800
|
-
dateListValue.push(date);
|
|
801
|
-
}
|
|
802
|
-
else {
|
|
803
|
-
dateListValue.splice(eqIndex, 1);
|
|
804
|
-
}
|
|
805
|
-
dateListValue.forEach(item => {
|
|
806
|
-
if (item) {
|
|
807
|
-
if (datetimePanelValue) {
|
|
808
|
-
item.setHours(datetimePanelValue.getHours());
|
|
809
|
-
item.setMinutes(datetimePanelValue.getMinutes());
|
|
810
|
-
item.setSeconds(datetimePanelValue.getSeconds());
|
|
811
|
-
}
|
|
812
|
-
datetimeRest.push(item);
|
|
813
|
-
}
|
|
814
|
-
});
|
|
815
|
-
handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' });
|
|
816
|
-
}
|
|
817
|
-
else {
|
|
818
|
-
const dateMultipleValue = isReload ? [] : computeDateMultipleValue.value;
|
|
819
|
-
// 如果是日期类型
|
|
820
|
-
if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
|
|
821
|
-
handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' });
|
|
822
|
-
}
|
|
823
|
-
else {
|
|
824
|
-
if (overCount) {
|
|
825
|
-
// 如果超出最大多选数量
|
|
826
|
-
return;
|
|
827
|
-
}
|
|
828
|
-
handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' });
|
|
829
|
-
}
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
else {
|
|
833
|
-
// 如果为单选
|
|
834
|
-
if (!XEUtils.isEqual(modelValue, inpVal)) {
|
|
835
|
-
handleChange(inpVal, { type: 'update' });
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
};
|
|
839
|
-
const afterCheckValue = () => {
|
|
840
|
-
const { type } = props;
|
|
841
|
-
const { inputValue, datetimePanelValue } = reactData;
|
|
842
|
-
const dateLabelFormat = computeDateLabelFormat.value;
|
|
843
|
-
const inputReadonly = computeInputReadonly.value;
|
|
844
|
-
if (!inputReadonly) {
|
|
845
|
-
if (inputValue) {
|
|
846
|
-
let inpDateVal = parseDate(inputValue, dateLabelFormat);
|
|
847
|
-
if (XEUtils.isValidDate(inpDateVal)) {
|
|
848
|
-
if (type === 'time') {
|
|
849
|
-
inpDateVal = XEUtils.toDateString(inpDateVal, dateLabelFormat);
|
|
850
|
-
if (inputValue !== inpDateVal) {
|
|
851
|
-
handleChange(inpDateVal, { type: 'check' });
|
|
852
|
-
}
|
|
853
|
-
reactData.inputValue = inpDateVal;
|
|
854
|
-
}
|
|
855
|
-
else {
|
|
856
|
-
let isChange = false;
|
|
857
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
858
|
-
if (type === 'datetime') {
|
|
859
|
-
const dateValue = computeDateValue.value;
|
|
860
|
-
if (inputValue !== XEUtils.toDateString(dateValue, dateLabelFormat) || inputValue !== XEUtils.toDateString(inpDateVal, dateLabelFormat)) {
|
|
861
|
-
isChange = true;
|
|
862
|
-
if (datetimePanelValue) {
|
|
863
|
-
datetimePanelValue.setHours(inpDateVal.getHours());
|
|
864
|
-
datetimePanelValue.setMinutes(inpDateVal.getMinutes());
|
|
865
|
-
datetimePanelValue.setSeconds(inpDateVal.getSeconds());
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
870
|
-
isChange = true;
|
|
871
|
-
}
|
|
872
|
-
reactData.inputValue = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek });
|
|
873
|
-
if (isChange) {
|
|
874
|
-
dateChange(inpDateVal);
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
else {
|
|
879
|
-
dateRevert();
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
else {
|
|
883
|
-
handleChange('', { type: 'check' });
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
};
|
|
887
363
|
const blurEvent = (evnt) => {
|
|
364
|
+
const $datePanel = refDatePanel.value;
|
|
888
365
|
const { inputValue } = reactData;
|
|
889
366
|
const inpImmediate = computeInpImmediate.value;
|
|
890
367
|
const value = inputValue;
|
|
891
368
|
if (!inpImmediate) {
|
|
892
369
|
handleChange(value, evnt);
|
|
893
370
|
}
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
reactData.isActivated = false;
|
|
897
|
-
}
|
|
898
|
-
dispatchEvent('blur', { value }, evnt);
|
|
899
|
-
// 自动更新校验状态
|
|
900
|
-
if ($xeForm && formItemInfo) {
|
|
901
|
-
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
|
|
902
|
-
}
|
|
903
|
-
};
|
|
904
|
-
const keydownEvent = (evnt) => {
|
|
905
|
-
triggerEvent(evnt);
|
|
906
|
-
};
|
|
907
|
-
const keyupEvent = (evnt) => {
|
|
908
|
-
triggerEvent(evnt);
|
|
909
|
-
};
|
|
910
|
-
// 日期
|
|
911
|
-
const dateMonthHandle = (date, offsetMonth) => {
|
|
912
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
913
|
-
const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek);
|
|
914
|
-
const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
|
|
915
|
-
const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, offsetMonth, 'first');
|
|
916
|
-
reactData.selectMonth = month;
|
|
917
|
-
};
|
|
918
|
-
const dateNowHandle = () => {
|
|
919
|
-
const { type } = props;
|
|
920
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
921
|
-
let currentDate = new Date();
|
|
922
|
-
switch (type) {
|
|
923
|
-
case 'week':
|
|
924
|
-
currentDate = XEUtils.getWhatWeek(currentDate, 0, firstDayOfWeek);
|
|
925
|
-
break;
|
|
926
|
-
case 'datetime':
|
|
927
|
-
currentDate = new Date();
|
|
928
|
-
reactData.datetimePanelValue = new Date();
|
|
929
|
-
break;
|
|
930
|
-
default:
|
|
931
|
-
currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first');
|
|
932
|
-
break;
|
|
933
|
-
}
|
|
934
|
-
reactData.currentDate = currentDate;
|
|
935
|
-
dateMonthHandle(currentDate, 0);
|
|
936
|
-
};
|
|
937
|
-
const dateToggleYearTypeEvent = () => {
|
|
938
|
-
reactData.datePanelType = 'year';
|
|
939
|
-
};
|
|
940
|
-
const dateToggleMonthTypeEvent = () => {
|
|
941
|
-
let { datePanelType } = reactData;
|
|
942
|
-
if (datePanelType === 'month' || datePanelType === 'quarter') {
|
|
943
|
-
datePanelType = 'year';
|
|
944
|
-
}
|
|
945
|
-
else {
|
|
946
|
-
datePanelType = 'month';
|
|
947
|
-
}
|
|
948
|
-
reactData.datePanelType = datePanelType;
|
|
949
|
-
};
|
|
950
|
-
const datePrevEvent = (evnt) => {
|
|
951
|
-
const { type } = props;
|
|
952
|
-
const { datePanelType, selectMonth, inputValue } = reactData;
|
|
953
|
-
const { yearSize } = internalData;
|
|
954
|
-
const value = inputValue;
|
|
955
|
-
const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
|
|
956
|
-
if (!isDisabledPrevDateBtn) {
|
|
957
|
-
let viewDate;
|
|
958
|
-
if (type === 'year') {
|
|
959
|
-
viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first');
|
|
960
|
-
}
|
|
961
|
-
else if (type === 'month' || type === 'quarter') {
|
|
962
|
-
if (datePanelType === 'year') {
|
|
963
|
-
viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first');
|
|
964
|
-
}
|
|
965
|
-
else {
|
|
966
|
-
viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first');
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
else {
|
|
970
|
-
if (datePanelType === 'year') {
|
|
971
|
-
viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first');
|
|
972
|
-
}
|
|
973
|
-
else if (datePanelType === 'month') {
|
|
974
|
-
viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first');
|
|
975
|
-
}
|
|
976
|
-
else {
|
|
977
|
-
viewDate = XEUtils.getWhatMonth(selectMonth, -1, 'first');
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
reactData.selectMonth = viewDate;
|
|
981
|
-
dispatchEvent('date-prev', { viewType: datePanelType, viewDate, value, type }, evnt);
|
|
982
|
-
}
|
|
983
|
-
};
|
|
984
|
-
const dateTodayMonthEvent = (evnt) => {
|
|
985
|
-
dateNowHandle();
|
|
986
|
-
dateChange(reactData.currentDate, true);
|
|
987
|
-
if (!props.multiple) {
|
|
988
|
-
hidePanel();
|
|
989
|
-
}
|
|
990
|
-
dispatchEvent('date-today', { type: props.type }, evnt);
|
|
991
|
-
};
|
|
992
|
-
const dateNextEvent = (evnt) => {
|
|
993
|
-
const { type } = props;
|
|
994
|
-
const { datePanelType, selectMonth, inputValue } = reactData;
|
|
995
|
-
const { yearSize } = internalData;
|
|
996
|
-
const value = inputValue;
|
|
997
|
-
const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
|
|
998
|
-
if (!isDisabledNextDateBtn) {
|
|
999
|
-
let viewDate;
|
|
1000
|
-
if (type === 'year') {
|
|
1001
|
-
viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first');
|
|
1002
|
-
}
|
|
1003
|
-
else if (type === 'month' || type === 'quarter') {
|
|
1004
|
-
if (datePanelType === 'year') {
|
|
1005
|
-
viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first');
|
|
1006
|
-
}
|
|
1007
|
-
else {
|
|
1008
|
-
viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first');
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
else {
|
|
1012
|
-
if (datePanelType === 'year') {
|
|
1013
|
-
viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first');
|
|
1014
|
-
}
|
|
1015
|
-
else if (datePanelType === 'month') {
|
|
1016
|
-
viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first');
|
|
1017
|
-
}
|
|
1018
|
-
else {
|
|
1019
|
-
viewDate = XEUtils.getWhatMonth(selectMonth, 1, 'first');
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
reactData.selectMonth = viewDate;
|
|
1023
|
-
dispatchEvent('date-next', { viewType: datePanelType, value, type }, evnt);
|
|
1024
|
-
}
|
|
1025
|
-
};
|
|
1026
|
-
const isDateDisabled = (item) => {
|
|
1027
|
-
const { disabledMethod } = props;
|
|
1028
|
-
const { datePanelType } = reactData;
|
|
1029
|
-
const dateStartTime = computeDateStartTime.value;
|
|
1030
|
-
const dateEndTime = computeDateEndTime.value;
|
|
1031
|
-
const { date } = item;
|
|
1032
|
-
if (dateStartTime && dateStartTime.getTime() > date.getTime()) {
|
|
1033
|
-
return true;
|
|
1034
|
-
}
|
|
1035
|
-
if (dateEndTime && dateEndTime.getTime() < date.getTime()) {
|
|
1036
|
-
return true;
|
|
1037
|
-
}
|
|
1038
|
-
if (disabledMethod) {
|
|
1039
|
-
return disabledMethod({ type: datePanelType, viewType: datePanelType, date, $datePicker: $xeDatePicker });
|
|
1040
|
-
}
|
|
1041
|
-
return false;
|
|
1042
|
-
};
|
|
1043
|
-
const dateSelectItem = (date) => {
|
|
1044
|
-
const { type, multiple } = props;
|
|
1045
|
-
const { datePanelType } = reactData;
|
|
1046
|
-
if (type === 'month') {
|
|
1047
|
-
if (datePanelType === 'year') {
|
|
1048
|
-
reactData.datePanelType = 'month';
|
|
1049
|
-
dateCheckMonth(date);
|
|
1050
|
-
}
|
|
1051
|
-
else {
|
|
1052
|
-
dateChange(date);
|
|
1053
|
-
if (!multiple) {
|
|
1054
|
-
hidePanel();
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
}
|
|
1058
|
-
else if (type === 'year') {
|
|
1059
|
-
dateChange(date);
|
|
1060
|
-
if (!multiple) {
|
|
1061
|
-
hidePanel();
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
else if (type === 'quarter') {
|
|
1065
|
-
if (datePanelType === 'year') {
|
|
1066
|
-
reactData.datePanelType = 'quarter';
|
|
1067
|
-
dateCheckMonth(date);
|
|
1068
|
-
}
|
|
1069
|
-
else {
|
|
1070
|
-
dateChange(date);
|
|
1071
|
-
if (!multiple) {
|
|
1072
|
-
hidePanel();
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
else {
|
|
1077
|
-
if (datePanelType === 'month') {
|
|
1078
|
-
reactData.datePanelType = type === 'week' ? type : 'day';
|
|
1079
|
-
dateCheckMonth(date);
|
|
1080
|
-
}
|
|
1081
|
-
else if (datePanelType === 'year') {
|
|
1082
|
-
reactData.datePanelType = 'month';
|
|
1083
|
-
dateCheckMonth(date);
|
|
1084
|
-
}
|
|
1085
|
-
else {
|
|
1086
|
-
dateChange(date);
|
|
1087
|
-
if (type === 'datetime') {
|
|
1088
|
-
// 日期带时间
|
|
1089
|
-
}
|
|
1090
|
-
else {
|
|
1091
|
-
if (!multiple) {
|
|
1092
|
-
hidePanel();
|
|
1093
|
-
}
|
|
1094
|
-
}
|
|
1095
|
-
}
|
|
1096
|
-
}
|
|
1097
|
-
};
|
|
1098
|
-
const dateSelectEvent = (item) => {
|
|
1099
|
-
if (!isDateDisabled(item)) {
|
|
1100
|
-
dateSelectItem(item.date);
|
|
1101
|
-
}
|
|
1102
|
-
};
|
|
1103
|
-
const dateMoveDay = (offsetDay) => {
|
|
1104
|
-
if (!isDateDisabled({ date: offsetDay })) {
|
|
1105
|
-
const dayList = computeDayList.value;
|
|
1106
|
-
if (!dayList.some((item) => XEUtils.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
|
|
1107
|
-
dateCheckMonth(offsetDay);
|
|
1108
|
-
}
|
|
1109
|
-
dateParseValue(offsetDay);
|
|
1110
|
-
}
|
|
1111
|
-
};
|
|
1112
|
-
const dateMoveYear = (offsetYear) => {
|
|
1113
|
-
if (!isDateDisabled({ date: offsetYear })) {
|
|
1114
|
-
const yearList = computeYearList.value;
|
|
1115
|
-
if (!yearList.some((item) => XEUtils.isDateSame(item.date, offsetYear, 'yyyy'))) {
|
|
1116
|
-
dateCheckMonth(offsetYear);
|
|
1117
|
-
}
|
|
1118
|
-
dateParseValue(offsetYear);
|
|
1119
|
-
}
|
|
1120
|
-
};
|
|
1121
|
-
const dateMoveQuarter = (offsetQuarter) => {
|
|
1122
|
-
if (!isDateDisabled({ date: offsetQuarter })) {
|
|
1123
|
-
const quarterList = computeQuarterList.value;
|
|
1124
|
-
if (!quarterList.some((item) => XEUtils.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
|
|
1125
|
-
dateCheckMonth(offsetQuarter);
|
|
1126
|
-
}
|
|
1127
|
-
dateParseValue(offsetQuarter);
|
|
1128
|
-
}
|
|
1129
|
-
};
|
|
1130
|
-
const dateMoveMonth = (offsetMonth) => {
|
|
1131
|
-
if (!isDateDisabled({ date: offsetMonth })) {
|
|
1132
|
-
const monthList = computeMonthList.value;
|
|
1133
|
-
if (!monthList.some((item) => XEUtils.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
|
|
1134
|
-
dateCheckMonth(offsetMonth);
|
|
1135
|
-
}
|
|
1136
|
-
dateParseValue(offsetMonth);
|
|
371
|
+
if (!reactData.visiblePanel) {
|
|
372
|
+
reactData.isActivated = false;
|
|
1137
373
|
}
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
if (!isDateDisabled(item)) {
|
|
1141
|
-
const { datePanelType } = reactData;
|
|
1142
|
-
if (datePanelType === 'month') {
|
|
1143
|
-
dateMoveMonth(item.date);
|
|
1144
|
-
}
|
|
1145
|
-
else if (datePanelType === 'quarter') {
|
|
1146
|
-
dateMoveQuarter(item.date);
|
|
1147
|
-
}
|
|
1148
|
-
else if (datePanelType === 'year') {
|
|
1149
|
-
dateMoveYear(item.date);
|
|
1150
|
-
}
|
|
1151
|
-
else {
|
|
1152
|
-
dateMoveDay(item.date);
|
|
1153
|
-
}
|
|
374
|
+
if ($datePanel) {
|
|
375
|
+
$datePanel.checkValue(reactData.inputLabel);
|
|
1154
376
|
}
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
if (
|
|
1158
|
-
|
|
1159
|
-
const ulElem = liElem.parentNode;
|
|
1160
|
-
ulElem.scrollTop = liElem.offsetTop - height * 4;
|
|
377
|
+
dispatchEvent('blur', { value }, evnt);
|
|
378
|
+
// 自动更新校验状态
|
|
379
|
+
if ($xeForm && formItemInfo) {
|
|
380
|
+
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
|
|
1161
381
|
}
|
|
1162
382
|
};
|
|
1163
|
-
const
|
|
1164
|
-
|
|
1165
|
-
reactData.datetimePanelValue = datetimePanelValue ? new Date(datetimePanelValue.getTime()) : new Date();
|
|
1166
|
-
updateTimePos(evnt.currentTarget);
|
|
383
|
+
const keydownEvent = (evnt) => {
|
|
384
|
+
triggerEvent(evnt);
|
|
1167
385
|
};
|
|
1168
|
-
const
|
|
1169
|
-
|
|
1170
|
-
if (datetimePanelValue) {
|
|
1171
|
-
datetimePanelValue.setHours(item.value);
|
|
1172
|
-
}
|
|
1173
|
-
dateTimeChangeEvent(evnt);
|
|
386
|
+
const keyupEvent = (evnt) => {
|
|
387
|
+
triggerEvent(evnt);
|
|
1174
388
|
};
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
// }
|
|
1180
|
-
const dateConfirmEvent = () => {
|
|
1181
|
-
const { multiple } = props;
|
|
1182
|
-
const { datetimePanelValue } = reactData;
|
|
1183
|
-
const dateValue = computeDateValue.value;
|
|
1184
|
-
const isDateTimeType = computeIsDateTimeType.value;
|
|
1185
|
-
if (isDateTimeType) {
|
|
1186
|
-
const dateValueFormat = computeDateValueFormat.value;
|
|
1187
|
-
if (multiple) {
|
|
1188
|
-
// 如果为多选
|
|
1189
|
-
const dateMultipleValue = computeDateMultipleValue.value;
|
|
1190
|
-
if (isDateTimeType) {
|
|
1191
|
-
// 如果是datetime特殊类型
|
|
1192
|
-
const dateListValue = [...computeDateListValue.value];
|
|
1193
|
-
const datetimeRest = [];
|
|
1194
|
-
dateListValue.forEach(item => {
|
|
1195
|
-
if (item) {
|
|
1196
|
-
if (datetimePanelValue) {
|
|
1197
|
-
item.setHours(datetimePanelValue.getHours());
|
|
1198
|
-
item.setMinutes(datetimePanelValue.getMinutes());
|
|
1199
|
-
item.setSeconds(datetimePanelValue.getSeconds());
|
|
1200
|
-
}
|
|
1201
|
-
datetimeRest.push(item);
|
|
1202
|
-
}
|
|
1203
|
-
});
|
|
1204
|
-
handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' });
|
|
1205
|
-
}
|
|
1206
|
-
else {
|
|
1207
|
-
// 如果是日期类型
|
|
1208
|
-
handleChange(dateMultipleValue.join(','), { type: 'update' });
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
|
-
else {
|
|
1212
|
-
dateChange(dateValue || reactData.currentDate);
|
|
1213
|
-
}
|
|
389
|
+
const confirmEvent = (evnt) => {
|
|
390
|
+
const $datePanel = refDatePanel.value;
|
|
391
|
+
if ($datePanel) {
|
|
392
|
+
$datePanel.confirmByEvent(evnt);
|
|
1214
393
|
}
|
|
1215
394
|
hidePanel();
|
|
1216
395
|
};
|
|
1217
|
-
const
|
|
1218
|
-
const {
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
const dateSecondEvent = (evnt, item) => {
|
|
1225
|
-
const { datetimePanelValue } = reactData;
|
|
1226
|
-
if (datetimePanelValue) {
|
|
1227
|
-
datetimePanelValue.setSeconds(item.value);
|
|
396
|
+
const panelChangeEvent = (params) => {
|
|
397
|
+
const { multiple } = props;
|
|
398
|
+
const { value, $event } = params;
|
|
399
|
+
const isDateTimeType = computeIsDateTimeType.value;
|
|
400
|
+
handleChange(value, $event);
|
|
401
|
+
if (!multiple && !isDateTimeType) {
|
|
402
|
+
hidePanel();
|
|
1228
403
|
}
|
|
1229
|
-
dateTimeChangeEvent(evnt);
|
|
1230
404
|
};
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
if (
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
}
|
|
1247
|
-
else if (isRightArrow) {
|
|
1248
|
-
offsetYear = XEUtils.getWhatYear(offsetYear, 1);
|
|
1249
|
-
}
|
|
1250
|
-
else if (isDwArrow) {
|
|
1251
|
-
offsetYear = XEUtils.getWhatYear(offsetYear, 4);
|
|
1252
|
-
}
|
|
1253
|
-
dateMoveYear(offsetYear);
|
|
1254
|
-
}
|
|
1255
|
-
else if (datePanelType === 'quarter') {
|
|
1256
|
-
let offsetQuarter = XEUtils.getWhatQuarter(datePanelValue || Date.now(), 0, 'first');
|
|
1257
|
-
if (isLeftArrow) {
|
|
1258
|
-
offsetQuarter = XEUtils.getWhatQuarter(offsetQuarter, -1);
|
|
1259
|
-
}
|
|
1260
|
-
else if (isUpArrow) {
|
|
1261
|
-
offsetQuarter = XEUtils.getWhatQuarter(offsetQuarter, -2);
|
|
1262
|
-
}
|
|
1263
|
-
else if (isRightArrow) {
|
|
1264
|
-
offsetQuarter = XEUtils.getWhatQuarter(offsetQuarter, 1);
|
|
1265
|
-
}
|
|
1266
|
-
else if (isDwArrow) {
|
|
1267
|
-
offsetQuarter = XEUtils.getWhatQuarter(offsetQuarter, 2);
|
|
1268
|
-
}
|
|
1269
|
-
dateMoveQuarter(offsetQuarter);
|
|
1270
|
-
}
|
|
1271
|
-
else if (datePanelType === 'month') {
|
|
1272
|
-
let offsetMonth = XEUtils.getWhatMonth(datePanelValue || Date.now(), 0, 'first');
|
|
1273
|
-
if (isLeftArrow) {
|
|
1274
|
-
offsetMonth = XEUtils.getWhatMonth(offsetMonth, -1);
|
|
1275
|
-
}
|
|
1276
|
-
else if (isUpArrow) {
|
|
1277
|
-
offsetMonth = XEUtils.getWhatMonth(offsetMonth, -4);
|
|
1278
|
-
}
|
|
1279
|
-
else if (isRightArrow) {
|
|
1280
|
-
offsetMonth = XEUtils.getWhatMonth(offsetMonth, 1);
|
|
1281
|
-
}
|
|
1282
|
-
else if (isDwArrow) {
|
|
1283
|
-
offsetMonth = XEUtils.getWhatMonth(offsetMonth, 4);
|
|
1284
|
-
}
|
|
1285
|
-
dateMoveMonth(offsetMonth);
|
|
1286
|
-
}
|
|
1287
|
-
else if (datePanelType === 'week') {
|
|
1288
|
-
let offsetDay = datePanelValue || XEUtils.getWhatDay(Date.now(), 0, 'first');
|
|
1289
|
-
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
1290
|
-
if (isUpArrow) {
|
|
1291
|
-
offsetDay = XEUtils.getWhatWeek(offsetDay, -1, firstDayOfWeek);
|
|
1292
|
-
}
|
|
1293
|
-
else if (isDwArrow) {
|
|
1294
|
-
offsetDay = XEUtils.getWhatWeek(offsetDay, 1, firstDayOfWeek);
|
|
405
|
+
// 全局事件
|
|
406
|
+
const handleGlobalMousedownEvent = (evnt) => {
|
|
407
|
+
const $datePanel = refDatePanel.value;
|
|
408
|
+
const { visiblePanel, isActivated } = reactData;
|
|
409
|
+
const el = refElem.value;
|
|
410
|
+
const panelWrapperElem = refPanelWrapper.value;
|
|
411
|
+
const isDisabled = computeIsDisabled.value;
|
|
412
|
+
if (!isDisabled && isActivated) {
|
|
413
|
+
reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
|
|
414
|
+
if (!reactData.isActivated) {
|
|
415
|
+
if (visiblePanel) {
|
|
416
|
+
hidePanel();
|
|
417
|
+
if ($datePanel) {
|
|
418
|
+
$datePanel.checkValue(reactData.inputLabel);
|
|
419
|
+
}
|
|
1295
420
|
}
|
|
1296
|
-
dateMoveDay(offsetDay);
|
|
1297
421
|
}
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
const handleGlobalMousewheelEvent = (evnt) => {
|
|
425
|
+
const { visiblePanel } = reactData;
|
|
426
|
+
const isDisabled = computeIsDisabled.value;
|
|
427
|
+
if (!isDisabled) {
|
|
428
|
+
if (visiblePanel) {
|
|
429
|
+
const panelWrapperElem = refPanelWrapper.value;
|
|
430
|
+
if (getEventTargetNode(evnt, panelWrapperElem).flag) {
|
|
431
|
+
updatePlacement();
|
|
1308
432
|
}
|
|
1309
|
-
else
|
|
1310
|
-
|
|
433
|
+
else {
|
|
434
|
+
hidePanel();
|
|
1311
435
|
}
|
|
1312
|
-
dateMoveDay(offsetDay);
|
|
1313
436
|
}
|
|
1314
437
|
}
|
|
1315
438
|
};
|
|
1316
|
-
const
|
|
1317
|
-
const
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
if (
|
|
1322
|
-
|
|
1323
|
-
}
|
|
1324
|
-
else {
|
|
1325
|
-
dateNextEvent(evnt);
|
|
439
|
+
const handleGlobalBlurEvent = () => {
|
|
440
|
+
const $datePanel = refDatePanel.value;
|
|
441
|
+
const { isActivated, visiblePanel } = reactData;
|
|
442
|
+
if (visiblePanel) {
|
|
443
|
+
hidePanel();
|
|
444
|
+
if ($datePanel) {
|
|
445
|
+
$datePanel.checkValue(reactData.inputLabel);
|
|
1326
446
|
}
|
|
1327
447
|
}
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
const dateValue = computeDateValue.value;
|
|
1333
|
-
if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
|
|
1334
|
-
reactData.datePanelType = type;
|
|
1335
|
-
}
|
|
1336
|
-
else {
|
|
1337
|
-
reactData.datePanelType = 'day';
|
|
1338
|
-
}
|
|
1339
|
-
reactData.currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first');
|
|
1340
|
-
if (dateValue) {
|
|
1341
|
-
dateMonthHandle(dateValue, 0);
|
|
1342
|
-
dateParseValue(dateValue);
|
|
1343
|
-
}
|
|
1344
|
-
else {
|
|
1345
|
-
dateNowHandle();
|
|
1346
|
-
}
|
|
1347
|
-
if (isDateTimeType) {
|
|
1348
|
-
reactData.datetimePanelValue = reactData.datePanelValue || XEUtils.getWhatDay(Date.now(), 0, 'first');
|
|
1349
|
-
nextTick(() => {
|
|
1350
|
-
const timeBodyElem = refInputTimeBody.value;
|
|
1351
|
-
XEUtils.arrayEach(timeBodyElem.querySelectorAll('li.is--selected'), (elem) => {
|
|
1352
|
-
updateTimePos(elem);
|
|
1353
|
-
});
|
|
1354
|
-
});
|
|
448
|
+
else if (isActivated) {
|
|
449
|
+
if ($datePanel) {
|
|
450
|
+
$datePanel.checkValue(reactData.inputLabel);
|
|
451
|
+
}
|
|
1355
452
|
}
|
|
1356
453
|
};
|
|
1357
|
-
// 日期
|
|
1358
454
|
// 弹出面板
|
|
1359
455
|
const updateZindex = () => {
|
|
1360
456
|
if (reactData.panelIndex < getLastZIndex()) {
|
|
@@ -1439,7 +535,6 @@ export default defineComponent({
|
|
|
1439
535
|
const showPanel = () => {
|
|
1440
536
|
const { visiblePanel } = reactData;
|
|
1441
537
|
const isDisabled = computeIsDisabled.value;
|
|
1442
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
1443
538
|
if (!isDisabled && !visiblePanel) {
|
|
1444
539
|
if (!reactData.initialized) {
|
|
1445
540
|
reactData.initialized = true;
|
|
@@ -1450,9 +545,6 @@ export default defineComponent({
|
|
|
1450
545
|
}
|
|
1451
546
|
reactData.isActivated = true;
|
|
1452
547
|
reactData.isAniVisible = true;
|
|
1453
|
-
if (isDatePickerType) {
|
|
1454
|
-
dateOpenPanel();
|
|
1455
|
-
}
|
|
1456
548
|
setTimeout(() => {
|
|
1457
549
|
reactData.visiblePanel = true;
|
|
1458
550
|
}, 10);
|
|
@@ -1472,146 +564,71 @@ export default defineComponent({
|
|
|
1472
564
|
triggerEvent(evnt);
|
|
1473
565
|
};
|
|
1474
566
|
const handleShortcutEvent = ({ option, $event }) => {
|
|
567
|
+
const { type } = props;
|
|
568
|
+
const { inputValue } = reactData;
|
|
1475
569
|
const shortcutOpts = computeShortcutOpts.value;
|
|
1476
570
|
const { autoClose } = shortcutOpts;
|
|
1477
|
-
const clickMethod = option
|
|
571
|
+
const { code, clickMethod } = option;
|
|
572
|
+
let value = inputValue;
|
|
1478
573
|
const shortcutParams = {
|
|
1479
574
|
$datePicker: $xeDatePicker,
|
|
1480
|
-
option
|
|
575
|
+
option,
|
|
576
|
+
value,
|
|
577
|
+
code
|
|
1481
578
|
};
|
|
1482
|
-
if (clickMethod) {
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
}
|
|
1488
|
-
dispatchEvent('shortcut-click', shortcutParams, $event);
|
|
1489
|
-
};
|
|
1490
|
-
// 全局事件
|
|
1491
|
-
const handleGlobalMousedownEvent = (evnt) => {
|
|
1492
|
-
const { visiblePanel, isActivated } = reactData;
|
|
1493
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
1494
|
-
const el = refElem.value;
|
|
1495
|
-
const panelWrapperElem = refPanelWrapper.value;
|
|
1496
|
-
const isDisabled = computeIsDisabled.value;
|
|
1497
|
-
if (!isDisabled && isActivated) {
|
|
1498
|
-
reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
|
|
1499
|
-
if (!reactData.isActivated) {
|
|
1500
|
-
// 如果是日期类型
|
|
1501
|
-
if (isDatePickerType) {
|
|
1502
|
-
if (visiblePanel) {
|
|
1503
|
-
hidePanel();
|
|
1504
|
-
afterCheckValue();
|
|
1505
|
-
}
|
|
1506
|
-
}
|
|
1507
|
-
else {
|
|
1508
|
-
afterCheckValue();
|
|
1509
|
-
}
|
|
1510
|
-
}
|
|
1511
|
-
}
|
|
1512
|
-
};
|
|
1513
|
-
const handleGlobalKeydownEvent = (evnt) => {
|
|
1514
|
-
const { clearable } = props;
|
|
1515
|
-
const { visiblePanel } = reactData;
|
|
1516
|
-
const isDatePickerType = computeIsDatePickerType.value;
|
|
1517
|
-
const isDisabled = computeIsDisabled.value;
|
|
1518
|
-
if (!isDisabled) {
|
|
1519
|
-
const isTab = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.TAB);
|
|
1520
|
-
const isDel = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
|
|
1521
|
-
const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
|
|
1522
|
-
const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
|
|
1523
|
-
const isLeftArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_LEFT);
|
|
1524
|
-
const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
|
|
1525
|
-
const isRightArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_RIGHT);
|
|
1526
|
-
const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
|
|
1527
|
-
const isPgUp = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.PAGE_UP);
|
|
1528
|
-
const isPgDn = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.PAGE_DOWN);
|
|
1529
|
-
const operArrow = isLeftArrow || isUpArrow || isRightArrow || isDwArrow;
|
|
1530
|
-
let isActivated = reactData.isActivated;
|
|
1531
|
-
if (isTab) {
|
|
1532
|
-
if (isActivated) {
|
|
1533
|
-
afterCheckValue();
|
|
1534
|
-
}
|
|
1535
|
-
isActivated = false;
|
|
1536
|
-
reactData.isActivated = isActivated;
|
|
1537
|
-
}
|
|
1538
|
-
else if (operArrow) {
|
|
1539
|
-
if (isDatePickerType) {
|
|
1540
|
-
if (isActivated) {
|
|
1541
|
-
if (visiblePanel) {
|
|
1542
|
-
dateOffsetEvent(evnt);
|
|
1543
|
-
}
|
|
1544
|
-
else if (isUpArrow || isDwArrow) {
|
|
1545
|
-
datePickerOpenEvent(evnt);
|
|
1546
|
-
}
|
|
1547
|
-
}
|
|
1548
|
-
}
|
|
1549
|
-
}
|
|
1550
|
-
else if (isEnter) {
|
|
1551
|
-
if (isDatePickerType) {
|
|
1552
|
-
if (visiblePanel) {
|
|
1553
|
-
if (reactData.datePanelValue) {
|
|
1554
|
-
dateSelectItem(reactData.datePanelValue);
|
|
1555
|
-
}
|
|
1556
|
-
else {
|
|
1557
|
-
hidePanel();
|
|
1558
|
-
}
|
|
1559
|
-
}
|
|
1560
|
-
else if (isActivated) {
|
|
1561
|
-
datePickerOpenEvent(evnt);
|
|
1562
|
-
}
|
|
1563
|
-
}
|
|
579
|
+
if (!clickMethod && code) {
|
|
580
|
+
const gCommandOpts = commands.get(code);
|
|
581
|
+
const dpCommandMethod = gCommandOpts ? gCommandOpts.datePickerCommandMethod : null;
|
|
582
|
+
if (dpCommandMethod) {
|
|
583
|
+
dpCommandMethod(shortcutParams);
|
|
1564
584
|
}
|
|
1565
|
-
else
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
585
|
+
else {
|
|
586
|
+
const dateValueFormat = computeDateValueFormat.value;
|
|
587
|
+
const firstDayOfWeek = computeFirstDayOfWeek.value;
|
|
588
|
+
switch (code) {
|
|
589
|
+
case 'now':
|
|
590
|
+
case 'prev':
|
|
591
|
+
case 'next':
|
|
592
|
+
case 'minus':
|
|
593
|
+
case 'plus': {
|
|
594
|
+
const restObj = getDateByCode(code, value, type, {
|
|
595
|
+
valueFormat: dateValueFormat,
|
|
596
|
+
firstDay: firstDayOfWeek
|
|
597
|
+
});
|
|
598
|
+
value = restObj.value;
|
|
599
|
+
shortcutParams.value = value;
|
|
600
|
+
handleChange(value, $event);
|
|
601
|
+
break;
|
|
1569
602
|
}
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
if (visiblePanel) {
|
|
1574
|
-
hidePanel();
|
|
1575
|
-
}
|
|
1576
|
-
}
|
|
1577
|
-
else if (isDel && clearable) {
|
|
1578
|
-
if (isActivated) {
|
|
1579
|
-
clearValueEvent(evnt, null);
|
|
603
|
+
default:
|
|
604
|
+
errLog('vxe.error.notCommands', [code]);
|
|
605
|
+
break;
|
|
1580
606
|
}
|
|
1581
607
|
}
|
|
1582
608
|
}
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
if (!isDisabled) {
|
|
1588
|
-
if (visiblePanel) {
|
|
1589
|
-
const panelWrapperElem = refPanelWrapper.value;
|
|
1590
|
-
if (getEventTargetNode(evnt, panelWrapperElem).flag) {
|
|
1591
|
-
updatePlacement();
|
|
1592
|
-
}
|
|
1593
|
-
else {
|
|
1594
|
-
hidePanel();
|
|
1595
|
-
afterCheckValue();
|
|
1596
|
-
}
|
|
609
|
+
else {
|
|
610
|
+
const optClickMethod = clickMethod || shortcutOpts.clickMethod;
|
|
611
|
+
if (optClickMethod) {
|
|
612
|
+
optClickMethod(shortcutParams);
|
|
1597
613
|
}
|
|
1598
614
|
}
|
|
1599
|
-
|
|
1600
|
-
const handleGlobalBlurEvent = () => {
|
|
1601
|
-
const { isActivated, visiblePanel } = reactData;
|
|
1602
|
-
if (visiblePanel) {
|
|
615
|
+
if (autoClose) {
|
|
1603
616
|
hidePanel();
|
|
1604
|
-
afterCheckValue();
|
|
1605
|
-
}
|
|
1606
|
-
else if (isActivated) {
|
|
1607
|
-
afterCheckValue();
|
|
1608
617
|
}
|
|
618
|
+
dispatchEvent('shortcut-click', shortcutParams, $event);
|
|
1609
619
|
};
|
|
1610
620
|
const dispatchEvent = (type, params, evnt) => {
|
|
1611
621
|
emit(type, createEvent(evnt, { $datePicker: $xeDatePicker }, params));
|
|
1612
622
|
};
|
|
1613
|
-
datePickerMethods = {
|
|
623
|
+
const datePickerMethods = {
|
|
1614
624
|
dispatchEvent,
|
|
625
|
+
setModelValue(value) {
|
|
626
|
+
reactData.inputValue = value;
|
|
627
|
+
emit('update:modelValue', value);
|
|
628
|
+
},
|
|
629
|
+
setModelValueByEvent(evnt, value) {
|
|
630
|
+
handleChange(value || '', evnt);
|
|
631
|
+
},
|
|
1615
632
|
focus() {
|
|
1616
633
|
const inputElem = refInputTarget.value;
|
|
1617
634
|
reactData.isActivated = true;
|
|
@@ -1635,424 +652,16 @@ export default defineComponent({
|
|
|
1635
652
|
updatePlacement
|
|
1636
653
|
};
|
|
1637
654
|
Object.assign($xeDatePicker, datePickerMethods);
|
|
1638
|
-
const renderDateLabel = (item, label) => {
|
|
1639
|
-
const { festivalMethod } = props;
|
|
1640
|
-
if (festivalMethod) {
|
|
1641
|
-
const { datePanelType } = reactData;
|
|
1642
|
-
const festivalRest = festivalMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $datePicker: $xeDatePicker });
|
|
1643
|
-
const festivalItem = festivalRest ? (XEUtils.isString(festivalRest) ? { label: festivalRest } : festivalRest) : {};
|
|
1644
|
-
const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null;
|
|
1645
|
-
const labels = [
|
|
1646
|
-
h('span', {
|
|
1647
|
-
class: ['vxe-date-picker--date-label', {
|
|
1648
|
-
'is-notice': festivalItem.notice
|
|
1649
|
-
}]
|
|
1650
|
-
}, extraItem && extraItem.label
|
|
1651
|
-
? [
|
|
1652
|
-
h('span', `${label}`),
|
|
1653
|
-
h('span', {
|
|
1654
|
-
class: ['vxe-date-picker--date-label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
|
|
1655
|
-
style: extraItem.style
|
|
1656
|
-
}, XEUtils.toValueString(extraItem.label))
|
|
1657
|
-
]
|
|
1658
|
-
: `${label}`)
|
|
1659
|
-
];
|
|
1660
|
-
const festivalLabel = festivalItem.label;
|
|
1661
|
-
if (festivalLabel) {
|
|
1662
|
-
// 默认最多支持3个节日重叠
|
|
1663
|
-
const festivalLabels = XEUtils.toValueString(festivalLabel).split(',');
|
|
1664
|
-
labels.push(h('span', {
|
|
1665
|
-
class: ['vxe-date-picker--date-festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
|
|
1666
|
-
style: festivalItem.style
|
|
1667
|
-
}, [
|
|
1668
|
-
festivalLabels.length > 1
|
|
1669
|
-
? h('span', {
|
|
1670
|
-
class: ['vxe-date-picker--date-festival--overlap', `overlap--${festivalLabels.length}`]
|
|
1671
|
-
}, festivalLabels.map(label => h('span', label.substring(0, 3))))
|
|
1672
|
-
: h('span', {
|
|
1673
|
-
class: 'vxe-date-picker--date-festival--label'
|
|
1674
|
-
}, festivalLabels[0].substring(0, 3))
|
|
1675
|
-
]));
|
|
1676
|
-
}
|
|
1677
|
-
return labels;
|
|
1678
|
-
}
|
|
1679
|
-
return label;
|
|
1680
|
-
};
|
|
1681
|
-
const renderDateDayTable = () => {
|
|
1682
|
-
const { multiple } = props;
|
|
1683
|
-
const { datePanelType, datePanelValue } = reactData;
|
|
1684
|
-
const dateValue = computeDateValue.value;
|
|
1685
|
-
const dateHeaders = computeDateHeaders.value;
|
|
1686
|
-
const dayDatas = computeDayDatas.value;
|
|
1687
|
-
const dateListValue = computeDateListValue.value;
|
|
1688
|
-
const overCount = computeOverCount.value;
|
|
1689
|
-
const matchFormat = 'yyyyMMdd';
|
|
1690
|
-
return [
|
|
1691
|
-
h('table', {
|
|
1692
|
-
class: `vxe-date-picker--date-${datePanelType}-view`,
|
|
1693
|
-
cellspacing: 0,
|
|
1694
|
-
cellpadding: 0,
|
|
1695
|
-
border: 0
|
|
1696
|
-
}, [
|
|
1697
|
-
h('thead', [
|
|
1698
|
-
h('tr', dateHeaders.map((item) => {
|
|
1699
|
-
return h('th', item.label);
|
|
1700
|
-
}))
|
|
1701
|
-
]),
|
|
1702
|
-
h('tbody', dayDatas.map((rows) => {
|
|
1703
|
-
return h('tr', rows.map((item) => {
|
|
1704
|
-
const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
|
|
1705
|
-
return h('td', {
|
|
1706
|
-
class: {
|
|
1707
|
-
'is--prev': item.isPrev,
|
|
1708
|
-
'is--current': item.isCurrent,
|
|
1709
|
-
'is--now': item.isNow,
|
|
1710
|
-
'is--next': item.isNext,
|
|
1711
|
-
'is--disabled': isDateDisabled(item),
|
|
1712
|
-
'is--selected': isSelected,
|
|
1713
|
-
'is--over': overCount && !isSelected,
|
|
1714
|
-
'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
|
|
1715
|
-
},
|
|
1716
|
-
onClick: () => dateSelectEvent(item),
|
|
1717
|
-
onMouseenter: () => dateMouseenterEvent(item)
|
|
1718
|
-
}, renderDateLabel(item, item.label));
|
|
1719
|
-
}));
|
|
1720
|
-
}))
|
|
1721
|
-
])
|
|
1722
|
-
];
|
|
1723
|
-
};
|
|
1724
|
-
const renderDateWeekTable = () => {
|
|
1725
|
-
const { multiple } = props;
|
|
1726
|
-
const { datePanelType, datePanelValue } = reactData;
|
|
1727
|
-
const dateValue = computeDateValue.value;
|
|
1728
|
-
const weekHeaders = computeWeekHeaders.value;
|
|
1729
|
-
const weekDates = computeWeekDates.value;
|
|
1730
|
-
const dateListValue = computeDateListValue.value;
|
|
1731
|
-
const overCount = computeOverCount.value;
|
|
1732
|
-
const matchFormat = 'yyyyMMdd';
|
|
1733
|
-
return [
|
|
1734
|
-
h('table', {
|
|
1735
|
-
class: `vxe-date-picker--date-${datePanelType}-view`,
|
|
1736
|
-
cellspacing: 0,
|
|
1737
|
-
cellpadding: 0,
|
|
1738
|
-
border: 0
|
|
1739
|
-
}, [
|
|
1740
|
-
h('thead', [
|
|
1741
|
-
h('tr', weekHeaders.map((item) => {
|
|
1742
|
-
return h('th', item.label);
|
|
1743
|
-
}))
|
|
1744
|
-
]),
|
|
1745
|
-
h('tbody', weekDates.map((rows) => {
|
|
1746
|
-
const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat));
|
|
1747
|
-
const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat));
|
|
1748
|
-
return h('tr', rows.map((item) => {
|
|
1749
|
-
return h('td', {
|
|
1750
|
-
class: {
|
|
1751
|
-
'is--prev': item.isPrev,
|
|
1752
|
-
'is--current': item.isCurrent,
|
|
1753
|
-
'is--now': item.isNow,
|
|
1754
|
-
'is--next': item.isNext,
|
|
1755
|
-
'is--disabled': isDateDisabled(item),
|
|
1756
|
-
'is--selected': isSelected,
|
|
1757
|
-
'is--over': overCount && !isSelected,
|
|
1758
|
-
'is--hover': !overCount && isHover
|
|
1759
|
-
},
|
|
1760
|
-
// event
|
|
1761
|
-
onClick: () => dateSelectEvent(item),
|
|
1762
|
-
onMouseenter: () => dateMouseenterEvent(item)
|
|
1763
|
-
}, renderDateLabel(item, item.label));
|
|
1764
|
-
}));
|
|
1765
|
-
}))
|
|
1766
|
-
])
|
|
1767
|
-
];
|
|
1768
|
-
};
|
|
1769
|
-
const renderDateMonthTable = () => {
|
|
1770
|
-
const { multiple } = props;
|
|
1771
|
-
const { datePanelType, datePanelValue } = reactData;
|
|
1772
|
-
const dateValue = computeDateValue.value;
|
|
1773
|
-
const monthDatas = computeMonthDatas.value;
|
|
1774
|
-
const dateListValue = computeDateListValue.value;
|
|
1775
|
-
const overCount = computeOverCount.value;
|
|
1776
|
-
const matchFormat = 'yyyyMM';
|
|
1777
|
-
return [
|
|
1778
|
-
h('table', {
|
|
1779
|
-
class: `vxe-date-picker--date-${datePanelType}-view`,
|
|
1780
|
-
cellspacing: 0,
|
|
1781
|
-
cellpadding: 0,
|
|
1782
|
-
border: 0
|
|
1783
|
-
}, [
|
|
1784
|
-
h('tbody', monthDatas.map((rows) => {
|
|
1785
|
-
return h('tr', rows.map((item) => {
|
|
1786
|
-
const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
|
|
1787
|
-
return h('td', {
|
|
1788
|
-
class: {
|
|
1789
|
-
'is--prev': item.isPrev,
|
|
1790
|
-
'is--current': item.isCurrent,
|
|
1791
|
-
'is--now': item.isNow,
|
|
1792
|
-
'is--next': item.isNext,
|
|
1793
|
-
'is--disabled': isDateDisabled(item),
|
|
1794
|
-
'is--selected': isSelected,
|
|
1795
|
-
'is--over': overCount && !isSelected,
|
|
1796
|
-
'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
|
|
1797
|
-
},
|
|
1798
|
-
onClick: () => dateSelectEvent(item),
|
|
1799
|
-
onMouseenter: () => dateMouseenterEvent(item)
|
|
1800
|
-
}, renderDateLabel(item, getI18n(`vxe.input.date.months.m${item.month}`)));
|
|
1801
|
-
}));
|
|
1802
|
-
}))
|
|
1803
|
-
])
|
|
1804
|
-
];
|
|
1805
|
-
};
|
|
1806
|
-
const renderDateQuarterTable = () => {
|
|
1807
|
-
const { multiple } = props;
|
|
1808
|
-
const { datePanelType, datePanelValue } = reactData;
|
|
1809
|
-
const dateValue = computeDateValue.value;
|
|
1810
|
-
const quarterDatas = computeQuarterDatas.value;
|
|
1811
|
-
const dateListValue = computeDateListValue.value;
|
|
1812
|
-
const overCount = computeOverCount.value;
|
|
1813
|
-
const matchFormat = 'yyyyq';
|
|
1814
|
-
return [
|
|
1815
|
-
h('table', {
|
|
1816
|
-
class: `vxe-date-picker--date-${datePanelType}-view`,
|
|
1817
|
-
cellspacing: 0,
|
|
1818
|
-
cellpadding: 0,
|
|
1819
|
-
border: 0
|
|
1820
|
-
}, [
|
|
1821
|
-
h('tbody', quarterDatas.map((rows) => {
|
|
1822
|
-
return h('tr', rows.map((item) => {
|
|
1823
|
-
const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
|
|
1824
|
-
return h('td', {
|
|
1825
|
-
class: {
|
|
1826
|
-
'is--prev': item.isPrev,
|
|
1827
|
-
'is--current': item.isCurrent,
|
|
1828
|
-
'is--now': item.isNow,
|
|
1829
|
-
'is--next': item.isNext,
|
|
1830
|
-
'is--disabled': isDateDisabled(item),
|
|
1831
|
-
'is--selected': isSelected,
|
|
1832
|
-
'is--over': overCount && !isSelected,
|
|
1833
|
-
'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
|
|
1834
|
-
},
|
|
1835
|
-
onClick: () => dateSelectEvent(item),
|
|
1836
|
-
onMouseenter: () => dateMouseenterEvent(item)
|
|
1837
|
-
}, renderDateLabel(item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)));
|
|
1838
|
-
}));
|
|
1839
|
-
}))
|
|
1840
|
-
])
|
|
1841
|
-
];
|
|
1842
|
-
};
|
|
1843
|
-
const renderDateYearTable = () => {
|
|
1844
|
-
const { multiple } = props;
|
|
1845
|
-
const { datePanelType, datePanelValue } = reactData;
|
|
1846
|
-
const dateValue = computeDateValue.value;
|
|
1847
|
-
const yearDatas = computeYearDatas.value;
|
|
1848
|
-
const dateListValue = computeDateListValue.value;
|
|
1849
|
-
const overCount = computeOverCount.value;
|
|
1850
|
-
const matchFormat = 'yyyy';
|
|
1851
|
-
return [
|
|
1852
|
-
h('table', {
|
|
1853
|
-
class: `vxe-date-picker--date-${datePanelType}-view`,
|
|
1854
|
-
cellspacing: 0,
|
|
1855
|
-
cellpadding: 0,
|
|
1856
|
-
border: 0
|
|
1857
|
-
}, [
|
|
1858
|
-
h('tbody', yearDatas.map((rows) => {
|
|
1859
|
-
return h('tr', rows.map((item) => {
|
|
1860
|
-
const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
|
|
1861
|
-
return h('td', {
|
|
1862
|
-
class: {
|
|
1863
|
-
'is--prev': item.isPrev,
|
|
1864
|
-
'is--current': item.isCurrent,
|
|
1865
|
-
'is--now': item.isNow,
|
|
1866
|
-
'is--next': item.isNext,
|
|
1867
|
-
'is--disabled': isDateDisabled(item),
|
|
1868
|
-
'is--selected': isSelected,
|
|
1869
|
-
'is--over': overCount && !isSelected,
|
|
1870
|
-
'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
|
|
1871
|
-
},
|
|
1872
|
-
onClick: () => dateSelectEvent(item),
|
|
1873
|
-
onMouseenter: () => dateMouseenterEvent(item)
|
|
1874
|
-
}, renderDateLabel(item, item.year));
|
|
1875
|
-
}));
|
|
1876
|
-
}))
|
|
1877
|
-
])
|
|
1878
|
-
];
|
|
1879
|
-
};
|
|
1880
|
-
const renderDateTable = () => {
|
|
1881
|
-
const { datePanelType } = reactData;
|
|
1882
|
-
switch (datePanelType) {
|
|
1883
|
-
case 'week':
|
|
1884
|
-
return renderDateWeekTable();
|
|
1885
|
-
case 'month':
|
|
1886
|
-
return renderDateMonthTable();
|
|
1887
|
-
case 'quarter':
|
|
1888
|
-
return renderDateQuarterTable();
|
|
1889
|
-
case 'year':
|
|
1890
|
-
return renderDateYearTable();
|
|
1891
|
-
}
|
|
1892
|
-
return renderDateDayTable();
|
|
1893
|
-
};
|
|
1894
|
-
const renderDatePanel = () => {
|
|
1895
|
-
const { multiple } = props;
|
|
1896
|
-
const { datePanelType } = reactData;
|
|
1897
|
-
const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
|
|
1898
|
-
const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
|
|
1899
|
-
const selectDatePanelObj = computeSelectDatePanelObj.value;
|
|
1900
|
-
const supportMultiples = computeSupportMultiples.value;
|
|
1901
|
-
return [
|
|
1902
|
-
h('div', {
|
|
1903
|
-
class: 'vxe-date-picker--date-picker-header'
|
|
1904
|
-
}, [
|
|
1905
|
-
h('div', {
|
|
1906
|
-
class: 'vxe-date-picker--date-picker-type-wrapper'
|
|
1907
|
-
}, [
|
|
1908
|
-
datePanelType === 'year'
|
|
1909
|
-
? h('span', {
|
|
1910
|
-
class: 'vxe-date-picker--date-picker-label'
|
|
1911
|
-
}, selectDatePanelObj.y)
|
|
1912
|
-
: h('span', {
|
|
1913
|
-
class: 'vxe-date-picker--date-picker-btns'
|
|
1914
|
-
}, [
|
|
1915
|
-
h('span', {
|
|
1916
|
-
class: 'vxe-date-picker--date-picker-btn',
|
|
1917
|
-
onClick: dateToggleYearTypeEvent
|
|
1918
|
-
}, selectDatePanelObj.y),
|
|
1919
|
-
selectDatePanelObj.m
|
|
1920
|
-
? h('span', {
|
|
1921
|
-
class: 'vxe-date-picker--date-picker-btn',
|
|
1922
|
-
onClick: dateToggleMonthTypeEvent
|
|
1923
|
-
}, selectDatePanelObj.m)
|
|
1924
|
-
: renderEmptyElement($xeDatePicker)
|
|
1925
|
-
])
|
|
1926
|
-
]),
|
|
1927
|
-
h('div', {
|
|
1928
|
-
class: 'vxe-date-picker--date-picker-btn-wrapper'
|
|
1929
|
-
}, [
|
|
1930
|
-
h('span', {
|
|
1931
|
-
class: ['vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-prev-btn', {
|
|
1932
|
-
'is--disabled': isDisabledPrevDateBtn
|
|
1933
|
-
}],
|
|
1934
|
-
onClick: datePrevEvent
|
|
1935
|
-
}, [
|
|
1936
|
-
h('i', {
|
|
1937
|
-
class: 'vxe-icon-caret-left'
|
|
1938
|
-
})
|
|
1939
|
-
]),
|
|
1940
|
-
h('span', {
|
|
1941
|
-
class: 'vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-current-btn',
|
|
1942
|
-
onClick: dateTodayMonthEvent
|
|
1943
|
-
}, [
|
|
1944
|
-
h('i', {
|
|
1945
|
-
class: 'vxe-icon-dot'
|
|
1946
|
-
})
|
|
1947
|
-
]),
|
|
1948
|
-
h('span', {
|
|
1949
|
-
class: ['vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-next-btn', {
|
|
1950
|
-
'is--disabled': isDisabledNextDateBtn
|
|
1951
|
-
}],
|
|
1952
|
-
onClick: dateNextEvent
|
|
1953
|
-
}, [
|
|
1954
|
-
h('i', {
|
|
1955
|
-
class: 'vxe-icon-caret-right'
|
|
1956
|
-
})
|
|
1957
|
-
]),
|
|
1958
|
-
multiple && supportMultiples
|
|
1959
|
-
? h('span', {
|
|
1960
|
-
class: 'vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-confirm-btn'
|
|
1961
|
-
}, [
|
|
1962
|
-
h('button', {
|
|
1963
|
-
class: 'vxe-date-picker--date-picker-confirm',
|
|
1964
|
-
type: 'button',
|
|
1965
|
-
onClick: dateConfirmEvent
|
|
1966
|
-
}, getI18n('vxe.button.confirm'))
|
|
1967
|
-
])
|
|
1968
|
-
: null
|
|
1969
|
-
])
|
|
1970
|
-
]),
|
|
1971
|
-
h('div', {
|
|
1972
|
-
class: 'vxe-date-picker--date-picker-body'
|
|
1973
|
-
}, renderDateTable())
|
|
1974
|
-
];
|
|
1975
|
-
};
|
|
1976
|
-
const renderTimePanel = () => {
|
|
1977
|
-
const { datetimePanelValue } = reactData;
|
|
1978
|
-
const dateTimeLabel = computeDateTimeLabel.value;
|
|
1979
|
-
const hourList = computeHourList.value;
|
|
1980
|
-
const hasTimeMinute = computeHasTimeMinute.value;
|
|
1981
|
-
const minuteList = computeMinuteList.value;
|
|
1982
|
-
const hasTimeSecond = computeHasTimeSecond.value;
|
|
1983
|
-
const secondList = computeSecondList.value;
|
|
1984
|
-
return [
|
|
1985
|
-
h('div', {
|
|
1986
|
-
class: 'vxe-date-picker--time-picker-header'
|
|
1987
|
-
}, [
|
|
1988
|
-
hasTimeMinute
|
|
1989
|
-
? h('div', {
|
|
1990
|
-
class: 'vxe-date-picker--time-picker-title'
|
|
1991
|
-
}, dateTimeLabel)
|
|
1992
|
-
: createCommentVNode(),
|
|
1993
|
-
h('div', {
|
|
1994
|
-
class: 'vxe-date-picker--time-picker-btn'
|
|
1995
|
-
}, [
|
|
1996
|
-
h('button', {
|
|
1997
|
-
class: 'vxe-date-picker--time-picker-confirm',
|
|
1998
|
-
type: 'button',
|
|
1999
|
-
onClick: dateConfirmEvent
|
|
2000
|
-
}, getI18n('vxe.button.confirm'))
|
|
2001
|
-
])
|
|
2002
|
-
]),
|
|
2003
|
-
h('div', {
|
|
2004
|
-
ref: refInputTimeBody,
|
|
2005
|
-
class: 'vxe-date-picker--time-picker-body'
|
|
2006
|
-
}, [
|
|
2007
|
-
h('ul', {
|
|
2008
|
-
class: 'vxe-date-picker--time-picker-hour-list'
|
|
2009
|
-
}, hourList.map((item, index) => {
|
|
2010
|
-
return h('li', {
|
|
2011
|
-
key: index,
|
|
2012
|
-
class: {
|
|
2013
|
-
'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value
|
|
2014
|
-
},
|
|
2015
|
-
onClick: (evnt) => dateHourEvent(evnt, item)
|
|
2016
|
-
}, item.label);
|
|
2017
|
-
})),
|
|
2018
|
-
hasTimeMinute
|
|
2019
|
-
? h('ul', {
|
|
2020
|
-
class: 'vxe-date-picker--time-picker-minute-list'
|
|
2021
|
-
}, minuteList.map((item, index) => {
|
|
2022
|
-
return h('li', {
|
|
2023
|
-
key: index,
|
|
2024
|
-
class: {
|
|
2025
|
-
'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value
|
|
2026
|
-
},
|
|
2027
|
-
onClick: (evnt) => dateMinuteEvent(evnt, item)
|
|
2028
|
-
}, item.label);
|
|
2029
|
-
}))
|
|
2030
|
-
: createCommentVNode(),
|
|
2031
|
-
hasTimeMinute && hasTimeSecond
|
|
2032
|
-
? h('ul', {
|
|
2033
|
-
class: 'vxe-date-picker--time-picker-second-list'
|
|
2034
|
-
}, secondList.map((item, index) => {
|
|
2035
|
-
return h('li', {
|
|
2036
|
-
key: index,
|
|
2037
|
-
class: {
|
|
2038
|
-
'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value
|
|
2039
|
-
},
|
|
2040
|
-
onClick: (evnt) => dateSecondEvent(evnt, item)
|
|
2041
|
-
}, item.label);
|
|
2042
|
-
}))
|
|
2043
|
-
: createCommentVNode()
|
|
2044
|
-
])
|
|
2045
|
-
];
|
|
2046
|
-
};
|
|
2047
655
|
const renderShortcutBtn = (pos, isVertical) => {
|
|
2048
656
|
const shortcutOpts = computeShortcutOpts.value;
|
|
2049
|
-
const {
|
|
2050
|
-
|
|
657
|
+
const { position, align, mode } = shortcutOpts;
|
|
658
|
+
const shortcutList = computeShortcutList.value;
|
|
659
|
+
if (isEnableConf(shortcutOpts) && shortcutList.length && (position || 'left') === pos) {
|
|
2051
660
|
return h('div', {
|
|
2052
|
-
class: `vxe-date-picker--
|
|
661
|
+
class: `vxe-date-picker--layout-${pos}-wrapper`
|
|
2053
662
|
}, [
|
|
2054
663
|
h(VxeButtonGroupComponent, {
|
|
2055
|
-
options,
|
|
664
|
+
options: shortcutList,
|
|
2056
665
|
mode,
|
|
2057
666
|
align,
|
|
2058
667
|
vertical: isVertical,
|
|
@@ -2062,49 +671,25 @@ export default defineComponent({
|
|
|
2062
671
|
}
|
|
2063
672
|
return renderEmptyElement($xeDatePicker);
|
|
2064
673
|
};
|
|
2065
|
-
const renderPickerPanel = () => {
|
|
2066
|
-
const { type } = props;
|
|
2067
|
-
if (type === 'datetime') {
|
|
2068
|
-
return h('div', {
|
|
2069
|
-
key: type,
|
|
2070
|
-
ref: refPanelWrapper,
|
|
2071
|
-
class: 'vxe-date-picker--panel-datetime-layout-wrapper'
|
|
2072
|
-
}, [
|
|
2073
|
-
h('div', {
|
|
2074
|
-
class: 'vxe-date-picker--panel-datetime-left-wrapper'
|
|
2075
|
-
}, renderDatePanel()),
|
|
2076
|
-
h('div', {
|
|
2077
|
-
class: 'vxe-date-picker--panel-datetime-right-wrapper'
|
|
2078
|
-
}, renderTimePanel())
|
|
2079
|
-
]);
|
|
2080
|
-
}
|
|
2081
|
-
else if (type === 'time') {
|
|
2082
|
-
return h('div', {
|
|
2083
|
-
key: type,
|
|
2084
|
-
ref: refPanelWrapper,
|
|
2085
|
-
class: 'vxe-date-picker--panel-wrapper'
|
|
2086
|
-
}, renderTimePanel());
|
|
2087
|
-
}
|
|
2088
|
-
return h('div', {
|
|
2089
|
-
key: type || 'default',
|
|
2090
|
-
ref: refPanelWrapper,
|
|
2091
|
-
class: 'vxe-date-picker--panel-wrapper'
|
|
2092
|
-
}, renderDatePanel());
|
|
2093
|
-
};
|
|
2094
674
|
const renderPanel = () => {
|
|
2095
|
-
const { type } = props;
|
|
2096
|
-
const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle } = reactData;
|
|
675
|
+
const { type, multiple, showClearButton, showConfirmButton } = props;
|
|
676
|
+
const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, inputValue } = reactData;
|
|
2097
677
|
const vSize = computeSize.value;
|
|
2098
678
|
const btnTransfer = computeBtnTransfer.value;
|
|
2099
679
|
const shortcutOpts = computeShortcutOpts.value;
|
|
2100
|
-
const
|
|
680
|
+
const isClearable = computeIsClearable.value;
|
|
681
|
+
const isDateTimeType = computeIsDateTimeType.value;
|
|
682
|
+
const shortcutList = computeShortcutList.value;
|
|
683
|
+
const { position } = shortcutOpts;
|
|
2101
684
|
const headerSlot = slots.header;
|
|
2102
685
|
const footerSlot = slots.footer;
|
|
2103
686
|
const topSlot = slots.top;
|
|
2104
687
|
const bottomSlot = slots.bottom;
|
|
2105
688
|
const leftSlot = slots.left;
|
|
2106
689
|
const rightSlot = slots.right;
|
|
2107
|
-
const hasShortcutBtn =
|
|
690
|
+
const hasShortcutBtn = shortcutList.length > 0;
|
|
691
|
+
const showConfirmBtn = (showConfirmButton === null ? (isDateTimeType || multiple) : showConfirmButton);
|
|
692
|
+
const showClearBtn = (showClearButton === null ? (isClearable && showConfirmBtn && type !== 'time') : showClearButton);
|
|
2108
693
|
return h(Teleport, {
|
|
2109
694
|
to: 'body',
|
|
2110
695
|
disabled: btnTransfer ? !initialized : true
|
|
@@ -2126,49 +711,95 @@ export default defineComponent({
|
|
|
2126
711
|
}, initialized && (visiblePanel || isAniVisible)
|
|
2127
712
|
? [
|
|
2128
713
|
h('div', {
|
|
2129
|
-
|
|
714
|
+
ref: refPanelWrapper,
|
|
715
|
+
class: ['vxe-date-picker--layout-all-wrapper', `type--${type}`, {
|
|
716
|
+
[`size--${vSize}`]: vSize
|
|
717
|
+
}]
|
|
2130
718
|
}, [
|
|
2131
719
|
topSlot
|
|
2132
720
|
? h('div', {
|
|
2133
|
-
class: 'vxe-date-picker--
|
|
721
|
+
class: 'vxe-date-picker--layout-top-wrapper'
|
|
2134
722
|
}, topSlot({}))
|
|
2135
723
|
: renderShortcutBtn('top'),
|
|
2136
724
|
h('div', {
|
|
2137
|
-
class: 'vxe-date-picker--
|
|
725
|
+
class: 'vxe-date-picker--layout-body-layout-wrapper'
|
|
2138
726
|
}, [
|
|
2139
727
|
leftSlot
|
|
2140
728
|
? h('div', {
|
|
2141
|
-
class: 'vxe-date-picker--
|
|
729
|
+
class: 'vxe-date-picker--layout-left-wrapper'
|
|
2142
730
|
}, leftSlot({}))
|
|
2143
731
|
: renderShortcutBtn('left', true),
|
|
2144
732
|
h('div', {
|
|
2145
|
-
class: 'vxe-date-picker--
|
|
733
|
+
class: 'vxe-date-picker--layout-body-content-wrapper'
|
|
2146
734
|
}, [
|
|
2147
735
|
headerSlot
|
|
2148
736
|
? h('div', {
|
|
2149
|
-
class: 'vxe-date-picker--
|
|
737
|
+
class: 'vxe-date-picker--layout-header-wrapper'
|
|
2150
738
|
}, headerSlot({}))
|
|
2151
739
|
: renderShortcutBtn('header'),
|
|
2152
740
|
h('div', {
|
|
2153
|
-
class: 'vxe-date-picker--
|
|
741
|
+
class: 'vxe-date-picker--layout-body-wrapper'
|
|
2154
742
|
}, [
|
|
2155
|
-
|
|
743
|
+
h(VxeDatePanelComponent, {
|
|
744
|
+
ref: refDatePanel,
|
|
745
|
+
modelValue: reactData.inputValue,
|
|
746
|
+
type: props.type,
|
|
747
|
+
className: props.className,
|
|
748
|
+
multiple: props.multiple,
|
|
749
|
+
limitCount: props.limitCount,
|
|
750
|
+
startDate: props.startDate,
|
|
751
|
+
endDate: props.endDate,
|
|
752
|
+
minDate: props.minDate,
|
|
753
|
+
maxDate: props.maxDate,
|
|
754
|
+
startDay: props.startDay,
|
|
755
|
+
labelFormat: props.labelFormat,
|
|
756
|
+
valueFormat: props.valueFormat,
|
|
757
|
+
festivalMethod: props.festivalMethod,
|
|
758
|
+
disabledMethod: props.disabledMethod,
|
|
759
|
+
selectDay: props.selectDay,
|
|
760
|
+
onChange: panelChangeEvent,
|
|
761
|
+
onDateToday: hidePanel
|
|
762
|
+
})
|
|
2156
763
|
]),
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
764
|
+
h('div', {
|
|
765
|
+
class: 'vxe-date-picker--layout-footer-wrapper'
|
|
766
|
+
}, [
|
|
767
|
+
h('div', {
|
|
768
|
+
class: 'vxe-date-picker--layout-footer-custom'
|
|
769
|
+
}, footerSlot ? footerSlot({}) : [renderShortcutBtn('footer')]),
|
|
770
|
+
showClearBtn || showConfirmBtn
|
|
771
|
+
? h('div', {
|
|
772
|
+
class: 'vxe-date-picker--layout-footer-btns'
|
|
773
|
+
}, [
|
|
774
|
+
showClearBtn
|
|
775
|
+
? h(VxeButtonComponent, {
|
|
776
|
+
size: 'mini',
|
|
777
|
+
disabled: inputValue === '' || XEUtils.eqNull(inputValue),
|
|
778
|
+
content: getI18n('vxe.button.clear'),
|
|
779
|
+
onClick: clearValueEvent
|
|
780
|
+
})
|
|
781
|
+
: renderEmptyElement($xeDatePicker),
|
|
782
|
+
showConfirmBtn
|
|
783
|
+
? h(VxeButtonComponent, {
|
|
784
|
+
size: 'mini',
|
|
785
|
+
status: 'primary',
|
|
786
|
+
content: getI18n('vxe.button.confirm'),
|
|
787
|
+
onClick: confirmEvent
|
|
788
|
+
})
|
|
789
|
+
: renderEmptyElement($xeDatePicker)
|
|
790
|
+
])
|
|
791
|
+
: renderEmptyElement($xeDatePicker)
|
|
792
|
+
])
|
|
2162
793
|
]),
|
|
2163
794
|
rightSlot
|
|
2164
795
|
? h('div', {
|
|
2165
|
-
class: 'vxe-date-picker--
|
|
796
|
+
class: 'vxe-date-picker--layout-right-wrapper'
|
|
2166
797
|
}, rightSlot({}))
|
|
2167
798
|
: renderShortcutBtn('right', true)
|
|
2168
799
|
]),
|
|
2169
800
|
bottomSlot
|
|
2170
801
|
? h('div', {
|
|
2171
|
-
class: 'vxe-date-picker--
|
|
802
|
+
class: 'vxe-date-picker--layout-bottom-wrapper'
|
|
2172
803
|
}, bottomSlot({}))
|
|
2173
804
|
: renderShortcutBtn('bottom')
|
|
2174
805
|
])
|
|
@@ -2216,7 +847,7 @@ export default defineComponent({
|
|
|
2216
847
|
class: getIcon().INPUT_CLEAR
|
|
2217
848
|
})
|
|
2218
849
|
])
|
|
2219
|
-
:
|
|
850
|
+
: renderEmptyElement($xeDatePicker),
|
|
2220
851
|
renderExtraSuffixIcon(),
|
|
2221
852
|
suffixSlot || suffixIcon
|
|
2222
853
|
? h('div', {
|
|
@@ -2229,7 +860,7 @@ export default defineComponent({
|
|
|
2229
860
|
class: suffixIcon
|
|
2230
861
|
})
|
|
2231
862
|
])
|
|
2232
|
-
:
|
|
863
|
+
: renderEmptyElement($xeDatePicker)
|
|
2233
864
|
]);
|
|
2234
865
|
};
|
|
2235
866
|
const renderExtraSuffixIcon = () => {
|
|
@@ -2243,19 +874,19 @@ export default defineComponent({
|
|
|
2243
874
|
]);
|
|
2244
875
|
};
|
|
2245
876
|
const renderVN = () => {
|
|
2246
|
-
const { className, type,
|
|
2247
|
-
const { inputValue, visiblePanel, isActivated } = reactData;
|
|
877
|
+
const { className, type, name, autoComplete } = props;
|
|
878
|
+
const { inputValue, inputLabel, visiblePanel, isActivated } = reactData;
|
|
2248
879
|
const vSize = computeSize.value;
|
|
2249
880
|
const isDisabled = computeIsDisabled.value;
|
|
2250
881
|
const formReadonly = computeFormReadonly.value;
|
|
882
|
+
const panelLabel = computePanelLabel.value;
|
|
2251
883
|
if (formReadonly) {
|
|
2252
884
|
return h('div', {
|
|
2253
885
|
ref: refElem,
|
|
2254
886
|
class: ['vxe-date-picker--readonly', `type--${type}`, className]
|
|
2255
|
-
},
|
|
887
|
+
}, panelLabel);
|
|
2256
888
|
}
|
|
2257
889
|
const inputReadonly = computeInputReadonly.value;
|
|
2258
|
-
const inputType = computeDatePickerType.value;
|
|
2259
890
|
const inpPlaceholder = computeInpPlaceholder.value;
|
|
2260
891
|
const isClearable = computeIsClearable.value;
|
|
2261
892
|
const prefix = renderPrefixIcon();
|
|
@@ -2264,7 +895,6 @@ export default defineComponent({
|
|
|
2264
895
|
ref: refElem,
|
|
2265
896
|
class: ['vxe-date-picker', `type--${type}`, className, {
|
|
2266
897
|
[`size--${vSize}`]: vSize,
|
|
2267
|
-
[`is--${align}`]: align,
|
|
2268
898
|
'is--prefix': !!prefix,
|
|
2269
899
|
'is--suffix': !!suffix,
|
|
2270
900
|
'is--visible': visiblePanel,
|
|
@@ -2274,20 +904,20 @@ export default defineComponent({
|
|
|
2274
904
|
}],
|
|
2275
905
|
spellcheck: false
|
|
2276
906
|
}, [
|
|
2277
|
-
prefix ||
|
|
907
|
+
prefix || renderEmptyElement($xeDatePicker),
|
|
2278
908
|
h('div', {
|
|
2279
909
|
class: 'vxe-date-picker--wrapper'
|
|
2280
910
|
}, [
|
|
2281
911
|
h('input', {
|
|
2282
912
|
ref: refInputTarget,
|
|
2283
913
|
class: 'vxe-date-picker--inner',
|
|
2284
|
-
value:
|
|
914
|
+
value: inputLabel,
|
|
2285
915
|
name,
|
|
2286
|
-
type:
|
|
916
|
+
type: 'text',
|
|
2287
917
|
placeholder: inpPlaceholder,
|
|
2288
918
|
readonly: inputReadonly,
|
|
2289
919
|
disabled: isDisabled,
|
|
2290
|
-
autocomplete: autoComplete
|
|
920
|
+
autocomplete: autoComplete,
|
|
2291
921
|
onKeydown: keydownEvent,
|
|
2292
922
|
onKeyup: keyupEvent,
|
|
2293
923
|
onClick: clickEvent,
|
|
@@ -2297,48 +927,29 @@ export default defineComponent({
|
|
|
2297
927
|
onBlur: blurEvent
|
|
2298
928
|
})
|
|
2299
929
|
]),
|
|
2300
|
-
suffix ||
|
|
930
|
+
suffix || renderEmptyElement($xeDatePicker),
|
|
2301
931
|
// 下拉面板
|
|
2302
932
|
renderPanel()
|
|
2303
933
|
]);
|
|
2304
934
|
};
|
|
2305
|
-
watch(
|
|
2306
|
-
|
|
2307
|
-
changeValue();
|
|
2308
|
-
});
|
|
2309
|
-
watch(() => props.type, () => {
|
|
2310
|
-
// 切换类型是重置内置变量
|
|
2311
|
-
Object.assign(reactData, {
|
|
2312
|
-
inputValue: '',
|
|
2313
|
-
datetimePanelValue: null,
|
|
2314
|
-
datePanelValue: null,
|
|
2315
|
-
datePanelLabel: '',
|
|
2316
|
-
datePanelType: 'day',
|
|
2317
|
-
selectMonth: null,
|
|
2318
|
-
currentDate: null
|
|
2319
|
-
});
|
|
2320
|
-
initValue();
|
|
935
|
+
watch(computePanelLabel, (val) => {
|
|
936
|
+
reactData.inputLabel = val;
|
|
2321
937
|
});
|
|
2322
|
-
watch(
|
|
2323
|
-
|
|
2324
|
-
if (isDatePickerType) {
|
|
2325
|
-
dateParseValue(reactData.datePanelValue);
|
|
2326
|
-
reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
|
|
2327
|
-
}
|
|
938
|
+
watch(() => props.modelValue, () => {
|
|
939
|
+
updateModelValue();
|
|
2328
940
|
});
|
|
2329
941
|
nextTick(() => {
|
|
2330
942
|
globalEvents.on($xeDatePicker, 'mousewheel', handleGlobalMousewheelEvent);
|
|
2331
943
|
globalEvents.on($xeDatePicker, 'mousedown', handleGlobalMousedownEvent);
|
|
2332
|
-
globalEvents.on($xeDatePicker, 'keydown', handleGlobalKeydownEvent);
|
|
2333
944
|
globalEvents.on($xeDatePicker, 'blur', handleGlobalBlurEvent);
|
|
2334
945
|
});
|
|
2335
946
|
onUnmounted(() => {
|
|
2336
947
|
globalEvents.off($xeDatePicker, 'mousewheel');
|
|
2337
948
|
globalEvents.off($xeDatePicker, 'mousedown');
|
|
2338
|
-
globalEvents.off($xeDatePicker, 'keydown');
|
|
2339
949
|
globalEvents.off($xeDatePicker, 'blur');
|
|
2340
950
|
});
|
|
2341
|
-
|
|
951
|
+
updateModelValue();
|
|
952
|
+
provide('$xeDatePicker', $xeDatePicker);
|
|
2342
953
|
$xeDatePicker.renderVN = renderVN;
|
|
2343
954
|
return $xeDatePicker;
|
|
2344
955
|
},
|