博客项目目录: 请戳这里
准备
需求:用户登录后,如果有未读消息,会在右上角提示,进入我的消息页面,点击删除,可删除对应消息。
删除消息
1.在controller层添加对应方法
传入一个消息id和一个all标记变量(默认为false),当id为当前id,并且用户为当前账户时,如果all为false,删除当前消息;如果为true,删除全部消息。
//删除消息
@ResponseBody
@PostMapping("/message/remove/")
public Result msgRemove(Long id,
@RequestParam(defaultValue = "false") Boolean all) {
boolean remove = messageService.remove(new QueryWrapper<UserMessage>()
.eq("to_user_id", getProfileId())
.eq(!all, "id", id));
return remove ? Result.success(null) : Result.fail("删除失败");
}
2.测试
- 删除系统消息:
发现原来的系统消息没有了,第二页的消息也转到第一页了
- 删除全部消息:
操作之后,发现所有消息都没有了
账户信息同步
由于许多地方的信息都是从账户信息取的,所以在进行一些操作后,需要跟新账户信息,并且登录后的账户信息在前端也需要同步
1.登录时同步
2.基本设置同步
跟新头像:
跟新其他信息:
3.layout.ftl同步
未读消息提示
跟新账户信息完成,当用户登录后,前端用户id会由游客状态的-1转为实际的id,触发前端请求
1.请求函数分析
可以看出,user的id不是-1时,会触发请求,将请求得到的未读消息,以及一些前端模块拼接成一个元素,返回到页面。
2.在controller层添加对应方法
前面定义了status这个变量,当其为0时是未读,为1时是已读。我们设置一个key为status和count(未读消息数量)的键值对,作为参数传给请求函数。
//未读消息
@ResponseBody
@RequestMapping("/message/nums/")
public Map msgNums() {
int count = messageService.count(new QueryWrapper<UserMessage>()
.eq("to_user_id", getProfileId())
.eq("status", "0")
);
return MapUtil.builder("status", 0)
.put("count", count).build();
}
3.测试
登录用户:
发现没有错误了,并出现一条未读消息
参考资料:
https://github.com/MarkerHub/eblog