Model定義
- 自己寫的類至少要從TopBasePoco繼承, 且需要
using WalkingTec.Mvvm.Core;
- BasePoco(推薦)比TopBasePoco多了創建人, 創建時間, 更新人, 更新時間
- PersistPoco比BasePoco甚至還多了isValid, 用來假刪除數據
- 定義外鍵建議使用guid類型, 如
public Guid? CityId{get;set;}
- 數據類型可以使用FileAttachment, 貌似很好用
- enum的每一項都可以加
[Display(Name="{name}")]
- 若希望enum生成的下拉菜單出現空白選項, model設定時要加上問號, 比如
public HospitalLevel? level{get;set;}
(非下拉菜單不需要這么干)
要實現樹形結構(比如表要支持上海市>上海市>楊浦區):
- 繼承BasePoco/TopBasePoco之外還需要繼承ITreeData
, T寫這個model自己, 如
public class City: TopBasePoco, ITreeData<City>{ //在ITreeData上點擊右鍵可實現本接口
}
- 鼠標懸停在ITreeData這里選擇“實現接口”
多對多的話, 則是需要一個中間表, 要定義好外鍵, 類似這樣:
[MiddleTable]
public class PatientVirus : TopBasePoco
{
public Patient Patient{get;set;}
public Guid PatientId{get;set;}
public Virus Virus {get;set;}
public Guid VirusId{get;set;}
}
數據庫創建和遷移
- 注意一定要在DataContext.cs中再次填寫連接字符串,否則無法實現遷移
- 首次運行前先要運行ef的標准流程,
add-migration {name}
update-database
搭建頁面
- 定義完模型以后需要在DataContext.cs中注冊DbSet,
public DbSet<{classname}> {DbSetName} {get;set;};
部署生產
- 先要把appsettings.json里的debug參數關掉
- publish時選擇依賴框架,win-x64架構
- 重新進入系統, admin默認密碼000000, 配置用戶的主菜單
VM是啥
第一次看完之后的理解:
Mvvm的vm是view model, 是在m的基礎上添加許多屬性和方法(這話不一定對, 有點模糊, 其實現在我理解是vm利用了m, 而vm是獨立對象, 配合c進行工作)
wtm框架的vm是在controller中通過createVM方法創建的.
wtm的vm最基本的basevm也已經很強大了, 在此基礎上還有CRUD的vm, 批量操作的vm, 導入導出的vm.
傳統mvc的模型實現CRUD需要在controller內自己寫. 而wtm搞定了這一步.
第二次看的時候的理解:
vm不是用來代替model也不是完全代替controller的. 因為如果完全代替了他們的話, 不但破壞的原本的mvc結構(導致不易理解), 也會把vm做的太雜(啥都放一起).
因此現在的架構就是m+v+vm+c, 其中c的存在感降低了, 更多的作用是用c實現路由.
系統界面定制
定制界面要分兩塊走. 第一個是首頁, 完全獨立的css. 第二個是layui. 類似我自己開發的舊的仁意系統, 首頁也是獨立的.
比方說要改logo和系統名稱頁面title, 那么首頁和layui的配置都要改.
登錄首頁搜索login.cshtml, 直接改這個view即可.
layui的配置文件搜索 layui config.js首頁在frontpage.cshtml
以上都用vscode搜索即可.
增刪改查界面定制及TagHelper
實質就是生成html用的輔助標簽, 要用taghelper的前提是必須在view文件內先引用相應的對象.
Wtm框架基於layui的樣式提供了許多表單tag. 可在每個業務模塊不同的增刪改查界面內修改.
比方說搜索patient create.cshtml, 可把checkbox改成combobox或者radio, 部分控件也可增加屬性multi-select=“true”. 除此之外還有和一個強大的多選控件叫transfer.
改新增界面時別忘記同時實現更改界面(是分開的)
更多內容可到官網文檔"界面層"看.
實現聯動菜單
詳見視頻教程, 第4個視頻28分鍾開始.
WebApi相關
- api需單獨生成, 且推薦認證方式只選擇jwt
- api若認證方式支持cookies, 表示可以在登錄后(調用登錄api)直接調用該系列api
- 即使只選擇了jwt認證, 也可通過在swagger文檔內登錄(調試登錄接口, 使用admin/000000, use cookies選false)來獲得jwt token, 並通過輸入Bearer {token}來調試
- postman調試的話必須在authorization內選擇Bearer並只填寫token, 然后參數使用raw+json傳遞
- api controller不走配置文件的路由. 而是在每個controller內定義
- api權限通過先配置菜單再配置用戶組權限來進行
- 若要徹底開放某api的權限,給它增加[Public]這個屬性即可
關於JWT
看了許多介紹,基本都是以“session和jwt的區別”、“jwt的優點”之類為主題。
我自己的理解是這玩意還是只能用來做做api的鑒權,做用戶登錄有點麻煩,使用不當還有安全問題
我目前的理解是它主要用來在替代session做用戶登錄和登錄后的操作驗證(負載平衡的情況下session方式很麻煩)。
現階段對我來說最主要用到的是從wtm里獲取某某欄目的數據,而不是在自研系統里讓某個管理員登錄然后獲取自己的數據,
因此在前端調用jwt登錄和保存token的必要性是沒有的。
所以我完全可以對這類獲取數據的api直接設[Public]屬性,這樣一來專題頁面的數據加載方面能獲得最大的性能
至於某些場景下需要更新數據的時候,則需要單獨去調用封裝后的api(封裝wtm的api)或者自己寫api(和wtm完全無關了)