From 0dfddf68cacfd6d199beda2e8226db5d84b747bf Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Wed, 1 Nov 2023 00:53:24 +0800 Subject: [PATCH] =?UTF-8?q?review:=20=E4=BF=AE=E6=94=B9=20api=20=E7=BB=93?= =?UTF-8?q?=E6=9E=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AuthenticationController.java | 9 --- .../infra/controller/MineController.http | 33 ++++++++ .../infra/controller/MineController.java | 70 +++++++++++++++++ .../controller/OperatorLogController.java | 9 --- .../controller/SystemUserController.java | 15 ---- .../infra/service/AuthenticationService.java | 8 -- .../ops/module/infra/service/MineService.java | 48 ++++++++++++ .../impl/AuthenticationServiceImpl.java | 21 ----- .../infra/service/impl/MineServiceImpl.java | 76 +++++++++++++++++++ orion-ops-ui/src/api/interceptor.ts | 18 ++--- orion-ops-ui/src/api/user/auth.ts | 15 ---- orion-ops-ui/src/api/user/mine.ts | 40 ++++++++++ orion-ops-ui/src/api/user/operator-log.ts | 7 -- orion-ops-ui/src/api/user/user.ts | 14 ---- .../user/role/update-password-modal.vue | 6 +- .../user/info/components/login-history.vue | 2 +- .../views/user/info/components/user-info.vue | 6 +- 17 files changed, 284 insertions(+), 113 deletions(-) create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.http create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/MineService.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/MineServiceImpl.java create mode 100644 orion-ops-ui/src/api/user/mine.ts diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java index 6fb4146c..96ed4cc7 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/AuthenticationController.java @@ -7,7 +7,6 @@ import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.infra.define.operator.AuthenticationOperatorType; import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; -import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; import com.orion.ops.module.infra.entity.vo.UserLoginVO; import com.orion.ops.module.infra.service.AuthenticationService; import io.swagger.v3.oas.annotations.Operation; @@ -58,12 +57,4 @@ public class AuthenticationController { return HttpWrapper.ok(); } - @OperatorLog(AuthenticationOperatorType.UPDATE_PASSWORD) - @Operation(summary = "修改密码") - @PutMapping("/update-password") - public HttpWrapper updatePassword(@Validated @RequestBody UserUpdatePasswordRequest request) { - authenticationService.updatePassword(request); - return HttpWrapper.ok(); - } - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.http b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.http new file mode 100644 index 00000000..6f7f1538 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.http @@ -0,0 +1,33 @@ +### 查询当前用户信息 +GET {{baseUrl}}/infra/mine/get-user +Authorization: {{token}} + + +### 更新当前用户信息 +PUT {{baseUrl}}/infra/mine/update-user +Content-Type: application/json +Authorization: {{token}} + +{ + "nickname": "名称", + "mobile": "15555555555", + "email": "123@123.com" +} + + +### 修改当前用户密码 +PUT {{baseUrl}}/infra/mine/update-password +Content-Type: application/json +Authorization: {{token}} + +{ + "beforePassword": "21232f297a57a5a743894a0e4a801fc3", + "password": "21232f297a57a5a743894a0e4a801fc3" +} + + +### 查询当前用户登录日志 +GET {{baseUrl}}/infra/mine/login-history +Authorization: {{token}} + +### \ No newline at end of file diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.java new file mode 100644 index 00000000..0338e4c4 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/MineController.java @@ -0,0 +1,70 @@ +package com.orion.ops.module.infra.controller; + +import com.orion.lang.define.wrapper.HttpWrapper; +import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; +import com.orion.ops.framework.log.core.annotation.IgnoreLog; +import com.orion.ops.framework.log.core.enums.IgnoreLogMode; +import com.orion.ops.framework.web.core.annotation.RestWrapper; +import com.orion.ops.module.infra.define.operator.AuthenticationOperatorType; +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; +import com.orion.ops.module.infra.entity.vo.LoginHistoryVO; +import com.orion.ops.module.infra.entity.vo.SystemUserVO; +import com.orion.ops.module.infra.service.MineService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 个人服务 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/11/1 0:19 + */ +@Tag(name = "infra - 个人服务") +@Slf4j +@Validated +@RestWrapper +@RestController +@RequestMapping("/infra/mine") +@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) +public class MineController { + + @Resource + private MineService mineService; + + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/get-user") + @Operation(summary = "查询当前用户信息") + public SystemUserVO getCurrentUserInfo() { + return mineService.getCurrentUserInfo(); + } + + @PutMapping("/update-user") + @Operation(summary = "更新当前用户信息") + public Integer updateCurrentUser(@Validated @RequestBody SystemUserUpdateRequest request) { + return mineService.updateCurrentUser(request); + } + + @OperatorLog(AuthenticationOperatorType.UPDATE_PASSWORD) + @Operation(summary = "修改当前用户密码") + @PutMapping("/update-password") + public HttpWrapper updateCurrentUserPassword(@Validated @RequestBody UserUpdatePasswordRequest request) { + mineService.updateCurrentUserPassword(request); + return HttpWrapper.ok(); + } + + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/login-history") + @Operation(summary = "查询当前用户登录日志") + public List getCurrentLoginHistory() { + return mineService.getCurrentLoginHistory(); + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/OperatorLogController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/OperatorLogController.java index 8ac16c36..09187198 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/OperatorLogController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/OperatorLogController.java @@ -48,7 +48,6 @@ public class OperatorLogController { } // fixme 权限配置 - @IgnoreLog(IgnoreLogMode.RET) @GetMapping("/login-history") @Operation(summary = "查询用户登录日志") @@ -56,13 +55,5 @@ public class OperatorLogController { return operatorLogService.getLoginHistory(username); } - @IgnoreLog(IgnoreLogMode.RET) - @GetMapping("/current-login-history") - @Operation(summary = "查询当前用户登录日志") - public List getCurrentLoginHistory() { - String username = SecurityUtils.getLoginUsername(); - return operatorLogService.getLoginHistory(username); - } - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java index e9c5cdb2..18812203 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java @@ -7,7 +7,6 @@ import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; import com.orion.ops.framework.common.validator.group.Page; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; -import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.infra.define.operator.SystemUserOperatorType; import com.orion.ops.module.infra.entity.request.user.*; @@ -96,20 +95,6 @@ public class SystemUserController { return HttpWrapper.ok(); } - @IgnoreLog(IgnoreLogMode.RET) - @GetMapping("/get-current") - @Operation(summary = "查询当前用户信息") - public SystemUserVO getCurrentUserInfo() { - return systemUserService.getSystemUserById(SecurityUtils.getLoginUserId()); - } - - @PutMapping("/update-current") - @Operation(summary = "更新当前用户信息") - public Integer updateCurrentUser(@Validated @RequestBody SystemUserUpdateRequest request) { - request.setId(SecurityUtils.getLoginUserId()); - return systemUserService.updateSystemUserById(request); - } - @IgnoreLog(IgnoreLogMode.RET) @GetMapping("/get") @Operation(summary = "通过 id 查询用户") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java index 7559d565..2937f572 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/AuthenticationService.java @@ -3,7 +3,6 @@ package com.orion.ops.module.infra.service; import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.module.infra.entity.dto.LoginTokenDTO; import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; -import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; import com.orion.ops.module.infra.entity.vo.UserLoginVO; import javax.servlet.http.HttpServletRequest; @@ -43,13 +42,6 @@ public interface AuthenticationService { */ void logout(HttpServletRequest servletRequest); - /** - * 修改密码 - * - * @param request request - */ - void updatePassword(UserUpdatePasswordRequest request); - /** * 获取登录用户信息 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/MineService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/MineService.java new file mode 100644 index 00000000..2569ba80 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/MineService.java @@ -0,0 +1,48 @@ +package com.orion.ops.module.infra.service; + +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; +import com.orion.ops.module.infra.entity.vo.LoginHistoryVO; +import com.orion.ops.module.infra.entity.vo.SystemUserVO; + +import java.util.List; + +/** + * 个人服务 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/11/1 0:25 + */ +public interface MineService { + + /** + * 获取当前登录用户信息 + * + * @return user + */ + SystemUserVO getCurrentUserInfo(); + + /** + * 更新当前登录用户信息 + * + * @param request request + * @return effect + */ + Integer updateCurrentUser(SystemUserUpdateRequest request); + + /** + * 修改当前用户密码 + * + * @param request request + */ + void updateCurrentUserPassword(UserUpdatePasswordRequest request); + + /** + * 获取当前用户登录日志 + * + * @return 登录日志 + */ + List getCurrentLoginHistory(); + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java index f6efcb86..2c257eef 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java @@ -24,8 +24,6 @@ import com.orion.ops.module.infra.entity.domain.SystemRoleDO; import com.orion.ops.module.infra.entity.domain.SystemUserDO; import com.orion.ops.module.infra.entity.dto.LoginTokenDTO; import com.orion.ops.module.infra.entity.request.user.UserLoginRequest; -import com.orion.ops.module.infra.entity.request.user.UserResetPasswordRequest; -import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; import com.orion.ops.module.infra.entity.vo.UserLoginVO; import com.orion.ops.module.infra.enums.LoginTokenStatusEnum; import com.orion.ops.module.infra.enums.UserStatusEnum; @@ -60,9 +58,6 @@ public class AuthenticationServiceImpl implements AuthenticationService { @Resource private SystemUserRoleDAO systemUserRoleDAO; - @Resource - private SystemUserService systemUserService; - @Resource private PermissionService permissionService; @@ -127,22 +122,6 @@ public class AuthenticationServiceImpl implements AuthenticationService { redisTemplate.delete(Lists.of(loginKey, refreshKey)); } - @Override - public void updatePassword(UserUpdatePasswordRequest request) { - Long userId = SecurityUtils.getLoginUserId(); - // 查询用户信息 - SystemUserDO record = systemUserDAO.selectById(userId); - Valid.notNull(record, ErrorMessage.USER_ABSENT); - // 对比原始密码 - String beforePassword = Signatures.md5(request.getBeforePassword()); - Valid.eq(beforePassword, record.getPassword(), ErrorMessage.BEFORE_PASSWORD_ERROR); - // 重置密码 - UserResetPasswordRequest reset = new UserResetPasswordRequest(); - reset.setId(userId); - reset.setPassword(request.getPassword()); - systemUserService.resetPassword(reset); - } - @Override public LoginUser getLoginUser(Long id) { String userInfoKey = UserCacheKeyDefine.USER_INFO.format(id); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/MineServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/MineServiceImpl.java new file mode 100644 index 00000000..197efad3 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/MineServiceImpl.java @@ -0,0 +1,76 @@ +package com.orion.ops.module.infra.service.impl; + +import com.orion.lang.utils.crypto.Signatures; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.utils.Valid; +import com.orion.ops.framework.security.core.utils.SecurityUtils; +import com.orion.ops.module.infra.dao.SystemUserDAO; +import com.orion.ops.module.infra.entity.domain.SystemUserDO; +import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest; +import com.orion.ops.module.infra.entity.request.user.UserResetPasswordRequest; +import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest; +import com.orion.ops.module.infra.entity.vo.LoginHistoryVO; +import com.orion.ops.module.infra.entity.vo.SystemUserVO; +import com.orion.ops.module.infra.service.MineService; +import com.orion.ops.module.infra.service.OperatorLogService; +import com.orion.ops.module.infra.service.SystemUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 个人服务实现 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/11/1 0:25 + */ +@Slf4j +@Service +public class MineServiceImpl implements MineService { + + @Resource + private SystemUserService systemUserService; + + @Resource + private OperatorLogService operatorLogService; + + @Resource + private SystemUserDAO systemUserDAO; + + @Override + public SystemUserVO getCurrentUserInfo() { + return systemUserService.getSystemUserById(SecurityUtils.getLoginUserId()); + } + + @Override + public Integer updateCurrentUser(SystemUserUpdateRequest request) { + request.setId(SecurityUtils.getLoginUserId()); + return systemUserService.updateSystemUserById(request); + } + + @Override + public void updateCurrentUserPassword(UserUpdatePasswordRequest request) { + Long userId = SecurityUtils.getLoginUserId(); + // 查询用户信息 + SystemUserDO record = systemUserDAO.selectById(userId); + Valid.notNull(record, ErrorMessage.USER_ABSENT); + // 对比原始密码 + String beforePassword = Signatures.md5(request.getBeforePassword()); + Valid.eq(beforePassword, record.getPassword(), ErrorMessage.BEFORE_PASSWORD_ERROR); + // 重置密码 + UserResetPasswordRequest reset = new UserResetPasswordRequest(); + reset.setId(userId); + reset.setPassword(request.getPassword()); + systemUserService.resetPassword(reset); + } + + @Override + public List getCurrentLoginHistory() { + String username = SecurityUtils.getLoginUsername(); + return operatorLogService.getLoginHistory(username); + } + +} diff --git a/orion-ops-ui/src/api/interceptor.ts b/orion-ops-ui/src/api/interceptor.ts index 13e40fce..55de6807 100644 --- a/orion-ops-ui/src/api/interceptor.ts +++ b/orion-ops-ui/src/api/interceptor.ts @@ -53,19 +53,19 @@ axios.interceptors.response.use( }); } // 业务判断 - if ( - [401, 700, 701, 702].includes(code) && - response.config.url !== '/infra/auth/login' - ) { + if ([401, 700, 701, 702].includes(code)) { Notification.error({ closable: true, content: res.msg, }); - setTimeout(async () => { - // 登出 - await useUserStore().logout(); - window.location.reload(); - }); + // 非登录页面跳转登录页面 + if (response.config.url !== '/infra/auth/login') { + setTimeout(async () => { + // 登出 + await useUserStore().logout(); + window.location.reload(); + }); + } } return Promise.reject(new Error(res.msg || 'Error')); }, diff --git a/orion-ops-ui/src/api/user/auth.ts b/orion-ops-ui/src/api/user/auth.ts index 3a9daec2..fa8610f5 100644 --- a/orion-ops-ui/src/api/user/auth.ts +++ b/orion-ops-ui/src/api/user/auth.ts @@ -15,14 +15,6 @@ export interface LoginResponse { token: string; } -/** - * 修改密码请求 - */ -export interface UserUpdatePasswordRequest { - beforePassword?: string; - password?: string; -} - /** * 登录 */ @@ -37,13 +29,6 @@ export function logout() { return axios.get('/infra/auth/logout'); } -/** - * 修改密码 - */ -export function updatePassword(request: UserUpdatePasswordRequest) { - return axios.put('/infra/auth/update-password', request); -} - /** * 获取用户信息 */ diff --git a/orion-ops-ui/src/api/user/mine.ts b/orion-ops-ui/src/api/user/mine.ts new file mode 100644 index 00000000..9fe489bf --- /dev/null +++ b/orion-ops-ui/src/api/user/mine.ts @@ -0,0 +1,40 @@ +import type { LoginHistoryQueryResponse } from './operator-log'; +import type { UserQueryResponse, UserUpdateRequest } from './user'; +import axios from 'axios'; + +/** + * 修改密码请求 + */ +export interface UserUpdatePasswordRequest { + beforePassword?: string; + password?: string; +} + +/** + * 修改当前用户密码 + */ +export function updateCurrentUserPassword(request: UserUpdatePasswordRequest) { + return axios.put('/infra/mine/update-password', request); +} + +/** + * 查询当前用户 + */ +export function getCurrentUser() { + return axios.get('/infra/mine/get-user'); +} + +/** + * 更新当前用户 + */ +export function updateCurrentUser(request: UserUpdateRequest) { + return axios.put('/infra/mine/update-user', request); +} + +/** + * 查询当前用户登录日志 + */ +export function getCurrentLoginHistory() { + return axios.get('/infra/mine/login-history'); +} + diff --git a/orion-ops-ui/src/api/user/operator-log.ts b/orion-ops-ui/src/api/user/operator-log.ts index 2b713dd4..fd82bf78 100644 --- a/orion-ops-ui/src/api/user/operator-log.ts +++ b/orion-ops-ui/src/api/user/operator-log.ts @@ -66,10 +66,3 @@ export function getOperatorLogPage(request: OperatorLogQueryRequest) { export function getLoginHistory(username: string) { return axios.get('/infra/operator-log/login-history', { params: { username } }); } - -/** - * 查询当前用户登录日志 - */ -export function getCurrentLoginHistory() { - return axios.get('/infra/operator-log/current-login-history'); -} diff --git a/orion-ops-ui/src/api/user/user.ts b/orion-ops-ui/src/api/user/user.ts index a7e4031b..366adf9d 100644 --- a/orion-ops-ui/src/api/user/user.ts +++ b/orion-ops-ui/src/api/user/user.ts @@ -91,20 +91,6 @@ export function resetUserPassword(request: UserUpdateRequest) { return axios.put('/infra/system-user/reset-password', request); } -/** - * 查询当前用户 - */ -export function getCurrentUser() { - return axios.get('/infra/system-user/get-current'); -} - -/** - * 更新当前用户 - */ -export function updateCurrentUser(request: UserUpdateRequest) { - return axios.put('/infra/system-user/update-current', request); -} - /** * 通过 id 查询用户 */ diff --git a/orion-ops-ui/src/components/user/role/update-password-modal.vue b/orion-ops-ui/src/components/user/role/update-password-modal.vue index 66d22e03..43e30858 100644 --- a/orion-ops-ui/src/components/user/role/update-password-modal.vue +++ b/orion-ops-ui/src/components/user/role/update-password-modal.vue @@ -40,13 +40,13 @@