Blame view

src/components/date-picker/panel/date.vue 9.88 KB
17e1fcf1   梁灏   init DatePicker
1
  <template>
2533a192   梁灏   update DatePicker
2
      <div :class="classes">
3cf7cfd1   梁灏   update DatePicker
3
          <div :class="[prefixCls + '-sidebar']" v-if="shortcuts.length">
0f677893   梁灏   update DatePicker
4
5
6
7
8
9
10
11
12
              <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
                      :disabled-date="disabledDate"
68e9b100   梁灏   update DatePicker
42
43
                      @on-pick="handleDatePick"
                      @on-pick-click="handlePickClick"></date-table>
0f677893   梁灏   update DatePicker
44
                  <year-table
c46f385a   梁灏   update DatePicker
45
46
47
48
                      v-ref:year-table
                      v-show="currentView === 'year'"
                      :year="year"
                      :date="date"
13be4434   梁灏   update DatePicker
49
                      :selection-mode="selectionMode"
c46f385a   梁灏   update DatePicker
50
                      :disabled-date="disabledDate"
68e9b100   梁灏   update DatePicker
51
52
                      @on-pick="handleYearPick"
                      @on-pick-click="handlePickClick"></year-table>
0f677893   梁灏   update DatePicker
53
                  <month-table
c46f385a   梁灏   update DatePicker
54
55
56
57
                      v-ref:month-table
                      v-show="currentView === 'month'"
                      :month="month"
                      :date="date"
13be4434   梁灏   update DatePicker
58
                      :selection-mode="selectionMode"
c46f385a   梁灏   update DatePicker
59
                      :disabled-date="disabledDate"
68e9b100   梁灏   update DatePicker
60
61
                      @on-pick="handleMonthPick"
                      @on-pick-click="handlePickClick"></month-table>
5cc9b892   梁灏   update DateTimePi...
62
63
64
65
66
                  <time-picker
                      v-show="currentView === 'time'"
                      v-ref:time-picker
                      :date="date"
                      :value="value"
acde7262   梁灏   update DateTimePi...
67
                      :format="format"
a8571a5f   梁灏   update DateTimePi...
68
                      show-date
5cc9b892   梁灏   update DateTimePi...
69
                      @on-pick="handleTimePick"></time-picker>
0f677893   梁灏   update DatePicker
70
              </div>
b9041a0d   梁灏   DatePicker add co...
71
72
              <Confirm
                  v-if="confirm"
5cc9b892   梁灏   update DateTimePi...
73
74
75
                  :show-time="showTime"
                  :is-time="isTime"
                  @on-pick-toggle-time="handleToggleTime"
b9041a0d   梁灏   DatePicker add co...
76
77
                  @on-pick-clear="handlePickClear"
                  @on-pick-success="handlePickSuccess"></Confirm>
0f677893   梁灏   update DatePicker
78
79
          </div>
      </div>
17e1fcf1   梁灏   init DatePicker
80
81
  </template>
  <script>
c46f385a   梁灏   update DatePicker
82
      import Icon from '../../icon/icon.vue';
0f677893   梁灏   update DatePicker
83
84
85
      import DateTable from '../base/date-table.vue';
      import YearTable from '../base/year-table.vue';
      import MonthTable from '../base/month-table.vue';
5cc9b892   梁灏   update DateTimePi...
86
      import TimePicker from './time.vue';
b9041a0d   梁灏   DatePicker add co...
87
      import Confirm from '../base/confirm.vue';
0f677893   梁灏   update DatePicker
88
  
3cf7cfd1   梁灏   update DatePicker
89
90
      import Mixin from './mixin';
  
5cc9b892   梁灏   update DateTimePi...
91
92
      import { initTimeDate } from '../util';
  
0f677893   梁灏   update DatePicker
93
94
95
      const prefixCls = 'ivu-picker-panel';
      const datePrefixCls = 'ivu-date-picker';
  
