有時候,為了給前端頁面輸出內容,有時候我們需要準備和資料庫不一樣的實體資訊,因為資料庫可能記錄的是一些參照的ID或者特殊字元,那麼我們為了避免前端單獨的進行跳脫處理,我們可以在後端進行統一的格式化後再行輸出,後端處理可以採用不同的DTO屍體資訊,後端對不同的實體進行對映處理即可,也可以採用同一個實體,在SqlSugar實體資訊中忽略對應的欄位寫入實現,本篇隨筆介紹後者的處理方式,實現在在工作流列表頁面中增加一些跳脫資訊的輸出處理。
大多數頁面,我們的前端顯示資訊DTO和後端的資料庫實體資訊Entity是一致的,只有部分資訊的差異,特別在工作流模組中,由於繼承原來歷史的資料庫設計結構,因此很多參照的欄位是int型別的,那麼為了避免前端對內容的頻繁解析,因此必要的時候在後端對內容進行統一的處理,實現內容的跳脫。
例如我們以其中的模板流程的實體資訊定義來看,除了對常規的資訊,我們還需要對一些跳脫資訊的處理。
如實體類對應欄位的SqlSugar的標識,只需要增加SqlsugarColumn的標識即可。
[SqlSugar.SugarColumn(ColumnName = "PROC_TYPE")] public virtual int ProcType { get; set; }
如下所示的實體類
如果我們需要額外增加一些資訊的承載,而在儲存或者提取資料庫欄位資訊的時候,進行忽略處理,那麼標識為Ignor即可。
[SqlSugar.SugarColumn(IsIgnore = true)] public virtual string ProcTypeName { get; set; }
如下實體類程式碼所示
有了實體資訊的定義,我們在SqlSurgar框架的服務層返回列表資訊的時候,可以對列表的內容進行統一的轉換,而列表返回是在基礎類別定義的統一泛型函數,如下定義所示。
/// <summary> /// 根據條件獲取列表 /// </summary> /// <param name="input">分頁查詢條件</param> /// <returns></returns> public virtual async Task<PagedResultDto<TEntity>> GetListAsync(TGetListInput input) { var query = CreateFilteredQueryAsync(input); var totalCount = await query.CountAsync(); query = ApplySorting(query, input); query = ApplyPaging(query, input); var list = await query.ToListAsync(); return new PagedResultDto<TEntity>( totalCount, list ); }
因此需要在繼承的子類中重寫一下進行處理,如下程式碼所示。
而對於附加資訊的多少,則根據我們的業務規則適當調整即可,有些實體資訊附加的內容可能會多一些,有些會少一些,有些可能儲存原狀即可。
介紹了後端的內容跳脫,前端相對處理就比較簡單了,只需要把對應的內容進行顯示即可。如前端的Vue3+TypeScript+ElementPlus的程式碼如下。
<!--表格列表資訊 --> <el-table v-loading="loading" :data="list" border fit stripe highlight-current-row :header-cell-style="{ background: '#eef1f6', color: '#606266' }" @selection-change="selectionChange" @row-dblclick="rowDbclick" @sort-change="sortChange" > <el-table-column type="selection" width="40" /> <el-table-column align="center" sortable="custom" prop="proc_Name" label="流程環節名稱"> <template v-slot="scope"> {{ scope.row.procName }} </template> </el-table-column> <el-table-column align="center" sortable="custom" prop="proc_Type" label="處理型別"> <template v-slot="scope"> {{ scope.row.procTypeName }} </template> </el-table-column> <el-table-column align="center" sortable="custom" prop="form_ID" label="對應表單"> <template v-slot="scope"> {{ scope.row.formName ?? '所有表單' }} </template> </el-table-column>
js程式碼也只需簡單的獲取對應list的分頁列表即可。前端沒有額外增加工作量。
工作流部分跳脫頁面顯示效果如下所示。
系列文章:
《基於SqlSugar的開發框架的循序漸進介紹(1)--框架基礎類的設計和使用》
《基於SqlSugar的開發框架循序漸進介紹(2)-- 基於中間表的查詢處理》
《基於SqlSugar的開發框架循序漸進介紹(3)-- 實現程式碼生成工具Database2Sharp的整合開發》
《基於SqlSugar的開發框架循序漸進介紹(4)-- 在資料存取基礎類別中對GUID主鍵進行自動賦值處理 》
《基於SqlSugar的開發框架循序漸進介紹(5)-- 在服務層使用介面注入方式實現IOC控制反轉》
《基於SqlSugar的開發框架循序漸進介紹(6)-- 在基礎類別介面中注入使用者身份資訊介面 》
《基於SqlSugar的開發框架循序漸進介紹(7)-- 在檔案上傳模組中採用選項模式【Options】處理常規上傳和FTP檔案上傳》
《基於SqlSugar的開發框架循序漸進介紹(8)-- 在基礎類別函數封裝實現使用者操作紀錄檔記錄》
《基於SqlSugar的開發框架循序漸進介紹(9)-- 結合Winform控制元件實現欄位的許可權控制》
《基於SqlSugar的開發框架循序漸進介紹(10)-- 利用axios元件的封裝,實現對後端API資料的存取和基礎類別的統一封裝處理》
《基於SqlSugar的開發框架循序漸進介紹(11)-- 使用TypeScript和Vue3的Setup語法糖編寫頁面和元件的總結》
《基於SqlSugar的開發框架循序漸進介紹(12)-- 拆分頁面模組內容為元件,實現分而治之的處理》
《基於SqlSugar的開發框架循序漸進介紹(13)-- 基於ElementPlus的上傳元件進行封裝,便於專案使用》
《基於SqlSugar的開發框架循序漸進介紹(14)-- 基於Vue3+TypeScript的全域性物件的注入和使用》
《基於SqlSugar的開發框架循序漸進介紹(15)-- 整合程式碼生成工具進行前端介面的生成》
《基於SqlSugar的開發框架循序漸進介紹(16)-- 工作流模組的功能介紹》
《基於SqlSugar的開發框架循序漸進介紹(17)-- 基於CSRedis實現快取的處理》
《基於SqlSugar的開發框架循序漸進介紹(18)-- 基於程式碼生成工具Database2Sharp,快速生成Vue3+TypeScript的前端介面和Winform端介面》
《基於SqlSugar的開發框架循序漸進介紹(19)-- 基於UniApp+Vue的移動前端的功能介紹》
《基於SqlSugar的開發框架循序漸進介紹(20)-- 在基於UniApp+Vue的行動端實現多條件查詢的處理》