系统设置
角色
This commit is contained in:
pan.wl.2 2024-10-28 23:29:03 +08:00
parent d44c35e52a
commit 1935bc2e62
16 changed files with 128 additions and 119 deletions

View File

@ -3,18 +3,17 @@
<div class="journal">
<el-card class="!border-none" shadow="never">
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="管理员">
<el-form-item class="w-[280px]" label="管理员">
<el-input
class="w-[280px]"
placeholder="请输入"
v-model="formData.username"
v-model="formData.admin_name"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="访问方式">
<el-select class="w-[280px]" v-model="formData.type" placeholder="请选择">
<el-form-item class="w-[280px]" label="访问方式">
<el-select v-model="formData.type" placeholder="请选择">
<el-option
v-for="(item, index) in visitType"
:key="index"
@ -24,9 +23,8 @@
</el-select>
</el-form-item>
<el-form-item label="来源IP">
<el-form-item class="w-[280px]" label="来源IP">
<el-input
class="w-[280px]"
placeholder="请输入"
v-model="formData.ip"
clearable
@ -36,14 +34,13 @@
<el-form-item label="访问时间">
<daterange-picker
v-model:startTime="formData.startTime"
v-model:endTime="formData.endTime"
v-model:startTime="formData.start_time"
v-model:endTime="formData.end_time"
/>
</el-form-item>
<el-form-item label="访问链接">
<el-form-item class="w-[280px]" label="访问链接">
<el-input
class="w-[280px]"
placeholder="请输入"
v-model="formData.url"
clearable
@ -54,6 +51,12 @@
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data
class="ml-2.5"
:fetch-fun="systemLogLists"
:params="formData"
:page-size="pager.size"
/>
</el-form-item>
</el-form>
</el-card>
@ -62,14 +65,14 @@
<div>
<el-table :data="pager.lists" size="large">
<el-table-column label="记录ID" prop="id" />
<el-table-column label="操作" prop="title" min-width="120" />
<el-table-column label="管理员" prop="username" min-width="120" />
<el-table-column label="操作" prop="action" min-width="120" />
<el-table-column label="管理员" prop="admin_name" min-width="120" />
<el-table-column label="管理员ID" prop="admin_id" min-width="120" />
<el-table-column label="访问链接" prop="url" min-width="160" />
<el-table-column label="访问方式" prop="type" min-width="100" />
<el-table-column label="访问方式" prop="type" />
<el-table-column label="访问参数" prop="params" min-width="160" />
<el-table-column label="来源IP" prop="ip" min-width="160" />
<el-table-column label="错误信息" prop="error" min-width="160" />
<el-table-column label="执行耗时(毫秒)" prop="taskTime" min-width="100" />
<el-table-column label="日志时间" prop="createTime" min-width="180" />
<el-table-column label="日志时间" prop="create_time" min-width="180" />
</el-table>
</div>
<div class="flex mt-4 justify-end">
@ -83,14 +86,23 @@
import { systemLogLists } from '@/api/setting/system'
import { usePaging } from '@/hooks/usePaging'
interface formDataObj {
admin_name?: string //
url?: string // 访
ip?: string // ip
type?: string // 访
start_time?: string //
end_time?: string //
}
//
const formData = ref({
username: '',
const formData = ref<formDataObj>({
admin_name: '',
url: '',
ip: '',
type: '',
startTime: '',
endTime: ''
start_time: '',
end_time: ''
})
// 访
@ -106,6 +118,18 @@ const visitType = ref<Array<any>>([
{
label: 'post',
value: 'post'
},
{
label: 'put',
value: 'put'
},
{
label: 'delete',
value: 'delete'
},
{
label: 'option',
value: 'option'
}
])
@ -114,7 +138,9 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
params: formData.value
})
getLists()
onMounted(() => {
getLists()
})
</script>
<style lang="scss" scoped></style>

View File

