iview/src/components/date-picker/panel/date-range.vue

179 lines
6.3 KiB
Vue
Raw Normal View History

2016-12-12 10:37:52 +08:00
<template>
2016-12-19 09:59:08 +08:00
<div :class="classes">
2016-12-19 14:44:07 +08:00
<div :class="[prefixCls + '-sidebar']" v-if="shortcuts.length">
<div
:class="[prefixCls + '-shortcut']"
v-for="shortcut in shortcuts"
@click="handleShortcutClick(shortcut)">{{ shortcut.text }}</div>
</div>
<div :class="[prefixCls + '-body']">
<div :class="[prefixCls + '-content', prefixCls + '-content-left']">
<div :class="[datePrefixCls + '-header']" v-show="currentView !== 'time'">
<span
:class="iconBtnCls('prev', '-double')"
@click="prevYear"><Icon type="ios-arrow-left"></Icon></span>
<span
:class="iconBtnCls('prev')"
@click="prevMonth"
v-show="currentView === 'date'"><Icon type="ios-arrow-left"></Icon></span>
<span
:class="[datePrefixCls + '-header-label']"
@click="showYearPicker">{{ leftYear }} </span>
<span
:class="[datePrefixCls + '-header-label']"
@click="showMonthPicker"
v-show="currentView === 'date'">{{ leftMonth + 1 }} </span>
</div>
<date-table
v-show="currentView === 'date'"
:year="leftYear"
:month="leftMonth"
:date="date"
:min-date="minDate"
:max-date="maxDate"
:range-state="rangeState"
:selection-mode="selectionMode"
:disabled-date="disabledDate"
@on-pick="handleDatePick"></date-table>
</div>
<div :class="[prefixCls + '-content', prefixCls + '-content-right']">
<div :class="[datePrefixCls + '-header']" v-show="currentView !== 'time'">
<span
:class="[datePrefixCls + '-header-label']"
@click="showYearPicker">{{ rightYear }} </span>
<span
:class="[datePrefixCls + '-header-label']"
@click="showMonthPicker"
v-show="currentView === 'date'">{{ rightMonth + 1 }} </span>
<span
:class="iconBtnCls('next', '-double')"
@click="nextYear"><Icon type="ios-arrow-right"></Icon></span>
<span
:class="iconBtnCls('next')"
@click="nextMonth"
v-show="currentView === 'date'"><Icon type="ios-arrow-right"></Icon></span>
</div>
<date-table
v-show="currentView === 'date'"
:year="rightYear"
:month="rightMonth"
:date="rightDate"
:min-date="minDate"
:max-date="maxDate"
:range-state="rangeState"
:selection-mode="selectionMode"
:disabled-date="disabledDate"
@on-pick="handleDatePick"></date-table>
</div>
</div>
2016-12-19 09:59:08 +08:00
</div>
2016-12-12 10:37:52 +08:00
</template>
<script>
2016-12-19 14:44:07 +08:00
import Icon from '../../icon/icon.vue';
import DateTable from '../base/date-table.vue';
import { toDate } from '../util';
import Mixin from './mixin';
2016-12-19 09:59:08 +08:00
const prefixCls = 'ivu-picker-panel';
const datePrefixCls = 'ivu-date-picker';
2016-12-12 10:37:52 +08:00
export default {
2016-12-19 14:44:07 +08:00
mixins: [Mixin],
components: { Icon, DateTable },
2016-12-12 10:37:52 +08:00
data () {
2016-12-19 14:44:07 +08:00
return {
prefixCls: prefixCls,
datePrefixCls: datePrefixCls,
shortcuts: [],
date: new Date(),
value: '',
minDate: '',
maxDate: '',
rangeState: {
endDate: null,
selecting: false
},
showTime: false,
disabledDate: '',
currentView: 'date',
selectionMode: 'range'
}
2016-12-12 10:37:52 +08:00
},
2016-12-19 09:59:08 +08:00
computed: {
classes () {
return [
`${prefixCls}-body-wrapper`,
2016-12-19 14:44:07 +08:00
`${datePrefixCls}-with-range`,
2016-12-19 09:59:08 +08:00
{
[`${prefixCls}-with-sidebar`]: this.shortcuts.length
}
]
2016-12-19 14:44:07 +08:00
},
leftYear() {
return this.date.getFullYear();
},
leftMonth() {
return this.date.getMonth();
},
rightYear() {
return this.rightDate.getFullYear();
},
rightMonth() {
return this.rightDate.getMonth();
},
rightDate() {
const newDate = new Date(this.date);
const month = newDate.getMonth();
newDate.setDate(1);
if (month === 11) {
newDate.setFullYear(newDate.getFullYear() + 1);
newDate.setMonth(0);
} else {
newDate.setMonth(month + 1);
}
return newDate;
}
},
watch: {
value(newVal) {
if (!newVal) {
this.minDate = null;
this.maxDate = null;
} else if (Array.isArray(newVal)) {
this.minDate = newVal[0] ? toDate(newVal[0]) : null;
this.maxDate = newVal[1] ? toDate(newVal[1]) : null;
if (this.minDate) this.date = new Date(this.minDate);
// this.handleConfirm(true); // todo 稍后测试
}
2016-12-19 09:59:08 +08:00
}
},
2016-12-19 14:44:07 +08:00
methods: {
prevYear () {
},
nextYear () {
},
prevMonth () {
},
nextMonth () {
},
showYearPicker () {
},
showMonthPicker () {
},
handleDatePick () {
},
handleConfirm(visible) {
this.$emit('on-pick', [this.minDate, this.maxDate], visible);
}
}
2016-12-12 10:37:52 +08:00
}
</script>