提交 3e1852da authored 作者: lhh's avatar lhh

update

上级 7b210237
import httpRequest from '@/utils/axios'
// 获取日志列表
export function getLogs(params?: { competition_id?: string; client_id?: string; competitor_id?: string; competitor_name?: string; competitor_mobile?: string; page?: number; 'per-page'?: number }) {
return httpRequest.get('/api/resource/v1/backend/competition/client-operate-logs', { params })
}
// 获取赛项列表
export function getContestList(params?: { page?: number; 'per-page'?: number }) {
return httpRequest.get('/api/resource/v1/backend/competition/list', { params })
}
\ No newline at end of file
import type { RouteRecordRaw } from 'vue-router'
import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/admin/contest/log',
component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
<script setup lang="ts">
import { getContestList, getLogs } from '../api'
import AppList from '@/components/base/AppList.vue'
const appList = $ref<InstanceType<typeof AppList> | null>(null)
let form = reactive({
competition_id: '',
competitor_name: '',
competitor_mobile: '',
page: 1,
'per-page': 10
})
// 搜索
const onSubmit = () => {
requestLogs()
}
let total: number = $ref(0)
let logsList: any = $ref()
const requestLogs = () => {
const params = { ...form }
getLogs(params).then((res: any) => {
logsList = res.data.list.map((item: any) => {
item.client_detail = JSON.parse(item.client_detail)
return item
})
total = parseInt(res.data.total)
})
}
let contestList: any = $ref()
getContestList({ page: 1, 'per-page': 1000 }).then((res: any) => {
contestList = res.data?.list
})
const listOptions = $computed(() => {
return {
columns: [
{ label: '序号', type: 'index', width: 60 },
{ label: '客户端', prop: 'name' },
{ label: '客户端版本', prop: 'client_version' },
{ label: '赛项', prop: 'competition.name' },
{ label: '选手姓名', prop: 'name' },
{ label: '手机号', prop: 'mobile' },
{ label: '时间', prop: 'created_time' },
{ label: 'IP', prop: 'client_detail.ip' },
{ label: '操作系统', prop: 'client_detail.os' },
{ label: '浏览器', prop: 'client_detail.browser' },
{ label: '操作', prop: 'operation_desc' }
],
data: logsList
}
})
onMounted(() => {
requestLogs()
})
// 页数改变
const pageSizeChange = (value: number) => {
form.page = 1
form['per-page'] = value
requestLogs()
}
const fetchList = (n: any) => {
form.page = n
requestLogs()
}
const reset = () => {
form = {
competition_id: '',
competitor_name: '',
competitor_mobile: '',
page: 1,
'per-page': 10
}
requestLogs()
}
</script>
<template>
<AppCard title="客户端日志">
<el-form :inline="true" :model="form">
<el-form-item label="赛项">
<el-select filterable v-model="form.competition_id" placeholder="请选择赛项">
<el-option v-for="item in contestList" :label="item?.name" :value="item.id" :key="item?.id" />
</el-select>
</el-form-item>
<el-form-item label="选手姓名">
<el-input v-model="form.competitor_name" placeholder="请输入选手姓名" />
</el-form-item>
<el-form-item label="选手手机号">
<el-input v-model="form.competitor_mobile" placeholder="请输入选手手机号" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">搜索</el-button>
<el-button @click="reset">重置</el-button>
</el-form-item>
</el-form>
<AppList v-bind="listOptions" ref="appList" style="margin: 10px 0"> </AppList>
<div style="display: flex; justify-content: right">
<el-pagination
class="table-list-pagination"
background
layout="total, sizes, prev, pager, next, jumper"
:page-sizes="[10, 20, 30, 50]"
:page-size="form['per-page']"
:total="total"
v-model:current-page="form.page"
@size-change="pageSizeChange"
@current-change="fetchList"
>
</el-pagination>
</div>
</AppCard>
</template>
<style lang="scss"></style>
...@@ -43,7 +43,8 @@ const adminMenus: IMenuItem[] = [ ...@@ -43,7 +43,8 @@ const adminMenus: IMenuItem[] = [
{ name: '大赛训练答疑', path: '/admin/contest/discuss', tag: 'v1-teacher-train-discussion' }, { name: '大赛训练答疑', path: '/admin/contest/discuss', tag: 'v1-teacher-train-discussion' },
{ name: '大赛监控', path: '/admin/contest/dashboard', tag: 'v1-expert-statistic' }, { name: '大赛监控', path: '/admin/contest/dashboard', tag: 'v1-expert-statistic' },
{ name: '大赛评分', path: '/admin/contest/check', tag: 'v1-expert-check' }, { name: '大赛评分', path: '/admin/contest/check', tag: 'v1-expert-check' },
{ name: '大赛发布成绩', path: '/admin/contest/score', tag: 'v1-expert-score' } { name: '大赛发布成绩', path: '/admin/contest/score', tag: 'v1-expert-score' },
{ name: '客户端日志', path: '/admin/contest/log', tag: '' }
] ]
}, },
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论