@ -3,7 +3,9 @@ package com.mdd.admin.aop.aspect;
import com.alibaba.fastjson2.JSON;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.aop.Log;
import com.mdd.common.entity.system.SystemLogOperate;
import com.mdd.common.entity.admin.Admin;
import com.mdd.common.entity.system.OperationLog;
import com.mdd.common.mapper.admin.AdminMapper;
import com.mdd.common.mapper.system.SystemLogOperateMapper;
import com.mdd.common.util.IpUtils;
import com.mdd.common.util.RequestUtils;
@ -36,6 +38,9 @@ public class LogAspect {
@Resource
SystemLogOperateMapper systemLogOperateMapper;
@Resource
AdminMapper adminMapper;
private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
/**
@ -143,20 +148,26 @@ public class LogAspect {
status = 2; // 1=成功, 2=失败
}
String adminName = "";
Admin admin = adminMapper.selectById(adminId);
if (admin != null) {
adminName = admin.getName();
}
// 数据库日志
SystemLogOperate model = new SystemLogOperate();
OperationLog model = new OperationLog();
model.setAdminId(adminId);
model.setTitle(logAnnotation.title());
model.setAdminName(adminName);
model.setAction(logAnnotation.title());
model.setIp(IpUtils.getIpAddress());
model.setType(request.getMethod());
model.setMethod(className + "." + methodName + "()");
// model.setMethod(className + "." + methodName + "()");
model.setUrl(RequestUtils.route());
model.setArgs(params);
model.setError(error);
model.setStatus(status);
model.setStartTime(beginTime / 1000);
model.setEndTime(endTime / 1000);
model.setTaskTime(endTime - beginTime);
model.setParams(params);
model.setResult(error);
// model.setStatus(status);
// model.setStartTime(beginTime / 1000);
// model.setEndTime(endTime / 1000);
// model.setTaskTime(endTime - beginTime);
model.setCreateTime(System.currentTimeMillis() / 1000);
executor.submit(() -> {
systemLogOperateMapper.insert(model);

View File

@ -143,7 +143,7 @@ public class ArtCateServiceImpl implements IArtCateService {
ArticleCate model = new ArticleCate();
model.setName(createValidate.getName());
model.setSort(createValidate.getSort());
model.setIsShow(model.getIsShow());
model.setIsShow(createValidate.getIsShow());
model.setCreateTime(TimeUtils.timestamp());
model.setUpdateTime(TimeUtils.timestamp());
articleCategoryMapper.insert(model);

View File

@ -93,13 +93,14 @@ public class FinanceRechargerServiceImpl implements IFinanceRechargerService {
"like:sn@t.sn:str",
"=:pay_way@t.pay_way:int",
"=:pay_status@t.pay_status:int",
"datetime:start_time-end_time@create_time:long",
"datetime:start_time-end_time@t.create_time:str",
});
if (StringUtils.isNotEmpty(searchValidate.getUser_info())) {
String keyword = searchValidate.getUser_info();
mpjQueryWrapper.nested(wq->wq
.like("U.nickname", keyword).or()
.like("U.account", keyword).or()
.like("U.sn", keyword).or()
.like("U.mobile", keyword));
}

View File

@ -62,7 +62,7 @@ public class FinanceRefundServiceImpl implements IFinanceRefundService {
"like:order_sn@t.order_sn:str",
"=:refund_type@t.refund_type:int",
"=:refund_status@t.refund_status:int",
"datetime:start_time-end_time@create_time:long",
"datetime:start_time-end_time@t.create_time:str",
});
@ -70,6 +70,7 @@ public class FinanceRefundServiceImpl implements IFinanceRefundService {
String keyword = searchValidate.getUser_info();
mpjQueryWrapper.nested(wq->wq
.like("U.nickname", keyword).or()
.like("U.account", keyword).or()
.like("U.sn", keyword).or()
.like("U.mobile", keyword));
}

View File

@ -42,14 +42,15 @@ public class FinanceWalletServiceImpl implements IFinanceWalletService {
.orderByDesc("id");
logMoneyMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{
"=:change_type@change_type:int",
"datetime:startTime-endTime@create_time:long",
"=:change_type@t.change_type:int",
"datetime:start_time-end_time@t.create_time:str",
});
if (StringUtils.isNotEmpty(searchValidate.getUser_info())) {
String keyword = searchValidate.getUser_info();
mpjQueryWrapper.nested(wq->wq
.like("U.nickname", keyword).or()
.like("U.account", keyword).or()
.like("U.sn", keyword).or()
.like("U.mobile", keyword));
}

View File

@ -73,13 +73,14 @@ public class UserServiceImpl implements IUserService {
String keyword = searchValidate.getKeyword();
queryWrapper.nested(wq->wq
.like("sn", keyword).or()
.like("account", keyword).or()
.like("nickname", keyword).or()
.like("mobile", keyword));
}
userMapper.setSearch(queryWrapper, searchValidate, new String[]{
"=:channel:int",
"datetime:createTimeStart-createTimeEnd@create_time:str"
"datetime:create_time_start-create_time_end@create_time:str"
});
IPage<User> iPage = userMapper.selectPage( new Page<>(pageNo, pageSize), queryWrapper);
@ -166,7 +167,7 @@ public class UserServiceImpl implements IUserService {
case "account":
if (!user.getAccount().equals(value)) {
User u = userMapper.selectOne(new QueryWrapper<User>()
.eq("username", value)
.eq("account", value)
.isNull("delete_time")
.last("limit 1"));

View File

@ -13,7 +13,7 @@ import com.mdd.admin.vo.system.SystemLogOperateVo;
import com.mdd.common.config.GlobalConfig;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.system.SystemLogLogin;
import com.mdd.common.entity.system.SystemLogOperate;
import com.mdd.common.entity.system.OperationLog;
import com.mdd.common.mapper.system.SystemLogLoginMapper;
import com.mdd.common.mapper.system.SystemLogOperateMapper;
import com.mdd.common.util.StringUtils;
@ -50,20 +50,19 @@ public class SystemLogsServerImpl implements ISystemLogsServer {
Integer pageNo = pageValidate.getPage_no();
Integer pageSize = pageValidate.getPage_size();
MPJQueryWrapper<SystemLogOperate> mpjQueryWrapper = new MPJQueryWrapper<SystemLogOperate>()
.selectAll(SystemLogOperate.class)
MPJQueryWrapper<OperationLog> mpjQueryWrapper = new MPJQueryWrapper<OperationLog>()
.selectAll(OperationLog.class)
.select("sa.account as username,sa.name nickname")
.leftJoin("?_admin sa ON sa.id=t.admin_id".replace("?_", GlobalConfig.tablePrefix))
.orderByDesc("id");
logOperateMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{
"like:title:str",
"like:action:str",
"like:username@sa.name:str",
"like:ip:str",
"=:type:str",
"=:status:int",
"=:url:str",
"datetime:startTime-endTime@t.create_time:str"
"datetime:start_time-end_time@t.create_time:str"
});
IPage<SystemLogOperateVo> iPage = logOperateMapper.selectJoinPage(
@ -72,11 +71,7 @@ public class SystemLogsServerImpl implements ISystemLogsServer {
mpjQueryWrapper);
for (SystemLogOperateVo vo : iPage.getRecords()) {
vo.setTaskTime(vo.getTaskTime());
vo.setStartTime(TimeUtils.timestampToDate(vo.getStartTime()));
vo.setEndTime(TimeUtils.timestampToDate(vo.getEndTime()));
vo.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime()));
vo.setError(StringUtils.isNull(vo.getError()) ? "" : vo.getError());
}
return PageResult.iPageHandle(iPage);

View File

@ -25,10 +25,10 @@ public class FinanceRechargeSearchValidate implements Serializable {
private Integer pay_status;
@ApiModelProperty(value = "开始时间")
private Integer start_time;
private String start_time;
@ApiModelProperty(value = "结束时间")
private Integer end_time;
private String end_time;
@ApiModelProperty(value = "导出信息")
private Integer export;

View File

@ -27,9 +27,9 @@ public class FinanceRefundSearchValidate implements Serializable {
private Integer refund_status;
@ApiModelProperty("开始时间")
private Long start_time;
private String start_time;
@ApiModelProperty("结束时间")
private Long end_time;
private String end_time;
}

View File

@ -19,9 +19,9 @@ public class FinanceWalletSearchValidate implements Serializable {
private Integer change_type;
@ApiModelProperty(value = "创建时间")
private Integer start_time;
private String start_time;
@ApiModelProperty(value = "结束时间")
private Integer end_time;
private String end_time;
}

View File

@ -13,7 +13,7 @@ public class SystemSearchOperateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "标题")
private String title;
private String action;
@ApiModelProperty(value = "账号")
private String username;
@ -24,16 +24,14 @@ public class SystemSearchOperateValidate implements Serializable {
@ApiModelProperty(value = "类型")
private String type;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "路由")
private String url;
@ApiModelProperty(value = "开始时间")
private String startTime;
private String start_time;
@ApiModelProperty(value = "结束时间")
private String endTime;
private String end_time;
}

View File

@ -19,10 +19,10 @@ public class UserSearchValidate implements Serializable {
private String keyword;
@ApiModelProperty(value = "开始时间")
private String createTimeStart;
private String create_time_start;
@ApiModelProperty(value = "结束时间")
private String createTimeEnd;
private String create_time_end;
@ApiModelProperty(value = "导出信息")
private Integer export;

View File

@ -12,49 +12,35 @@ public class SystemLogOperateVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@ApiModelProperty("ID")
private Integer id;
@ApiModelProperty(value = "用户账号")
private String username;
@ApiModelProperty("操作人ID")
private Integer adminId;
@ApiModelProperty(value = "用户昵称")
private String nickname;
private String adminName;
@ApiModelProperty(value = "请求类型: GET/POST/PUT")
private String account;
@ApiModelProperty("操作标题")
private String action;
@ApiModelProperty("请求类型: GET/POST/PUT")
private String type;
@ApiModelProperty(value = "操作标题")
private String title;
@ApiModelProperty(value = "请求方式")
private String method;
@ApiModelProperty(value = "请求IP")
private String ip;
@ApiModelProperty(value = "请求地址")
@ApiModelProperty("请求接口")
private String url;
@ApiModelProperty(value = "请求参数")
private String args;
@ApiModelProperty("请求参数")
private String params;
@ApiModelProperty(value = "错误信息")
private String error;
@ApiModelProperty("请求结果")
private String result;
@ApiModelProperty(value = "执行状态: [1=成功, 2=失败]")
private Integer status;
@ApiModelProperty("请求IP")
private String ip;
@ApiModelProperty(value = "执行耗时")
private String taskTime;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "创建时间")
@ApiModelProperty("创建时间")
private String createTime;
}

View File

@ -10,7 +10,7 @@ import java.io.Serializable;
@Data
@ApiModel("系统操作日志实体")
public class SystemLogOperate implements Serializable {
public class OperationLog implements Serializable {
private static final long serialVersionUID = 1L;
@ -21,38 +21,27 @@ public class SystemLogOperate implements Serializable {
@ApiModelProperty("操作人ID")
private Integer adminId;
@ApiModelProperty("请求类型: GET/POST/PUT")
private String type;
private String adminName;
private String account;
@ApiModelProperty("操作标题")
private String title;
private String action;
@ApiModelProperty("请求方法")
private String method;
@ApiModelProperty("请求IP")
private String ip;
@ApiModelProperty("请求类型: GET/POST/PUT")
private String type;
@ApiModelProperty("请求接口")
private String url;
@ApiModelProperty("请求参数")
private String args;
private String params;
@ApiModelProperty("错误信息")
private String error;
@ApiModelProperty("请求结果")
private String result;
@ApiModelProperty("执行状态: [1=成功, 2=失败]")
private Integer status;
@ApiModelProperty("开始时间")
private Long startTime;
@ApiModelProperty("结束时间")
private Long endTime;
@ApiModelProperty("执行耗时")
private Long taskTime;
@ApiModelProperty("请求IP")
private String ip;
@ApiModelProperty("创建时间")
private Long createTime;

View File

@ -1,12 +1,12 @@
package com.mdd.common.mapper.system;
import com.mdd.common.core.basics.IBaseMapper;
import com.mdd.common.entity.system.SystemLogOperate;
import com.mdd.common.entity.system.OperationLog;
import org.apache.ibatis.annotations.Mapper;
/**
* 系统操作日志
*/
@Mapper
public interface SystemLogOperateMapper extends IBaseMapper<SystemLogOperate> {
public interface SystemLogOperateMapper extends IBaseMapper<OperationLog> {
}