Просмотр исходного кода

简化项目, 更新 home 模块

reghao 2 лет назад
Родитель
Сommit
4f8981bb56
16 измененных файлов с 70 добавлено и 335 удалено
  1. 1 1
      manager/src/main/java/cn/reghao/devops/manager/home/controller/AppEnvController.java
  2. 1 1
      manager/src/main/java/cn/reghao/devops/manager/home/controller/SysNotifyController.java
  3. 1 1
      manager/src/main/java/cn/reghao/devops/manager/home/controller/VersionController.java
  4. 1 1
      manager/src/main/java/cn/reghao/devops/manager/home/controller/page/AppEnvPageController.java
  5. 1 31
      manager/src/main/java/cn/reghao/devops/manager/home/controller/page/HomePageController.java
  6. 1 1
      manager/src/main/java/cn/reghao/devops/manager/home/controller/page/SysNotifyPageController.java
  7. 4 2
      manager/src/main/java/cn/reghao/devops/manager/home/controller/page/SysPageController.java
  8. 0 22
      manager/src/main/java/cn/reghao/devops/manager/home/model/UserInfo.java
  9. 44 3
      manager/src/main/java/cn/reghao/devops/manager/home/service/HomeService.java
  10. 0 71
      manager/src/main/java/cn/reghao/devops/manager/home/service/HomeServiceImpl.java
  11. 7 0
      manager/src/main/java/cn/reghao/devops/manager/rbac/controller/UserController.java
  12. 5 0
      manager/src/main/java/cn/reghao/devops/manager/rbac/controller/page/UserPageController.java
  13. 1 1
      manager/src/main/java/cn/reghao/devops/manager/rbac/model/dto/UpdatePasswordDto.java
  14. 0 197
      manager/src/main/resources/templates/home/userInfo.html
  15. 2 2
      manager/src/main/resources/templates/main.html
  16. 1 1
      manager/src/main/resources/templates/rbac/user/editpasswd.html

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/sys/controller/AppEnvController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/AppEnvController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller;
+package cn.reghao.devops.manager.home.controller;
 
 import cn.reghao.devops.manager.app.db.repository.AppEnvRepository;
 import cn.reghao.devops.manager.app.model.constant.EnvMap;

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/sys/controller/SysNotifyController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/SysNotifyController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller;
+package cn.reghao.devops.manager.home.controller;
 
 import cn.reghao.devops.manager.notification.model.po.DingAccount;
 import cn.reghao.devops.manager.notification.model.po.NotifyGroup;

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/sys/controller/VersionController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/VersionController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller;
+package cn.reghao.devops.manager.home.controller;
 
 import cn.reghao.devops.common.version.AppVersion;
 import cn.reghao.jutil.jdk.result.WebResult;

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/sys/controller/page/AppEnvPageController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/page/AppEnvPageController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller.page;
+package cn.reghao.devops.manager.home.controller.page;
 
 import cn.reghao.devops.manager.app.db.repository.AppEnvRepository;
 import cn.reghao.devops.manager.app.model.po.AppEnv;

+ 1 - 31
manager/src/main/java/cn/reghao/devops/manager/home/controller/HomePageController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/page/HomePageController.java

@@ -1,15 +1,11 @@
-package cn.reghao.devops.manager.home.controller;
+package cn.reghao.devops.manager.home.controller.page;
 
-import cn.reghao.devops.manager.home.model.UpdatePasswordDto;
-import cn.reghao.devops.manager.home.model.UserInfo;
 import cn.reghao.devops.manager.rbac.model.po.Menu;
 import cn.reghao.devops.manager.rbac.model.po.User;
 import cn.reghao.devops.manager.home.service.HomeService;
-import cn.reghao.jutil.jdk.result.WebResult;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.web.servlet.error.ErrorController;
-import org.springframework.http.MediaType;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Controller;
@@ -18,7 +14,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -63,31 +58,6 @@ public class HomePageController implements ErrorController {
         return "/home/index";
     }
 
