17e1fcf1
梁灏
init DatePicker
|
1
|
<template>
|
0f677893
梁灏
update DatePicker
|
2
3
4
5
6
7
8
9
10
11
12
|
<div :class="[prefixCls + '-body-wrapper']">
<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: {
|
c46f385a
梁灏
update DatePicker
|
94
95
96
97
98
99
100
101
102
|
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
|
103
104
105
|
},
watch: {
value (newVal) {
|
c46f385a
梁灏
update DatePicker
|
106
|
if (!newVal) return;
|
50637863
梁灏
update DatePicker
|
107
108
109
110
111
112
113
114
115
116
|
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
|
117
|
}
|
17e1fcf1
梁灏
init DatePicker
|
118
|
},
|
0f677893
梁灏
update DatePicker
|
119
|
methods: {
|
c46f385a
梁灏
update DatePicker
|
120
121
122
123
|
handleClear() {
this.date = new Date();
this.$emit('on-pick', '');
},
|
0f677893
梁灏
update DatePicker
|
124
125
126
127
128
129
130
131
132
133
|
handleShortcutClick (shortcut) {
},
iconBtnCls (direction, type = '') {
return [
`${prefixCls}-icon-btn`,
`${datePrefixCls}-${direction}-btn`,
`${datePrefixCls}-${direction}-btn-arrow${type}`,
]
},
|
c46f385a
梁灏
update DatePicker
|
134
135
136
|
resetDate () {
this.date = new Date(this.date);
},
|
0f677893
梁灏
update DatePicker
|
137
|
prevYear () {
|
c46f385a
梁灏
update DatePicker
|
138
139
140
141
142
143
144
|
if (this.currentView === 'year') {
this.$refs.yearTable.prevTenYear();
} else {
this.year--;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
145
146
|
},
nextYear () {
|
c46f385a
梁灏
update DatePicker
|
147
148
149
150
151
152
153
|
if (this.currentView === 'year') {
this.$refs.yearTable.nextTenYear();
} else {
this.year++;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
154
155
|
},
prevMonth () {
|
c46f385a
梁灏
update DatePicker
|
156
157
158
159
160
|
this.month--;
if (this.month < 0) {
this.month = 11;
this.year--;
}
|
0f677893
梁灏
update DatePicker
|
161
162
|
},
nextMonth () {
|
c46f385a
梁灏
update DatePicker
|
163
164
165
166
167
|
this.month++;
if (this.month > 11) {
this.month = 0;
this.year++;
}
|
0f677893
梁灏
update DatePicker
|
168
169
|
},
showYearPicker () {
|
c46f385a
梁灏
update DatePicker
|
170
|
this.currentView = 'year';
|
0f677893
梁灏
update DatePicker
|
171
172
|
},
showMonthPicker () {
|
c46f385a
梁灏
update DatePicker
|
173
174
175
176
177
|
this.currentView = 'month';
},
handleYearPick(year, close = true) {
this.year = year;
if (!close) return;
|
0f677893
梁灏
update DatePicker
|
178
|
|
c46f385a
梁灏
update DatePicker
|
179
180
|
this.date.setFullYear(year);
if (this.selectionMode === 'year') {
|
344131a7
梁灏
update DatePicker
|
181
|
this.$emit('on-pick', new Date(year, 0, 1));
|
c46f385a
梁灏
update DatePicker
|
182
183
184
185
186
187
188
189
190
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
|
} 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
|
226
227
|
}
},
|
50637863
梁灏
update DatePicker
|
228
229
230
231
232
233
234
235
236
|
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
|
237
|
}
|
17e1fcf1
梁灏
init DatePicker
|
238
239
|
}
</script>
|