17e1fcf1   梁灏   init DatePicker
96
      export default {
3cf7cfd1   梁灏   update DatePicker
97
          mixins: [Mixin],
5cc9b892   梁灏   update DateTimePi...
98
          components: { Icon, DateTable, YearTable, MonthTable, TimePicker, Confirm },
17e1fcf1   梁灏   init DatePicker
99
          data () {
0f677893   梁灏   update DatePicker
100
101
102
103
              return {
                  prefixCls: prefixCls,
                  datePrefixCls: datePrefixCls,
                  shortcuts: [],
50637863   梁灏   update DatePicker
104
                  currentView: 'date',
5cc9b892   梁灏   update DateTimePi...
105
                  date: initTimeDate(),
50637863   梁灏   update DatePicker
106
107
108
                  value: '',
                  showTime: false,
                  selectionMode: 'day',
50637863   梁灏   update DatePicker
109
110
111
                  disabledDate: '',
                  year: null,
                  month: null,
5cc9b892   梁灏   update DateTimePi...
112
                  confirm: false,
acde7262   梁灏   update DateTimePi...
113
114
                  isTime: false,
                  format: 'yyyy-MM-dd'
b0893113   jingsam   :art: add eslint
115
              };
50637863   梁灏   update DatePicker
116
117
          },
          computed: {
2533a192   梁灏   update DatePicker
118
119
120
121
122
123
              classes () {
                  return [
                      `${prefixCls}-body-wrapper`,
                      {
                          [`${prefixCls}-with-sidebar`]: this.shortcuts.length
                      }
b0893113   jingsam   :art: add eslint
124
                  ];
2533a192   梁灏   update DatePicker
125
              },
c46f385a   梁灏   update DatePicker
126
127
128
129
130
131
132
              yearLabel () {
                  const year = this.year;
                  if (!year) return '';
                  if (this.currentView === 'year') {
                      const startYear = Math.floor(year / 10) * 10;
                      return `${startYear}年 - ${startYear + 9}年`;
                  }
0a5c5f41   梁灏   update DatePicker
133
                  return `${year}年`;
c46f385a   梁灏   update DatePicker
134
              }
50637863   梁灏   update DatePicker
135
136
137
          },
          watch: {
              value (newVal) {
c46f385a   梁灏   update DatePicker
138
                  if (!newVal) return;
50637863   梁灏   update DatePicker
139
140
                  newVal = new Date(newVal);
                  if (!isNaN(newVal)) {
50637863   梁灏   update DatePicker
141
142
143
                      this.date = newVal;
                      this.year = newVal.getFullYear();
                      this.month = newVal.getMonth();
50637863   梁灏   update DatePicker
144
                  }
5cc9b892   梁灏   update DateTimePi...
145
146
147
              },
              currentView (val) {
                  if (val === 'time') this.$refs.timePicker.updateScroll();
0f677893   梁灏   update DatePicker
148
              }
17e1fcf1   梁灏   init DatePicker
149
          },
0f677893   梁灏   update DatePicker
150
          methods: {
f92ef70f   梁灏   update DatePicker
151
152
153
              resetDate () {
                  this.date = new Date(this.date);
              },
5cc9b892   梁灏   update DateTimePi...
154
              handleClear () {
c46f385a   梁灏   update DatePicker
155
156
                  this.date = new Date();
                  this.$emit('on-pick', '');
5cc9b892   梁灏   update DateTimePi...
157
                  if (this.showTime) this.$refs.timePicker.handleClear();
c46f385a   梁灏   update DatePicker
158
              },
5cc9b892   梁灏   update DateTimePi...
159
160
161
162
163
164
165
166
167
              resetView (reset = false) {
                  if (this.currentView !== 'time' || reset) {
                      if (this.selectionMode === 'month') {
                          this.currentView = 'month';
                      } else if (this.selectionMode === 'year') {
                          this.currentView = 'year';
                      } else {
                          this.currentView = 'date';
                      }
0a5c5f41   梁灏   update DatePicker
168
169
170
171
                  }
  
                  this.year = this.date.getFullYear();
                  this.month = this.date.getMonth();
c46f385a   梁灏   update DatePicker
172
              },
0f677893   梁灏   update DatePicker
173
              prevYear () {
c46f385a   梁灏   update DatePicker
174
175
176
177
178
179
180
                  if (this.currentView === 'year') {
                      this.$refs.yearTable.prevTenYear();
                  } else {
                      this.year--;
                      this.date.setFullYear(this.year);
                      this.resetDate();
                  }
0f677893   梁灏   update DatePicker
181
182
              },
              nextYear () {
c46f385a   梁灏   update DatePicker
183
184
185
186
187
188
189
                  if (this.currentView === 'year') {
                      this.$refs.yearTable.nextTenYear();
                  } else {
                      this.year++;
                      this.date.setFullYear(this.year);
                      this.resetDate();
                  }
0f677893   梁灏   update DatePicker
190
191
              },
              prevMonth () {
c46f385a   梁灏   update DatePicker
192
193
194
195
196
                  this.month--;
                  if (this.month < 0) {
                      this.month = 11;
                      this.year--;
                  }
0f677893   梁灏   update DatePicker
197
198
              },
              nextMonth () {
c46f385a   梁灏   update DatePicker
199
200
201
202
203
                  this.month++;
                  if (this.month > 11) {
                      this.month = 0;
                      this.year++;
                  }
0f677893   梁灏   update DatePicker
204
205
              },
              showYearPicker () {
c46f385a   梁灏   update DatePicker
206
                  this.currentView = 'year';
0f677893   梁灏   update DatePicker
207
208
              },
              showMonthPicker () {
c46f385a   梁灏   update DatePicker
209
210
                  this.currentView = 'month';
              },
5cc9b892   梁灏   update DateTimePi...
211
212
213
214
215
216
217
218
219
              handleToggleTime () {
                  if (this.currentView === 'date') {
                      this.currentView = 'time';
                      this.isTime = true;
                  } else if (this.currentView === 'time') {
                      this.currentView = 'date';
                      this.isTime = false;
                  }
              },
c46f385a   梁灏   update DatePicker
220
221
222
              handleYearPick(year, close = true) {
                  this.year = year;
                  if (!close) return;
0f677893   梁灏   update DatePicker
223
  
c46f385a   梁灏   update DatePicker
224
225
                  this.date.setFullYear(year);
                  if (this.selectionMode === 'year') {
344131a7   梁灏   update DatePicker
226
                      this.$emit('on-pick', new Date(year, 0, 1));
c46f385a   梁灏   update DatePicker
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
                  } 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') {
5cc9b892   梁灏   update DateTimePi...
250
                      this.$emit('on-pick', new Date(value.getTime()));
c46f385a   梁灏   update DatePicker
251
252
253
254
255
256
                      this.date.setFullYear(value.getFullYear());
                      this.date.setMonth(value.getMonth());
                      this.date.setDate(value.getDate());
                  }
  
                  this.resetDate();
5cc9b892   梁灏   update DateTimePi...
257
258
259
              },
              handleTimePick (date) {
                  this.handleDatePick(date);
0f677893   梁灏   update DatePicker
260
261
              }
          },
50637863   梁灏   update DatePicker
262
263
264
265
266
267
268
269
270
          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
271
          }
b0893113   jingsam   :art: add eslint
272
273
      };
  </script>