-    @GetMapping("/userInfo")
-    public String userInfoPage(Model model) {
-        Authentication authToken = SecurityContextHolder.getContext().getAuthentication();
-        User user = (User) authToken.getDetails();
-        model.addAttribute("user", user);
-        return "/home/userInfo";
-    }
-
-    @PostMapping(value = "/userInfo", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String updateUserInfo(UserInfo userInfo) {
-        return WebResult.success();
-    }
-
-    @GetMapping("/editPwd")
-    public String editPasswdPage(Model model) {
-        return "/home/editPwd";
-    }
-
-    @PostMapping(value = "/editPwd", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String editPasswd(UpdatePasswordDto updatePasswordDto) {
-        return WebResult.success();
-    }
-
     @Override
     public String getErrorPath() {
         return "/error";

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/sys/controller/page/SysNotifyPageController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/page/SysNotifyPageController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller.page;
+package cn.reghao.devops.manager.home.controller.page;
 
 import cn.reghao.devops.manager.app.model.vo.KeyValue;
 import cn.reghao.devops.manager.notification.db.repository.DingAccountRepository;

+ 4 - 2
manager/src/main/java/cn/reghao/devops/manager/sys/controller/page/SysPageController.java → manager/src/main/java/cn/reghao/devops/manager/home/controller/page/SysPageController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.sys.controller.page;
+package cn.reghao.devops.manager.home.controller.page;
 
 import cn.reghao.devops.common.util.jvm.JVM;
 import cn.reghao.devops.common.util.jvm.po.JvmInfo;
@@ -7,7 +7,9 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
 
 /**
  * @author reghao

+ 0 - 22
manager/src/main/java/cn/reghao/devops/manager/home/model/UserInfo.java

@@ -1,22 +0,0 @@
-package cn.reghao.devops.manager.home.model;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-02-22 11:00:42
- */
-@Setter
-@Getter
-public class UserInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String username;
-    private String nickname;
-    private String phone;
-    private String email;
-    private Integer sex;
-}

+ 44 - 3
manager/src/main/java/cn/reghao/devops/manager/home/service/HomeService.java

@@ -1,6 +1,9 @@
 package cn.reghao.devops.manager.home.service;
 
+import cn.reghao.devops.manager.rbac.db.query.RoleQuery;
 import cn.reghao.devops.manager.rbac.model.po.Menu;
+import cn.reghao.devops.manager.rbac.model.po.Role;
+import org.springframework.stereotype.Service;
 
 import java.util.*;
 
@@ -8,7 +11,14 @@ import java.util.*;
  * @author reghao
  * @date 2021-04-04 23:36:10
  */
-public interface HomeService {
+@Service
+public class HomeService {
+    private final RoleQuery roleQuery;
+
+    public HomeService(RoleQuery roleQuery) {
+        this.roleQuery = roleQuery;
+    }
+
     /**
      * 用户拥有的角色可访问的资源
      *
@@ -16,7 +26,16 @@ public interface HomeService {
      * @return
      * @date 2021-09-10 下午6:27
      */
-    List<Menu> userMenus(Set<String> roles);
+    public List<Menu> userMenus(Set<String> roles) {
+        List<Menu> menus = new ArrayList<>();
+        roles.forEach(roleTitle -> {
+            Role role = roleQuery.findByTitle(roleTitle);
+            menus.addAll(role.getMenus());
+        });
+
+        return menus;
+    }
+
     /**
      * 根据 menu 集合生成页面侧边栏的树形菜单
      *
@@ -24,5 +43,27 @@ public interface HomeService {
      * @return
      * @date 2021-09-10 下午6:24
      */
-    Map<Integer, Menu> treeMenu(List<Menu> menus);
+    public Map<Integer, Menu> treeMenu(List<Menu> menus) {
+        // id -> menu
+        Map<Integer, Menu> keyMenu = new HashMap<>(16);
+        menus.forEach(menu -> keyMenu.put(menu.getId(), menu));
+
+        // 树形菜单数据
+        Map<Integer, Menu> treeMenu = new HashMap<>(16);
+        keyMenu.forEach((id, menu) -> {
+            Menu parentMenu = keyMenu.get(menu.getPid());
+            if (parentMenu != null) {
+                Map<Integer, Menu> childMenus = parentMenu.getChildren();
+                if (childMenus == null) {
+                    childMenus = new HashMap<>();
+                    parentMenu.setChildren(childMenus);
+                }
+                childMenus.put(menu.getPos(), menu);
+            } else {
+                treeMenu.put(menu.getPos(), menu);
+            }
+        });
+
+        return treeMenu;
+    }
 }

+ 0 - 71
manager/src/main/java/cn/reghao/devops/manager/home/service/HomeServiceImpl.java

@@ -1,71 +0,0 @@
-package cn.reghao.devops.manager.home.service;
-
-import cn.reghao.devops.manager.rbac.db.query.RoleQuery;
-import cn.reghao.devops.manager.rbac.model.po.Menu;
-import cn.reghao.devops.manager.rbac.model.po.Role;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2021-04-04 23:36:10
- */
-@Service
-public class HomeServiceImpl implements HomeService {
-    private final RoleQuery roleQuery;
-
-    public HomeServiceImpl(RoleQuery roleQuery) {
-        this.roleQuery = roleQuery;
-    }
-
-    /**
-     * 用户拥有的角色可访问的资源
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午6:27
-     */
-    @Override
-    public List<Menu> userMenus(Set<String> roles) {
-        List<Menu> menus = new ArrayList<>();
-        roles.forEach(roleTitle -> {
-            Role role = roleQuery.findByTitle(roleTitle);
-            menus.addAll(role.getMenus());
-        });
-
-        return menus;
-    }
-
-    /**
-     * 根据 menu 集合生成页面侧边栏的树形菜单
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午6:24
-     */
-    @Override
-    public Map<Integer, Menu> treeMenu(List<Menu> menus) {
-        // id -> menu
-        Map<Integer, Menu> keyMenu = new HashMap<>(16);
-        menus.forEach(menu -> keyMenu.put(menu.getId(), menu));
-
-        // 树形菜单数据
-        Map<Integer, Menu> treeMenu = new HashMap<>(16);
-        keyMenu.forEach((id, menu) -> {
-            Menu parentMenu = keyMenu.get(menu.getPid());
-            if (parentMenu != null) {
-                Map<Integer, Menu> childMenus = parentMenu.getChildren();
-                if (childMenus == null) {
-                    childMenus = new HashMap<>();
-                    parentMenu.setChildren(childMenus);
-                }
-                childMenus.put(menu.getPos(), menu);
-            } else {
-                treeMenu.put(menu.getPos(), menu);
-            }
-        });
-
-        return treeMenu;
-    }
-}

+ 7 - 0
manager/src/main/java/cn/reghao/devops/manager/rbac/controller/UserController.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.manager.rbac.controller;
 
+import cn.reghao.devops.manager.rbac.model.dto.UpdatePasswordDto;
 import cn.reghao.devops.manager.rbac.model.dto.UserCreateDto;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.devops.manager.rbac.model.dto.UserInfo;
@@ -84,6 +85,12 @@ public class UserController {
         return WebResult.success();
     }
 
+    @PostMapping(value = "/passwd/update", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public String editPasswd(UpdatePasswordDto updatePasswordDto) {
+        return WebResult.success();
+    }
+
     @ApiOperation(value = "分配用户角色")
     @PostMapping(value = "/role", produces = MediaType.APPLICATION_JSON_VALUE)
     public String assignRole(@Validated UserRole userRole) {

+ 5 - 0
manager/src/main/java/cn/reghao/devops/manager/rbac/controller/page/UserPageController.java

@@ -111,6 +111,11 @@ public class UserPageController {
         return "/rbac/user/passwd";
     }
 
+    @GetMapping("/passwd/edit")
+    public String editPasswdPage(Model model) {
+        return "/rbac/user/editpasswd";
+    }
+
     @ApiOperation(value = "用户角色分配页面")
     @GetMapping("/role/{id}")
     public String assignRolePage(@PathVariable("id") User user, Model model) {

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/home/model/UpdatePasswordDto.java → manager/src/main/java/cn/reghao/devops/manager/rbac/model/dto/UpdatePasswordDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.manager.home.model;
+package cn.reghao.devops.manager.rbac.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 0 - 197
manager/src/main/resources/templates/home/userInfo.html

@@ -1,197 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org">
-<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})">
-</head>
-<body>
-<div class="layui-form timo-compile user-info-page">
-    <div class="user-info">
-        <div class="user-avatar-box">
-            <img class="user-avatar" th:src="@{${user.avatarUrl}}" alt="头像">
-            <!--<span class="edit-avatar" th:attr="data-url=@{/userPicture}">修改头像</span>-->
-        </div>
-        <ul class="detail-info">
-            <li>账号:<span th:text="${user.username}" th:title="${user.username}"></span></li>
-            <li>昵称:<span th:text="${user.nickname}" th:title="${user.nickname}"></span></li>
-            <li>性别:<span th:text="${user.gender}"
-                         th:title="${user.gender}"></span></li>
-            <li>电话:<span th:text="${user.mobilePhone}" th:title="${user.mobilePhone}"></span></li>
-            <li>邮箱:<span th:text="${user.email}" th:title="${user.email}"></span></li>
-        </ul>
-    </div>
-    <form class="user-edit" th:action="@{/userInfo}">
-        <input type="hidden" name="username" th:value="${user.username}"/>
-        <!--<input type="hidden" name="dept" th:value="${user.dept?.id}"/>-->
-        <div class="layui-form-item">
-            <label class="layui-form-label">用户昵称</label>
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="nickname" placeholder="请输入用户昵称" th:value="${user.nickname}">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">电话号码</label>
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="phone" placeholder="请输入电话号码" th:value="${user.mobilePhone}">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">邮箱</label>
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="email" placeholder="请输入邮箱" th:value="${user.email}">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">选择性别</label>
-            <div class="layui-input-inline">
-                <input type="radio" name="sex" value="1" title="男" checked><div class="layui-unselect layui-form-radio layui-form-radioed"><i class="layui-anim layui-icon"></i><div>男</div></div>
-                <input type="radio" name="sex" value="2" title="女" th:checked="${user.gender} eq 2"><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>女</div></div>
-            </div>
-        </div>
-        <div class="layui-form-item timo-finally">
-            <button class="layui-btn ajax-submit"><i class="fa fa-check-circle"></i> 保存</button>
-            <a class="layui-btn btn-secondary close-popup"><i class="fa fa-times-circle"></i> 关闭</a>
-        </div>
-    </form>
-    <!-- 编辑头像面板 -->
-    <div class="canvas-panel">
-        <img class="canvas-bg"/>
-        <div class="canvas-shade"></div>
-        <canvas class="canvas-crop"></canvas>
-    </div>
-    <div class="canvas-group layui-btn-group">
-        <button class="upload-close layui-btn layui-btn-primary layui-btn-sm">取消</button>
-        <button class="upload-btn layui-btn layui-btn-primary layui-btn-sm">保存</button>
-    </div>
-</div>
-<script th:replace="/common/template :: script"></script>
-<script type="text/javascript" th:src="@{/js/plugins/jquery-2.2.4.min.js}"></script>
-<script type="text/javascript" th:src="@{/js/plugins/jquery.mousewheel.min.js}"></script>
-<script>
-    layui.use(['jquery','upload'], function () {
-        var $ = layui.jquery;
-        var upload = layui.upload;
-
-        $(".user-edit").on("mousedown", function () {
-            $(this).css("opacity", 1);
-        });
-
-        /* 修改头像 */
-        var image = new Image();
-        var panel = $(".canvas-panel");
-        var bgImg = $(".canvas-bg");
-        var canvas = $(".canvas-crop");
-
-        // 激活或停止移动
-        var moveEvent = false;
-        var screenX = 0, screenY = 0;
-        var moveTop = 0, moveLeft = 0;
-        panel.on("mousedown",function (e) {
-            screenX = e.screenX;
-            screenY = e.screenY;
-            moveTop = parseFloat(bgImg.css("top"));
-            moveLeft = parseFloat(bgImg.css("left"));
-            moveEvent = true;
-        });
-        panel.on("mouseup",function (e) {
-            moveEvent = false;
-        });
-        panel.on("mousemove", function (e) {
-            if (moveEvent){
-                bgImg.css("left", moveLeft + e.screenX - screenX);
-                bgImg.css("top", moveTop + e.screenY - screenY);
-                renderPanel();
-            }
-        });
-        panel.on("mousewheel", function(event, delta) {
-            var dir = delta > 0 ? 'Up' : 'Down';
-            var width = parseFloat(bgImg.css("width"));
-            var height = parseFloat(bgImg.css("height"));
-            if (dir == 'Up') {
-                delta = 1;
-            } else {
-                delta = -1;
-            }
-            bgImg.css("width", width * (1 + 0.1 * delta));
-            bgImg.css("height", height * (1 + 0.1 * delta));
-            bgImg.css("left", parseFloat(bgImg.css("left")) - (width * 0.1 / 2) * delta);
-            bgImg.css("top", parseFloat(bgImg.css("top")) - (height * 0.1 / 2) * delta);
-            renderPanel();
-            return false;
-        });
-
-        // 渲染画布面板
-        function renderPanel() {
-            canvas[0].width = 256;
-            canvas[0].height = 256;
-            var imgScale = image.width / bgImg.width();
-            var context = canvas[0].getContext('2d');
-            var sx = (bgImg.width() * imgScale / 2 ) - canvas.width() / 2 * imgScale,
-                sy = (bgImg.height() * imgScale / 2) - canvas.height() / 2 * imgScale,
-                sw = canvas.width() * imgScale, sh = canvas.height() * imgScale;
-            var moveX = panel.width() / 2 - parseFloat(bgImg.css("left")) - bgImg.width() / 2;
-            var moveY = panel.height() / 2 - parseFloat(bgImg.css("top")) - bgImg.height() / 2;
-            context.drawImage(image, sx + moveX * imgScale, sy + moveY * imgScale, sw, sh, 0, 0, canvas[0].width, canvas[0].height);
-        }
-
-        var files = [];
-        var uploadInst = upload.render({
-            elem: '.edit-avatar'
-            ,field: 'picture'
-            ,url: $('.edit-avatar').data('url')
-            ,exts: 'jpg|png|gif|jpeg'
-            ,auto: false
-            ,bindAction: ".upload-btn"
-            // 选择文件回调
-            ,choose: function(obj){
-                obj.preview(function(index, file, result){
-                    panel.show();
-                    $(".canvas-group").show();
-                    image.src = result;
-                    image.onload = function(){
-                        bgImg.attr("src", result);
-                        if(bgImg.width() >= bgImg.height()){
-                            bgImg.css("height", canvas.width());
-                        }else {
-                            bgImg.css("width", canvas.height());
-                        }
-                        bgImg.css("top", (panel.height() - bgImg.height()) / 2);
-                        bgImg.css("left", (panel.width() - bgImg.width()) / 2);
-                        renderPanel();
-                    }
-                });
-            }
-            ,before: function(obj){
-                files = obj.pushFile();
-                var index, file;
-                for(index in files) {
-                    file = files[index];
-                }
-                var dataurl = canvas[0].toDataURL(file.type, 0.92);
-                var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
-                    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
-                while(n--){
-                    u8arr[n] = bstr.charCodeAt(n);
-                }
-                files[index] = new File([u8arr], file.name, {type:mime});
-            }
-            ,done: function(res, index){
-                if(res.code == 200){
-                    panel.hide();
-                    $(".canvas-group").hide();
-                    layer.msg("修改头像成功", {offset: '15px', time: 3000, icon: 1});
-                    $(".user-avatar").attr("src", canvas[0].toDataURL());
-                    delete files[index];
-                }else {
-                    layer.msg(res.msg, {offset: '15px', time: 3000, icon: 2});
-                }
-            }
-        });
-
-        // 关闭裁切面板及清空文件
-        $(".upload-close").on("click", function () {
-            panel.hide();
-            $(".canvas-group").hide();
-        });
-    });
-</script>
-</body>
-</html>

+ 2 - 2
manager/src/main/resources/templates/main.html

@@ -35,7 +35,7 @@
                                 <i class="fa fa-user-o"></i>个人信息</a>
                         </div>
                         <div>
-                            <a class="open-popup" data-title="修改密码" th:attr="data-url=@{/editPwd}" data-size="456,296">
+                            <a class="open-popup" data-title="修改密码" th:attr="data-url=@{/rbac/user/passwd/edit}" data-size="456,296">
                                 <i class="fa fa-lock" style="font-size:17px;width:12px;"></i>修改密码</a></div>
                         <div>
                             <a th:href="@{/logout}"><i class="fa fa-power-off"></i>退出登录</a>
@@ -51,7 +51,7 @@
         <div class="layui-side-scroll">
             <!-- 用户区域 -->
             <div class="layui-side-user">
-                <img class="layui-side-user-avatar" data-size="680,464" th:src="@{${user.avatarUrl}}" alt="头像">
+                <img class="layui-side-user-avatar" th:src="@{${user.avatarUrl}}" alt="头像">
                 <div>
                     <p class="layui-side-user-name" th:text="${user.nickname}">DevOps</p>
                     <p class="layui-side-user-designation">在线</p>

+ 1 - 1
manager/src/main/resources/templates/home/editPwd.html → manager/src/main/resources/templates/rbac/user/editpasswd.html

@@ -4,7 +4,7 @@
 </head>
 <body>
 <div class="layui-form timo-compile">
-    <form th:action="@{/editPwd}">
+    <form th:action="@{/api/rbac/user/passwd/update}">
         <div class="layui-form-item">
             <label class="layui-form-label">原来密码</label>
             <div class="layui-input-inline">