Ver código fonte

feat: api-日志管理

zhangjie 3 dias atrás
pai
commit
aebf74e94b

+ 11 - 2
src/api/log.ts

@@ -1,7 +1,16 @@
 import axios from 'axios';
-import { LogListPageParam, LogListPageRes } from './types/log';
+import { LogListPageParam, LogListFilter, LogListPageRes } from './types/log';
 
 // 日志管理列表
 export function getLogList(params: LogListPageParam): Promise<LogListPageRes> {
-  return axios.post('/api/log/list', {}, { params });
+  return axios.post('/api/admin/operation/log/query', {}, { params });
+}
+
+// 导出日志
+export function exportLog(params: LogListFilter): Promise<Blob> {
+  return axios.post(
+    '/api/admin/operation/log/export',
+    {},
+    { params, responseType: 'blob' }
+  );
 }

+ 11 - 10
src/api/types/log.ts

@@ -3,29 +3,30 @@ import { PageResult, PageParams } from './common';
 
 // 日志
 export interface LogItem {
+  id: number;
   // 登录名
   loginName: string;
-  // 用户类型
-  userType: string;
+  // 是否评卷员
+  marker: boolean;
   // 操作类型
-  operationType: string;
+  type: LogType;
   // 登录IP
-  loginIp: string;
+  ipAddress: string;
   // 功能模块
-  function: string;
+  menu: string;
   // 操作时间
-  operationTime: string;
+  createTime: string;
   // 详情
-  detail: string;
+  description: string;
 }
 export type LogListPageRes = PageResult<LogItem>;
 
 export interface LogListFilter {
   // 登录名
   loginName?: string;
-  // 用户类型
-  userType?: string;
+  // 是否评卷员
+  marker: boolean;
   // 操作类型
-  operationType?: LogType;
+  type?: LogType;
 }
 export type LogListPageParam = PageParams<LogListFilter>;

+ 1 - 1
src/constants/enumerate.ts

@@ -68,7 +68,7 @@ export const LOG_TYPE = {
   ADD: '新增',
   UPDATE: '更新',
   DELETE: '删除',
-  IMPORT: '导入',
+  IMPORT_FILE: '导入',
   EXPORT: '导出',
 };
 export type LogType = keyof typeof LOG_TYPE;

+ 5 - 3
src/utils/download-export.ts

@@ -15,12 +15,11 @@ import {
   mediaStudentTemplate,
   exportStudent,
 } from '@/api/student';
+import { exportLog } from '@/api/log';
 import useLoading from '@/hooks/loading';
 
 import { downloadByApi } from './download';
 
-const { loading, setLoading } = useLoading();
-
 const downloadConfig = {
   // user
   // 评卷员班级导入模板下载
@@ -48,10 +47,13 @@ const downloadConfig = {
   mediaStudentTemplate,
   // 导出考生
   exportStudent,
+  // log
+  // 导出日志
+  exportLog,
 };
-
 type DownloadType = keyof typeof downloadConfig;
 
+const { loading, setLoading } = useLoading();
 export async function downloadExport(
   type: DownloadType,
   params?: Record<string, any>

+ 18 - 14
src/views/log/LogManage.vue

@@ -12,19 +12,18 @@
       </el-form-item>
       <el-form-item label="用户类型">
         <el-select
-          v-model="searchModel.userType"
+          v-model="searchModel.marker"
           placeholder="请选择"
           clearable
           style="width: 120px"
         >
-          <el-option label="请选择" value="" />
-          <el-option label="管理员" value="管理员" />
-          <el-option label="普通用户" value="普通用户" />
+          <el-option label="违纪" :value="true" />
+          <el-option label="正常" :value="false" />
         </el-select>
       </el-form-item>
       <el-form-item label="操作类型">
         <el-select
-          v-model="searchModel.operationType"
+          v-model="searchModel.type"
           placeholder="请选择"
           clearable
           style="width: 120px"
@@ -53,12 +52,16 @@
     >
       <el-table-column type="index" label="序号" width="60" />
       <el-table-column prop="loginName" label="登录名" min-width="120" />
-      <el-table-column prop="userType" label="用户类型" width="100" />
-      <el-table-column prop="operationType" label="操作类型" width="100" />
-      <el-table-column prop="loginIp" label="登录IP" width="140" />
-      <el-table-column prop="function" label="功能模块" min-width="200" />
-      <el-table-column prop="operationTime" label="操作时间" width="180" />
-      <el-table-column prop="detail" label="详情" width="180" />
+      <el-table-column prop="marker" label="用户类型" width="100">
+        <template #default="scope">
+          {{ scope.row.marker ? '评卷员' : '管理员' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="type" label="操作类型" width="100" />
+      <el-table-column prop="ipAddress" label="登录IP" width="140" />
+      <el-table-column prop="menu" label="功能模块" min-width="200" />
+      <el-table-column prop="createTime" label="操作时间" width="180" />
+      <el-table-column prop="description" label="详情" width="180" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"
@@ -77,6 +80,7 @@
   import { LogItem, LogListFilter } from '@/api/types/log';
   import useTable from '@/hooks/table';
   import { LOG_TYPE } from '@/constants/enumerate';
+  import { downloadExport } from '@/utils/download-export';
 
   defineOptions({
     name: 'LogManage',
@@ -84,14 +88,14 @@
 
   const searchModel = reactive<LogListFilter>({
     loginName: '',
-    userType: '',
-    operationType: undefined,
+    marker: undefined,
+    type: undefined,
   });
 
   const { dataList, pagination, loading, toPage, pageSizeChange } =
     useTable<LogItem>(getLogList, searchModel, false);
 
   function exportData() {
-    // TODO: 实现导出功能
+    downloadExport('exportLog', searchModel);
   }
 </script>

+ 1 - 0
src/views/student/StudentManage.vue

@@ -242,6 +242,7 @@
         label="扫描识别"
         width="100"
       >
+        <!-- TODO: -->
         <template #default="scope">
           <el-tag :type="scope.row.upload ? 'success' : 'danger'">
             {{ scope.row.upload ? '是' : '否' }}