改一下 UserController
@PostMapping("/login")
public Result login(@RequestBody UserDto userDto) {
String username=userDto.getUsername();
String password=userDto.getPassword();
if(StrUtil.isBlank(username)||StrUtil.isBlank(password)){
// return Result.error(Constants.CODE_400,"参数错误");
return Result.error(Constants.CODE_400,"参数错误");
}
UserDto dto=userService.login(userDto);
// return Result.success(dto);
return Result.success(dto);
}
package com.yinming.sprintboot.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.log.Log; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.yinming.sprintboot.common.Constants; import com.yinming.sprintboot.controller.dto.UserDto; import com.yinming.sprintboot.entity.User; import com.yinming.sprintboot.exception.ServiceException; import com.yinming.sprintboot.mapper.UserMapper; import com.yinming.sprintboot.service.IUserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.ibatis.annotations.One; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author chen * @since 2022-02-25 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { private static final Log LOG=Log.get(); @Override public UserDto login(UserDto userDto) { QueryWrapper<User> queryWrapper=new QueryWrapper<>(); queryWrapper.eq("username",userDto.getUsername()); queryWrapper.eq("password",userDto.getPassword()); User one; try { one= getOne(queryWrapper); }catch (Exception e) { LOG.error(e); throw new ServiceException(Constants.CODE_500,"SYS错误"); } if(one!=null) { BeanUtil.copyProperties(one, userDto,true); return userDto; }else { throw new ServiceException(Constants.CODE_600,"用户名和错误"); } } }
exception
@Getter public class ServiceException extends RuntimeException{ private String code; public ServiceException(String code, String msg) { super(msg); this.code=code; } }
@ControllerAdvice public class GlobeExceptionHandler { @ExceptionHandler(ServiceException.class) @ResponseBody public Result handle(ServiceException se){ return Result.error(se.getCode(),se.getMessage()); } }
common\Result
@Data @NoArgsConstructor @AllArgsConstructor public class Result { private String code; private String msg; private Object data; public static Result success(){ return new Result(Constants.CODE_200,"",null); } public static Result success(Object data){ return new Result(Constants.CODE_200,"",data); } public static Result error(String code, String msg){ return new Result(code,"",null); } public static Result error(){ return new Result(Constants.CODE_500,"系统错误",null); } }
common\Constants
public interface Constants { String CODE_200="200"; //成功 String CODE_500="500"; //系统错误 String CODE_400="400"; //系统错误 String CODE_401="401"; //系统错误 String CODE_600="600"; //系统错误 }
@Data public class UserDto { private String username; private String password; private String nickname; private String avatarUrl; }
VUE前端
methods:{ login(){ this.request.post("/user/login",this.user).then(res=>{ if(res.code==='200'){ localStorage.setItem("user",JSON.stringify(res.data)) //存储用户信息到浏览器 this.$router.push("/") this.$message.success("登录成功") }else { console.log(res) this.$message.error(res.message) } }) } }
Head.vue
<div style="display: inline-block"><img :src="user.avatarUrl" alt="" style="width: 30px ;border-radius:50%; position: relative;top: 10px;right: 5px"> <span>{{user.nickname}}</span><i class="el-icon-arrow-down" style="margin-left: 5px"></i> </div>
return{ user:localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")):{} }
对data的改造
res.data
package com.yinming.sprintboot.controller; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.metadata.IPage; import com.yinming.sprintboot.common.Constants; import com.yinming.sprintboot.common.Result; import com.yinming.sprintboot.controller.dto.UserDto; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import com.yinming.sprintboot.service.IUserService; import com.yinming.sprintboot.entity.User; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * <p> * 前端控制器 * </p> * * @author chen * @since 2022-02-25 */ @RestController @RequestMapping("/user") public class UserController { @Resource private IUserService userService; @PostMapping("/register") public Result register(@RequestBody UserDto userDto) { String username=userDto.getUsername(); String password=userDto.getPassword(); if(StrUtil.isBlank(username)||StrUtil.isBlank(password)){ return Result.error(Constants.CODE_400,"参数错误"); } return Result.success(userService.register(userDto)); } @PostMapping public Result save(@RequestBody User user) { return Result.success(userService.saveOrUpdate(user)); } @PostMapping("/login") public Result login(@RequestBody UserDto userDto) { String username=userDto.getUsername(); String password=userDto.getPassword(); if(StrUtil.isBlank(username)||StrUtil.isBlank(password)){ // return Result.error(Constants.CODE_400,"参数错误"); return Result.error(Constants.CODE_400,"参数错误"); } UserDto dto=userService.login(userDto); // return Result.success(dto); return Result.success(dto); } @DeleteMapping("/{id}") public Result delete(@PathVariable Integer id) { return Result.success(userService.removeById(id)); } @GetMapping public List<User> findAll() { return userService.list(); } @PostMapping("/del/batch") public Result deleteBatch(@RequestBody List<Integer> ids) { //新增或者更新都在这个里面 return Result.success(userService.removeBatchByIds(ids)); } @GetMapping("/{id}") public Result findOne(@PathVariable Integer id) { return Result.success(userService.getById(id)); } @GetMapping("/username/{username}") public Result findOne(@PathVariable String username) { QueryWrapper<User> queryWrapper=new QueryWrapper<>(); queryWrapper.eq("username",username); return Result.success(userService.getOne(queryWrapper)); } @GetMapping("/page") public Result findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam(defaultValue = "") String username, @RequestParam(defaultValue = "") String email, @RequestParam(defaultValue = "") String address) { QueryWrapper<User> queryWrapper=new QueryWrapper<>(); queryWrapper.orderByDesc("id"); IPage<User> page=new Page<>(pageNum, pageSize); if(!"".equals(username)) { queryWrapper.like("username", username); } if(!"".equals(email)) { queryWrapper.like("email", email); } if(!"".equals(address)) { queryWrapper.like("address", address); } IPage<User> userPage=userService.page(page,queryWrapper); //return userService.page(new Page<>(pageNum, pageSize)); return Result.success(userPage); } @GetMapping("/export") public void export(HttpServletResponse response) throws Exception{ //从数据库查询所用数据 List<User> list=userService.list(); //通过工具类创建writer //ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx"); ExcelWriter writer = ExcelUtil.getWriter(true); //自定义标题和别名 // writer.addHeaderAlias("username","用户名"); // writer.addHeaderAlias("password","密码"); // writer.addHeaderAlias("nickname","昵称"); // writer.addHeaderAlias("phone","手机"); // writer.addHeaderAlias("email","邮箱"); // writer.addHeaderAlias("address","地址"); // writer.addHeaderAlias("createTime","创建时间"); // writer.addHeaderAlias("avatarUrl","头像"); //一次性写入list内的对象到excel。使用默认样式,强制输出标题 writer.write(list,true); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); String filename= URLEncoder.encode("用户信息","UTF-8"); response.setHeader("Content-Disposition","attachment;filename="+filename+".xlsx"); ServletOutputStream out=response.getOutputStream(); writer.flush(out, true); // 关闭writer,释放内存 out.close(); //此处记得关闭输出Servlet流 writer.close(); } @PostMapping("/import") public Result imp(MultipartFile file) throws Exception{ InputStream inputStream=file.getInputStream(); ExcelReader reader=ExcelUtil.getReader(inputStream); //List<User> list=reader.read(0,1,User.class); List<User> list=reader.readAll(User.class); System.out.println(list); userService.saveBatch(list); return Result.success(true); } }
由import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ { path: '/', component: () => import('../views/Manager.vue'), redirect:"/home", children: [ { path: 'home', name: '主页', component: () => import('../views/Home')}, { path: 'user', name: '用户管理', component: () => import('../views/User.vue')}, { path: 'person', name: '个人信息', component: () => import('../views/Person')}, ] }, { path: '/about', name: 'About', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') }, { path: '/login', name: 'Login', component: () => import('../views/Login') }, { path: '/register', name: 'Register', component: () => import('../views/Register') } ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) //路由守卫 // router.beforeEach((to, from, next) => { // // if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) // // 如果用户未能验证身份,则 `next` 会被调用两次 // localStorage.setItem("currentPathName",to.name) // console.log(localStorage) // this.$store.commit("setPath") // next() // }) export default router