日志界面基本OK
This commit is contained in:
parent
508098f2dc
commit
03a61b5989
@ -1,4 +1,125 @@
|
||||
<template>
|
||||
<!-- 日志显示界面 -->
|
||||
<v-card>
|
||||
<v-data-table
|
||||
:headers="headers"
|
||||
:items="filteredLogEntries"
|
||||
:items-per-page="itemsPerPage"
|
||||
item-key="timestamp"
|
||||
class="elevation-1"
|
||||
dense
|
||||
hide-default-footer
|
||||
>
|
||||
|
||||
|
||||
<template v-slot:[`item.timestamp`]="{ item }">
|
||||
{{ new Date(item.timestamp).toLocaleString() }}
|
||||
</template>
|
||||
|
||||
<template v-slot:[`item.level`]="{ item }">
|
||||
<v-chip :color="getLevelColor(item.level)" small>
|
||||
{{ item.level }}
|
||||
</v-chip>
|
||||
</template>
|
||||
</v-data-table>
|
||||
<v-row class="pa-4" align="center">
|
||||
<v-col cols="3">
|
||||
<v-select
|
||||
v-model="selectedLevel"
|
||||
:items="levelFilters"
|
||||
label="筛选日志级别"
|
||||
clearable
|
||||
dense
|
||||
hide-details
|
||||
></v-select>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<v-row class="pa-4" justify="end">
|
||||
<v-btn
|
||||
@click="PrintLog('info', '测试日志信息')"
|
||||
color="primary"
|
||||
class="ma-2"
|
||||
>
|
||||
添加测试日志
|
||||
</v-btn>
|
||||
</v-row>
|
||||
<v-pagination
|
||||
v-model="page"
|
||||
:length="pageCount"
|
||||
class="my-4"
|
||||
@update:modelValue="updatePagination"
|
||||
></v-pagination>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
|
||||
|
||||
const page = ref(1);
|
||||
const itemsPerPage = ref(10);
|
||||
|
||||
const headers = ref([
|
||||
{ title: '时间', key: 'timestamp', width: '180px' },
|
||||
{ title: '级别', key: 'level', width: '100px' },
|
||||
{ title: '消息', key: 'message' },
|
||||
]);
|
||||
|
||||
const selectedLevel = ref(null);
|
||||
const levelFilters = ['INFO', 'WARNING', 'ERROR'];
|
||||
|
||||
const filteredLogEntries = computed(() => {
|
||||
if (!selectedLevel.value) return logEntries.value;
|
||||
return logEntries.value.filter(entry => entry.level === selectedLevel.value);
|
||||
});
|
||||
|
||||
const logEntries = ref([
|
||||
{
|
||||
timestamp: 1622548800000,
|
||||
level: 'INFO',
|
||||
message: '系统初始化完成',
|
||||
},
|
||||
{
|
||||
timestamp: 1622548801000,
|
||||
level: 'WARNING',
|
||||
message: '检测到未校准参数',
|
||||
},
|
||||
// 更多模拟日志数据...
|
||||
]);
|
||||
|
||||
const pageCount = computed(() => {
|
||||
return Math.ceil(filteredLogEntries.value.length / itemsPerPage.value);
|
||||
});
|
||||
|
||||
function getLevelColor(level) {
|
||||
return {
|
||||
INFO: 'blue',
|
||||
WARNING: 'orange',
|
||||
ERROR: 'red',
|
||||
}[level] || 'grey';
|
||||
}
|
||||
|
||||
function updatePagination(value) {
|
||||
page.value = value;
|
||||
}
|
||||
|
||||
const PrintLog = (level, message) => {
|
||||
const newLog = {
|
||||
timestamp: Date.now(),
|
||||
level: level.toUpperCase(),
|
||||
message: message
|
||||
};
|
||||
logEntries.value.unshift(newLog);
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
PrintLog
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.v-card {
|
||||
margin: 12px;
|
||||
height: calc(100vh - 100px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
</style>
|
Loading…
x
Reference in New Issue
Block a user