增加日志管理

main
yanzai 2 years ago
parent 0dd5da7800
commit ff9f2af687

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Services\LogService;
use Illuminate\Http\Request;
class LogController extends Controller
{
public function GetList(){
$page =request('page');
$pagesize =request('pageSize');
$searchInfo =request('searchInfo');
$s= new LogService();
return $s->GetList(['page'=>$page,'pagesize'=>$pagesize,'searchInfo'=>$searchInfo]);
}
public function GetLogTableName(){
$s= new LogService();
return $s->GetLogTableName();
}
}

@ -42,6 +42,51 @@ class LogService
}
//获取日志表名称
public function GetLogTableName(){
$result=[];
//获取日志表名称
$tables = DB::select("SHOW TABLES LIKE '%" . 'zz_request_log_' . "%'");
$tableNames = [];
foreach($tables as $table) {
foreach($table as $tableName) {
$tableNames[] = $tableName;
}
}
$result['table_list']=$tableNames;
return \Yz::Return(true,'获取成功',$result);
}
public function GetList($arr){ //获取日志列表
$result=[];
$table_name=$arr['searchInfo']['table_name'];
$page = $arr['page'];
$pagesize = $arr['pagesize'];
if(isset($table_name)){
//获取接口列表
$apilist=DB::table($table_name)
->select('request_url')
->groupBy('request_url')
->get();
$result['api_list']=$apilist;
$list=DB::table($table_name);
if(isset($arr['searchInfo']['request_url'])) $list=$list->where('request_url',$arr['searchInfo']['request_url']);
if(isset($arr['searchInfo']['ziduan']) and isset($arr['searchInfo']['ziduan_value'])) $list=$list->where($arr['searchInfo']['ziduan'],'like','%'.$arr['searchInfo']['ziduan_value'].'%' );
$count=$list->count();
$list=$list->orderBy('id', 'desc')->skip(($page-1)*$pagesize)->take($pagesize)->get();
$result['list']=$list;
$result['count']=$count;
return \Yz::Return(true,'获取成功',$result);
}else{
return \Yz::echoError1("请选择表名");
}
}
public static function CheckTableName(){ // 查看日志表是否存在,每月一个表,如果没有就创建
$table_name='zz_request_log_' . date('ym');
if(Schema::hasTable($table_name)){

@ -38,6 +38,8 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () {
Route::post('admin/GetGroupMenuList','App\Http\Controllers\API\Admin\GroupController@GetGroupMenuList'); //管理员查询分组使用的菜单
Route::post('admin/SaveGroup','App\Http\Controllers\API\Admin\GroupController@Save'); //admin后台组列表
Route::post('admin/CheckMenuAuth','App\Http\Controllers\API\Admin\BaseInfoController@CheckMenuAuth'); //admin后台检查用户菜单权限
Route::post('admin/SystemLogGetList','App\Http\Controllers\API\LogController@GetList');//admin后台获取日志列表
Route::post('admin/GetLogTableName','App\Http\Controllers\API\LogController@GetLogTableName');//admin后台获取日志表名
//--------------以上为系统基本接口
Route::post('admin/GetHealthOrganizationEnableList','App\Http\Controllers\API\Admin\YeWu\HealthOrganizationController@GetEnableList'); //admin后台获取可用体检机构列表

@ -120,4 +120,12 @@ export const UkeyGetServeInfo = (data={}) => {
//Ukey登陆
export const UkeyUserInfoLogin = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'UkeyLogin',data:data})
}
//获取日志列表
export const SystemLogGetList = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/SystemLogGetList',data:data})
}
//获取日志表名
export const GetLogTableName = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/GetLogTableName',data:data})
}

