119 lines
3.6 KiB
Vue
119 lines
3.6 KiB
Vue
|
<template>
|
|||
|
<div>
|
|||
|
<el-radio-group v-model="params.time" @change="selectTime">
|
|||
|
<el-radio-button v-for="item in timeList" :key="item.value" :label="item.value">{{ item.label }}</el-radio-button>
|
|||
|
</el-radio-group>
|
|||
|
<el-button class="m-l-sm" :type="params.startTime ? 'primary' : 'ghost'" @click="selectTime()">自定义</el-button>
|
|||
|
<span class="tip m-l" v-if="params.startTime">时间范围:{{ params.startTime }} - {{ params.endTime }}</span>
|
|||
|
<el-dialog title="时间选择" :visible.sync="dialogVisible" width="500px" v-if="dialogVisible">
|
|||
|
<el-date-picker v-model="time" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="right"> </el-date-picker>
|
|||
|
<div slot="footer" class="dialog-footer">
|
|||
|
<el-button @click.native="dialogVisible = false">取消</el-button>
|
|||
|
<el-button type="primary" @click.native="submit">确定</el-button>
|
|||
|
</div>
|
|||
|
</el-dialog>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
export default {
|
|||
|
props: {
|
|||
|
timeList: {
|
|||
|
type: Array,
|
|||
|
default: function () {
|
|||
|
return [
|
|||
|
{ label: '天', value: 'Days' },
|
|||
|
{ label: '周', value: 'Weeks' },
|
|||
|
{ label: '月', value: 'Months' },
|
|||
|
{ label: '季度', value: 'QuarterYears' },
|
|||
|
{ label: '半年', value: 'HalfYears' },
|
|||
|
{ label: '一年', value: 'Years' }
|
|||
|
]
|
|||
|
}
|
|||
|
},
|
|||
|
getData: {
|
|||
|
type: Function
|
|||
|
},
|
|||
|
defaultTime: {
|
|||
|
type: String,
|
|||
|
default: 'Months'
|
|||
|
}
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
pickerOptions: {
|
|||
|
shortcuts: [
|
|||
|
{
|
|||
|
text: '最近一周',
|
|||
|
onClick(picker) {
|
|||
|
const end = new Date()
|
|||
|
const start = new Date()
|
|||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
|||
|
picker.$emit('pick', [start, end])
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
text: '最近一个月',
|
|||
|
onClick(picker) {
|
|||
|
const end = new Date()
|
|||
|
const start = new Date()
|
|||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
|||
|
picker.$emit('pick', [start, end])
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
text: '最近三个月',
|
|||
|
onClick(picker) {
|
|||
|
const end = new Date()
|
|||
|
const start = new Date()
|
|||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
|||
|
picker.$emit('pick', [start, end])
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
disabledDate(time) {
|
|||
|
return time.getTime() > new Date().getTime()
|
|||
|
}
|
|||
|
},
|
|||
|
dialogVisible: false,
|
|||
|
time: '',
|
|||
|
params: {
|
|||
|
time: '',
|
|||
|
startTime: '',
|
|||
|
endTime: ''
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
created() {
|
|||
|
this.params.time = this.defaultTime
|
|||
|
},
|
|||
|
methods: {
|
|||
|
selectTime(value) {
|
|||
|
// 自定义
|
|||
|
if (!value) {
|
|||
|
this.dialogVisible = true
|
|||
|
this.dialogVisible = true
|
|||
|
return
|
|||
|
}
|
|||
|
this.time = ''
|
|||
|
this.params.startTime = ''
|
|||
|
this.params.endTime = ''
|
|||
|
this.getData(this.params)
|
|||
|
},
|
|||
|
submit() {
|
|||
|
if (!this.time) return this.$message.error('请选择时间范围')
|
|||
|
const [startTime, endTime] = this.time
|
|||
|
if (new Date(endTime).getTime() - new Date(startTime) < 1000 * 60 * 60) {
|
|||
|
return this.$message.error('时间间隔必须大于一小时')
|
|||
|
}
|
|||
|
this.params.time = ''
|
|||
|
this.params.startTime = startTime
|
|||
|
this.params.endTime = endTime
|
|||
|
this.dialogVisible = false
|
|||
|
this.getData(this.params)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
<style scoped lang="scss">
|
|||
|
</style>
|