当前位置: 首页 > news >正文

ShenNiusModularity项目源码学习(17:ShenNius.Admin.Mvc项目分析-2)

  ShenNiusModularity项目的后台管理主页面如下图所示,该页面为ShenNius.Admin.Mvc项目的Views\Home\Index.cshtml,使用的是layuimini后台模板(参考文献2),在layuimini的GitHub主页中提供有不同样式的页面模版链接,Index.cshtml页面的布局与其中的多tab版本很相似,后面找到参考文献3,其页面布局代码和index.shetml页面中十分相像,估计出处相同。
在这里插入图片描述
  大致的布局方式如下所示(从index.cshtml页面中截取了一部分以作示意,详细请见参考文献3)

<div class="layui-layout layui-layout-admin"><div class="layui-header header"><div class="layui-logo layuimini-logo"></div><div class="layuimini-header-content"><a><div class="layuimini-tool"><i title="展开" class="fa fa-outdent" data-side-fold="1"></i></div></a><!--电脑端头部菜单--><ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-menu-header-pc layuimini-pc-show"></ul>           <ul class="layui-nav layui-layout-right">...                </ul></div></div><!--无限极左侧菜单--><div class="layui-side layui-bg-black layuimini-menu-left"></div><!--初始化加载层--><div class="layuimini-loader"><div class="layuimini-loader-inner"></div></div><div class="layui-body"><div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true"><ul class="layui-tab-title"><li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li></ul><div class="layui-tab-control">...</div><div class="layui-tab-content"><div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div></div></div></div>
</div>

  上述html示例为框架,最重要的是调用miniAdmin.render函数初始化框架内容,如下面代码所示。其中options的iniUrl设置的是页面左侧的菜单列表,调用的是ShenNius.Admin.API项目中Controllers\sys\MenuController.LoadLeftMenuTrees函数,内部调用MenuRepository.LoadLeftMenuTreesAsync函数获取当前用户的所有角色关联的菜单id和按钮id,并构造成菜单树的形式返回前端页面。而clearUrl设置的是清除当前用户的左侧菜单缓存的接口地址,调用ShenNius.Admin.API项目中Controllers\sys\UserController.RemoveMenuCache函数。

var options = {iniUrl: "sys/menu/LoadLeftMenuTrees", // 初始化接口"menu/load-left-menu-trees",//clearUrl: "sys/user/removeMenuCache?userId=" + apiUtil.getCurrentUser().id, // 缓存清理接口urlHashLocation: true,      // 是否打开hash定位bgColorDefault: false,      // 主题默认配置multiModule: true,          // 是否开启多模块menuChildOpen: true,       // 是否默认展开菜单loadingTime: 0,             // 初始化加载时间pageAnim: true,             // iframe窗口动画maxTabNum: 15,              // 最大的tab打开数量
};
miniAdmin.render(options);

  index.cshtml页面的处理逻辑大多数都放在了页面内置的JavaScript中,除了上述初始化左侧菜单及tab页的内容,还包括以下功能:
  1)定义并调用LoadSite函数,从ShenNius.Admin.API项目中Controllers\sys\TenantController .GetList函数获取所有租户信息,并显示在页面右上角处;
  2)基于signalr,调用mysignalR.js的SaveCurrentUserInfo函数与ShenNius.Infrastructure项目的UserLoginNotifiHub通信存储用户登录信息,如果同一个用户在不同的客户端登录,,则通知后面登录的客户端下线;
  3)定义切换租户菜单响应函数,点击不同的租户时,切换选中组合的左侧菜单数据(调用LoadSite函数);

 $("body").on("click", ".setCurrent", function () {var id = $(this).attr("value");var value = $(this).text();setCurrentSite(id, value);})

  4)定义修改密码菜单响应函数,调用ShenNius.Admin.Mvc项目的Areas\sys\UserController. ModifyPwd函数弹出修改密码页面;

$('#modifyPwd').on("click", function () {layer.open({title: '修改密码',type: 2,shade: 0.2,shadeClose: true,area: ['600px', '360px'],content: '/sys/user/modifyPwd',btn2: function () {layer.closeAll();}});
});

  5)定义查看用户基本资料菜单响应函数,调用ShenNius.Admin.Mvc项目的Areas\sys\ UserController.CurrentUserInfo函数弹出基本资料页面;;

$('#baseUserInfo').on("click", function () {layer.open({title: '基本资料',type: 2,shade: 0.2,shadeClose: true,area: ['600px', '420px'],content: '/sys/user/currentUserInfo',});
});

  6)定义退出登录菜单响应函数,调用ShenNius.Admin.Mvc项目的Areas\sys\ UserController.Logout函数退出登录,并跳转到登录页面,同时清除浏览器缓存。

$('.login-out').on("click", function () {$.ajax({url: "/sys/user/Logout",type: "get",success: function (res) {if(res.statusCode == 200 && res.success == true){apiUtil.SessionRemove("globalCurrentUserInfo");layer.msg('正在处理,即将退出...', { icon: 1, time: 4000, shift: 6 }, function () {//清空浏览器缓存数据localStorage.clear();window.location = '/sys/user/login';});}else{layer.msg(res.msg);return false;}}});
});

参考文献:
[1]https://gitee.com/shenniu_code_group/shen-nius.-modularity
[2]https://github.com/zhongshaofa/layuimini
[3]https://github.com/shceci/layuimini/blob/v2/index.html
[4]http://layuimini.99php.cn/docs/

相关文章:

  • selenium自动化测试实战案例
  • 【机器学习】如何正确下载sklearn包
  • TDengine 语言连接器(C#)
  • 【2025年泰迪杯数据挖掘挑战赛】B题 完整论文 模型建立与求解
  • 在 Ubuntu 上通过 Docker 部署 Misskey 服务器
  • 【15】数据结构之基于树的查找算法篇章
  • 信奥赛之c++基础(取模运算与数位分离)
  • aslist和list的区别
  • 【Linux】进程池bug、命名管道、systemV共享内存
  • 【实战篇】数字化打印——打印管理模块的业务设计(一)
  • ES通过API操作索引库
  • 分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同
  • 蓝桥杯常用的APi
  • spatk-sql核心
  • ngx_conf_handler - worker_connections 1024
  • OpenResty与Nginx的功能对比分析
  • visual studio 如何在 release 模式下调试
  • 中美电力标准差异下电机运行的影响及应对策略
  • 接口和抽象的区别?日常使用场景
  • WINUI——Background颜色使用小结
  • 上海虹桥机场口岸单日出入境突破1.1万人次,创今年新高
  • 泽连斯基:俄军违反停火承诺,20日10时起前线俄炮击增加
  • 多地市场监管部门公开征集居民水电气计量不准确、收费不规范问题线索
  • 林间徐行寻风眠——关于浙美“徐宗帅捐赠纪念展”
  • 中央和国家机关工委建立健全整治形式主义为基层减负长效机制
  • 2025年青年普法志愿者法治文化基层行活动启动