|
@@ -1,161 +1,128 @@
|
|
<template>
|
|
<template>
|
|
- <div
|
|
|
|
- v-show="visible"
|
|
|
|
- transition="md-fade-bottom"
|
|
|
|
- class="el-picker-panel el-date-range-picker">
|
|
|
|
- <div class="el-picker-panel__body-wrapper">
|
|
|
|
- <slot name="sidebar" class="el-picker-panel__sidebar"></slot>
|
|
|
|
- <div class="el-picker-panel__sidebar" v-if="shortcuts">
|
|
|
|
- <button
|
|
|
|
- class="el-picker-panel__shortcut"
|
|
|
|
- v-for="shortcut in shortcuts"
|
|
|
|
- @click="handleShortcutClick(shortcut)">{{shortcut.text}}</button>
|
|
|
|
- </div>
|
|
|
|
- <div class="el-picker-panel__body">
|
|
|
|
- <div class="el-date-range-picker__time-header" v-if="showTime">
|
|
|
|
- <span class="el-date-range-picker__editors-wrap">
|
|
|
|
- <input
|
|
|
|
- placeholder="开始日期"
|
|
|
|
- class="el-date-range-picker__editor"
|
|
|
|
- v-model="leftVisibleDate"
|
|
|
|
- @input="handleDateInput($event, 'min')"
|
|
|
|
- @change="handleDateChange($event, 'min')"/>
|
|
|
|
- <span class="el-date-range-picker__time-picker-wrap">
|
|
|
|
|
|
+ <transition name="md-fade-bottom">
|
|
|
|
+ <div
|
|
|
|
+ v-show="visible"
|
|
|
|
+ class="el-picker-panel el-date-range-picker">
|
|
|
|
+ <div class="el-picker-panel__body-wrapper">
|
|
|
|
+ <slot name="sidebar" class="el-picker-panel__sidebar"></slot>
|
|
|
|
+ <div class="el-picker-panel__sidebar" v-if="shortcuts">
|
|
|
|
+ <button
|
|
|
|
+ class="el-picker-panel__shortcut"
|
|
|
|
+ v-for="shortcut in shortcuts"
|
|
|
|
+ @click="handleShortcutClick(shortcut)">{{shortcut.text}}</button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="el-picker-panel__body">
|
|
|
|
+ <div class="el-date-range-picker__time-header" v-if="showTime">
|
|
|
|
+ <span class="el-date-range-picker__editors-wrap">
|
|
<input
|
|
<input
|
|
- placeholder="开始时间"
|
|
|
|
|
|
+ placeholder="开始日期"
|
|
class="el-date-range-picker__editor"
|
|
class="el-date-range-picker__editor"
|
|
- v-model="leftVisibleTime"
|
|
|
|
- @focus="leftTimePickerVisible = true"
|
|
|
|
- @change="handleTimeChange($event, 'min')"/>
|
|
|
|
- <time-picker
|
|
|
|
- v-ref:lefttimepicker
|
|
|
|
- :date="minDate"
|
|
|
|
- @pick="handleLeftTimePick"
|
|
|
|
- v-show="leftTimePickerVisible">
|
|
|
|
- </time-picker>
|
|
|
|
|
|
+ v-model="leftVisibleDate"
|
|
|
|
+ @input="handleDateInput($event, 'min')"
|
|
|
|
+ @change="handleDateChange($event, 'min')"/>
|
|
|
|
+ <span class="el-date-range-picker__time-picker-wrap">
|
|
|
|
+ <input
|
|
|
|
+ placeholder="开始时间"
|
|
|
|
+ class="el-date-range-picker__editor"
|
|
|
|
+ v-model="leftVisibleTime"
|
|
|
|
+ @focus="leftTimePickerVisible = true"
|
|
|
|
+ @change="handleTimeChange($event, 'min')"/>
|
|
|
|
+ <time-picker
|
|
|
|
+ v-ref:lefttimepicker
|
|
|
|
+ :date="minDate"
|
|
|
|
+ @pick="handleLeftTimePick"
|
|
|
|
+ v-show="leftTimePickerVisible">
|
|
|
|
+ </time-picker>
|
|
|
|
+ </span>
|
|
</span>
|
|
</span>
|
|
- </span>
|
|
|
|
- <span class="el-icon-arrow-right"></span>
|
|
|
|
- <span class="el-date-range-picker__editors-wrap is-right">
|
|
|
|
- <input
|
|
|
|
- placeholder="结束日期"
|
|
|
|
- class="el-date-range-picker__editor"
|
|
|
|
- v-model="rightVisibleDate"
|
|
|
|
- :readonly="!minDate"
|
|
|
|
- @input="handleDateInput($event, 'max')"
|
|
|
|
- @change="handleDateChange($event, 'max')" />
|
|
|
|
- <span class="el-date-range-picker__time-picker-wrap">
|
|
|
|
|
|
+ <span class="el-icon-arrow-right"></span>
|
|
|
|
+ <span class="el-date-range-picker__editors-wrap is-right">
|
|
<input
|
|
<input
|
|
- placeholder="结束时间"
|
|
|
|
|
|
+ placeholder="结束日期"
|
|
class="el-date-range-picker__editor"
|
|
class="el-date-range-picker__editor"
|
|
- v-model="rightVisibleTime"
|
|
|
|
- @focus="minDate && (rightTimePickerVisible = true)"
|
|
|
|
|
|
+ v-model="rightVisibleDate"
|
|
:readonly="!minDate"
|
|
:readonly="!minDate"
|
|
- @change="handleTimeChange($event, 'max')" />
|
|
|
|
- <time-picker
|
|
|
|
- v-ref:righttimepicker
|
|
|
|
- :date="maxDate"
|
|
|
|
- @pick="handleRightTimePick"
|
|
|
|
- v-show="rightTimePickerVisible"></time-picker>
|
|
|
|
|
|
+ @input="handleDateInput($event, 'max')"
|
|
|
|
+ @change="handleDateChange($event, 'max')" />
|
|
|
|
+ <span class="el-date-range-picker__time-picker-wrap">
|
|
|
|
+ <input
|
|
|
|
+ placeholder="结束时间"
|
|
|
|
+ class="el-date-range-picker__editor"
|
|
|
|
+ v-model="rightVisibleTime"
|
|
|
|
+ @focus="minDate && (rightTimePickerVisible = true)"
|
|
|
|
+ :readonly="!minDate"
|
|
|
|
+ @change="handleTimeChange($event, 'max')" />
|
|
|
|
+ <time-picker
|
|
|
|
+ v-ref:righttimepicker
|
|
|
|
+ :date="maxDate"
|
|
|
|
+ @pick="handleRightTimePick"
|
|
|
|
+ v-show="rightTimePickerVisible"></time-picker>
|
|
|
|
+ </span>
|
|
</span>
|
|
</span>
|
|
- </span>
|
|
|
|
- </div>
|
|
|
|
- <div class="el-picker-panel__content el-date-range-picker__content is-left">
|
|
|
|
- <div class="el-date-range-picker__header">
|
|
|
|
- <button
|
|
|
|
- @click="prevYear"
|
|
|
|
- class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
|
|
- <button
|
|
|
|
- @click="prevMonth"
|
|
|
|
- class="el-picker-panel__icon-btn el-icon-arrow-left"></button>
|
|
|
|
- <div>{{ leftLabel }}</div>
|
|
|
|
</div>
|
|
</div>
|
|
- <date-table
|
|
|
|
- selection-mode="range"
|
|
|
|
- :date="date"
|
|
|
|
- :year="leftYear"
|
|
|
|
- :month="leftMonth"
|
|
|
|
- :min-date="minDate"
|
|
|
|
- :max-date="maxDate"
|
|
|
|
- :range-state="rangeState"
|
|
|
|
- @changerange="handleChangeRange"
|
|
|
|
- @pick="handleRangePick">
|
|
|
|
- </date-table>
|
|
|
|
- </div>
|
|
|
|
- <div class="el-picker-panel__content el-date-range-picker__content is-right">
|
|
|
|
- <div class="el-date-range-picker__header">
|
|
|
|
- <button
|
|
|
|
- @click="nextYear"
|
|
|
|
- class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
|
|
- <button
|
|
|
|
- @click="nextMonth"
|
|
|
|
- class="el-picker-panel__icon-btn el-icon-arrow-right"></button>
|
|
|
|
- <div>{{ rightLabel }}</div>
|
|
|
|
|
|
+ <div class="el-picker-panel__content el-date-range-picker__content is-left">
|
|
|
|
+ <div class="el-date-range-picker__header">
|
|
|
|
+ <button
|
|
|
|
+ @click="prevYear"
|
|
|
|
+ class="el-picker-panel__icon-btn el-icon-d-arrow-left"></button>
|
|
|
|
+ <button
|
|
|
|
+ @click="prevMonth"
|
|
|
|
+ class="el-picker-panel__icon-btn el-icon-arrow-left"></button>
|
|
|
|
+ <div>{{ leftLabel }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <date-table
|
|
|
|
+ selection-mode="range"
|
|
|
|
+ :date="date"
|
|
|
|
+ :year="leftYear"
|
|
|
|
+ :month="leftMonth"
|
|
|
|
+ :min-date="minDate"
|
|
|
|
+ :max-date="maxDate"
|
|
|
|
+ :range-state="rangeState"
|
|
|
|
+ @changerange="handleChangeRange"
|
|
|
|
+ @pick="handleRangePick">
|
|
|
|
+ </date-table>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="el-picker-panel__content el-date-range-picker__content is-right">
|
|
|
|
+ <div class="el-date-range-picker__header">
|
|
|
|
+ <button
|
|
|
|
+ @click="nextYear"
|
|
|
|
+ class="el-picker-panel__icon-btn el-icon-d-arrow-right"></button>
|
|
|
|
+ <button
|
|
|
|
+ @click="nextMonth"
|
|
|
|
+ class="el-picker-panel__icon-btn el-icon-arrow-right"></button>
|
|
|
|
+ <div>{{ rightLabel }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <date-table
|
|
|
|
+ selection-mode="range"
|
|
|
|
+ :date="rightDate"
|
|
|
|
+ :year="rightYear"
|
|
|
|
+ :month="rightMonth"
|
|
|
|
+ :min-date="minDate"
|
|
|
|
+ :max-date="maxDate"
|
|
|
|
+ :range-state="rangeState"
|
|
|
|
+ @changerange="handleChangeRange"
|
|
|
|
+ @pick="handleRangePick"></date-table>
|
|
</div>
|
|
</div>
|
|
- <date-table
|
|
|
|
- selection-mode="range"
|
|
|
|
- :date="rightDate"
|
|
|
|
- :year="rightYear"
|
|
|
|
- :month="rightMonth"
|
|
|
|
- :min-date="minDate"
|
|
|
|
- :max-date="maxDate"
|
|
|
|
- :range-state="rangeState"
|
|
|
|
- @changerange="handleChangeRange"
|
|
|
|
- @pick="handleRangePick"></date-table>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
+ <div class="el-picker-panel__footer" v-if="showTime">
|
|
|
|
+ <a
|
|
|
|
+ href="JavaScript:"
|
|
|
|
+ class="el-picker-panel__link-btn"
|
|
|
|
+ @click="changeToToday">{{ $t('datepicker.today') }}</a>
|
|
|
|
+ <button
|
|
|
|
+ class="el-picker-panel__btn"
|
|
|
|
+ @click="handleConfirm"
|
|
|
|
+ :disabled="btnDisabled">确定</button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="el-picker-panel__footer" v-if="showTime">
|
|
|
|
- <a
|
|
|
|
- href="JavaScript:"
|
|
|
|
- class="el-picker-panel__link-btn"
|
|
|
|
- @click="changeToToday">{{ $t('datepicker.today') }}</a>
|
|
|
|
- <button
|
|
|
|
- class="el-picker-panel__btn"
|
|
|
|
- @click="handleConfirm"
|
|
|
|
- :disabled="btnDisabled">确定</button>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ </transition>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script type="text/ecmascript-6">
|
|
<script type="text/ecmascript-6">
|
|
import { nextMonth, prevMonth, $t, formatDate, parseDate } from '../util';
|
|
import { nextMonth, prevMonth, $t, formatDate, parseDate } from '../util';
|
|
|
|
|
|
export default {
|
|
export default {
|
|
- props: {
|
|
|
|
- date: {
|
|
|
|
- default() {
|
|
|
|
- return new Date();
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- minDate: {},
|
|
|
|
-
|
|
|
|
- maxDate: {},
|
|
|
|
-
|
|
|
|
- rangeState: {
|
|
|
|
- default() {
|
|
|
|
- return {
|
|
|
|
- endDate: null,
|
|
|
|
- selecting: false,
|
|
|
|
- row: null,
|
|
|
|
- column: null
|
|
|
|
- };
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- showTime: {
|
|
|
|
- type: Boolean,
|
|
|
|
- default: false
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- shortcuts: {},
|
|
|
|
-
|
|
|
|
- value: {},
|
|
|
|
-
|
|
|
|
- visible: Boolean
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
computed: {
|
|
computed: {
|
|
btnDisabled() {
|
|
btnDisabled() {
|
|
return !(this.minDate && this.maxDate && !this.selecting);
|
|
return !(this.minDate && this.maxDate && !this.selecting);
|
|
@@ -272,6 +239,19 @@
|
|
|
|
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
|
|
+ date: new Date(),
|
|
|
|
+ minDate: '',
|
|
|
|
+ maxDate: '',
|
|
|
|
+ rangeState: {
|
|
|
|
+ endDate: null,
|
|
|
|
+ selecting: false,
|
|
|
|
+ row: null,
|
|
|
|
+ column: null
|
|
|
|
+ },
|
|
|
|
+ showTime: false,
|
|
|
|
+ shortcuts: '',
|
|
|
|
+ value: '',
|
|
|
|
+ visible: '',
|
|
leftTimePickerVisible: false,
|
|
leftTimePickerVisible: false,
|
|
rightTimePickerVisible: false
|
|
rightTimePickerVisible: false
|
|
};
|
|
};
|
|
@@ -286,9 +266,6 @@
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
|
|
- maxDate() {
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
leftTimePickerVisible(val) {
|
|
leftTimePickerVisible(val) {
|
|
if (val) this.$refs.lefttimepicker.ajustScrollTop();
|
|
if (val) this.$refs.lefttimepicker.ajustScrollTop();
|
|
},
|
|
},
|
|
@@ -377,9 +354,11 @@
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
|
|
- handleRangePick(val) {
|
|
|
|
|
|
+ handleRangePick(val, close = true) {
|
|
this.maxDate = val.maxDate;
|
|
this.maxDate = val.maxDate;
|
|
this.minDate = val.minDate;
|
|
this.minDate = val.minDate;
|
|
|
|
+
|
|
|
|
+ if (!close) return;
|
|
if (!this.showTime) {
|
|
if (!this.showTime) {
|
|
this.$emit('pick', [this.minDate, this.maxDate]);
|
|
this.$emit('pick', [this.minDate, this.maxDate]);
|
|
}
|
|
}
|