Blame view

src/components/date-picker/panel/date.vue 10 KB
17e1fcf1   梁灏   init DatePicker
1
  <template>
030a522d   Sergio Crisostomo   make picker close...
2
      <div :class="classes" @mousedown.prevent>
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')"
e9c0d047   Sergio Crisostomo   refactor and redu...
13
                      @click="changeYear(-1)"><Icon type="ios-arrow-left"></Icon></span>
0f677893   梁灏   update DatePicker
14
15
                  <span
                      :class="iconBtnCls('prev')"
e9c0d047   Sergio Crisostomo   refactor and redu...
16
                      @click="changeMonth(-1)"
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"
4ab11811   梁灏   some component su...
24
                      v-show="currentView === 'date'">{{ monthLabel }}</span>
c46f385a   梁灏   update DatePicker
25
26
                  <span
                      :class="iconBtnCls('next', '-double')"
e9c0d047   Sergio Crisostomo   refactor and redu...
27
                      @click="changeYear(+1)"><Icon type="ios-arrow-right"></Icon></span>
0f677893   梁灏   update DatePicker
28
29
                  <span
                      :class="iconBtnCls('next')"
e9c0d047   Sergio Crisostomo   refactor and redu...
30
                      @click="changeMonth(+1)"
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
531cd165   梁灏   support DatePicke...
45
                      ref="yearTable"
c46f385a   梁灏   update DatePicker
46
47
48
                      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
531cd165   梁灏   support DatePicke...
54
                      ref="monthTable"
c46f385a   梁灏   update DatePicker
55
56
57
                      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
                  <time-picker
531cd165   梁灏   support DatePicke...
63
                      ref="timePicker"
a8571a5f   梁灏   update DateTimePi...
64
                      show-date
2dc27713   梁灏   update DateTimePi...
65
                      v-show="currentView === 'time'"
a2a78c38   梁灏   update DateTimePi...
66
67
                      @on-pick="handleTimePick"
                      @on-pick-click="handlePickClick"></time-picker>
0f677893   梁灏   update DatePicker
68
              </div>
b9041a0d   梁灏   DatePicker add co...
69
70
              <Confirm
                  v-if="confirm"
5cc9b892   梁灏   update DateTimePi...
71
72
73
                  :show-time="showTime"
                  :is-time="isTime"
                  @on-pick-toggle-time="handleToggleTime"
b9041a0d   梁灏   DatePicker add co...
74
75
                  @on-pick-clear="handlePickClear"
                  @on-pick-success="handlePickSuccess"></Confirm>
0f677893   梁灏   update DatePicker
76
77
          </div>
      </div>
17e1fcf1   梁灏   init DatePicker
78
79
  </template>
  <script>
c46f385a   梁灏   update DatePicker
80
      import Icon from '../../icon/icon.vue';
0f677893   梁灏   update DatePicker
81
82
83
      import DateTable from '../base/date-table.vue';
      import YearTable from '../base/year-table.vue';
      import MonthTable from '../base/month-table.vue';
5cc9b892   梁灏   update DateTimePi...
84
      import TimePicker from './time.vue';
b9041a0d   梁灏   DatePicker add co...
85
      import Confirm from '../base/confirm.vue';
0f677893   梁灏   update DatePicker
86
  
3cf7cfd1   梁灏   update DatePicker
87
      import Mixin from './mixin';
4ab11811   梁灏   some component su...
88
      import Locale from '../../../mixins/locale';
3cf7cfd1   梁灏   update DatePicker
89
  
e9c0d047   Sergio Crisostomo   refactor and redu...
90
      import { initTimeDate, siblingMonth } from '../util';
5cc9b892   梁灏   update DateTimePi...
91
  
0f677893   梁灏   update DatePicker
92
93
94
      const prefixCls = 'ivu-picker-panel';
      const datePrefixCls = 'ivu-date-picker';
  
17e1fcf1   梁灏   init DatePicker
95
      export default {
a2a78c38   梁灏   update DateTimePi...
96
          name: 'DatePicker',
4ab11811   梁灏   some component su...
97
          mixins: [ Mixin, Locale ],
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
              yearLabel () {
4ab11811   梁灏   some component su...
127
                  const tYear = this.t('i.datepicker.year');
c46f385a   梁灏   update DatePicker
128
129
130
131
                  const year = this.year;
                  if (!year) return '';
                  if (this.currentView === 'year') {
                      const startYear = Math.floor(year / 10) * 10;
4ab11811   梁灏   some component su...
132
                      return `${startYear}${tYear} - ${startYear + 9}${tYear}`;
c46f385a   梁灏   update DatePicker
133
                  }
4ab11811   梁灏   some component su...
134
135
136
137
138
                  return `${year}${tYear}`;
              },
              monthLabel () {
                  const month = this.month + 1;
                  return this.t(`i.datepicker.month${month}`);
c46f385a   梁灏   update DatePicker
139
              }
50637863   梁灏   update DatePicker
140
141
142
          },
          watch: {
              value (newVal) {
c46f385a   梁灏   update DatePicker
143
                  if (!newVal) return;
50637863   梁灏   update DatePicker
144
145
                  newVal = new Date(newVal);
                  if (!isNaN(newVal)) {
50637863   梁灏   update DatePicker
146
                      this.date = newVal;
e9c0d047   Sergio Crisostomo   refactor and redu...
147
                      this.setMonthYear(newVal);
50637863   梁灏   update DatePicker
148
                  }
36931442   梁灏   update DateTimePi...
149
150
151
152
153
154
155
                  if (this.showTime) this.$refs.timePicker.value = newVal;
              },
              date (val) {
                  if (this.showTime) this.$refs.timePicker.date = val;
              },
              format (val) {
                  if (this.showTime) this.$refs.timePicker.format = val;
5cc9b892   梁灏   update DateTimePi...
156
157
158
              },
              currentView (val) {
                  if (val === 'time') this.$refs.timePicker.updateScroll();
0f677893   梁灏   update DatePicker
159
              }
17e1fcf1   梁灏   init DatePicker
160
          },
