log.vue 4.52 KB
<script setup lang="ts">
import { reactive, ref, onMounted } from "vue";
import { parseTime } from "@/utils/tool";
import { logList } from "@/api/user/login";
import Pagination from "@/components/Pagination/index.vue";
interface Form {
  page: number;
  pageSize: number;
  ip: string;
  userName: string;
  model: string;
  type: string;
  startTime: string;
  endTime: string;
}
interface Params {
  total: number;
  query: Form;
}
interface Data {
  loading: boolean;
  list: any[];
  params: Params;
}
const value1 = ref([])
let data: Data = reactive({
  list: [],
  loading: false,
  params: {
    total: 0,
    query: {
      page: 1,
      pageSize: 10,
      ip: "",
      userName: "",
      model: "",
      type: "",
      startTime: "",
      endTime: "",
    },
  },
});
/**
 * 列表
 */
const getList = async () => {
  data.loading = true;
  try {
    const res = await logList(data.params.query);
    data.list = res?.data?.data?.list;
    data.params.total = res?.data?.data?.total;
  } catch (e) {
    console.log(e);
  } finally {
    data.loading = false;
  }
};
/**
 * 分页回调
 * @param {number} page 当前页码
 * @param {number} size 每页内容条数
 */
const handlePageChange = (page, size) => {
  data.params.query.page = page;
  data.params.query.pageSize = size;
  getList();
};
/**
 * 时间组件回调
 * @param {array} value [开始时间, 结束时间]
 */
const handleTimeChange = (value: array) => {
  console.log(value)
  data.params.query.startTime = value? value[0]: ''
  data.params.query.endTime = value? value[1]: ''
  getList();
}
/**
 * 查询
 */
const handleSearch = () => {
  getList();
};
onMounted(() => {
  getList();
});
</script>

<template>
  <div class="page-container">
    <h1>日志管理</h1>
    <el-row style="padding-bottom: 20px">
      <el-form :inline="true" label-width="70px" @submit.native.prevent>
        <el-form-item label="IP">
          <el-input
            v-model.trim="data.params.query.ip"
            placeholder="请填写IP"
            maxlength="15"
            @change="handleSearch"
          />
        </el-form-item>
        <el-form-item label="用户名">
          <el-input
            v-model.trim="data.params.query.userName"
            placeholder="请填写用户名"
            maxlength="15"
            @change="handleSearch"
          />
        </el-form-item>
        <el-form-item label="模块">
          <el-input
            v-model.trim="data.params.query.model"
            placeholder="请填写模块"
            maxlength="15"
            @change="handleSearch"
          />
        </el-form-item>
        <el-form-item label="类型">
          <el-input
            v-model.trim="data.params.query.type"
            placeholder="请填写类型"
            maxlength="15"
            @change="handleSearch"
          />
        </el-form-item>
        <el-form-item label="时间">
          <el-date-picker
            v-model="value1"
            type="datetimerange"
            range-separator="至"
            format="YYYY-MM-DD HH:mm:ss"
            value-format="YYYY-MM-DD HH:mm:ss"
            start-placeholder="开始时间"
            end-placeholder="结束时间"
            @change="handleTimeChange"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleSearch">查询</el-button>
        </el-form-item>
      </el-form>
    </el-row>
    <el-table
      :data="data.list"
      style="width: 100%"
      border
      v-loading="data.loading"
      align="center"
      element-loading-text="拼命加载中"
    >
      <el-table-column prop="id" label="ID" align="center"> </el-table-column>
      <el-table-column prop="ip" label="IP" align="center"> </el-table-column>
      <el-table-column prop="model" label="模块" align="center">
      </el-table-column>
      <el-table-column prop="type" label="类型" align="center">
      </el-table-column>
      <el-table-column prop="themeName" label="内容" align="center">
      </el-table-column>
      <el-table-column prop="time" label="操作时间" align="center">
        <template #default="scope">
          {{ parseTime(new Date(scope.row.time).getTime()) }}
        </template>
      </el-table-column>
      <el-table-column prop="userName" label="操作人" align="center">
      </el-table-column>
    </el-table>
    <Pagination
      :total="data.params.total"
      :currentPage="data.params.query.page"
      :pageSize="data.params.query.pageSize"
      @pageChange="handlePageChange"
    ></Pagination>
  </div>
</template>