Blame view

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