@ -58,6 +58,13 @@ const router = createRouter({
component: AdminChangPwd,
meta: { title: '用户中心' }
}, {
path: '/systemMngr/systemLog',
name: 'SystemMngrsystemLog',
component: () => import('../views/SystemMngr/SystemLog.vue'),
meta: {
title: '系统日志'
}
},{
path: '/healthCalendar',
name: 'HealthCalendar',
component: HealthCalendar,

@ -0,0 +1,158 @@
<template>
<div>
<div class="head">
<el-row>
<el-form-item>
<el-tag class="ml-2" type="success" style="margin-right: 20px;">日志表</el-tag>
<el-select filterable v-model="searchInfo.table_name" clearable placeholder="请选择表名">
<el-option v-for="(item, index) in tablename_list" :key="index" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item v-if="api_list.length>0">
<el-tag class="ml-2" type="success" style="margin-right: 10px;">接口</el-tag>
<el-select filterable v-model="searchInfo.request_url" clearable placeholder="选择接口">
<el-option v-for="(item, index) in api_list" :key="index" :label="item.request_url" :value="item.request_url" />
</el-select>
</el-form-item>
<el-form-item v-if="api_list.length>0">
<el-tag class="ml-2" type="success" style="margin-right: 10px;">字段</el-tag>
<el-select filterable v-model="searchInfo.ziduan" clearable placeholder="选择字段">
<el-option v-for="(item, index) in ziduan" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item v-if="api_list.length>0" >
<el-input v-model="searchInfo.ziduan_value" placeholder="字段内容"/>
</el-form-item>
<el-form-item>
<el-button type="primary" style="margin-left: 10px;" @click="Search()"></el-button>
</el-form-item>
</el-row>
</div>
<el-table border :data="tableData" style="width: 100%;" row-key="id" v-loading="loading">
<el-table-column prop="id" label="Id" width="80" />
<el-table-column prop="request_url" label="接口地址" width="150"/>
<el-table-column prop="request_ip" label="ip" width="100"/>
<el-table-column prop="post_data" label="post数据" />
<el-table-column prop="get_data" label="get数据" />
<el-table-column prop="response_data" label="res数据" >
<template #default="scope">
<div @click="toggleExpand(scope.row)" class="zhankai_button">
{{ isExpanded(scope.row) ? '收起' : '展开' }}
</div>
<div v-if="isExpanded(scope.row)" >{{ scope.row.response_data }}</div>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建时间" width="180"/>
</el-table>
<div class="page">
<el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize"
:page-sizes="[15, 50, 100, 200]" layout="total,sizes, prev, pager, next" :total="total"
@size-change="PageSizeChange" @current-change="PageCurrentChange" />
</div>
</div>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
import {
ElMessage
} from 'element-plus'
import {
SystemLogGetList,GetLogTableName
} from '@/api/api.js'
let loading = ref(false)
let tableData = ref([])
let currentPage = ref(1) //
let pageSize = ref(15) //
let total = 0 //
const PageSizeChange = (e) => { //
pageSize.value = e
GetList()
}
const PageCurrentChange = (e) => { //
currentPage.value = e
GetList()
}
let ziduan=ref([
{
name:"发送的post数据",
value:"post_data"
},{
name:"res数据",
value:"response_data"
}
])
let tablename_list=ref('')
let api_list=ref('')
const GetLogTable = () => {
loading.value=true
GetLogTableName().then(res => {
loading.value=false
tablename_list.value=res.data.table_list
})
}
const GetList = () => {
loading.value=true
SystemLogGetList({
page: currentPage.value,
pageSize: pageSize.value,
searchInfo:searchInfo.value
}).then(res => {
loading.value=false
if(res.status){
tableData.value = res.data.list
api_list.value=res.data.api_list
total = res.data.count
}else{
ElMessage.error(res.msg)
}
})
}
let searchInfo=ref({
table_name:'',
request_url:'',
ziduan:'',
ziduan_value:''
})
const Search=()=>{
currentPage.value=1
GetList()
}
const zhankai=(row)=>{
console.log(row)
}
let expandedRows=ref({});
//
const toggleExpand=(row) =>{
expandedRows.value[row.id] = !expandedRows.value[row.id];
}
//
const isExpanded=(row) =>{
return expandedRows.value[row.id] === true;
}
onMounted(() => {
GetLogTable()
// GetList()
})
</script>
<style scoped>
.page {
display: flex;
justify-content: flex-end;
margin-top: 10px;
}
.zhankai_button{
color:#55aaff;
}
</style>
Loading…
Cancel
Save