meixioacomponent 1.1.49 → 1.1.51
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/lib/meixioacomponent.common.js +337 -52
- package/lib/meixioacomponent.umd.js +337 -52
- package/lib/meixioacomponent.umd.min.js +7 -7
- package/package.json +1 -1
- package/packages/components/base/baseArea/api.js +7 -0
- package/packages/components/base/baseArea/areaConfig.js +4 -3
- package/packages/components/base/baseArea/baseAreaV2.vue +157 -0
- package/packages/components/base/baseArea/index.js +2 -1
- package/packages/components/base/elDatePicker/basic/date-table.vue +441 -441
- package/packages/components/base/elDatePicker/basic/month-table.vue +269 -269
- package/packages/components/base/elDatePicker/basic/time-spinner.vue +304 -304
- package/packages/components/base/elDatePicker/basic/year-table.vue +111 -111
- package/packages/components/base/elDatePicker/index.js +6 -6
- package/packages/components/base/elDatePicker/index.vue +27 -27
- package/packages/components/base/elDatePicker/panel/date-range.vue +680 -680
- package/packages/components/base/elDatePicker/panel/date.vue +609 -609
- package/packages/components/base/elDatePicker/panel/month-range.vue +289 -289
- package/packages/components/base/elDatePicker/panel/time-range.vue +248 -248
- package/packages/components/base/elDatePicker/panel/time-select.vue +178 -178
- package/packages/components/base/elDatePicker/panel/time.vue +186 -186
- package/packages/components/base/elDatePicker/picker/date-picker.js +55 -55
- package/packages/components/base/elDatePicker/picker/time-picker.js +39 -39
- package/packages/components/base/elDatePicker/picker/time-select.js +21 -21
- package/packages/components/base/elDatePicker/picker.vue +956 -956
- package/packages/components/proForm/proForm/pro_form.vue +6 -4
|
@@ -1,289 +1,289 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<transition name="el-zoom-in-top" @after-leave="$emit('dodestroy')">
|
|
3
|
-
<div
|
|
4
|
-
v-show="visible"
|
|
5
|
-
class="el-picker-panel el-date-range-picker el-popper"
|
|
6
|
-
:class="[{
|
|
7
|
-
'has-sidebar': $slots.sidebar || shortcuts
|
|
8
|
-
}, popperClass]">
|
|
9
|
-
<div class="el-picker-panel__body-wrapper">
|
|
10
|
-
<slot name="sidebar" class="el-picker-panel__sidebar"></slot>
|
|
11
|
-
<div class="el-picker-panel__sidebar" v-if="shortcuts">
|
|
12
|
-
<button
|
|
13
|
-
type="button"
|
|
14
|
-
class="el-picker-panel__shortcut"
|
|
15
|
-
v-for="(shortcut, key) in shortcuts"
|
|
16
|
-
:key="key"
|
|
17
|
-
@click="handleShortcutClick(shortcut)">{{shortcut.text}}</button>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="el-picker-panel__body">
|
|
20
|
-
<div class="el-picker-panel__content el-date-range-picker__content is-left">
|
|
21
|
-
<div class="el-date-range-picker__header">
|
|
22
|
-
<button
|
|
23
|
-
type="button"
|
|
24
|
-
@click="leftPrevYear"
|
|
25
|
-
class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
26
|
-
<button
|
|
27
|
-
type="button"
|
|
28
|
-
v-if="unlinkPanels"
|
|
29
|
-
@click="leftNextYear"
|
|
30
|
-
:disabled="!enableYearArrow"
|
|
31
|
-
:class="{ 'is-disabled': !enableYearArrow }"
|
|
32
|
-
class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
33
|
-
<div>{{ leftLabel }}</div>
|
|
34
|
-
</div>
|
|
35
|
-
<month-table
|
|
36
|
-
selection-mode="range"
|
|
37
|
-
:date="leftDate"
|
|
38
|
-
:default-value="defaultValue"
|
|
39
|
-
:min-date="minDate"
|
|
40
|
-
:max-date="maxDate"
|
|
41
|
-
:range-state="rangeState"
|
|
42
|
-
:disabled-date="disabledDate"
|
|
43
|
-
@changerange="handleChangeRange"
|
|
44
|
-
@pick="handleRangePick">
|
|
45
|
-
</month-table>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="el-picker-panel__content el-date-range-picker__content is-right">
|
|
48
|
-
<div class="el-date-range-picker__header">
|
|
49
|
-
<button
|
|
50
|
-
type="button"
|
|
51
|
-
v-if="unlinkPanels"
|
|
52
|
-
@click="rightPrevYear"
|
|
53
|
-
:disabled="!enableYearArrow"
|
|
54
|
-
:class="{ 'is-disabled': !enableYearArrow }"
|
|
55
|
-
class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
56
|
-
<button
|
|
57
|
-
type="button"
|
|
58
|
-
@click="rightNextYear"
|
|
59
|
-
class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
60
|
-
<div>{{ rightLabel }}</div>
|
|
61
|
-
</div>
|
|
62
|
-
<month-table
|
|
63
|
-
selection-mode="range"
|
|
64
|
-
:date="rightDate"
|
|
65
|
-
:default-value="defaultValue"
|
|
66
|
-
:min-date="minDate"
|
|
67
|
-
:max-date="maxDate"
|
|
68
|
-
:range-state="rangeState"
|
|
69
|
-
:disabled-date="disabledDate"
|
|
70
|
-
@changerange="handleChangeRange"
|
|
71
|
-
@pick="handleRangePick">
|
|
72
|
-
</month-table>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
</transition>
|
|
78
|
-
</template>
|
|
79
|
-
|
|
80
|
-
<script type="text/babel">
|
|
81
|
-
import {
|
|
82
|
-
isDate,
|
|
83
|
-
modifyWithTimeString,
|
|
84
|
-
prevYear,
|
|
85
|
-
nextYear,
|
|
86
|
-
nextMonth
|
|
87
|
-
} from 'element-ui/src/utils/date-util';
|
|
88
|
-
import Clickoutside from 'element-ui/src/utils/clickoutside';
|
|
89
|
-
import Locale from 'element-ui/src/mixins/locale';
|
|
90
|
-
import MonthTable from '../basic/month-table';
|
|
91
|
-
import ElInput from 'element-ui/packages/input';
|
|
92
|
-
import ElButton from 'element-ui/packages/button';
|
|
93
|
-
|
|
94
|
-
const calcDefaultValue = (defaultValue) => {
|
|
95
|
-
if (Array.isArray(defaultValue)) {
|
|
96
|
-
return [new Date(defaultValue[0]), new Date(defaultValue[1])];
|
|
97
|
-
} else if (defaultValue) {
|
|
98
|
-
return [new Date(defaultValue), nextMonth(new Date(defaultValue))];
|
|
99
|
-
} else {
|
|
100
|
-
return [new Date(), nextMonth(new Date())];
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
export default {
|
|
104
|
-
mixins: [Locale],
|
|
105
|
-
|
|
106
|
-
directives: { Clickoutside },
|
|
107
|
-
|
|
108
|
-
computed: {
|
|
109
|
-
btnDisabled() {
|
|
110
|
-
return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
leftLabel() {
|
|
114
|
-
return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year');
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
rightLabel() {
|
|
118
|
-
return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year');
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
leftYear() {
|
|
122
|
-
return this.leftDate.getFullYear();
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
rightYear() {
|
|
126
|
-
return this.rightDate.getFullYear() === this.leftDate.getFullYear() ? this.leftDate.getFullYear() + 1 : this.rightDate.getFullYear();
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
enableYearArrow() {
|
|
130
|
-
return this.unlinkPanels && this.rightYear > this.leftYear + 1;
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
data() {
|
|
135
|
-
return {
|
|
136
|
-
popperClass: '',
|
|
137
|
-
value: [],
|
|
138
|
-
defaultValue: null,
|
|
139
|
-
defaultTime: null,
|
|
140
|
-
minDate: '',
|
|
141
|
-
maxDate: '',
|
|
142
|
-
leftDate: new Date(),
|
|
143
|
-
rightDate: nextYear(new Date()),
|
|
144
|
-
rangeState: {
|
|
145
|
-
endDate: null,
|
|
146
|
-
selecting: false,
|
|
147
|
-
row: null,
|
|
148
|
-
column: null
|
|
149
|
-
},
|
|
150
|
-
shortcuts: '',
|
|
151
|
-
visible: '',
|
|
152
|
-
disabledDate: '',
|
|
153
|
-
format: '',
|
|
154
|
-
arrowControl: false,
|
|
155
|
-
unlinkPanels: false
|
|
156
|
-
};
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
watch: {
|
|
160
|
-
value(newVal) {
|
|
161
|
-
if (!newVal) {
|
|
162
|
-
this.minDate = null;
|
|
163
|
-
this.maxDate = null;
|
|
164
|
-
} else if (Array.isArray(newVal)) {
|
|
165
|
-
this.minDate = isDate(newVal[0]) ? new Date(newVal[0]) : null;
|
|
166
|
-
this.maxDate = isDate(newVal[1]) ? new Date(newVal[1]) : null;
|
|
167
|
-
if (this.minDate) {
|
|
168
|
-
this.leftDate = this.minDate;
|
|
169
|
-
if (this.unlinkPanels && this.maxDate) {
|
|
170
|
-
const minDateYear = this.minDate.getFullYear();
|
|
171
|
-
const maxDateYear = this.maxDate.getFullYear();
|
|
172
|
-
this.rightDate = minDateYear === maxDateYear
|
|
173
|
-
? nextYear(this.maxDate)
|
|
174
|
-
: this.maxDate;
|
|
175
|
-
} else {
|
|
176
|
-
this.rightDate = nextYear(this.leftDate);
|
|
177
|
-
}
|
|
178
|
-
} else {
|
|
179
|
-
this.leftDate = calcDefaultValue(this.defaultValue)[0];
|
|
180
|
-
this.rightDate = nextYear(this.leftDate);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
defaultValue(val) {
|
|
186
|
-
if (!Array.isArray(this.value)) {
|
|
187
|
-
const [left, right] = calcDefaultValue(val);
|
|
188
|
-
this.leftDate = left;
|
|
189
|
-
this.rightDate = val && val[1] && left.getFullYear() !== right.getFullYear() && this.unlinkPanels
|
|
190
|
-
? right
|
|
191
|
-
: nextYear(this.leftDate);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
|
|
196
|
-
methods: {
|
|
197
|
-
handleClear() {
|
|
198
|
-
this.minDate = null;
|
|
199
|
-
this.maxDate = null;
|
|
200
|
-
this.leftDate = calcDefaultValue(this.defaultValue)[0];
|
|
201
|
-
this.rightDate = nextYear(this.leftDate);
|
|
202
|
-
this.$emit('pick', null);
|
|
203
|
-
},
|
|
204
|
-
|
|
205
|
-
handleChangeRange(val) {
|
|
206
|
-
this.minDate = val.minDate;
|
|
207
|
-
this.maxDate = val.maxDate;
|
|
208
|
-
this.rangeState = val.rangeState;
|
|
209
|
-
},
|
|
210
|
-
|
|
211
|
-
handleRangePick(val, close = true) {
|
|
212
|
-
const defaultTime = this.defaultTime || [];
|
|
213
|
-
const minDate = modifyWithTimeString(val.minDate, defaultTime[0]);
|
|
214
|
-
const maxDate = modifyWithTimeString(val.maxDate, defaultTime[1]);
|
|
215
|
-
if (this.maxDate === maxDate && this.minDate === minDate) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
this.onPick && this.onPick(val);
|
|
219
|
-
this.maxDate = maxDate;
|
|
220
|
-
this.minDate = minDate;
|
|
221
|
-
|
|
222
|
-
// workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57
|
|
223
|
-
setTimeout(() => {
|
|
224
|
-
this.maxDate = maxDate;
|
|
225
|
-
this.minDate = minDate;
|
|
226
|
-
}, 10);
|
|
227
|
-
if (!close) return;
|
|
228
|
-
this.handleConfirm();
|
|
229
|
-
},
|
|
230
|
-
|
|
231
|
-
handleShortcutClick(shortcut) {
|
|
232
|
-
if (shortcut.onClick) {
|
|
233
|
-
shortcut.onClick(this);
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
|
|
237
|
-
// leftPrev*, rightNext* need to take care of `unlinkPanels`
|
|
238
|
-
leftPrevYear() {
|
|
239
|
-
this.leftDate = prevYear(this.leftDate);
|
|
240
|
-
if (!this.unlinkPanels) {
|
|
241
|
-
this.rightDate = prevYear(this.rightDate);
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
|
|
245
|
-
rightNextYear() {
|
|
246
|
-
if (!this.unlinkPanels) {
|
|
247
|
-
this.leftDate = nextYear(this.leftDate);
|
|
248
|
-
}
|
|
249
|
-
this.rightDate = nextYear(this.rightDate);
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
// leftNext*, rightPrev* are called when `unlinkPanels` is true
|
|
253
|
-
leftNextYear() {
|
|
254
|
-
this.leftDate = nextYear(this.leftDate);
|
|
255
|
-
},
|
|
256
|
-
|
|
257
|
-
rightPrevYear() {
|
|
258
|
-
this.rightDate = prevYear(this.rightDate);
|
|
259
|
-
},
|
|
260
|
-
|
|
261
|
-
handleConfirm(visible = false) {
|
|
262
|
-
if (this.isValidValue([this.minDate, this.maxDate])) {
|
|
263
|
-
this.$emit('pick', [this.minDate, this.maxDate], visible);
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
|
|
267
|
-
isValidValue(value) {
|
|
268
|
-
return Array.isArray(value) &&
|
|
269
|
-
value && value[0] && value[1] &&
|
|
270
|
-
isDate(value[0]) && isDate(value[1]) &&
|
|
271
|
-
value[0].getTime() <= value[1].getTime() && (
|
|
272
|
-
typeof this.disabledDate === 'function'
|
|
273
|
-
? !this.disabledDate(value[0]) && !this.disabledDate(value[1])
|
|
274
|
-
: true
|
|
275
|
-
);
|
|
276
|
-
},
|
|
277
|
-
|
|
278
|
-
resetView() {
|
|
279
|
-
// NOTE: this is a hack to reset {min, max}Date on picker open.
|
|
280
|
-
// TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state
|
|
281
|
-
// an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView
|
|
282
|
-
this.minDate = this.value && isDate(this.value[0]) ? new Date(this.value[0]) : null;
|
|
283
|
-
this.maxDate = this.value && isDate(this.value[0]) ? new Date(this.value[1]) : null;
|
|
284
|
-
}
|
|
285
|
-
},
|
|
286
|
-
|
|
287
|
-
components: { MonthTable, ElInput, ElButton }
|
|
288
|
-
};
|
|
289
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<transition name="el-zoom-in-top" @after-leave="$emit('dodestroy')">
|
|
3
|
+
<div
|
|
4
|
+
v-show="visible"
|
|
5
|
+
class="el-picker-panel el-date-range-picker el-popper"
|
|
6
|
+
:class="[{
|
|
7
|
+
'has-sidebar': $slots.sidebar || shortcuts
|
|
8
|
+
}, popperClass]">
|
|
9
|
+
<div class="el-picker-panel__body-wrapper">
|
|
10
|
+
<slot name="sidebar" class="el-picker-panel__sidebar"></slot>
|
|
11
|
+
<div class="el-picker-panel__sidebar" v-if="shortcuts">
|
|
12
|
+
<button
|
|
13
|
+
type="button"
|
|
14
|
+
class="el-picker-panel__shortcut"
|
|
15
|
+
v-for="(shortcut, key) in shortcuts"
|
|
16
|
+
:key="key"
|
|
17
|
+
@click="handleShortcutClick(shortcut)">{{shortcut.text}}</button>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="el-picker-panel__body">
|
|
20
|
+
<div class="el-picker-panel__content el-date-range-picker__content is-left">
|
|
21
|
+
<div class="el-date-range-picker__header">
|
|
22
|
+
<button
|
|
23
|
+
type="button"
|
|
24
|
+
@click="leftPrevYear"
|
|
25
|
+
class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
26
|
+
<button
|
|
27
|
+
type="button"
|
|
28
|
+
v-if="unlinkPanels"
|
|
29
|
+
@click="leftNextYear"
|
|
30
|
+
:disabled="!enableYearArrow"
|
|
31
|
+
:class="{ 'is-disabled': !enableYearArrow }"
|
|
32
|
+
class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
33
|
+
<div>{{ leftLabel }}</div>
|
|
34
|
+
</div>
|
|
35
|
+
<month-table
|
|
36
|
+
selection-mode="range"
|
|
37
|
+
:date="leftDate"
|
|
38
|
+
:default-value="defaultValue"
|
|
39
|
+
:min-date="minDate"
|
|
40
|
+
:max-date="maxDate"
|
|
41
|
+
:range-state="rangeState"
|
|
42
|
+
:disabled-date="disabledDate"
|
|
43
|
+
@changerange="handleChangeRange"
|
|
44
|
+
@pick="handleRangePick">
|
|
45
|
+
</month-table>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="el-picker-panel__content el-date-range-picker__content is-right">
|
|
48
|
+
<div class="el-date-range-picker__header">
|
|
49
|
+
<button
|
|
50
|
+
type="button"
|
|
51
|
+
v-if="unlinkPanels"
|
|
52
|
+
@click="rightPrevYear"
|
|
53
|
+
:disabled="!enableYearArrow"
|
|
54
|
+
:class="{ 'is-disabled': !enableYearArrow }"
|
|
55
|
+
class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
56
|
+
<button
|
|
57
|
+
type="button"
|
|
58
|
+
@click="rightNextYear"
|
|
59
|
+
class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
60
|
+
<div>{{ rightLabel }}</div>
|
|
61
|
+
</div>
|
|
62
|
+
<month-table
|
|
63
|
+
selection-mode="range"
|
|
64
|
+
:date="rightDate"
|
|
65
|
+
:default-value="defaultValue"
|
|
66
|
+
:min-date="minDate"
|
|
67
|
+
:max-date="maxDate"
|
|
68
|
+
:range-state="rangeState"
|
|
69
|
+
:disabled-date="disabledDate"
|
|
70
|
+
@changerange="handleChangeRange"
|
|
71
|
+
@pick="handleRangePick">
|
|
72
|
+
</month-table>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</transition>
|
|
78
|
+
</template>
|
|
79
|
+
|
|
80
|
+
<script type="text/babel">
|
|
81
|
+
import {
|
|
82
|
+
isDate,
|
|
83
|
+
modifyWithTimeString,
|
|
84
|
+
prevYear,
|
|
85
|
+
nextYear,
|
|
86
|
+
nextMonth
|
|
87
|
+
} from 'element-ui/src/utils/date-util';
|
|
88
|
+
import Clickoutside from 'element-ui/src/utils/clickoutside';
|
|
89
|
+
import Locale from 'element-ui/src/mixins/locale';
|
|
90
|
+
import MonthTable from '../basic/month-table';
|
|
91
|
+
import ElInput from 'element-ui/packages/input';
|
|
92
|
+
import ElButton from 'element-ui/packages/button';
|
|
93
|
+
|
|
94
|
+
const calcDefaultValue = (defaultValue) => {
|
|
95
|
+
if (Array.isArray(defaultValue)) {
|
|
96
|
+
return [new Date(defaultValue[0]), new Date(defaultValue[1])];
|
|
97
|
+
} else if (defaultValue) {
|
|
98
|
+
return [new Date(defaultValue), nextMonth(new Date(defaultValue))];
|
|
99
|
+
} else {
|
|
100
|
+
return [new Date(), nextMonth(new Date())];
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
export default {
|
|
104
|
+
mixins: [Locale],
|
|
105
|
+
|
|
106
|
+
directives: { Clickoutside },
|
|
107
|
+
|
|
108
|
+
computed: {
|
|
109
|
+
btnDisabled() {
|
|
110
|
+
return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
leftLabel() {
|
|
114
|
+
return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year');
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
rightLabel() {
|
|
118
|
+
return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year');
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
leftYear() {
|
|
122
|
+
return this.leftDate.getFullYear();
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
rightYear() {
|
|
126
|
+
return this.rightDate.getFullYear() === this.leftDate.getFullYear() ? this.leftDate.getFullYear() + 1 : this.rightDate.getFullYear();
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
enableYearArrow() {
|
|
130
|
+
return this.unlinkPanels && this.rightYear > this.leftYear + 1;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
data() {
|
|
135
|
+
return {
|
|
136
|
+
popperClass: '',
|
|
137
|
+
value: [],
|
|
138
|
+
defaultValue: null,
|
|
139
|
+
defaultTime: null,
|
|
140
|
+
minDate: '',
|
|
141
|
+
maxDate: '',
|
|
142
|
+
leftDate: new Date(),
|
|
143
|
+
rightDate: nextYear(new Date()),
|
|
144
|
+
rangeState: {
|
|
145
|
+
endDate: null,
|
|
146
|
+
selecting: false,
|
|
147
|
+
row: null,
|
|
148
|
+
column: null
|
|
149
|
+
},
|
|
150
|
+
shortcuts: '',
|
|
151
|
+
visible: '',
|
|
152
|
+
disabledDate: '',
|
|
153
|
+
format: '',
|
|
154
|
+
arrowControl: false,
|
|
155
|
+
unlinkPanels: false
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
watch: {
|
|
160
|
+
value(newVal) {
|
|
161
|
+
if (!newVal) {
|
|
162
|
+
this.minDate = null;
|
|
163
|
+
this.maxDate = null;
|
|
164
|
+
} else if (Array.isArray(newVal)) {
|
|
165
|
+
this.minDate = isDate(newVal[0]) ? new Date(newVal[0]) : null;
|
|
166
|
+
this.maxDate = isDate(newVal[1]) ? new Date(newVal[1]) : null;
|
|
167
|
+
if (this.minDate) {
|
|
168
|
+
this.leftDate = this.minDate;
|
|
169
|
+
if (this.unlinkPanels && this.maxDate) {
|
|
170
|
+
const minDateYear = this.minDate.getFullYear();
|
|
171
|
+
const maxDateYear = this.maxDate.getFullYear();
|
|
172
|
+
this.rightDate = minDateYear === maxDateYear
|
|
173
|
+
? nextYear(this.maxDate)
|
|
174
|
+
: this.maxDate;
|
|
175
|
+
} else {
|
|
176
|
+
this.rightDate = nextYear(this.leftDate);
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
this.leftDate = calcDefaultValue(this.defaultValue)[0];
|
|
180
|
+
this.rightDate = nextYear(this.leftDate);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
|
|
185
|
+
defaultValue(val) {
|
|
186
|
+
if (!Array.isArray(this.value)) {
|
|
187
|
+
const [left, right] = calcDefaultValue(val);
|
|
188
|
+
this.leftDate = left;
|
|
189
|
+
this.rightDate = val && val[1] && left.getFullYear() !== right.getFullYear() && this.unlinkPanels
|
|
190
|
+
? right
|
|
191
|
+
: nextYear(this.leftDate);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
methods: {
|
|
197
|
+
handleClear() {
|
|
198
|
+
this.minDate = null;
|
|
199
|
+
this.maxDate = null;
|
|
200
|
+
this.leftDate = calcDefaultValue(this.defaultValue)[0];
|
|
201
|
+
this.rightDate = nextYear(this.leftDate);
|
|
202
|
+
this.$emit('pick', null);
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
handleChangeRange(val) {
|
|
206
|
+
this.minDate = val.minDate;
|
|
207
|
+
this.maxDate = val.maxDate;
|
|
208
|
+
this.rangeState = val.rangeState;
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
handleRangePick(val, close = true) {
|
|
212
|
+
const defaultTime = this.defaultTime || [];
|
|
213
|
+
const minDate = modifyWithTimeString(val.minDate, defaultTime[0]);
|
|
214
|
+
const maxDate = modifyWithTimeString(val.maxDate, defaultTime[1]);
|
|
215
|
+
if (this.maxDate === maxDate && this.minDate === minDate) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
this.onPick && this.onPick(val);
|
|
219
|
+
this.maxDate = maxDate;
|
|
220
|
+
this.minDate = minDate;
|
|
221
|
+
|
|
222
|
+
// workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57
|
|
223
|
+
setTimeout(() => {
|
|
224
|
+
this.maxDate = maxDate;
|
|
225
|
+
this.minDate = minDate;
|
|
226
|
+
}, 10);
|
|
227
|
+
if (!close) return;
|
|
228
|
+
this.handleConfirm();
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
handleShortcutClick(shortcut) {
|
|
232
|
+
if (shortcut.onClick) {
|
|
233
|
+
shortcut.onClick(this);
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
// leftPrev*, rightNext* need to take care of `unlinkPanels`
|
|
238
|
+
leftPrevYear() {
|
|
239
|
+
this.leftDate = prevYear(this.leftDate);
|
|
240
|
+
if (!this.unlinkPanels) {
|
|
241
|
+
this.rightDate = prevYear(this.rightDate);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
rightNextYear() {
|
|
246
|
+
if (!this.unlinkPanels) {
|
|
247
|
+
this.leftDate = nextYear(this.leftDate);
|
|
248
|
+
}
|
|
249
|
+
this.rightDate = nextYear(this.rightDate);
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
// leftNext*, rightPrev* are called when `unlinkPanels` is true
|
|
253
|
+
leftNextYear() {
|
|
254
|
+
this.leftDate = nextYear(this.leftDate);
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
rightPrevYear() {
|
|
258
|
+
this.rightDate = prevYear(this.rightDate);
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
handleConfirm(visible = false) {
|
|
262
|
+
if (this.isValidValue([this.minDate, this.maxDate])) {
|
|
263
|
+
this.$emit('pick', [this.minDate, this.maxDate], visible);
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
|
|
267
|
+
isValidValue(value) {
|
|
268
|
+
return Array.isArray(value) &&
|
|
269
|
+
value && value[0] && value[1] &&
|
|
270
|
+
isDate(value[0]) && isDate(value[1]) &&
|
|
271
|
+
value[0].getTime() <= value[1].getTime() && (
|
|
272
|
+
typeof this.disabledDate === 'function'
|
|
273
|
+
? !this.disabledDate(value[0]) && !this.disabledDate(value[1])
|
|
274
|
+
: true
|
|
275
|
+
);
|
|
276
|
+
},
|
|
277
|
+
|
|
278
|
+
resetView() {
|
|
279
|
+
// NOTE: this is a hack to reset {min, max}Date on picker open.
|
|
280
|
+
// TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state
|
|
281
|
+
// an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView
|
|
282
|
+
this.minDate = this.value && isDate(this.value[0]) ? new Date(this.value[0]) : null;
|
|
283
|
+
this.maxDate = this.value && isDate(this.value[0]) ? new Date(this.value[1]) : null;
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
components: { MonthTable, ElInput, ElButton }
|
|
288
|
+
};
|
|
289
|
+
</script>
|