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
40
41
|
v-show="currentView === 'date'"
:year="year"
:month="month"
:date="date"
:value="value"
:week="week"
:selection-mode="selectionMode"
|
c46f385a
梁灏
update DatePicker
|
42
43
|
:disabled-date="disabledDate"
@on-pick="handleDatePick"></date-table>
|
0f677893
梁灏
update DatePicker
|
44
|
<year-table
|
c46f385a
梁灏
update DatePicker
|
45
46
47
48
49
50
|
v-ref:year-table
v-show="currentView === 'year'"
:year="year"
:date="date"
:disabled-date="disabledDate"
@on-pick="handleYearPick"></year-table>
|
0f677893
梁灏
update DatePicker
|
51
|
<month-table
|
c46f385a
梁灏
update DatePicker
|
52
53
54
55
56
57
|
v-ref:month-table
v-show="currentView === 'month'"
:month="month"
:date="date"
:disabled-date="disabledDate"
@on-pick="handleMonthPick"></month-table>
|
0f677893
梁灏
update DatePicker
|
58
59
60
|
</div>
</div>
</div>
|
17e1fcf1
梁灏
init DatePicker
|
61
62
|
</template>
<script>
|
c46f385a
梁灏
update DatePicker
|
63
|
import Icon from '../../icon/icon.vue';
|
0f677893
梁灏
update DatePicker
|
64
65
66
|
import DateTable from '../base/date-table.vue';
import YearTable from '../base/year-table.vue';
import MonthTable from '../base/month-table.vue';
|
c46f385a
梁灏
update DatePicker
|
67
|
import { formatDate, parseDate } from '../util';
|
0f677893
梁灏
update DatePicker
|
68
69
70
71
|
const prefixCls = 'ivu-picker-panel';
const datePrefixCls = 'ivu-date-picker';
|
17e1fcf1
梁灏
init DatePicker
|
72
|
export default {
|
c46f385a
梁灏
update DatePicker
|
73
|
components: { Icon, DateTable, YearTable, MonthTable },
|
17e1fcf1
梁灏
init DatePicker
|
74
|
data () {
|
0f677893
梁灏
update DatePicker
|
75
76
77
78
|
return {
prefixCls: prefixCls,
datePrefixCls: datePrefixCls,
shortcuts: [],
|
50637863
梁灏
update DatePicker
|
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
currentView: 'date',
date: new Date(),
value: '',
showTime: false,
selectionMode: 'day',
visible: false,
disabledDate: '',
year: null,
month: null,
week: null,
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
107
|
console.log(12331)
if (!newVal) return;
|
50637863
梁灏
update DatePicker
|
108
109
110
111
112
113
114
115
116
117
|
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
|
118
|
}
|
17e1fcf1
梁灏
init DatePicker
|
119
|
},
|
0f677893
梁灏
update DatePicker
|
120
|
methods: {
|
c46f385a
梁灏
update DatePicker
|
121
122
123
124
|
handleClear() {
this.date = new Date();
this.$emit('on-pick', '');
},
|
0f677893
梁灏
update DatePicker
|
125
126
127
128
129
130
131
132
133
134
|
handleShortcutClick (shortcut) {
},
iconBtnCls (direction, type = '') {
return [
`${prefixCls}-icon-btn`,
`${datePrefixCls}-${direction}-btn`,
`${datePrefixCls}-${direction}-btn-arrow${type}`,
]
},
|
c46f385a
梁灏
update DatePicker
|
135
136
137
|
resetDate () {
this.date = new Date(this.date);
},
|
0f677893
梁灏
update DatePicker
|
138
|
prevYear () {
|
c46f385a
梁灏
update DatePicker
|
139
140
141
142
143
144
145
|
if (this.currentView === 'year') {
this.$refs.yearTable.prevTenYear();
} else {
this.year--;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
146
147
|
},
nextYear () {
|
c46f385a
梁灏
update DatePicker
|
148
149
150
151
152
153
154
|
if (this.currentView === 'year') {
this.$refs.yearTable.nextTenYear();
} else {
this.year++;
this.date.setFullYear(this.year);
this.resetDate();
}
|
0f677893
梁灏
update DatePicker
|
155
156
|
},
prevMonth () {
|
c46f385a
梁灏
update DatePicker
|
157
158
159
160
161
|
this.month--;
if (this.month < 0) {
this.month = 11;
this.year--;
}
|
0f677893
梁灏
update DatePicker
|
162
163
|
},
nextMonth () {
|
c46f385a
梁灏
update DatePicker
|
164
165
166
167
168
|
this.month++;
if (this.month > 11) {
this.month = 0;
this.year++;
}
|
0f677893
梁灏
update DatePicker
|
169
170
|
},
showYearPicker () {
|
c46f385a
梁灏
update DatePicker
|
171
|
this.currentView = 'year';
|
0f677893
梁灏
update DatePicker
|
172
173
|
},
showMonthPicker () {
|
c46f385a
梁灏
update DatePicker
|
174
175
176
177
178
|
this.currentView = 'month';
},
handleYearPick(year, close = true) {
this.year = year;
if (!close) return;
|
0f677893
梁灏
update DatePicker
|
179
|
|
c46f385a
梁灏
update DatePicker
|
180
181
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
226
|
this.date.setFullYear(year);
if (this.selectionMode === 'year') {
this.$emit('on-pick', new Date(year));
} 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
|
227
228
|
}
},
|
50637863
梁灏
update DatePicker
|
229
230
231
232
233
234
235
236
237
|
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
|
238
|
}
|
17e1fcf1
梁灏
init DatePicker
|
239
240
|
}
</script>
|