index.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <div>
  3. <el-card shadow="hover">
  4. <el-table :data="tableData" style="width: 100%" row-key="id" v-loading="loading">
  5. <el-table-column prop="name" label="文件名" show-overflow-tooltip></el-table-column>
  6. <el-table-column prop="size" label="大小" show-overflow-tooltip></el-table-column>
  7. <el-table-column prop="changeAt" label="修改时间" min-width="100" align="center"></el-table-column>
  8. <el-table-column label="操作" width="200" align="center">
  9. <template #default="scope">
  10. <el-button size="small" text type="primary" v-if="!scope.row.folderName"
  11. @click="view(scope.row)">详情</el-button>
  12. <el-button size="small" text type="primary" v-auth="'del'" @click="down(scope.row)">下载</el-button>
  13. </template>
  14. </el-table-column>
  15. </el-table>
  16. <pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize"
  17. @pagination="getList()" />
  18. </el-card>
  19. <el-dialog v-model="dialogVisible" title="查看详情">
  20. <div v-for="line in topmsg" :key="line" class="error-line">{{ line }}</div>
  21. <div v-for="line in errorMessage" :key="line" class="error-line">{{ line }}</div>
  22. </el-dialog>
  23. </div>
  24. </template>
  25. <script lang="ts" setup>
  26. import api from '/@/api/system';
  27. import { useSearch } from '/@/hooks/useCommon';
  28. import getOrigin from '/@/utils/origin'
  29. import downloadFile from '/@/utils/download';
  30. import { ref } from 'vue';
  31. const { params, tableData, getList, loading } = useSearch<any[]>(api.lastLinesLog.getList, 'list', { keyWord: '' });
  32. getList();
  33. const dialogVisible=ref(false);
  34. const errorMessage=ref([]);
  35. const topmsg=ref([]);
  36. const view = (row: any) => {
  37. const es = new EventSource(getOrigin(import.meta.env.VITE_SERVER_URL + "/subscribe/logInfo?name="+row.name));
  38. es.addEventListener('log', ({ data }) => {
  39. topmsg.value.unshift(data);
  40. });
  41. api.lastLinesLog.detail({name:row.name}).then((res: any) => {
  42. errorMessage.value=res.list;
  43. dialogVisible.value=true;
  44. });
  45. };
  46. const down = (row: any) => {
  47. // window.open(getOrigin(import.meta.env.VITE_SERVER_URL + "system/monitor/downloadLog?name="+row.name));
  48. api.lastLinesLog.down({ name: row.name }).then((res: any) => downloadFile(res,row.name))
  49. };
  50. </script>
  51. <style scoped>
  52. .error-line {
  53. white-space: pre-line; /* 保留换行符 */
  54. }
  55. </style>