SystemLog.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <!--
  2. * @since: 2025-02-07
  3. * System.vue
  4. -->
  5. <template>
  6. <div class="login-log">
  7. <el-card class="mb-3 proCard">
  8. <el-space >
  9. <el-form ref="searchFormRef" :inline="true" :model="requestParams.queryParam" class="form-inline">
  10. <el-form-item label="事件类型" prop="eventType">
  11. <el-select
  12. v-model="requestParams.queryParam.eventType"
  13. placeholder="请选择事件类型"
  14. clearable>
  15. <el-option
  16. :label="item.label"
  17. :value="item.value"
  18. v-for="item in eventList"
  19. :key="item.value" />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="登录时间" prop="date">
  23. <el-date-picker
  24. v-model="requestParams.queryParam.date"
  25. type="daterange"
  26. placeholder="请选择登录时间"
  27. range-separator="~"
  28. start-placeholder="开始时间"
  29. end-placeholder="结束时间"
  30. :disabled-date="disabledDate"
  31. clearable
  32. format="YYYY/MM/DD"
  33. value-format="YYYY/MM/DD"
  34. />
  35. </el-form-item>
  36. <el-form-item>
  37. <el-button type="primary" :icon="Search" @click="querySystemLogPage">查询</el-button>
  38. <el-button :icon="Refresh" @click="handleResetForm(searchFormRef)">重置</el-button>
  39. </el-form-item>
  40. </el-form>
  41. </el-space>
  42. </el-card>
  43. <el-card>
  44. <template #header>
  45. <el-button type="primary" @click="handleExport()">导出数据</el-button>
  46. </template>
  47. <el-table height="calc(100vh - 450px)" :data="systemLogList" v-loading="loading">
  48. <el-table-column type="index" label="序号" width="100" />
  49. <el-table-column label="事件类型" prop="realName" >
  50. <template #default="{ row }">
  51. <span>{{ eventTypeArr[row.eventType] }}</span>
  52. </template>
  53. </el-table-column>
  54. <el-table-column label="时间" prop="createdAt" />
  55. <el-table-column label="事件" width="200" prop="eventContent" />
  56. </el-table>
  57. <section class="mt-4 flex justify-end">
  58. <el-pagination background layout="total, sizes, prev, pager, next" :page-sizes="[10, 30, 50]" :total="total"
  59. v-model:page-size="requestParams.pageSize" v-model:current-page="requestParams.pageNumber"
  60. @change="querySystemLogPage" />
  61. </section>
  62. </el-card>
  63. </div>
  64. </template>
  65. <script setup lang="ts">
  66. import { ref,onMounted } from 'vue';
  67. import { Search, Refresh, Edit } from '@element-plus/icons-vue';
  68. import useSystemQuery from '../hooks/useSystemQuery';
  69. import { ElMessage, ElMessageBox } from 'element-plus';
  70. import { exportSystemLog } from '@/api/system/log';
  71. import { downloadByData } from '@/utils/file/download';
  72. import { eventList, eventTypeArr } from '@/types/log/constants.ts';
  73. import type { FormInstance } from 'element-plus'
  74. const { requestParams, total, systemLogList, loading, resetRequestParams, querySystemLogPage } = useSystemQuery();
  75. onMounted(async () => {
  76. querySystemLogPage();
  77. });
  78. /* 导出数据 */
  79. const handleExport = () => {
  80. ElMessageBox.confirm('确定导出所查询数据?', '导出', {
  81. confirmButtonText: '确定',
  82. showCancelButton: true,
  83. type: 'warning',
  84. })
  85. .then(() => {
  86. exportSystemLog(requestParams.queryParam).then(async (responnse) => {
  87. if (!responnse) {
  88. throw new Error('下载文件失败');
  89. }
  90. downloadByData(responnse, '系统日志.xlsx');
  91. ElMessage.success('下载文件成功');
  92. });
  93. })
  94. .catch(() => {
  95. ElMessage({
  96. type: 'info',
  97. message: '取消导出',
  98. });
  99. });
  100. }
  101. /* 重置 */
  102. const searchFormRef = ref<FormInstance>()
  103. const handleResetForm = (formEl: FormInstance | undefined) => {
  104. if (!formEl) return
  105. resetRequestParams();
  106. formEl.resetFields();
  107. querySystemLogPage();
  108. }
  109. /* 设置今天之后的时间不可选 */
  110. const disabledDate = (time) => {
  111. return time.getTime() > Date.now();
  112. }
  113. </script>
  114. <style scoped lang="scss">
  115. .form-inline .el-input {
  116. --el-input-width: 160px;
  117. }
  118. .form-inline .el-select {
  119. --el-select-width: 160px;
  120. }
  121. </style>