This commit is contained in:
18631081161 2026-01-23 20:13:50 +08:00
parent 82acdee645
commit b11249cd59
4 changed files with 24 additions and 95 deletions

View File

@ -284,33 +284,6 @@ onMounted(() => {
{{ row.description || '-' }} {{ row.description || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="请求"
width="200"
>
<template #default="{ row }">
<div
v-if="row.requestMethod || row.requestUrl"
class="request-info"
>
<el-tag
v-if="row.requestMethod"
:type="getMethodTagType(row.requestMethod)"
size="small"
>
{{ row.requestMethod }}
</el-tag>
<span
v-if="row.requestUrl"
class="request-url"
:title="row.requestUrl"
>
{{ row.requestUrl }}
</span>
</div>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column <el-table-column
prop="ip" prop="ip"
label="IP地址" label="IP地址"
@ -415,76 +388,15 @@ onMounted(() => {
> >
{{ currentLogDetail.description || '-' }} {{ currentLogDetail.description || '-' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="请求方法"> </el-descriptions>
<el-tag <el-descriptions
v-if="currentLogDetail.requestMethod" v-if="currentLogDetail && currentLogDetail.status === 2"
:type="getMethodTagType(currentLogDetail.requestMethod)" :column="1"
size="small" border
> style="margin-top: 16px"
{{ currentLogDetail.requestMethod }} >
</el-tag>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="请求URL">
{{ currentLogDetail.requestUrl || '-' }}
</el-descriptions-item>
<el-descriptions-item label="操作目标ID">
{{ currentLogDetail.targetId || '-' }}
</el-descriptions-item>
<el-descriptions-item label="IP地址">
{{ currentLogDetail.ip || '-' }}
</el-descriptions-item>
<el-descriptions-item label="执行耗时">
<span v-if="currentLogDetail.executeTime !== null && currentLogDetail.executeTime !== undefined">
{{ currentLogDetail.executeTime }}ms
</span>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="状态">
<StatusTag
:status="currentLogDetail.status"
:options="[
{ value: 1, label: '成功', type: 'success' },
{ value: 2, label: '失败', type: 'danger' }
]"
/>
</el-descriptions-item>
<el-descriptions-item <el-descriptions-item
label="操作时间"
:span="2"
>
{{ formatTime(currentLogDetail.createTime) }}
</el-descriptions-item>
<el-descriptions-item
label="User-Agent"
:span="2"
>
<div class="text-wrap">
{{ currentLogDetail.userAgent || '-' }}
</div>
</el-descriptions-item>
<el-descriptions-item
label="请求参数"
:span="2"
>
<div class="code-block">
<pre v-if="currentLogDetail.requestParams">{{ currentLogDetail.requestParams }}</pre>
<span v-else>-</span>
</div>
</el-descriptions-item>
<el-descriptions-item
label="响应结果"
:span="2"
>
<div class="code-block">
<pre v-if="currentLogDetail.responseResult">{{ currentLogDetail.responseResult }}</pre>
<span v-else>-</span>
</div>
</el-descriptions-item>
<el-descriptions-item
v-if="currentLogDetail.status === 2"
label="错误信息" label="错误信息"
:span="2"
> >
<div class="error-msg"> <div class="error-msg">
{{ currentLogDetail.errorMsg || '-' }} {{ currentLogDetail.errorMsg || '-' }}

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Security.Claims; using System.Security.Claims;
using XiangYi.AdminApi.Filters;
using XiangYi.Application.DTOs.Requests; using XiangYi.Application.DTOs.Requests;
using XiangYi.Application.DTOs.Responses; using XiangYi.Application.DTOs.Responses;
using XiangYi.Application.Interfaces; using XiangYi.Application.Interfaces;
@ -41,6 +42,7 @@ public class AdminSystemController : ControllerBase
/// 获取管理员列表 /// 获取管理员列表
/// </summary> /// </summary>
[HttpGet("admins")] [HttpGet("admins")]
[OperationLog("管理员管理", "查询", Description = "查询管理员列表")]
public async Task<ApiResponse<PagedResult<AdminAccountListDto>>> GetAdminList([FromQuery] AdminAccountQueryRequest request) public async Task<ApiResponse<PagedResult<AdminAccountListDto>>> GetAdminList([FromQuery] AdminAccountQueryRequest request)
{ {
var result = await _adminAccountService.GetAdminListAsync(request); var result = await _adminAccountService.GetAdminListAsync(request);
@ -51,6 +53,7 @@ public class AdminSystemController : ControllerBase
/// 获取管理员详情 /// 获取管理员详情
/// </summary> /// </summary>
[HttpGet("admins/{id}")] [HttpGet("admins/{id}")]
[OperationLog("管理员管理", "查看", Description = "查看管理员详情")]
public async Task<ApiResponse<AdminAccountDetailDto>> GetAdminDetail(long id) public async Task<ApiResponse<AdminAccountDetailDto>> GetAdminDetail(long id)
{ {
var result = await _adminAccountService.GetAdminDetailAsync(id); var result = await _adminAccountService.GetAdminDetailAsync(id);
@ -61,6 +64,7 @@ public class AdminSystemController : ControllerBase
/// 创建管理员 /// 创建管理员
/// </summary> /// </summary>
[HttpPost("admins")] [HttpPost("admins")]
[OperationLog("管理员管理", "新增", Description = "创建管理员")]
public async Task<ApiResponse<long>> CreateAdmin([FromBody] CreateAdminAccountRequest request) public async Task<ApiResponse<long>> CreateAdmin([FromBody] CreateAdminAccountRequest request)
{ {
var result = await _adminAccountService.CreateAdminAsync(request); var result = await _adminAccountService.CreateAdminAsync(request);
@ -71,6 +75,7 @@ public class AdminSystemController : ControllerBase
/// 更新管理员 /// 更新管理员
/// </summary> /// </summary>
[HttpPut("admins/{id}")] [HttpPut("admins/{id}")]
[OperationLog("管理员管理", "修改", Description = "更新管理员")]
public async Task<ApiResponse> UpdateAdmin(long id, [FromBody] UpdateAdminAccountRequest request) public async Task<ApiResponse> UpdateAdmin(long id, [FromBody] UpdateAdminAccountRequest request)
{ {
var result = await _adminAccountService.UpdateAdminAsync(id, request); var result = await _adminAccountService.UpdateAdminAsync(id, request);
@ -81,6 +86,7 @@ public class AdminSystemController : ControllerBase
/// 删除管理员 /// 删除管理员
/// </summary> /// </summary>
[HttpDelete("admins/{id}")] [HttpDelete("admins/{id}")]
[OperationLog("管理员管理", "删除", Description = "删除管理员")]
public async Task<ApiResponse> DeleteAdmin(long id) public async Task<ApiResponse> DeleteAdmin(long id)
{ {
var operatorId = GetCurrentAdminId(); var operatorId = GetCurrentAdminId();
@ -92,6 +98,7 @@ public class AdminSystemController : ControllerBase
/// 重置管理员密码 /// 重置管理员密码
/// </summary> /// </summary>
[HttpPost("admins/{id}/resetPassword")] [HttpPost("admins/{id}/resetPassword")]
[OperationLog("管理员管理", "修改", Description = "重置管理员密码", LogRequestParams = false)]
public async Task<ApiResponse> ResetAdminPassword(long id, [FromBody] ResetPasswordRequest request) public async Task<ApiResponse> ResetAdminPassword(long id, [FromBody] ResetPasswordRequest request)
{ {
var result = await _adminAccountService.ResetPasswordAsync(id, request.NewPassword); var result = await _adminAccountService.ResetPasswordAsync(id, request.NewPassword);
@ -102,6 +109,7 @@ public class AdminSystemController : ControllerBase
/// 分配管理员角色 /// 分配管理员角色
/// </summary> /// </summary>
[HttpPost("admins/{id}/roles")] [HttpPost("admins/{id}/roles")]
[OperationLog("管理员管理", "修改", Description = "分配管理员角色")]
public async Task<ApiResponse> AssignAdminRoles(long id, [FromBody] AssignAdminRolesRequest request) public async Task<ApiResponse> AssignAdminRoles(long id, [FromBody] AssignAdminRolesRequest request)
{ {
var result = await _adminAccountService.AssignRolesAsync(id, request.RoleIds); var result = await _adminAccountService.AssignRolesAsync(id, request.RoleIds);
@ -126,6 +134,7 @@ public class AdminSystemController : ControllerBase
/// 获取角色列表 /// 获取角色列表
/// </summary> /// </summary>
[HttpGet("roles")] [HttpGet("roles")]
[OperationLog("角色管理", "查询", Description = "查询角色列表")]
public async Task<ApiResponse<PagedResult<AdminRoleListDto>>> GetRoleList([FromQuery] AdminRoleQueryRequest request) public async Task<ApiResponse<PagedResult<AdminRoleListDto>>> GetRoleList([FromQuery] AdminRoleQueryRequest request)
{ {
var result = await _adminRoleService.GetRoleListAsync(request); var result = await _adminRoleService.GetRoleListAsync(request);
@ -156,6 +165,7 @@ public class AdminSystemController : ControllerBase
/// 创建角色 /// 创建角色
/// </summary> /// </summary>
[HttpPost("roles")] [HttpPost("roles")]
[OperationLog("角色管理", "新增", Description = "创建角色")]
public async Task<ApiResponse<long>> CreateRole([FromBody] CreateRoleRequest request) public async Task<ApiResponse<long>> CreateRole([FromBody] CreateRoleRequest request)
{ {
var result = await _adminRoleService.CreateRoleAsync(request); var result = await _adminRoleService.CreateRoleAsync(request);
@ -166,6 +176,7 @@ public class AdminSystemController : ControllerBase
/// 更新角色 /// 更新角色
/// </summary> /// </summary>
[HttpPut("roles/{id}")] [HttpPut("roles/{id}")]
[OperationLog("角色管理", "修改", Description = "更新角色")]
public async Task<ApiResponse> UpdateRole(long id, [FromBody] UpdateRoleRequest request) public async Task<ApiResponse> UpdateRole(long id, [FromBody] UpdateRoleRequest request)
{ {
var result = await _adminRoleService.UpdateRoleAsync(id, request); var result = await _adminRoleService.UpdateRoleAsync(id, request);

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Security.Claims; using System.Security.Claims;
using XiangYi.AdminApi.Filters;
using XiangYi.Application.DTOs.Requests; using XiangYi.Application.DTOs.Requests;
using XiangYi.Application.DTOs.Responses; using XiangYi.Application.DTOs.Responses;
using XiangYi.Application.Interfaces; using XiangYi.Application.Interfaces;
@ -30,6 +31,7 @@ public class AdminUserController : ControllerBase
/// <param name="request">查询请求</param> /// <param name="request">查询请求</param>
/// <returns>分页用户列表</returns> /// <returns>分页用户列表</returns>
[HttpGet] [HttpGet]
[OperationLog("用户管理", "查询", Description = "查询用户列表")]
public async Task<ApiResponse<PagedResult<AdminUserListDto>>> GetUserList([FromQuery] AdminUserQueryRequest request) public async Task<ApiResponse<PagedResult<AdminUserListDto>>> GetUserList([FromQuery] AdminUserQueryRequest request)
{ {
var result = await _adminUserService.GetUserListAsync(request); var result = await _adminUserService.GetUserListAsync(request);
@ -42,6 +44,7 @@ public class AdminUserController : ControllerBase
/// <param name="id">用户ID</param> /// <param name="id">用户ID</param>
/// <returns>用户详情</returns> /// <returns>用户详情</returns>
[HttpGet("{id}")] [HttpGet("{id}")]
[OperationLog("用户管理", "查看", Description = "查看用户详情")]
public async Task<ApiResponse<AdminUserDetailDto>> GetUserDetail(long id) public async Task<ApiResponse<AdminUserDetailDto>> GetUserDetail(long id)
{ {
var result = await _adminUserService.GetUserDetailAsync(id); var result = await _adminUserService.GetUserDetailAsync(id);
@ -55,6 +58,7 @@ public class AdminUserController : ControllerBase
/// <param name="request">状态更新请求</param> /// <param name="request">状态更新请求</param>
/// <returns>操作结果</returns> /// <returns>操作结果</returns>
[HttpPut("{id}/status")] [HttpPut("{id}/status")]
[OperationLog("用户管理", "修改", Description = "更新用户状态")]
public async Task<ApiResponse> UpdateUserStatus(long id, [FromBody] UpdateUserStatusRequest request) public async Task<ApiResponse> UpdateUserStatus(long id, [FromBody] UpdateUserStatusRequest request)
{ {
var adminId = GetCurrentAdminId(); var adminId = GetCurrentAdminId();
@ -79,6 +83,7 @@ public class AdminUserController : ControllerBase
/// <param name="request">创建请求</param> /// <param name="request">创建请求</param>
/// <returns>创建的用户ID列表</returns> /// <returns>创建的用户ID列表</returns>
[HttpPost("test-users")] [HttpPost("test-users")]
[OperationLog("用户管理", "新增", Description = "创建测试用户")]
public async Task<ApiResponse<List<long>>> CreateTestUsers([FromBody] CreateTestUsersRequest request) public async Task<ApiResponse<List<long>>> CreateTestUsers([FromBody] CreateTestUsersRequest request)
{ {
if (request.Count <= 0 || request.Count > 50) if (request.Count <= 0 || request.Count > 50)

View File

@ -67,6 +67,7 @@ public static class ValidationFilterExtensions
return services.AddControllers(options => return services.AddControllers(options =>
{ {
options.Filters.Add<ValidationFilter>(); options.Filters.Add<ValidationFilter>();
options.Filters.Add<OperationLogFilter>();
}); });
} }
} }