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

View File

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

View File

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

View File

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

View File

@ -62,7 +62,7 @@ public class FinanceRefundServiceImpl implements IFinanceRefundService {
"like:order_sn@t.order_sn:str", "like:order_sn@t.order_sn:str",
"=:refund_type@t.refund_type:int", "=:refund_type@t.refund_type:int",
"=:refund_status@t.refund_status: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(); String keyword = searchValidate.getUser_info();
mpjQueryWrapper.nested(wq->wq mpjQueryWrapper.nested(wq->wq
.like("U.nickname", keyword).or() .like("U.nickname", keyword).or()
.like("U.account", keyword).or()
.like("U.sn", keyword).or() .like("U.sn", keyword).or()
.like("U.mobile", keyword)); .like("U.mobile", keyword));
} }

View File

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

View File

@ -73,13 +73,14 @@ public class UserServiceImpl implements IUserService {
String keyword = searchValidate.getKeyword(); String keyword = searchValidate.getKeyword();
queryWrapper.nested(wq->wq queryWrapper.nested(wq->wq
.like("sn", keyword).or() .like("sn", keyword).or()
.like("account", keyword).or()
.like("nickname", keyword).or() .like("nickname", keyword).or()
.like("mobile", keyword)); .like("mobile", keyword));
} }
userMapper.setSearch(queryWrapper, searchValidate, new String[]{ userMapper.setSearch(queryWrapper, searchValidate, new String[]{
"=:channel:int", "=: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); IPage<User> iPage = userMapper.selectPage( new Page<>(pageNo, pageSize), queryWrapper);
@ -166,7 +167,7 @@ public class UserServiceImpl implements IUserService {
case "account": case "account":
if (!user.getAccount().equals(value)) { if (!user.getAccount().equals(value)) {
User u = userMapper.selectOne(new QueryWrapper<User>() User u = userMapper.selectOne(new QueryWrapper<User>()
.eq("username", value) .eq("account", value)
.isNull("delete_time") .isNull("delete_time")
.last("limit 1")); .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.config.GlobalConfig;
import com.mdd.common.core.PageResult; import com.mdd.common.core.PageResult;
import com.mdd.common.entity.system.SystemLogLogin; 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.SystemLogLoginMapper;
import com.mdd.common.mapper.system.SystemLogOperateMapper; import com.mdd.common.mapper.system.SystemLogOperateMapper;
import com.mdd.common.util.StringUtils; import com.mdd.common.util.StringUtils;
@ -50,20 +50,19 @@ public class SystemLogsServerImpl implements ISystemLogsServer {
Integer pageNo = pageValidate.getPage_no(); Integer pageNo = pageValidate.getPage_no();
Integer pageSize = pageValidate.getPage_size(); Integer pageSize = pageValidate.getPage_size();
MPJQueryWrapper<SystemLogOperate> mpjQueryWrapper = new MPJQueryWrapper<SystemLogOperate>() MPJQueryWrapper<OperationLog> mpjQueryWrapper = new MPJQueryWrapper<OperationLog>()
.selectAll(SystemLogOperate.class) .selectAll(OperationLog.class)
.select("sa.account as username,sa.name nickname") .select("sa.account as username,sa.name nickname")
.leftJoin("?_admin sa ON sa.id=t.admin_id".replace("?_", GlobalConfig.tablePrefix)) .leftJoin("?_admin sa ON sa.id=t.admin_id".replace("?_", GlobalConfig.tablePrefix))
.orderByDesc("id"); .orderByDesc("id");
logOperateMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{ logOperateMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{
"like:title:str", "like:action:str",
"like:username@sa.name:str", "like:username@sa.name:str",
"like:ip:str", "like:ip:str",
"=:type:str", "=:type:str",
"=:status:int",
"=:url:str", "=:url:str",
"datetime:startTime-endTime@t.create_time:str" "datetime:start_time-end_time@t.create_time:str"
}); });
IPage<SystemLogOperateVo> iPage = logOperateMapper.selectJoinPage( IPage<SystemLogOperateVo> iPage = logOperateMapper.selectJoinPage(
@ -72,11 +71,7 @@ public class SystemLogsServerImpl implements ISystemLogsServer {
mpjQueryWrapper); mpjQueryWrapper);
for (SystemLogOperateVo vo : iPage.getRecords()) { 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.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime()));
vo.setError(StringUtils.isNull(vo.getError()) ? "" : vo.getError());
} }
return PageResult.iPageHandle(iPage); return PageResult.iPageHandle(iPage);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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