2020-04-24 12:21:22 +08:00
|
|
|
|
<template>
|
2020-04-24 19:57:04 +08:00
|
|
|
|
<div class="interval-refresh ">
|
2020-09-15 15:37:01 +08:00
|
|
|
|
<time-picker v-if="showTimePicker" ref="timePicker" class="time-picker" @change="dateChange"></time-picker>
|
2020-06-04 19:14:04 +08:00
|
|
|
|
<chart-unit v-model="unit" v-if="useChartUnit"></chart-unit>
|
2020-04-24 19:57:04 +08:00
|
|
|
|
<div class="nz-btn-group nz-btn-group-size-normal nz-btn-group-light margin-r-20" v-show="useRefresh" style="height: 24px;line-height: 24px;vertical-align: middle;">
|
|
|
|
|
|
<button style="border-right: 1px solid rgba(162,162,162,0.50);" type="button" class="nz-btn nz-btn-size-normal nz-btn-style-light" @click="refreshDataFunc">
|
|
|
|
|
|
<i style="font-size: 12px" class="global-active-color nz-icon nz-icon-refresh"></i>
|
|
|
|
|
|
<span class="nz-btn nz-btn-text" ><slot name="added-text"></slot></span>
|
2020-04-24 12:21:22 +08:00
|
|
|
|
</button>
|
2020-04-24 19:57:04 +08:00
|
|
|
|
<el-popover v-model="visible" placement="bottom-start" :width="50" trigger="click" popper-class="interval-refresh-popover" >
|
|
|
|
|
|
<ul class="popover_ul">
|
2020-07-31 20:57:04 +08:00
|
|
|
|
<li v-for="i in $CONSTANTS.intervalList" :style="{color:interval == i.value ? '#31749C' : ''}" :key="i.value + i.label" @click="selectInterval(i)">
|
|
|
|
|
|
{{i.label}}
|
2020-04-24 19:57:04 +08:00
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
<button type="button" style="border-radius: 0 4px 4px 0;" class="nz-btn nz-btn-size-normal nz-btn-style-light" slot="reference">
|
2020-07-31 20:57:04 +08:00
|
|
|
|
<span class="nz-btn nz-btn-text">{{interval.value != -1 ? interval.label : ''}} </span><i style="font-size: 12px" class="nz-icon nz-icon-arrow-down"></i>
|
2020-04-24 19:57:04 +08:00
|
|
|
|
</button>
|
|
|
|
|
|
</el-popover>
|
|
|
|
|
|
</div>
|
2020-04-24 12:21:22 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import bus from "../../libs/bus";
|
2020-04-24 19:57:04 +08:00
|
|
|
|
import timePicker from "./timePicker";
|
2020-04-28 19:23:48 +08:00
|
|
|
|
import chartUnit from "./chartUnit";
|
2020-04-24 12:21:22 +08:00
|
|
|
|
export default {
|
|
|
|
|
|
name: "intervalRefresh",
|
2020-04-24 19:57:04 +08:00
|
|
|
|
components:{
|
|
|
|
|
|
'time-picker':timePicker,
|
2020-04-28 19:23:48 +08:00
|
|
|
|
'chart-unit':chartUnit,
|
2020-04-24 19:57:04 +08:00
|
|
|
|
},
|
2020-04-24 12:21:22 +08:00
|
|
|
|
model:{
|
|
|
|
|
|
event:'change',
|
|
|
|
|
|
prop:'timeRange'
|
|
|
|
|
|
},
|
|
|
|
|
|
props:{
|
|
|
|
|
|
refreshDataFunc:{
|
|
|
|
|
|
required:true,
|
|
|
|
|
|
type:Function
|
|
|
|
|
|
},
|
|
|
|
|
|
timeRange:{
|
|
|
|
|
|
type:Array,
|
|
|
|
|
|
required: true,
|
2020-04-24 12:57:12 +08:00
|
|
|
|
},
|
|
|
|
|
|
useRefresh:{
|
|
|
|
|
|
type:Boolean,
|
|
|
|
|
|
default:true,
|
2020-04-28 19:23:48 +08:00
|
|
|
|
},
|
|
|
|
|
|
useChartUnit:{
|
|
|
|
|
|
type:Boolean,
|
|
|
|
|
|
default:true,
|
2020-09-15 15:37:01 +08:00
|
|
|
|
},
|
|
|
|
|
|
showTimePicker:{
|
|
|
|
|
|
type:Boolean,
|
|
|
|
|
|
default:true,
|
2020-04-24 12:21:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
data(){
|
|
|
|
|
|
return{
|
|
|
|
|
|
searchTime:[],
|
|
|
|
|
|
visible: false,
|
|
|
|
|
|
intervalTimer: null,
|
|
|
|
|
|
interval: -1,
|
2020-04-28 19:23:48 +08:00
|
|
|
|
unit:2,
|
2020-04-24 12:21:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
created(){
|
|
|
|
|
|
this.searchTime=this.timeFormate(this.timeRange)
|
|
|
|
|
|
this.$emit('change',this.searchTime)
|
|
|
|
|
|
},
|
|
|
|
|
|
methods:{
|
|
|
|
|
|
selectInterval(val) {
|
|
|
|
|
|
this.visible = false;
|
|
|
|
|
|
clearInterval(this.intervalTimer);
|
2020-04-24 19:57:04 +08:00
|
|
|
|
this.interval = val;
|
2020-09-17 14:20:18 +08:00
|
|
|
|
if(!this.showTimePicker&&val && val.value != -1){
|
2020-09-15 15:37:01 +08:00
|
|
|
|
this.intervalTimer = setInterval(() => {
|
|
|
|
|
|
this.$emit('change',this.searchTime)
|
|
|
|
|
|
this.refreshDataFunc();
|
|
|
|
|
|
}, val.value * 1000);
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2020-04-24 14:20:46 +08:00
|
|
|
|
if (val && val.value != -1) {
|
2020-04-24 12:21:22 +08:00
|
|
|
|
const start = new Date(this.searchTime[1]);
|
2020-09-09 09:59:50 +08:00
|
|
|
|
const now = bus.getOffsetTimezoneData();
|
|
|
|
|
|
const interval = Math.floor((now - start.getTime()) / 1000); //计算当前结束时间到现在的间隔(秒)
|
2020-04-24 19:57:04 +08:00
|
|
|
|
if (interval >= 60) { //如果结束时间到现在超过30s,则
|
2020-04-24 12:21:22 +08:00
|
|
|
|
this.getIntervalData(interval);
|
|
|
|
|
|
}
|
|
|
|
|
|
this.intervalTimer = setInterval(() => {
|
|
|
|
|
|
this.getIntervalData(this.interval.value);
|
|
|
|
|
|
}, val.value * 1000);
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
getIntervalData(interval) { //interval:结束时间到现在的秒数
|
|
|
|
|
|
const start = new Date(this.searchTime[0]);
|
|
|
|
|
|
const end = new Date(this.searchTime[1]);
|
|
|
|
|
|
start.setSeconds(start.getSeconds() + interval);
|
|
|
|
|
|
end.setSeconds(end.getSeconds() + interval);
|
|
|
|
|
|
|
|
|
|
|
|
this.searchTime = this.timeFormate([start,end])
|
2020-04-24 19:57:04 +08:00
|
|
|
|
this.$refs.timePicker.setCostomTime(this.searchTime);
|
|
|
|
|
|
this.$emit('change',this.searchTime)
|
2020-04-24 12:21:22 +08:00
|
|
|
|
//刷新数据
|
|
|
|
|
|
this.refreshDataFunc();
|
|
|
|
|
|
},
|
|
|
|
|
|
timeFormate(timeRange){
|
|
|
|
|
|
const startTime = bus.timeFormate(timeRange[0], 'yyyy-MM-dd hh:mm:ss');
|
|
|
|
|
|
const endTime = bus.timeFormate(timeRange[1], 'yyyy-MM-dd hh:mm:ss');
|
|
|
|
|
|
return [startTime, endTime];
|
|
|
|
|
|
},
|
|
|
|
|
|
dateChange(time) {
|
2020-04-24 19:57:04 +08:00
|
|
|
|
this.searchTime=time;
|
|
|
|
|
|
this.$emit('change',this.searchTime)
|
2020-04-24 12:21:22 +08:00
|
|
|
|
this.refreshDataFunc();
|
|
|
|
|
|
},
|
2020-04-28 19:23:48 +08:00
|
|
|
|
},
|
|
|
|
|
|
watch:{
|
|
|
|
|
|
unit:{
|
|
|
|
|
|
immediate:true,
|
|
|
|
|
|
handler(n,o){
|
|
|
|
|
|
this.$emit('unitChange',n);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-04-24 12:21:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
.interval-refresh{
|
|
|
|
|
|
display: flex;
|
2020-04-24 19:57:04 +08:00
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
.interval-refresh .time-picker{
|
|
|
|
|
|
margin-right: 20px;
|
2020-04-24 12:21:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
.popover_ul{
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
.popover_ul li {
|
|
|
|
|
|
padding: 10px 3px;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
.popover_ul li:hover {
|
|
|
|
|
|
background: $dropdown-hover-background-color !important;
|
|
|
|
|
|
color: $global-text-color-active !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|
|
<style>
|
|
|
|
|
|
.interval-refresh-popover{
|
|
|
|
|
|
min-width: unset !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|