17e1fcf1
梁灏
init DatePicker
|
1
|
<template>
|
2533a192
梁灏
update DatePicker
|
2
|
<div :class="classes">
|
0f677893
梁灏
update DatePicker
|
3
4
5
6
7
8
9
10
11
12
|
<div :class="[prefixCls + '-sidebar']" v-if="shortcuts">
<div
:class="[prefixCls + '-shortcut']"
v-for="shortcut in shortcuts"
@click="handleShortcutClick(shortcut)">{{ shortcut.text }}</div>
</div>
<div :class="[prefixCls + '-body']">
<div :class="[datePrefixCls + '-header']" v-show="currentView !== 'time'">
<span
:class="iconBtnCls('prev', '-double')"
|
c46f385a
梁灏
update DatePicker
|
13
|
@click="prevYear"><Icon type="ios-arrow-left"></Icon></span>
|
0f677893
梁灏
update DatePicker
|
14
15
16
|
<span
:class="iconBtnCls('prev')"
@click="prevMonth"
|
c46f385a
梁灏
update DatePicker
|
17
|
v-show="currentView === 'date'"><Icon type="ios-arrow-left"></Icon></span>
|
0f677893
梁灏
update DatePicker
|
18
19
|
<span
:class="[datePrefixCls + '-header-label']"
|
c46f385a
梁灏
update DatePicker
|
20
|
@click="showYearPicker">{{ yearLabel }}</span>
|
0f677893
梁灏
update DatePicker
|
21
22
23
|
<span
:class="[datePrefixCls + '-header-label']"
@click="showMonthPicker"
|
c46f385a
梁灏
update DatePicker
|
24
25
26
27
|
v-show="currentView === 'date'">{{ month + 1 + '月' }}</span>
<span
:class="iconBtnCls('next', '-double')"
@click="nextYear"><Icon type="ios-arrow-right"></Icon></span>
|
0f677893
梁灏
update DatePicker
|
28
29
30
|
<span
:class="iconBtnCls('next')"
@click="nextMonth"
|
c46f385a
梁灏
update DatePicker
|
31
|
v-show="currentView === 'date'"><Icon type="ios-arrow-right"></Icon></span>
|
0f677893
梁灏
update DatePicker
|
32
33
34
|
</div>
<div :class="[prefixCls + '-content']">
<date-table
|
50637863
梁灏
update DatePicker
|
35
36
37
38
39
|
v-show="currentView === 'date'"
:year="year"
:month="month"
:date="date"
:value="value"
|
50637863
梁灏
update DatePicker
|
40
|
:selection-mode="selectionMode"
|
c46f385a
梁灏
update DatePicker
|
41
42
|
:disabled-date="disabledDate"
@on-pick="handleDatePick"></date-table>
|
0f677893
梁灏
update DatePicker
|
43
|
<year-table
|
c46f385a
梁灏
update DatePicker
|
44
45
46
47
|
v-ref:year-table
v-show="currentView === 'year'"
:year="year"
:date="date"
|
13be4434
梁灏
update DatePicker
|
48
|
:selection-mode="selectionMode"
|
c46f385a
梁灏
update DatePicker
|
49
50
|
:disabled-date="disabledDate"
@on-pick="handleYearPick"></year-table>
|
0f677893
梁灏
update DatePicker
|
51
|
<month-table
|
c46f385a
梁灏
update DatePicker
|
52
53
54
55
|
v-ref:month-table
v-show="currentView === 'month'"
:month="month"
:date="date"
|
13be4434
梁灏
update DatePicker
|
56
|
:selection-mode="selectionMode"
|
c46f385a
梁灏
update DatePicker
|
57
58
|
:disabled-date="disabledDate"
@on-pick="handleMonthPick"></month-table>
|
0f677893
梁灏
update DatePicker
|
59
60
61
|
</div>
</div>
</div>
|
17e1fcf1
梁灏
init DatePicker
|
62
63
|
</template>
<script>
|
c46f385a
梁灏
update DatePicker
|
64
|
import Icon from '../../icon/icon.vue';
|
0f677893
梁灏
update DatePicker
|
65
66
67
|
import DateTable from '../base/date-table.vue';
import YearTable from '../base/year-table.vue';
import MonthTable from '../base/month-table.vue';
|
c46f385a
梁灏
update DatePicker
|
68
|
import { formatDate, parseDate } from '../util';
|
0f677893
梁灏
update DatePicker
|
69
70
71
72
|
const prefixCls = 'ivu-picker-panel';
const datePrefixCls = 'ivu-date-picker';
|
17e1fcf1
梁灏
init DatePicker
|
73
|
export default {
|
c46f385a
梁灏
update DatePicker
|
74
|
components: { Icon, DateTable, YearTable, MonthTable },
|
17e1fcf1
梁灏
init DatePicker
|
75
|
data () {
|
0f677893
梁灏
update DatePicker
|
76
77
78
79
|
return {
prefixCls: prefixCls,
datePrefixCls: datePrefixCls,
shortcuts: [],
|
50637863
梁灏
update DatePicker
|
80
81
82
83
84
85
86
87
88
|
currentView: 'date',
date: new Date(),
value: '',
showTime: false,
selectionMode: 'day',
visible: false,
disabledDate: '',
year: null,
month: null,
|
50637863
梁灏
update DatePicker
|
89
90
91
92
93
|
showWeekNumber: false,
timePickerVisible: false
}
},
computed: {
|
2533a192
梁灏
update DatePicker
|
94
95
96
97
98
99
100
101
|
classes () {
return [
`${prefixCls}-body-wrapper`,
{
[`${prefixCls}-with-sidebar`]: this.shortcuts.length
}
]
},
|
c46f385a
梁灏
update DatePicker
|
102
103
104
105
106
107
108
109
110
|
yearLabel () {
const year = this.year;
if (!year) return '';
if (this.currentView === 'year') {
const startYear = Math.floor(year / 10) * 10;
return `${startYear}年 - ${startYear + 9}年`;
}
return `${year}年`
}
|
50637863
梁灏
update DatePicker
|
111
112
113
|
},
watch: {
value (newVal) {
|
c46f385a
梁灏
update DatePicker
|
114
|
if (!newVal) return;
|
50637863
梁灏
update DatePicker
|
115
116
117
118
119
120
121
122
123
124
|
newVal = new Date(newVal);
if (!isNaN(newVal)) {
// todo
// if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(newVal))) return;
this.date = newVal;
this.year = newVal.getFullYear();
this.month = newVal.getMonth();
// this.$emit('on-pick', newVal, true);
}
|
0f677893
梁灏
update DatePicker
|
125
|
}
|
17e1fcf1
梁灏
init DatePicker
|
126
|
},
|
0f677893
梁灏
update DatePicker
|
127
|
methods: {
|
c46f385a
梁灏
update DatePicker
|
128
129
130
131
|
handleClear() {
this.date = new Date();
this.$emit('on-pick', '');
},
|
0f677893
梁灏
update DatePicker
|
132
|
handleShortcutClick (shortcut) {
|
2533a192
梁灏
update DatePicker
|
133
134
|
if (shortcut.value) this.$emit('on-pick', shortcut.value());
if (shortcut.onClick) shortcut.onClick(this);
|
0f677893
梁灏
update DatePicker
|
135
136
137
138
139
140
141
142
|
},
iconBtnCls (direction, type = '') {
return [
`${prefixCls}-icon-btn`,
`${datePrefixCls}-${direction}-btn`,
`${datePrefixCls}-${direction}-btn-arrow${type}`,
]
},
|
c46f385a
梁灏
update DatePicker
|
143
144
145
|
resetDate () {
this.date = new Date(this.date);
},
|
0f677893
梁灏
update DatePicker
|
146
|
prevYear () {
|
c46f385a
梁灏
update DatePicker
|
147
148
149
150
151
152
153
|
if (this.currentView === 'year') {
this.$refs.yearTable.prevTenYear();
} else {
this.year--;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
154
155
|
},
nextYear () {
|
c46f385a
梁灏
update DatePicker
|
156
157
158
159
160
161
162
|
if (this.currentView === 'year') {
this.$refs.yearTable.nextTenYear();
} else {
this.year++;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
163
164
|
},
prevMonth () {
|
c46f385a
梁灏
update DatePicker
|
165
166
167
168
169
|
this.month--;
if (this.month < 0) {
this.month = 11;
this.year--;
}
|
0f677893
梁灏
update DatePicker
|
170
171
|
},
nextMonth () {
|
c46f385a
梁灏
update DatePicker
|
172
173
174
175
176
|
this.month++;
if (this.month > 11) {
this.month = 0;
this.year++;
}
|
0f677893
梁灏
update DatePicker
|
177
178
|
},
showYearPicker () {
|
c46f385a
梁灏
update DatePicker
|
179
|
this.currentView = 'year';
|
0f677893
梁灏
update DatePicker
|
180
181
|
},
showMonthPicker () {
|
c46f385a
梁灏
update DatePicker
|
182
183
184
185
186
|
this.currentView = 'month';
},
handleYearPick(year, close = true) {
this.year = year;
if (!close) return;
|
0f677893
梁灏
update DatePicker
|
187
|
|
c46f385a
梁灏
update DatePicker
|
188
189
|
this.date.setFullYear(year);
if (this.selectionMode === 'year') {
|
344131a7
梁灏
update DatePicker
|
190
|
this.$emit('on-pick', new Date(year, 0, 1));
|
c46f385a
梁灏
update DatePicker
|
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
} else {
this.currentView = 'month';
}
this.resetDate();
},
handleMonthPick (month) {
this.month = month;
const selectionMode = this.selectionMode;
if (selectionMode !== 'month') {
this.date.setMonth(month);
this.currentView = 'date';
this.resetDate();
} else {
this.date.setMonth(month);
this.year && this.date.setFullYear(this.year);
this.resetDate();
const value = new Date(this.date.getFullYear(), month, 1);
this.$emit('on-pick', value);
}
},
handleDatePick (value) {
if (this.selectionMode === 'day') {
if (!this.showTime) {
this.$emit('on-pick', new Date(value.getTime()));
}
this.date.setFullYear(value.getFullYear());
this.date.setMonth(value.getMonth());
this.date.setDate(value.getDate());
}
this.resetDate();
},
resetView() {
if (this.selectionMode === 'month') {
this.currentView = 'month';
} else if (this.selectionMode === 'year') {
this.currentView = 'year';
} else {
this.currentView = 'date';
}
this.year = this.date.getFullYear();
this.month = this.date.getMonth();
|
0f677893
梁灏
update DatePicker
|
235
236
|
}
},
|
50637863
梁灏
update DatePicker
|
237
238
239
240
241
242
243
244
245
|
compiled () {
if (this.selectionMode === 'month') {
this.currentView = 'month';
}
if (this.date && !this.year) {
this.year = this.date.getFullYear();
this.month = this.date.getMonth();
}
|
0f677893
梁灏
update DatePicker
|
246
|
}
|
17e1fcf1
梁灏
init DatePicker
|
247
248
|
}
</script>
|