From 1e8b7cbce066c3d6ea5927a74f703d89b9ddec70 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 2 Nov 2018 20:31:06 +0800 Subject: [PATCH] =?UTF-8?q?feat[litemall-admin=EF=BC=8C=20litemall-admin-a?= =?UTF-8?q?pi]:=20=E7=AE=A1=E7=90=86=E5=91=98=E5=90=8E=E5=8F=B0=E7=9A=84?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=AF=86=E7=A0=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/web/AdminProfileController.java | 54 +++++++++++ litemall-admin/src/api/profile.js | 9 ++ litemall-admin/src/router/index.js | 10 +- .../src/views/layout/components/Navbar.vue | 7 +- litemall-admin/src/views/profile/password.vue | 95 +++++++++++++++++++ .../db/service/LitemallAdminService.java | 6 ++ 6 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminProfileController.java create mode 100644 litemall-admin/src/api/profile.js create mode 100644 litemall-admin/src/views/profile/password.vue diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminProfileController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminProfileController.java new file mode 100644 index 00000000..8cb3c9a7 --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminProfileController.java @@ -0,0 +1,54 @@ +package org.linlinjava.litemall.admin.web; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.admin.annotation.LoginAdmin; +import org.linlinjava.litemall.core.util.JacksonUtil; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.core.util.bcrypt.BCryptPasswordEncoder; +import org.linlinjava.litemall.db.domain.LitemallAdmin; +import org.linlinjava.litemall.db.service.LitemallAdminService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/profile") +@Validated +public class AdminProfileController { + private final Log logger = LogFactory.getLog(AdminProfileController.class); + + @Autowired + private LitemallAdminService adminService; + + @PostMapping("/password") + public Object create(@LoginAdmin Integer adminId, @RequestBody String body){ + if(adminId == null){ + return ResponseUtil.unlogin(); + } + + String oldPassword = JacksonUtil.parseString(body, "oldPassword"); + String newPassword = JacksonUtil.parseString(body, "newPassword"); + if(StringUtils.isEmpty(oldPassword)){ + return ResponseUtil.badArgument(); + } + if(StringUtils.isEmpty(newPassword)){ + return ResponseUtil.badArgument(); + } + + LitemallAdmin admin = adminService.findAdmin(adminId); + + BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + if(!encoder.matches(oldPassword, admin.getPassword())){ + return ResponseUtil.fail(405, "账号密码不对"); + } + + String encodedNewPassword = encoder.encode(newPassword); + admin.setPassword(encodedNewPassword); + + adminService.updateById(admin); + return ResponseUtil.ok(); + } + +} diff --git a/litemall-admin/src/api/profile.js b/litemall-admin/src/api/profile.js new file mode 100644 index 00000000..1e94e4a7 --- /dev/null +++ b/litemall-admin/src/api/profile.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function changePassword(data) { + return request({ + url: '/profile/password', + method: 'post', + data + }) +} diff --git a/litemall-admin/src/router/index.js b/litemall-admin/src/router/index.js index 209ff20f..f4b88036 100644 --- a/litemall-admin/src/router/index.js +++ b/litemall-admin/src/router/index.js @@ -152,6 +152,14 @@ export const asyncRouterMap = [ { path: 'goods', component: _import('stat/goods'), name: 'statGoods', meta: { title: '商品统计', noCache: true }} ] }, - + { + path: '/profile', + component: Layout, + redirect: 'noredirect', + children: [ + { path: 'password', component: _import('profile/password'), name: 'password', meta: { title: '修改密码', noCache: true }} + ], + hidden: true + }, { path: '*', redirect: '/404', hidden: true } ] diff --git a/litemall-admin/src/views/layout/components/Navbar.vue b/litemall-admin/src/views/layout/components/Navbar.vue index 0e643602..2381a850 100644 --- a/litemall-admin/src/views/layout/components/Navbar.vue +++ b/litemall-admin/src/views/layout/components/Navbar.vue @@ -21,7 +21,7 @@ 主页 - + GitHub @@ -31,6 +31,11 @@ 码云 + + + 密码修改 + + 退出登录 diff --git a/litemall-admin/src/views/profile/password.vue b/litemall-admin/src/views/profile/password.vue new file mode 100644 index 00000000..1b7f4619 --- /dev/null +++ b/litemall-admin/src/views/profile/password.vue @@ -0,0 +1,95 @@ + + + diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdminService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdminService.java index 215859af..a604fc6d 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdminService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdminService.java @@ -22,6 +22,11 @@ public class LitemallAdminService { return adminMapper.selectByExample(example); } + public LitemallAdmin findAdmin(Integer id) { + return adminMapper.selectByPrimaryKey(id); + + } + private final Column[] result = new Column[]{Column.id, Column.username, Column.avatar}; public List querySelective(String username, Integer page, Integer limit, String sort, String order) { LitemallAdminExample example = new LitemallAdminExample(); @@ -67,4 +72,5 @@ public class LitemallAdminService { public LitemallAdmin findById(Integer id) { return adminMapper.selectByPrimaryKeySelective(id, result); } + }