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

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

  ShenNiusModularity项目的系统管理模块主要用于配置系统的用户、角色、权限、基础数据等信息,上篇文章中学习的日志列表页面相对独立,而后面几个页面之间存在依赖关系,如角色页面依赖菜单页面定义菜单列表以便配置角色的权限,用户页面依赖角色页面定义角色以便配置用户角色,而用户页面则依赖租户页面定义租户以便配置用户所属租户,因此近几篇文章的大致学习顺序为租户管理页面、菜单列表页面、角色列表页面、用户列表页面,本文学习并记录租户管理页面的实现方式。
  之前没有接触过多租户模式,学习本项目过程中查了一下多租户的概念,一般是指允许多个用户(租户)共享同一系统实例,同时保持数据与配置的隔离性,主要实现方式包括:独立数据库模式、共享数据库-独立Schema模式、共享数据库-共享Schema模式,ShenNiusModularity项目应该属于最后一种方式,其数据库中几乎每张表中都要记录所属TenantId,通过程序确保不同租户之间的数据隔离,而租户管理页面专门用于定义及维护系统中可用的租户信息。
  租户管理页面的布局比较简单,上方为工具栏,支持新增和删除操作,下方为分页显示数据表格区域,支持单行编辑和删除操作。

在这里插入图片描述
在这里插入图片描述

  租户管理页面的文件为Index.cshtml,位于ShenNius.Mvc.Admin项目的Areas\Sys\Views\Tenant文件夹内,同文件夹内还有Modify.cshtml文件,用于新建或编辑单条租户数据。租户管理的后台控制器类为同项目内的TenantController,使用的WebApi位于ShenNius.Admin.API的Controllers\Sys\TenantController类内,提供添加/编辑租户、删除/软删除租户、获取/分页获取所有租户、切换租户等接口服务。
  页面加载后,先是调用layui的table.render函数分页加载数据(项目中common.js文件封装了项目常用的js操作函数),同时以开关样式显示“是否当前租户”列。
  分别定义时间处理函数处理工具栏按钮点击事件及数据行中的按钮点击事件,新建和编辑按钮调用的都是Modify.cshtml页面,而删除按钮的话,点击工具栏中的删除按钮,处理逻辑是将选中的记录软删除,后续还能在回收站中恢复,而点击数据行中的删除按钮,则是直接删除数据库中的数据,无法恢复。

在这里插入图片描述

  Modify.cshtml页面如下图所示,按页面支持点击下一步和上一步按钮切换页面内容,但从页面代码来看,其实就是将上一步、下一步的内容分为两个div,点击上一步或者下一步按钮时隐藏或显示某一div,同时隐藏或显示“上一步“或者“下一步”按钮。
在这里插入图片描述

  页面布局及切换代码如下所示,
在这里插入图片描述
在这里插入图片描述
  Modify.cshtml页面支持上传图片,主要调用ShenNius.Admin.API项目下的UploadController控制器类上传文件并返回文件路径。
  租户信息新建或者维护完成后,点击“确认保存”按钮保存信息,根据当前页面中是否与租户id判断到底是新建还是编辑,然后调用相应的WebApi保存数据,并返回租户管理主页面,同时刷新主页面中表格区域的数据。

在这里插入图片描述

参考文献:
[1]https://gitee.com/shenniu_code_group/shen-nius.-modularity
[2]https://baike.baidu.com/item/%E5%A4%9A%E7%A7%9F%E6%88%B7%E6%8A%80%E6%9C%AF/10061761

http://www.xdnf.cn/news/1349.html

相关文章:

  • Git 远程操作全攻略:从基础到实战
  • jmeter中监控服务器ServerAgent
  • 华为开发岗暑期实习笔试(2025年4月16日)
  • 新品发布 | 6 秒全谱成像,VIX-N320 内置推扫式高光谱相机重磅发布
  • crictl 遇到报错 /run/containerd/containerd.sock: connect: permission denied
  • 设计模式--工厂模式详解
  • 【Docker】在Ubuntu平台上的安装部署
  • AIGC的爆发:哪些行业将被彻底颠覆?
  • Arduino示例代码讲解: Project 12 - Knock Lock 锁
  • # 06_Elastic Stack 从入门到实践(六)
  • 【MySQL】(7) 数据库设计
  • 【集合】底层原理实现及各集合之间的区别
  • 数据库操作
  • 遥感生物多样性产品
  • 【LLM】Ollama:容器化并加载本地 GGUF 模型
  • Agent系统工程实践:Langchain-Chatchat框架定制与优化
  • 计算机视觉算法实现——垃圾分类系统
  • 理解RAG第六部分:有效的检索优化
  • C++异步操作 - future async package_task promise
  • Java学习手册:RESTful API 设计原则
  • AI日报 - 2025年4月23日
  • css3新特性第六章(2D变换)
  • 使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧为JPG图片
  • 创建表结构
  • 树莓派超全系列教程文档--(39)树莓派config.txt旧版选项
  • 线程同步——线程安全
  • jQuery — 总结
  • 逻辑思维与软件开发:从选定方向到风险管理的全流程
  • BeeWorks:低成本的国产化企业内网即时通讯
  • 使用Multipart Form-Data一次请求获取多张图片