log.ts 3.25 KB
import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:8083/api/system/log',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    console.error('API请求错误:', error)
    if (error.response?.status === 401) {
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// 日志接口类型定义
export interface Log {
  logId: number
  logType: string
  logTypeText: string
  userId: number
  username: string
  module: string
  operation: string
  ip: string
  logTime: string
  status: number
  statusText: string
  errorMsg: string
  requestParam: string
  createBy: string
  createTime: string
  updateBy: string
  updateTime: string
}

export interface LogDetail {
  logId: number
  logType: string
  logTypeText: string
  userId: number
  username: string
  module: string
  operation: string
  ip: string
  logTime: string
  status: number
  statusText: string
  errorMsg: string
  requestParam: string
  createBy: string
  createTime: string
  updateBy: string
  updateTime: string
}

export interface LogSearchParams {
  pageNum: number
  pageSize: number
  logType?: string
  userId?: number
  username?: string
  module?: string
  operation?: string
  ip?: string
  status?: number
  startTime?: string
  endTime?: string
}

export interface ApiResponse<T> {
  code: number
  message: string
  data: T
}

export interface PageData<T> {
  records: T[]
  total: number
  current: number
  size: number
  pages: number
}

// API调用方法
export const logApi = {
  // 获取日志列表
  getLogList: (params: LogSearchParams): Promise<ApiResponse<PageData<Log>>> => {
    return api.get('/page', { params })
  },

  // 获取日志详情
  getLogDetail: (logId: number): Promise<ApiResponse<LogDetail>> => {
    return api.get(`/${logId}`)
  },

  // 获取用户登录日志
  getLoginLogsByUserId: (userId: number, startTime?: string, endTime?: string): Promise<ApiResponse<Log[]>> => {
    return api.get(`/login/${userId}`, { 
      params: { 
        startTime, 
        endTime 
      } 
    })
  },

  // 清理过期日志
  cleanExpiredLogs: (expireDays: number): Promise<ApiResponse<string>> => {
    return api.delete('/clean', { 
      params: { 
        expireDays 
      } 
    })
  },

  // 统计日志数量
  countLogs: (logType?: string, startTime?: string, endTime?: string): Promise<ApiResponse<number>> => {
    return api.get('/count', { 
      params: { 
        logType, 
        startTime, 
        endTime 
      } 
    })
  },

  // 删除日志
  deleteLog: (logId: number): Promise<ApiResponse<string>> => {
    return api.delete(`/${logId}`)
  },

  // 批量删除日志
  deleteLogs: (logIds: number[]): Promise<ApiResponse<string>> => {
    return api.delete('/batch', { data: logIds })
  }
}

export default logApi