0f677893   梁灏   update DatePicker
161
          methods: {
f92ef70f   梁灏   update DatePicker
162
163
164
              resetDate () {
                  this.date = new Date(this.date);
              },
e9c0d047   Sergio Crisostomo   refactor and redu...
165
166
167
168
              setMonthYear(date){
                  this.month = date.getMonth();
                  this.year = date.getFullYear();
              },
5cc9b892   梁灏   update DateTimePi...
169
              handleClear () {
c46f385a   梁灏   update DatePicker
170
171
                  this.date = new Date();
                  this.$emit('on-pick', '');
5cc9b892   梁灏   update DateTimePi...
172
                  if (this.showTime) this.$refs.timePicker.handleClear();
c46f385a   梁灏   update DatePicker
173
              },
5cc9b892   梁灏   update DateTimePi...
174
175
176
177
178
179
180
181
182
              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
183
                  }
e9c0d047   Sergio Crisostomo   refactor and redu...
184
                  this.setMonthYear(this.date);
356953d9   梁灏   fixed #201
185
                  if (reset) this.isTime = false;
c46f385a   梁灏   update DatePicker
186
              },
e9c0d047   Sergio Crisostomo   refactor and redu...
187
              changeYear(dir){
c46f385a   梁灏   update DatePicker
188
                  if (this.currentView === 'year') {
e9c0d047   Sergio Crisostomo   refactor and redu...
189
                      this.$refs.yearTable[dir == 1 ? 'nextTenYear' : 'prevTenYear']();
c46f385a   梁灏   update DatePicker
190
                  } else {
e9c0d047   Sergio Crisostomo   refactor and redu...
191
192
                      this.year+= dir;
                      this.date = siblingMonth(this.date, dir * 12);
c46f385a   梁灏   update DatePicker
193
                  }
0f677893   梁灏   update DatePicker
194
              },
e9c0d047   Sergio Crisostomo   refactor and redu...
195
196
197
              changeMonth(dir){
                  this.date = siblingMonth(this.date, dir);
                  this.setMonthYear(this.date);
0f677893   梁灏   update DatePicker
198
199
              },
              showYearPicker () {
c46f385a   梁灏   update DatePicker
200
                  this.currentView = 'year';
0f677893   梁灏   update DatePicker
201
202
              },
              showMonthPicker () {
c46f385a   梁灏   update DatePicker
203
204
                  this.currentView = 'month';
              },
5cc9b892   梁灏   update DateTimePi...
205
206
207
208
209
210
211
212
213
              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
214
215
216
              handleYearPick(year, close = true) {
                  this.year = year;
                  if (!close) return;
0f677893   梁灏   update DatePicker
217
  
c46f385a   梁灏   update DatePicker
218
219
                  this.date.setFullYear(year);
                  if (this.selectionMode === 'year') {
344131a7   梁灏   update DatePicker
220
                      this.$emit('on-pick', new Date(year, 0, 1));
c46f385a   梁灏   update DatePicker
221
222
223
224
225
226
227
228
                  } else {
                      this.currentView = 'month';
                  }
  
                  this.resetDate();
              },
              handleMonthPick (month) {
                  this.month = month;
e9c0d047   Sergio Crisostomo   refactor and redu...
229
230
                  this.date.setMonth(month);
                  if (this.selectionMode !== 'month') {
c46f385a   梁灏   update DatePicker
231
232
233
                      this.currentView = 'date';
                      this.resetDate();
                  } else {
c46f385a   梁灏   update DatePicker
234
235
236
237
238
239
240
241
                      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...
242
                      this.$emit('on-pick', new Date(value.getTime()));
e9c0d047   Sergio Crisostomo   refactor and redu...
243
                      this.date = new Date(value);
c46f385a   梁灏   update DatePicker
244
                  }
5cc9b892   梁灏   update DateTimePi...
245
246
247
              },
              handleTimePick (date) {
                  this.handleDatePick(date);
0f677893   梁灏   update DatePicker
248
249
              }
          },
531cd165   梁灏   support DatePicke...
250
          mounted () {
50637863   梁灏   update DatePicker
251
252
253
254
255
              if (this.selectionMode === 'month') {
                  this.currentView = 'month';
              }
  
              if (this.date && !this.year) {
e9c0d047   Sergio Crisostomo   refactor and redu...
256
                  this.setMonthYear(this.date);
50637863   梁灏   update DatePicker
257
              }
36931442   梁灏   update DateTimePi...
258
              if (this.showTime) {
2dc27713   梁灏   update DateTimePi...
259
                  // todo 这里可能有问题,并不能进入到这里,但不影响正常使用
36931442   梁灏   update DateTimePi...
260
261
262
263
264
                  this.$refs.timePicker.date = this.date;
                  this.$refs.timePicker.value = this.value;
                  this.$refs.timePicker.format = this.format;
                  this.$refs.timePicker.showDate = true;
              }
0f677893   梁灏   update DatePicker
265
          }
b0893113   jingsam   :art: add eslint
266
267
      };
  </script>