Commit c4e3fe331f8e4db897652a46f4ace5b6f231698a

Authored by Sergio Crisostomo
1 parent e32b86e9

move date-range.vue to subfolder

src/components/date-picker/panel/Date/date-range.vue 0 → 100644
  1 +<template>
  2 + <div :class="classes" @mousedown.prevent>
  3 + <div :class="[prefixCls + '-sidebar']" v-if="shortcuts.length">
  4 + <div
  5 + :class="[prefixCls + '-shortcut']"
  6 + v-for="shortcut in shortcuts"
  7 + @click="handleShortcutClick(shortcut)">{{ shortcut.text }}</div>
  8 + </div>
  9 + <div :class="[prefixCls + '-body']">
  10 + <div :class="[prefixCls + '-content', prefixCls + '-content-left']" v-show="!isTime">
  11 + <div :class="[datePrefixCls + '-header']" v-show="currentView !== 'time'">
  12 + <span
  13 + :class="iconBtnCls('prev', '-double')"
  14 + @click="prevYear('left')"><Icon type="ios-arrow-left"></Icon></span>
  15 + <span
  16 + :class="iconBtnCls('prev')"
  17 + @click="prevMonth('left')"
  18 + v-show="currentView === 'date'"><Icon type="ios-arrow-left"></Icon></span>
  19 + <date-panel-label
  20 + :date-panel-label="leftDatePanelLabel"
  21 + :current-view="currentView"
  22 + :date-prefix-cls="datePrefixCls"></date-panel-label>
  23 + <span
  24 + :class="iconBtnCls('next', '-double')"
  25 + @click="nextYear('left')"><Icon type="ios-arrow-right"></Icon></span>
  26 + <span
  27 + :class="iconBtnCls('next')"
  28 + @click="nextMonth('left')"
  29 + v-show="currentView === 'date'"><Icon type="ios-arrow-right"></Icon></span>
  30 + </div>
  31 + <component
  32 + :is="pickerTable"
  33 + ref="leftYearTable"
  34 + v-if="currentView !== 'time'"
  35 + :table-date="leftPanelDate"
  36 + selection-mode="range"
  37 + :disabled-date="disabledDate"
  38 + :range-state="rangeState"
  39 + :value="dates"
  40 + @on-change-range="handleChangeRange"
  41 + @on-pick="handleRangePick"
  42 + @on-pick-click="handlePickClick"
  43 + ></component>
  44 + </div>
  45 + <div :class="[prefixCls + '-content', prefixCls + '-content-right']" v-show="!isTime">
  46 + <div :class="[datePrefixCls + '-header']" v-show="currentView !== 'time'">
  47 + <span
  48 + :class="iconBtnCls('prev', '-double')"
  49 + @click="prevYear('right')"><Icon type="ios-arrow-left"></Icon></span>
  50 + <span
  51 + :class="iconBtnCls('prev')"
  52 + @click="prevMonth('right')"
  53 + v-show="currentView === 'date'"><Icon type="ios-arrow-left"></Icon></span>
  54 + <date-panel-label
  55 + :date-panel-label="rightDatePanelLabel"
  56 + :current-view="currentView"
  57 + :date-prefix-cls="datePrefixCls"></date-panel-label>
  58 + <span
  59 + :class="iconBtnCls('next', '-double')"
  60 + @click="nextYear('right')"><Icon type="ios-arrow-right"></Icon></span>
  61 + <span
  62 + :class="iconBtnCls('next')"
  63 + @click="nextMonth('right')"
  64 + v-show="currentView === 'date'"><Icon type="ios-arrow-right"></Icon></span>
  65 + </div>
  66 + <component
  67 + :is="pickerTable"
  68 + ref="rightYearTable"
  69 + v-if="currentView !== 'time'"
  70 + :table-date="rightPanelDate"
  71 + selection-mode="range"
  72 + :range-state="rangeState"
  73 + :disabled-date="disabledDate"
  74 + :value="dates"
  75 + @on-change-range="handleChangeRange"
  76 + @on-pick="handleRangePick"
  77 + @on-pick-click="handlePickClick"></component>
  78 + </div>
  79 + <div :class="[prefixCls + '-content']" v-show="isTime">
  80 + <time-picker
  81 + ref="timePicker"
  82 + v-if="currentView === 'time'"
  83 + :value="dates"
  84 + :format="format"
  85 + :time-disabled="timeDisabled"
  86 + @on-pick="handleRangePick"
  87 + @on-pick-click="handlePickClick"
  88 + @on-pick-clear="handlePickClear"
  89 + @on-pick-success="handlePickSuccess"
  90 + @on-pick-toggle-time="handleToggleTime"
  91 + ></time-picker>
  92 + </div>
  93 + <Confirm
  94 + v-if="confirm"
  95 + :show-time="showTime"
  96 + :is-time="isTime"
  97 + :time-disabled="timeDisabled"
  98 + @on-pick-toggle-time="handleToggleTime"
  99 + @on-pick-clear="handlePickClear"
  100 + @on-pick-success="handlePickSuccess"></Confirm>
  101 + </div>
  102 + </div>
  103 +</template>
  104 +<script>
  105 + import Icon from '../../../icon/icon.vue';
  106 + import DateTable from '../../base/date-table.vue';
  107 + import YearTable from '../../base/year-table.vue';
  108 + import MonthTable from '../../base/month-table.vue';
  109 + import TimePicker from '../Time/time-range.vue';
  110 + import Confirm from '../../base/confirm.vue';
  111 +
  112 + import { toDate, initTimeDate, formatDateLabels } from '../../util';
  113 + import datePanelLabel from './date-panel-label.vue';
  114 +
  115 + import Mixin from '../panel-mixin';
  116 + import DateMixin from './date-panel-mixin';
  117 + import Locale from '../../../../mixins/locale';
  118 +
  119 + const prefixCls = 'ivu-picker-panel';
  120 + const datePrefixCls = 'ivu-date-picker';
  121 +
  122 +
  123 + export default {
  124 + name: 'RangeDatePickerPanel',
  125 + mixins: [ Mixin, Locale, DateMixin ],
  126 + components: { Icon, DateTable, YearTable, MonthTable, TimePicker, Confirm, datePanelLabel },
  127 + props: {
  128 + // in the mixin
  129 + },
  130 + data(){
  131 + const [minDate, maxDate] = this.value.map(date => date || initTimeDate());
  132 + return {
  133 + prefixCls: prefixCls,
  134 + datePrefixCls: datePrefixCls,
  135 + dates: this.value,
  136 + rangeState: {from: this.value[0], to: this.value[1], selecting: minDate && !maxDate},
  137 + currentView: this.selectionMode || 'range',
  138 + leftPanelDate: minDate,
  139 + rightPanelDate: new Date(minDate.getFullYear(), minDate.getMonth() + 1, minDate.getDate())
  140 + };
  141 + },
  142 + computed: {
  143 + classes(){
  144 + return [
  145 + `${prefixCls}-body-wrapper`,
  146 + `${datePrefixCls}-with-range`,
  147 + {
  148 + [`${prefixCls}-with-sidebar`]: this.shortcuts.length
  149 + }
  150 + ];
  151 + },
  152 + pickerTable(){
  153 + return `${this.currentView}-table`;
  154 + },
  155 + leftDatePanelLabel(){
  156 + return this.panelLabelConfig('left');
  157 + },
  158 + rightDatePanelLabel(){
  159 + return this.panelLabelConfig('right');
  160 + },
  161 + timeDisabled(){
  162 + return !(this.dates[0] && this.dates[1]);
  163 + }
  164 + },
  165 + watch: {
  166 + value(newVal) {
  167 + const minDate = newVal[0] ? toDate(newVal[0]) : null;
  168 + const maxDate = newVal[1] ? toDate(newVal[1]) : null;
  169 + this.dates = [minDate, maxDate];
  170 + this.rangeState = {
  171 + from: minDate,
  172 + to: maxDate,
  173 + selecting: false
  174 + };
  175 + },
  176 + currentView(currentView){
  177 + const leftMonth = this.leftPanelDate.getMonth();
  178 + const rightMonth = this.rightPanelDate.getMonth();
  179 + const isSameYear = this.leftPanelDate.getFullYear() === this.rightPanelDate.getFullYear();
  180 +
  181 + if (currentView === 'date' && isSameYear && leftMonth === rightMonth){
  182 + this.changePanelDate('right', 'Month', 1);
  183 + }
  184 + if (currentView === 'month' && isSameYear){
  185 + this.changePanelDate('right', 'FullYear', 1);
  186 + }
  187 + if (currentView === 'year' && isSameYear){
  188 + this.changePanelDate('right', 'FullYear', 10);
  189 + }
  190 + }
  191 + },
  192 + methods: {
  193 + panelLabelConfig (direction) {
  194 + const locale = this.t('i.locale');
  195 + const datePanelLabel = this.t('i.datepicker.datePanelLabel');
  196 + const handler = type => {
  197 + const fn = type == 'month' ? this.showMonthPicker : this.showYearPicker;
  198 + return () => fn(direction);
  199 + };
  200 +
  201 + const date = this[`${direction}PanelDate`];
  202 + const { labels, separator } = formatDateLabels(locale, datePanelLabel, date);
  203 +
  204 + return {
  205 + separator: separator,
  206 + labels: labels.map(obj => ((obj.handler = handler(obj.type)), obj))
  207 + };
  208 + },
  209 + prevYear (direction) {
  210 + this.changePanelDate(direction, 'FullYear', -1);
  211 + },
  212 + nextYear (direction) {
  213 + this.changePanelDate(direction, 'FullYear', 1);
  214 + },
  215 + prevMonth(direction){
  216 + this.changePanelDate(direction, 'Month', -1);
  217 + },
  218 + nextMonth(direction){
  219 + this.changePanelDate(direction, 'Month', 1);
  220 + },
  221 + changePanelDate(panel, type, increment){
  222 + const current = new Date(this[`${panel}PanelDate`]);
  223 + current[`set${type}`](current[`get${type}`]() + increment);
  224 + this[`${panel}PanelDate`] = current;
  225 +
  226 + // change other panels if they overlap
  227 + const otherPanel = panel === 'left' ? 'right' : 'left';
  228 + if (panel === 'left' && this.leftPanelDate >= this.rightPanelDate){
  229 + this.changePanelDate(otherPanel, type, 1);
  230 + }
  231 + if (panel === 'right' && this.rightPanelDate <= this.leftPanelDate){
  232 + this.changePanelDate(otherPanel, type, -1);
  233 + }
  234 + },
  235 + showYearPicker () {
  236 + this.currentView = 'year';
  237 + },
  238 + showMonthPicker () {
  239 + this.currentView = 'month';
  240 + },
  241 + handleRangePick (val) {
  242 + if (this.rangeState.selecting || this.currentView === 'time'){
  243 + const [minDate, maxDate] = [this.rangeState.from, val].sort((a, b) => a - b);
  244 + this.dates = [minDate, maxDate];
  245 + if (this.currentView === 'time'){
  246 + this.dates = val;
  247 + } else {
  248 + this.rangeState = {
  249 + from: minDate,
  250 + to: maxDate,
  251 + selecting: false
  252 + };
  253 + }
  254 + this.handleConfirm(false);
  255 + } else {
  256 + this.rangeState = {
  257 + from: val,
  258 + to: null,
  259 + selecting: true
  260 + };
  261 + }
  262 + },
  263 + handleChangeRange (val) {
  264 + this.rangeState.to = val;
  265 + },
  266 + },
  267 + };
  268 +</script>
