??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