feat: add log view auto refresh

This commit is contained in:
engigu
2024-01-20 16:42:56 +08:00
parent d50ce18bad
commit 93434ad36e
3 changed files with 60 additions and 3 deletions
+12
View File
@@ -20,6 +20,18 @@ class CommonUtils {
static formatWayName = (type) => { static formatWayName = (type) => {
return CONSTANT.WAYS_DATA_MAP[type].label; return CONSTANT.WAYS_DATA_MAP[type].label;
} }
static getCurrentTimeStr = () => {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = String(currentDate.getMonth() + 1).padStart(2, '0');
const day = String(currentDate.getDate()).padStart(2, '0');
const hours = String(currentDate.getHours()).padStart(2, '0');
const minutes = String(currentDate.getMinutes()).padStart(2, '0');
const seconds = String(currentDate.getSeconds()).padStart(2, '0');
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
return formattedDate;
}
} }
+48 -2
View File
@@ -1,9 +1,18 @@
<template> <template>
<div class="main-center-body"> <div class="main-center-body">
<div class="container"> <div class="container">
<div class="search-input-sendways"> <div class="search-input-sendways">
<el-input v-model="search" size="small" placeholder="根据任务名字搜索相应日志" @change="filterFunc()" /> <el-input v-model="search" size="small" placeholder="根据任务名字搜索相应日志" @change="filterFunc()" />
</div> </div>
<div class="search-box">
<el-text class="refresh-time" v-if="refreshText" size="small">{{ refreshText }}</el-text>
<el-input-number class="refresh-box" v-model="refreshSec" size="small" :step="2" :min="5"
controls-position="right" />
<el-switch v-model="refreshSwitch" class="ml-2" width="80" inline-prompt active-text="开启刷新" inactive-text="关闭刷新"
@click="clickFreshSwitch" />
</div>
<hr /> <hr />
<div ref="refContainer"> <div ref="refContainer">
<el-table :data="tableData" stripe empty-text="发信日志为空" :row-style="rowStyle()"> <el-table :data="tableData" stripe empty-text="发信日志为空" :row-style="rowStyle()">
@@ -45,12 +54,13 @@
</template> </template>
<script > <script >
import { reactive, toRefs, onMounted } from 'vue' import { reactive, toRefs, onMounted, watch, ref } from 'vue'
import { request } from '../../../api/api' import { request } from '../../../api/api'
import { copyToClipboard } from '../../../util/clipboard.js'; import { copyToClipboard } from '../../../util/clipboard.js';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { CONSTANT } from '@/constant' import { CONSTANT } from '@/constant'
import { usePageState } from '@/store/page_sate.js'; import { usePageState } from '@/store/page_sate.js';
import { CommonUtils } from "@/util/commonUtils.js";
export default { export default {
components: { components: {
@@ -60,6 +70,10 @@ export default {
const router = useRoute(); const router = useRoute();
const state = reactive({ const state = reactive({
search: '', search: '',
refreshText: '',
refreshSwitch: false,
refreshSec: 20,
refreshIntervalFuncList: [],
optionValue: '', optionValue: '',
logText: '', logText: '',
drawer: false, drawer: false,
@@ -95,6 +109,23 @@ export default {
} }
} }
const clickFreshSwitch = () => {
if (state.refreshSwitch) {
let flag = setInterval(async function () {
await filterFunc();
state.refreshText = `自动刷新于:${CommonUtils.getCurrentTimeStr()}`;
}, state.refreshSec * 1000);
state.refreshIntervalFuncList.push(flag);
} else {
state.refreshIntervalFuncList.forEach(intervalId => {
clearInterval(intervalId);
});
state.refreshIntervalFuncList = [];
state.refreshText = '';
}
}
const filterFunc = async () => { const filterFunc = async () => {
await queryListData(state.currPage, state.pageSize, state.search, state.optionValue); await queryListData(state.currPage, state.pageSize, state.search, state.optionValue);
@@ -113,7 +144,7 @@ export default {
}); });
return { return {
...toRefs(state), handleDelete, TransHtml, ...toRefs(state), handleDelete, TransHtml, clickFreshSwitch,
rowStyle, handPageChange, filterFunc, copyToClipboard rowStyle, handPageChange, filterFunc, copyToClipboard
}; };
} }
@@ -138,10 +169,25 @@ hr {
margin-top: -10vh; margin-top: -10vh;
} }
.search-box {
float: right;
margin-top: -2px;
}
.refresh-box {
width: 80px;
margin-right: 5px;
}
.refresh-time {
margin-right: 10px;
}
.pagination-block { .pagination-block {
margin-top: 30px; margin-top: 30px;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
.total-tip { .total-tip {
@@ -5,7 +5,6 @@
<div class="search-input-sendways"> <div class="search-input-sendways">
<el-input v-model="search" size="small" placeholder="搜索" @change="filterFunc()" /> <el-input v-model="search" size="small" placeholder="搜索" @change="filterFunc()" />
</div> </div>
<div class="search-box"> <div class="search-box">
<el-button size="small" type="primary" @click="clickAdd">新增任务</el-button> <el-button size="small" type="primary" @click="clickAdd">新增任务</el-button>
</div> </div>