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

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

相关文章:

  • OpenCV 中的角点检测方法详解
  • 动态贴纸+美颜SDK的融合实现:底层架构与性能优化技术全解析
  • Python相对路径问题与工作目录和脚本目录
  • 5.学习笔记-SpringMVC(P53-P60)
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(五)
  • Springboot——Redis的使用
  • .NET 6 + Dapper + User-Defined Table Type
  • ElasticSearch深入解析(三):Elasticsearch 7的安装与配置、Kibana安装
  • Kafka 核心使用机制总结
  • ADW600防护等级与电气安全设计要点详解
  • MCU开发学习记录11 - ADC学习与实践(HAL库) - 单通道ADC采集、多通道ADC采集、定时器触发连续ADC采集 - STM32CubeMX
  • 从零到精通:探索GoFrame框架中gcron的定时任务之道 —— 优势、实践与踩坑经验
  • Java的JUC详细全解
  • Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
  • 深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
  • 小学数学出题器:自动化作业生成
  • 智能指针(weak_ptr )之三
  • equals与hashCode的关系探究
  • 一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
  • 火山云生态的体现
  • 鼓励每位学生为优秀定义,上海奉贤这所学校有何特色?
  • 秦洪看盘|平淡走势中或将孕育主旋律
  • 舞剧《百合花》7月绽放,王安忆:这是送给母亲的一份礼物
  • 广东江门公布“小客车坠海致3死”事故评估报告,司机被判三年缓五年
  • 吉林省委原书记、吉林省人大常委会原主任何竹康逝世
  • 亮相!神二十乘组与中外媒体记者集体见面