若依不分离----->首页模块保姆级源码解析(1)

若依不分离首页模块保姆级源码解析

接着上文来在上文中login.js验证成功后跳转到 location.href = ctx + ‘index’;
那我们就去index瞅一瞅

function login() {
   
    $.modal.loading($("#btnSubmit").data("loading"));
    //获取账号密码 消除空格
    var username = $.common.trim($("input[name='username']").val());
    var password = $.common.trim($("input[name='password']").val());
    //获取验证码的值
    var validateCode = $("input[name='validateCode']").val();
    var rememberMe = $("input[name='rememberme']").is(':checked');
    $.ajax({
   
        type: "post",
        //var ctx = [[@{/}]]; 在index.html中有定义的
        url: ctx + "login",
        //把这四个传到 控制层的login页面 扣出数据封装成对象给后端
        data: {
   
            "username": username,
            "password": password,
            "validateCode": validateCode,
            "rememberMe": rememberMe
        },
        success: function(r) {
   
            //判断状态码是否等于0
            if (r.code == web_status.SUCCESS) {
   
                //跳到/index页面
                location.href = ctx + 'index';
            } else {
   
                //如果失败了就 关闭转圈圈
            	$.modal.closeLoading();
            	//触发更新验证码
            	$('.imgcode').click();
            	//验证码内容清空
            	$(".code").val("");
            	//弹窗登录失败
            	$.modal.msg(r.msg);
            }
        }
    });
}

复制 index 去idea搜索

在这里插入图片描述
点进GetMapping 直接食用即可

  // 系统首页
    @GetMapping("/index")
    public String index(ModelMap mmap)
    {
   
        // 取身份信息 拿到登录用户 这个是若依在里边封装后的方法
        SysUser user = getSysUser();
        // 根据用户id取出菜单
        // 使用menuService进行具体的业务处理,跳转到service层
        // 返回一个List对象,其类型是SysMenu
        // SysMenu是一个菜单的权限表对象,其设置了菜单名、类型、父菜单、子菜单等等一系列属性
        List<SysMenu> menus = menuService.selectMenusByUser(user);
        //将相关的信息放入视图map中,类型为String-Object
        mmap.put("menus", menus);
        mmap.put("user", user);
        //侧边栏主题
        mmap.put("sideTheme", configService.selectConfigByKey("sys.index.sideTheme"));
        //皮肤名称
        mmap.put("skinName", configService.selectConfigByKey("sys.index.skinName"));

        Boolean footer = Convert.toBool(configService.selectConfigByKey("sys.index.footer"), true);

        Boolean tagsView = Convert.toBool(configService.selectConfigByKey("sys.index.tagsView"), true);
        mmap.put("footer", footer);
        mmap.put("tagsView", tagsView);
        mmap.put("mainClass", contentMainClass(footer, tagsView));
        //版权年份
        mmap.put("copyrightYear", RuoYiConfig.getCopyrightYear());
        mmap.put("demoEnabled", RuoYiConfig.isDemoEnabled());
        mmap.put("isDefaultModifyPwd", initPasswordIsModify(user.getPwdUpdateDate()));
        mmap.put("isPasswordExpired", passwordIsExpiration(user.getPwdUpdateDate()));
        mmap.put("isMobile", ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")));

        // 菜单导航显示风格
        String menuStyle = configService.selectConfigByKey("sys.index.menuStyle");
        // 移动端,默认使左侧导航菜单,否则取默认配置
        String indexStyle = ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")) ? "index" : menuStyle;

        // 优先Cookie配置导航菜单
        Cookie[] cookies = ServletUtils.getRequest().getCookies();
        for (Cookie cookie : cookies)
        {
   
            if (StringUtils.isNotEmpty(cookie.getName()) && "nav-style".equalsIgnoreCase(cookie.getName()))
            {
   
                indexStyle = cookie.getValue();
                break;
            }
        }
        //判断是移动端还是pc端,跳转的页面不同
        String webIndex = "topnav".equalsIgnoreCase(indexStyle) ? "index-topnav" : "index";
        //将视图解析器返回到页面
        return webIndex;
    }
我们发现这句代码很厉害哦,点进去看看
SysUser user = getSysUser();

经典BastController

    /**
     * 获取用户缓存信息
     */
    public SysUser getSysUser()
    {
   
        return ShiroUtils.getSysUser();
    }

再点击 ShiroUtils 点进去

没错了就是这个没有参数的方法

    public static SysUser getSysUser()
    {
   
        SysUser user = null;
       //获取身份信息 认证凭证 可以是字符串也可以是个对象
       //通过调试我们发现obj就是一个SysUser对象
        Object obj = getSubject().getPrincipal();
        if (StringUtils.isNotNull(obj))
        {
   
            user = new SysUser();
            //把属性复制到新new的 user对象 
            BeanUtils.copyBeanProp(user, obj);
        }
        return user;
    }

OK 回到上边的代码继续往下看

我们假设用的是pc端 我们去 index 看一看到底做了什么

//判断是移动端还是pc端,跳转的页面不同
        String webIndex = "topnav".equalsIgnoreCase(indexStyle) ? "index-topnav" : "index";
        //将视图解析器返回到页面
        return webIndex;

这里写了菜单的遍历这部分是和用户相关的 不同用户看到的不一样

                <li th:each="menu : ${menus}">
                	<a th:class="@{${!#strings.isEmpty(menu.url) && menu.url != '#'} ? ${menu.target}}" th:href="@{${#strings.isEmpty(menu.url)} ? |#| : ${menu.url}}" th:data-refresh="${menu.isRefresh == 
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月常新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值