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/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77081.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot 與 Vue3 實現前后端互聯全解析

在當前的互聯網時代&#xff0c;前后端分離架構已經成為構建高效、可維護且易于擴展應用系統的主流方式。本文將詳細介紹如何利用 SpringBoot 與 Vue3 構建一個前后端分離的項目&#xff0c;展示兩者如何通過 RESTful API 實現無縫通信&#xff0c;讓讀者了解從環境搭建、代碼實…

portainer.io篇

Portainer?是一個輕量級的容器管理工具&#xff0c;支持Docker、Kubernetes、Docker Swarm、ACI和Nomad等多種平臺。它提供了一個直觀的Web界面&#xff0c;使用戶能夠輕松地管理和監控容器&#xff0c;包括創建、啟動、停止、刪除容器&#xff0c;以及查看容器的日志和配置信…

Dockerfile 文件常見命令及其作用

Dockerfile 文件包含一系列命令語句&#xff0c;用于定義 Docker 鏡像的內容、配置和構建過程。以下是一些常見的命令及其作用&#xff1a; FROM&#xff1a;指定基礎鏡像&#xff0c;后續的操作都將基于該鏡像進行。例如&#xff0c;FROM python:3.9-slim-buster 表示使用 Pyt…

Android Studio開發知識:從基礎到進階

引言 Android開發作為移動應用開發的主流方向之一&#xff0c;曾吸引了無數開發者投身其中。然而&#xff0c;隨著市場飽和和技術迭代&#xff0c;當前的Android開發就業形勢并不樂觀&#xff0c;競爭日益激烈。盡管如此&#xff0c;掌握扎實的開發技能仍然是脫穎而出的關鍵。本…

大表查詢的優化方案

?單表優化?&#xff1a; ?字段選擇?&#xff1a;盡量使用TINYINT、SMALLINT、MEDIUMINT作為整數類型&#xff0c;而非INT&#xff1b;如果字段值非負&#xff0c;可以使用UNSIGNED。對于字符串字段&#xff0c;使用枚舉或整數代替字符串類型&#xff0c;使用TIMESTAMP而非D…

常見MQ及類MQ對比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ

常見MQ及類MQ對比 基于Grok調研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 關鍵點&#xff1a; Redis Pub/Sub 適合簡單實時消息&#xff0c;但不持久化&#xff0c;消息可能丟失。Redis Stream 提供持久化&#xff0c;適合需要消息歷史的場景&#xff0c;但…

DAPP實戰篇:使用ethersjs連接智能合約并輸入地址查詢該地址余額

本系列目錄 專欄:區塊鏈入門到放棄查看目錄-CSDN博客文章瀏覽閱讀400次。為了方便查看將本專欄的所有內容列出目錄,按照順序查看即可。后續也會在此規劃一下后續內容,因此如果遇到不能點擊的,代表還沒有更新。聲明:文中所出觀點大多數源于筆者多年開發經驗所總結,如果你…

庫magnet使用指南

Magnet 多線程控制庫使用指南 目錄 庫功能概述環境配置核心類與接口基礎使用示例代碼生成工具高級功能與改進建議完整示例代碼常見問題解答 https://blink.csdn.net/details/1872803?spm1001.2014.3001.5501 1. 庫功能概述 Magnet 庫提供以下核心功能&#xff1a; 多線程…

SpringCloud-快速通關(三)

SpringCloud-快速通關(一) SpringCloud-快速通關(二) SpringCloud-快速通關(三) SpringCloud-快速通關(三) 七、Seata - 分布式事務7.1、環境搭建7.1.1、簡介7.1.2、環境搭建7.1.3、seata-server7.1.4、微服務配置7.1.5、測試7.2、事務模式7.2.1、AT模式7.2.2、XA模式…

STM32 TDS+溫度補償

#define POLAR_CONSTANT (513385) /* 電導池常數&#xff0c;可通過與標準TDS測量儀對比計算反推 */ #define TDS_COEFFICIENT (55U) /* TDS 0.55 * 電子傳導率*/void TDS_Value_Conversion() {u32 ad0;u8 i;float compensationCoefficient;float compens…