src/components/date-picker/panel/date-range.vue deleted
1 -<template>  
2 - <div :class="classes" @mousedown.prevent>  
3 - <div :class="[prefixCls + '-sidebar']" v-if="shortcuts.length">  
4 - <div  
5 - :class="[prefixCls + '-shortcut']"  
6 - v-for="shortcut in shortcuts"  
7 - @click="handleShortcutClick(shortcut)">{{ shortcut.text }}</div>  
8 - </div>  
9 - <div :class="[prefixCls + '-body']">  
10 - <div :class="[prefixCls + '-content', prefixCls + '-content-left']" v-show="!isTime">  
11 - <div :class="[datePrefixCls + '-header']" v-show="leftCurrentView !== 'time'">  
12 - <span  
13 - :class="iconBtnCls('prev', '-double')"  
14 - @click="prevYear('left')"><Icon type="ios-arrow-left"></Icon></span>  
15 - <span  
16 - :class="iconBtnCls('prev')"  
17 - @click="prevMonth"  
18 - v-show="leftCurrentView === 'date'"><Icon type="ios-arrow-left"></Icon></span>  
19 - <date-panel-label  
20 - :date-panel-label="leftDatePanelLabel"  
21 - :current-view="leftCurrentView"  
22 - :date-prefix-cls="datePrefixCls"/>  
23 - <span  
24 - :class="iconBtnCls('next', '-double')"  
25 - @click="nextYear('left')"  
26 - v-show="leftCurrentView === 'year' || leftCurrentView === 'month'"><Icon type="ios-arrow-right"></Icon></span>  
27 - </div>  
28 - <date-table  
29 - v-show="leftCurrentView === 'date'"  
30 - :year="leftYear"  
31 - :month="leftMonth"  
32 - :date="date"  
33 - :min-date="minDate"  
34 - :max-date="maxDate"  
35 - :range-state="rangeState"  
36 - selection-mode="range"  
37 - :disabled-date="disabledDate"  
38 - @on-changerange="handleChangeRange"  
39 - @on-pick="handleRangePick"  
40 - @on-pick-click="handlePickClick"></date-table>  
41 - <year-table  
42 - ref="leftYearTable"  
43 - v-show="leftCurrentView === 'year'"  
44 - :year="leftTableYear"  
45 - :date="leftTableDate"  
46 - selection-mode="range"  
47 - :disabled-date="disabledDate"  
48 - @on-pick="handleLeftYearPick"  
49 - @on-pick-click="handlePickClick"></year-table>  
50 - <month-table  
51 - ref="leftMonthTable"  
52 - v-show="leftCurrentView === 'month'"  
53 - :month="leftMonth"  
54 - :date="leftTableDate"  
55 - selection-mode="range"  
56 - :disabled-date="disabledDate"  
57 - @on-pick="handleLeftMonthPick"  
58 - @on-pick-click="handlePickClick"></month-table>  
59 - </div>  
60 - <div :class="[prefixCls + '-content', prefixCls + '-content-right']" v-show="!isTime">  
61 - <div :class="[datePrefixCls + '-header']" v-show="rightCurrentView !== 'time'">  
62 - <span  
63 - :class="iconBtnCls('prev', '-double')"  
64 - @click="prevYear('right')"  
65 - v-show="rightCurrentView === 'year' || rightCurrentView === 'month'"><Icon type="ios-arrow-left"></Icon></span>  
66 - <date-panel-label  
67 - :date-panel-label="rightDatePanelLabel"  
68 - :current-view="rightCurrentView"  
69 - :date-prefix-cls="datePrefixCls"/>  
70 - <span  
71 - :class="iconBtnCls('next', '-double')"  
72 - @click="nextYear('right')"><Icon type="ios-arrow-right"></Icon></span>  
73 - <span  
74 - :class="iconBtnCls('next')"  
75 - @click="nextMonth"  
76 - v-show="rightCurrentView === 'date'"><Icon type="ios-arrow-right"></Icon></span>  
77 - </div>  
78 - <date-table  
79 - v-show="rightCurrentView === 'date'"  
80 - :year="rightYear"  
81 - :month="rightMonth"  
82 - :date="rightDate"  
83 - :min-date="minDate"  
84 - :max-date="maxDate"  
85 - :range-state="rangeState"  
86 - selection-mode="range"  
87 - :disabled-date="disabledDate"  
88 - @on-changerange="handleChangeRange"  
89 - @on-pick="handleRangePick"  
90 - @on-pick-click="handlePickClick"></date-table>  
91 - <year-table  
92 - ref="rightYearTable"  
93 - v-show="rightCurrentView === 'year'"  
94 - :year="rightTableYear"  
95 - :date="rightTableDate"  
96 - selection-mode="range"  
97 - :disabled-date="disabledDate"  
98 - @on-pick="handleRightYearPick"  
99 - @on-pick-click="handlePickClick"></year-table>  
100 - <month-table  
101 - ref="rightMonthTable"  
102 - v-show="rightCurrentView === 'month'"  
103 - :month="rightMonth"  
104 - :date="rightTableDate"  
105 - selection-mode="range"  
106 - :disabled-date="disabledDate"  
107 - @on-pick="handleRightMonthPick"  
108 - @on-pick-click="handlePickClick"></month-table>  
109 - </div>  
110 - <div :class="[prefixCls + '-content']" v-show="isTime">  
111 - <time-picker  
112 - ref="timePicker"  
113 - v-show="isTime"  
114 - @on-pick="handleTimePick"  
115 - @on-pick-click="handlePickClick"></time-picker>  
116 - </div>  
117 - <Confirm  
118 - v-if="confirm"  
119 - :show-time="showTime"  
120 - :is-time="isTime"  
121 - :time-disabled="timeDisabled"  
122 - @on-pick-toggle-time="handleToggleTime"  
123 - @on-pick-clear="handlePickClear"  
124 - @on-pick-success="handlePickSuccess"></Confirm>  
125 - </div>  
126 - </div>  
127 -</template>  
128 -<script>  
129 - import Icon from '../../icon/icon.vue';  
130 - import DateTable from '../base/date-table.vue';  
131 - import YearTable from '../base/year-table.vue';  
132 - import MonthTable from '../base/month-table.vue';  
133 - import TimePicker from './time-range.vue';  
134 - import Confirm from '../base/confirm.vue';  
135 - import { toDate, prevMonth, nextMonth, initTimeDate, formatDateLabels } from '../util';  
136 - import datePanelLabel from './date-panel-label.vue';  
137 -  
138 - import Mixin from './mixin';  
139 - import Locale from '../../../mixins/locale';  
140 -  
141 - const prefixCls = 'ivu-picker-panel';  
142 - const datePrefixCls = 'ivu-date-picker';  
143 -  
144 - export default {  
145 - name: 'DatePicker',  
146 - mixins: [ Mixin, Locale ],  
147 - components: { Icon, DateTable, YearTable, MonthTable, TimePicker, Confirm, datePanelLabel },  
148 - data () {  
149 - return {  
150 - prefixCls: prefixCls,  
151 - datePrefixCls: datePrefixCls,  
152 - shortcuts: [],  
153 - date: initTimeDate(),  
154 - value: '',  
155 - minDate: '',  
156 - maxDate: '',  
157 - confirm: false,  
158 - rangeState: {  
159 - endDate: null,  
160 - selecting: false  
161 - },  
162 - showTime: false,  
163 - disabledDate: '',  
164 - leftCurrentView: 'date',  
165 - rightCurrentView: 'date',  
166 - selectionMode: 'range',  
167 - leftTableYear: null,  
168 - rightTableYear: null,  
169 - isTime: false,  
170 - format: 'yyyy-MM-dd'  
171 - };  
172 - },  
173 - computed: {  
174 - classes () {  
175 - return [  
176 - `${prefixCls}-body-wrapper`,  
177 - `${datePrefixCls}-with-range`,  
178 - {  
179 - [`${prefixCls}-with-sidebar`]: this.shortcuts.length  
180 - }  
181 - ];  
182 - },  
183 - leftYear () {  
184 - return this.date.getFullYear();  
185 - },  
186 - leftTableDate () {  
187 - if (this.leftCurrentView === 'year' || this.leftCurrentView === 'month') {  
188 - return new Date(this.leftTableYear);  
189 - } else {  
190 - return this.date;  
191 - }  
192 - },  
193 - leftMonth () {  
194 - return this.date.getMonth();  
195 - },  
196 - rightYear () {  
197 - return this.rightDate.getFullYear();  
198 - },  
199 - rightTableDate () {  
200 - if (this.rightCurrentView === 'year' || this.rightCurrentView === 'month') {  
201 - return new Date(this.rightTableYear);  
202 - } else {  
203 - return this.date;  
204 - }  
205 - },  
206 - rightMonth () {  
207 - return this.rightDate.getMonth();  
208 - },  
209 - rightDate () {  
210 - const newDate = new Date(this.date);  
211 - const month = newDate.getMonth();  
212 - newDate.setDate(1);  
213 -  
214 - if (month === 11) {  
215 - newDate.setFullYear(newDate.getFullYear() + 1);  
216 - newDate.setMonth(0);  
217 - } else {  
218 - newDate.setMonth(month + 1);  
219 - }  
220 - return newDate;  
221 - },  
222 - leftDatePanelLabel () {  
223 - if (!this.leftYear) return null; // not ready yet  
224 - return this.panelLabelConfig('left');  
225 - },  
226 - rightDatePanelLabel () {  
227 - if (!this.leftYear) return null; // not ready yet  
228 - return this.panelLabelConfig('right');  
229 - },  
230 - timeDisabled () {  
231 - return !(this.minDate && this.maxDate);  
232 - }  
233 - },  
234 - watch: {  
235 - value(newVal) {  
236 - if (!newVal) {  
237 - this.minDate = null;  
238 - this.maxDate = null;  
239 - } else if (Array.isArray(newVal)) {  
240 - this.minDate = newVal[0] ? toDate(newVal[0]) : null;  
241 - this.maxDate = newVal[1] ? toDate(newVal[1]) : null;  
242 - if (this.minDate) this.date = new Date(this.minDate);  
243 - }  
244 - if (this.showTime) this.$refs.timePicker.value = newVal;  
245 - },  
246 - minDate (val) {  
247 - if (this.showTime) this.$refs.timePicker.date = val;  
248 - },  
249 - maxDate (val) {  
250 - if (this.showTime) this.$refs.timePicker.dateEnd = val;  
251 - },  
252 - format (val) {  
253 - if (this.showTime) this.$refs.timePicker.format = val;  
254 - },  
255 - isTime (val) {  
256 - if (val) this.$refs.timePicker.updateScroll();  
257 - }  
258 - },  
259 - methods: {  
260 - panelLabelConfig (direction) {  
261 - const locale = this.t('i.locale');  
262 - const datePanelLabel = this.t('i.datepicker.datePanelLabel');  
263 - const handler = type => {  
264 - const fn = type == 'month' ? this.showMonthPicker : this.showYearPicker;  
265 - return () => fn(direction);  
266 - };  
267 -  
268 - const date = new Date(this[`${direction}Year`], this[`${direction}Month`]);  
269 - const { labels, separator } = formatDateLabels(locale, datePanelLabel, date);  
270 -  
271 - return {  
272 - separator: separator,  
273 - labels: labels.map(obj => ((obj.handler = handler(obj.type)), obj))  
274 - };  
275 - },  
276 - resetDate () {  
277 - this.date = new Date(this.date);  
278 - this.leftTableYear = this.date.getFullYear();  
279 - this.rightTableYear = this.rightDate.getFullYear();  
280 - },  
281 - handleClear() {  
282 - this.minDate = null;  
283 - this.maxDate = null;  
284 - this.date = new Date();  
285 - this.handleConfirm();  
286 - if (this.showTime) this.$refs.timePicker.handleClear();  
287 - },  
288 - resetView(reset = false) {  
289 - this.leftCurrentView = 'date';  
290 - this.rightCurrentView = 'date';  
291 -  
292 - this.leftTableYear = this.leftYear;  
293 - this.rightTableYear = this.rightYear;  
294 -  
295 - if (reset) this.isTime = false;  
296 - },  
297 - prevYear (direction) {  
298 - if (this[`${direction}CurrentView`] === 'year') {  
299 - this.$refs[`${direction}YearTable`].prevTenYear();  
300 - } else if (this[`${direction}CurrentView`] === 'month') {  
301 - this[`${direction}TableYear`]--;  
302 - } else {  
303 - const date = this.date;  
304 - date.setFullYear(date.getFullYear() - 1);  
305 - this.resetDate();  
306 - }  
307 - },  
308 - nextYear (direction) {  
309 - if (this[`${direction}CurrentView`] === 'year') {  
310 - this.$refs[`${direction}YearTable`].nextTenYear();  
311 - } else if (this[`${direction}CurrentView`] === 'month') {  
312 - this[`${direction}TableYear`]++;  
313 - } else {  
314 - const date = this.date;  
315 - date.setFullYear(date.getFullYear() + 1);  
316 - this.resetDate();  
317 - }  
318 - },  
319 - prevMonth () {  
320 - this.date = prevMonth(this.date);  
321 - },  
322 - nextMonth () {  
323 - this.date = nextMonth(this.date);  
324 - },  
325 - handleLeftYearPick (year, close = true) {  
326 - this.handleYearPick(year, close, 'left');  
327 - },  
328 - handleRightYearPick (year, close = true) {  
329 - this.handleYearPick(year, close, 'right');  
330 - },  
331 - handleYearPick (year, close, direction) {  
332 - this[`${direction}TableYear`] = year;  
333 - if (!close) return;  
334 -  
335 - this[`${direction}CurrentView`] = 'month';  
336 - },  
337 - handleLeftMonthPick (month) {  
338 - this.handleMonthPick(month, 'left');  
339 - },  
340 - handleRightMonthPick (month) {  
341 - this.handleMonthPick(month, 'right');  
342 - },  
343 - handleMonthPick (month, direction) {  
344 - let year = this[`${direction}TableYear`];  
345 - if (direction === 'right') {  
346 - if (month === 0) {  
347 - month = 11;  
348 - year--;  
349 - } else {  
350 - month--;  
351 - }  
352 - }  
353 -  
354 - this.date.setYear(year);  
355 - this.date.setMonth(month);  
356 - this[`${direction}CurrentView`] = 'date';  
357 - this.resetDate();  
358 - },  
359 - showYearPicker (direction) {  
360 - this[`${direction}CurrentView`] = 'year';  
361 - this[`${direction}TableYear`] = this[`${direction}Year`];  
362 - },  
363 - showMonthPicker (direction) {  
364 - this[`${direction}CurrentView`] = 'month';  
365 - },  
366 - handleConfirm(visible) {  
367 - this.$emit('on-pick', [this.minDate, this.maxDate], visible);  
368 - },  
369 - handleRangePick (val, close = true) {  
370 - if (this.maxDate === val.maxDate && this.minDate === val.minDate) return;  
371 -  
372 - this.minDate = val.minDate;  
373 - this.maxDate = val.maxDate;  
374 -  
375 - // todo Remove when Chromium has fixed bug  
376 - // https://github.com/iview/iview/issues/2122  
377 - this.$nextTick(() => {  
378 - this.minDate = val.minDate;  
379 - this.maxDate = val.maxDate;  
380 - });  
381 - /* end of #2122 patch */  
382 -  
383 - if (!close) return;  
384 -// if (!this.showTime) {  
385 -// this.handleConfirm(false);  
386 -// }  
387 - this.handleConfirm(false);  
388 - },  
389 - handleChangeRange (val) {  
390 - this.minDate = val.minDate;  
391 - this.maxDate = val.maxDate;  
392 - this.rangeState = val.rangeState;  
393 - },  
394 - handleToggleTime () {  
395 - this.isTime = !this.isTime;  
396 - },  
397 - handleTimePick (date) {  
398 - this.minDate = date[0];  
399 - this.maxDate = date[1];  
400 - this.handleConfirm(false);  
401 - }  
402 - },  
403 - mounted () {  
404 - if (this.showTime) {  
405 - // todo 这里也到不了  
406 - this.$refs.timePicker.date = this.minDate;  
407 - this.$refs.timePicker.dateEnd = this.maxDate;  
408 - this.$refs.timePicker.value = this.value;  
409 - this.$refs.timePicker.format = this.format;  
410 - this.$refs.timePicker.showDate = true;  
411 - }  
412 - }  
413 - };  
414 -</script>