Browse Source

新增查看日志

yukai 1 year ago
parent
commit
2bfce70ff0
2 changed files with 69 additions and 0 deletions
  1. 4 0
      src/api/system/index.ts
  2. 65 0
      src/views/system/monitor/lastLinesLog/index.vue

+ 4 - 0
src/api/system/index.ts

@@ -172,4 +172,8 @@ export default {
     queryThingConfig: (params: object) => get('/operate/remoteconf/queryThingConfig', params),
     queryThingConfig: (params: object) => get('/operate/remoteconf/queryThingConfig', params),
     saveThisConfig: (params: object) => post('/operate/remoteconf/addThingConfig', params),
     saveThisConfig: (params: object) => post('/operate/remoteconf/addThingConfig', params),
   },
   },
+  lastLinesLog: {
+    getList: (params: object) => get('/system/monitor/listLogs', params),
+    detail: (params: object) => get('/system/monitor/lastLinesLog', params),
+  },
 }
 }

+ 65 - 0
src/views/system/monitor/lastLinesLog/index.vue

@@ -0,0 +1,65 @@
+<template>
+	<div>
+	<el-card shadow="hover">
+
+		<el-table :data="tableData" style="width: 100%" row-key="id" v-loading="loading">
+			<el-table-column prop="name" label="文件名" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="size" label="大小" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="changeAt" label="修改时间" min-width="100" align="center"></el-table-column>
+			<el-table-column label="操作" width="200" align="center">
+				<template #default="scope">
+					<el-button size="small" text type="primary" v-if="!scope.row.folderName"
+						@click="view(scope.row)">详情</el-button>
+					<el-button size="small" text type="primary" v-auth="'del'" @click="down(scope.row)">下载</el-button>
+				</template>
+			</el-table-column>
+		</el-table>
+		<pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize"
+			@pagination="getList()" />
+	</el-card>
+
+	<el-dialog v-model="dialogVisible" title="查看详情">
+		<div>{{topmsg}}</div>
+		<div v-for="line in errorMessage" :key="line" class="error-line">{{ line }}</div>
+	</el-dialog>
+
+</div>
+</template>
+
+<script lang="ts" setup>
+import api from '/@/api/system';
+import { useSearch } from '/@/hooks/useCommon';
+import getOrigin from '/@/utils/origin'
+import { ref } from 'vue';
+const queryRef = ref();
+const { params, tableData, getList, loading } = useSearch<any[]>(api.lastLinesLog.getList, 'list', { keyWord: '' });
+getList();
+
+const dialogVisible=ref(false);
+const errorMessage=ref([]);
+const topmsg=ref();
+
+const view = (row: any) => {
+	const es = new EventSource(getOrigin(import.meta.env.VITE_SERVER_URL + "subscribe/logInfo?name="+row.name));
+	es.addEventListener('log', ({ data }) => {
+		topmsg.value=data;
+	});
+
+	api.lastLinesLog.detail({name:row.name}).then((res: any) => {
+		errorMessage.value=res.list;
+    });
+
+	dialogVisible.value=true;
+
+};
+
+
+const down = (row: any) => {
+	window.open(getOrigin(import.meta.env.VITE_SERVER_URL + "api/v1/system/monitor/downloadLog?name="+row.name));
+};
+</script>
+<style scoped>
+.error-line {
+  white-space: pre-line; /* 保留换行符 */
+}
+</style>