數據分析實戰案例:使用 Pandas 和 Matplotlib 進行居民用水

原創 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文將使用 Matplotlib 及 Seaborn 進行數據可視化。探索如何清理數據、計算月度用水量并生成有價值的統計圖表&#xff0c;以便更好地理解居民的用水情況。 數據處理與清理 讀取 Excel 文件 首先&#xff0c;我們使用 pan…

離線環境下docker啟動springboot項目

Docker linux 離線部署springboot 搭建dcoker環境 1. 首先在有網絡的機器上下載Docker的離線安裝包&#xff1a; - 訪問 https://download.docker.com/linux/static/stable/x86_64/ - 下載對應版本的 docker-<version>.tgz 文件 2. 將下載的安裝包傳輸到目標Linux機器上…

分布式專題-Redis Cluster集群運維與核心原理剖析

一. 哨兵集群與Redis Cluster 架構異同&#xff1a; redis單機內存不會超過10g&#xff0c;如果太大的話bgsave命令的話對單節點壓力過大。 節點多了&#xff0c;之間的通信也會非常緩慢。 redis集群模式下對從節點是沒有讀取操作的&#xff0c;只在主節點進行讀取操作。 哨…

使用 Node.js、Express 和 React 構建強大的 API

了解如何使用 Node.js、Express 和 React 創建一個強大且動態的 API。這個綜合指南將引導你從設置開發環境開始&#xff0c;到集成 React 前端&#xff0c;并利用 APIPost 進行高效的 API 測試。無論你是初學者還是經驗豐富的開發者&#xff0c;這篇文章都適合你。 今天&#…

智慧聲防:構筑海濱浴場安全屏障的應急廣播系

海濱浴場是夏季旅游的熱門目的地&#xff0c;但潮汐變化、離岸流、突發天氣、溺水事故等安全隱患時刻威脅著游客安全。傳統的安全管理依賴人工瞭望和喊話&#xff0c;存在覆蓋范圍有限、響應速度慢等問題。“智慧聲防”應急廣播系統&#xff0c;通過智能化、網絡化、多場景協同…

Redis之緩存穿透

Redis之緩存穿透 文章目錄 Redis之緩存穿透一、什么是緩存穿透&#xff1f;二、緩存穿透常見的解決方案1. 緩存空對象&#xff08;Null Caching&#xff09;2. 布隆過濾器&#xff08;Bloom Filter&#xff09;?3. 互斥鎖&#xff08;Mutex Lock&#xff09;?4. 接口層校驗5.…

【藍橋杯】顏色平衡樹

思路 顏色平衡樹&#xff0c;即子樹中的節點顏色均勻分布。所以要確認一個子樹是否為顏色平衡樹&#xff0c;需要得到它的所有節點的顏色&#xff0c;也就是要深搜它所有的子樹。 這個想法就很標準的啟發式合并了&#xff0c;何為啟發式合并&#xff1f;簡單來說&#xff0c;…

自動化測試工具playwright中文文檔-------14.Chrome 插件

介紹 注意 插件僅在以持久化上下文啟動的 Chrome/Chromium 瀏覽器中工作。請謹慎使用自定義瀏覽器參數&#xff0c;因為其中一些可能會破壞 Playwright 的功能。 以下是獲取位于 ./my-extension 的 Manifest v2 插件背景頁面句柄的代碼示例。 from playwright.sync_api imp…

讓 Python 腳本在后臺持續運行:架構級解決方案與工業級實踐指南

讓 Python 腳本在后臺持續運行&#xff1a;架構級解決方案與工業級實踐指南 一、生產環境需求全景分析 1.1 后臺進程的工業級要求矩陣 維度開發環境要求生產環境要求容災要求可靠性單點運行集群部署跨機房容災可觀測性控制臺輸出集中式日志分布式追蹤資源管理無限制CPU/Memo…

MyBatis 詳解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款優秀的 持久層框架&#xff0c;它通過 XML 或注解配置&#xff0c;將 Java 對象&#xff08;POJO&#xff09;與數據庫操作&#xff08;SQL&#xff09;進行靈活映射&#xff0c;簡化了 JDBC 的復雜操作。 核心思想&#xff1a;S…