一、敏捷開發框架-查詢頁面模型-QueryPage

来源:https://www.cnblogs.com/godmodel/archive/2020/06/02/13029082.html
-Advertisement-
Play Games

http://oa.ecidh.com/KMS/AppKMS/Article/article.aspx?id=KMS202000090&strToken=6d1dd74cb51040a2af69745595f326a7 敏捷開發框架:查詢頁面模型 查詢頁面的開發: 下麵以用戶管理為例子 打開效果如下 ...


http://oa.ecidh.com/KMS/AppKMS/Article/article.aspx?id=KMS202000090&strToken=6d1dd74cb51040a2af69745595f326a7

 

敏捷開發框架:查詢頁面模型 

 

查詢頁面的開發:

下麵以用戶管理為例子

打開效果如下:

image.png

總體結構就是上面查詢條件

接著是 查詢按鈕

接著是 功能按鈕

最後是 數據列表展示

這種style的頁面在任何一個項目中都是絕大多數的,通過總結抽象,定義為 QueryPage 查詢頁面

如何實現一個查詢頁面:

 

查詢條件:研發人員根據業務場景,按照要求擺放

查詢結果:研發人員根據業務場景,添加具體的列

 

查詢條件:

結構都如下

image.png

查詢結果:

也就是Table表格

image.png

這樣子:就差不多了。

下麵看如何實現這個查詢頁面的功能

要求如下

一、點擊按鈕要能夠查詢數據並展示

二、點擊清空按鈕要能夠清楚查詢條件值

三、這個頁面打開可能要求預設查詢數據

四、這個頁面查詢的時候可能需要按照某欄位預設排序

五、要支持分頁事件的實現

六、分頁還要支持分頁大小可調整

七、要支持排序事件的實現

八、要支持選擇框,實現按選擇操作、實現全選等

九、要實現列表列用戶可以自己選擇顯示幾列

十、要實現預設導出功能

……

十一、需要方便的實現刪除功能

十二、需要方便的實現彈出新增畫面、編輯畫面

未完……待續……不斷的冒出新的要求……

 

上面的等等功能在QueryPage中實現。

通過追求極致的設計理念+高度的抽象封裝

 

 

如何實現上述功能:

image.png
首先你只需要上述一行代碼

就實現了查詢畫面的基本功能。

實現了:

一、對查詢按鈕註冊了click事件,當你點擊查詢的時候,就實現載入數據。

       怎麼載入的?調用什麼API?查詢條件是怎麼傳的?

       searchApi告訴了,是調用 user 的 search API方法

       至於查詢條件嘛,不需要你寫,框架自動實現

二. 對查詢清空按鈕註冊了click事件,實現清除查詢條件功能

      另外通過 EciTable類初始化了 表格

自動實現:

五、要支持分頁事件的實現

六、分頁還要支持分頁大小可調整

七、要支持排序事件的實現

八、要支持選擇框,實現按選擇操作、實現全選等

九、要實現列表列用戶可以自己選擇顯示幾列

十、要實現預設導出功能

      導出都實現了,對的,有個前提,你的按鈕是叫 btnExport

 

 

那好,我們來繼續模擬需求的變化:

產品經理要求,打開這個頁面,立刻查詢數據

image.png

開發人員只需要在增加紅色框線中的代碼即可。

 

產品經理要求,打開這個頁面,查詢數據的時候,預設按照USERNAME 升序排列

image.png

如上,搞定

 

接下來,要開發UserEdit畫面

image.png

查詢列表裡面,有個編輯按鈕,我要實現點擊編輯按鈕的時候彈出一個畫面實現編輯

image.png

image.png

 

增加紅色框線的代碼

要告訴page editUrl也就是要打開的頁面地址:

按鈕【編輯】只需要寫 page.edit(this) 即可

效果如下:

image.png

是不是非常簡單,已經簡單不到不能再簡單了

連編輯的是哪一條記錄都不需要你關心了。

雖然不需要你寫代碼,關心還是要關心的。我們看看打開的這個頁面地址

 

image.png

哦,的確打開的是UserEdit畫面,同時還傳了USERID=xxxx

為什麼是USERID  而不是USERNAME

看看page初始化的代碼

image.png

這裡有個非常核心的 keyField,任何表都有主鍵的。需要研發人員告訴QueryPage對象。

好,彈出編輯頁面實現了,的確非常容易。

 

image.png

如果沒有配置,就預設是按鈕的名字

 

 這個是用來控制彈出窗體的標題

image.png

 

 

接下來實現功能

 

在頁面上有【添加新用戶】按鈕,其實也就新增功能,只是叫的名字不一樣而已,那這個要怎麼實現

image.png

 

其實你已經實現了,什麼已經實現了,只要上面設置了 EditUrl ,因為我們 編輯和新增是共用一個頁面。

不行,我總得要寫點什麼吧,不然無碼可碼了。

這個願望好難實現。那怎麼就實現了的總歸要告訴我吧。

 

image.png

如上圖:只要你的按鈕名字叫 btnAdd就可以了。

我非不,我就不叫btnAdd,

想自找麻煩,證明存在感,好吧,滿足你

例如你按鈕id 叫  btnImHere

 

image.png

回到頁面初始化的地方,你可以指定 addId

框架中設計的所有預設值都是可以重新指定的,照顧到可能的靈活性。

同時建議大家遵守一致的約定,來獲得最大的方便性。

 

好吧,新增、編輯都這麼輕鬆了實現了。那我們來看看刪除吧,這個邏輯相對複雜。

還能這麼輕鬆的應對?

 

image.png

image.png

 好了,這樣加上述紅色框線部分的代碼就實現了。

 既然是刪除,總歸要告訴 調用後臺哪個API,deleteApi 就是這個作用

 第二部分加的是按鈕,只要調用 page對象的 delete方法

        註意 page.delete(this) this 很關鍵

        因為已經不要你關心調用API的時候傳遞當前行的主鍵,框架幫你完成了,這個this就點擊的按鈕,

        框架通過按鈕自動找到行,自動取主鍵

 

image.png

 

好吧,為難為難你,如果要刪除的時候彈出的提示不一樣,我要自定義

 

image.png

 那,我要刪除的時候比較慎重,要提示確定要刪除嗎?還要用戶輸入驗證碼

不光輸入驗證碼,我後臺API邏輯還不要調整。

為什麼這麼刁難,其實也不是刁難

前臺一會說要驗證碼,我後臺加

一會又說不要驗證碼,我後臺刪

你愛要不要,我後臺就不寫,那怎麼辦

 

框架關於驗證碼,由底層封裝實現,對應用透明,應用只關註哪個地方需要增加驗證碼即可。

那現在我刪除這塊就要,怎麼弄?

 

image.png

只要增加紅色框線部分的配置即可。

 

產品經理說:為方便客戶操作,雙擊行也能打開編輯畫面

這個樣看到這一行數據的時候,不用拖到最左邊點擊【編輯】按鈕

需求合理,支持

image.png

增加 click:true  即可

用戶動態其實是雙擊打開,這裡面為了方便開發人員編碼體驗,命名為 click

打開的畫面就是前面介紹的 EditUrl配置的編輯畫面

 

好吧,需要變了,點擊【編輯】是打開編輯畫面,雙擊打開的是這個對象的 View查看畫面

為什麼要設計兩個畫面呢,因為view畫面只給查看不給編輯

image.png

如果設置了ViewURL優先取viewUrl

 

好吧,變態的需求用來了。

我雙擊還是打開EditUrl 但是要能區分是雙擊來的(我們雙擊定義為查看)

這又是為何?不是說好的如果這樣寫兩個畫面嗎?

不要有意思,我先煩,綜合考量,view畫面和編輯畫面可能也沒有什麼差別,就是要隱藏兩個按鈕

我決定共用了。

OK,沒有問題,你的需要框架已經滿足  ViewUrl="UserEdit?view=true"

即可。其實框架還能幫忙做的更好,不要你寫ViewURL   你前面設置了 EditUrl  如果是雙擊的時候自動會帶view=true參數給你

 

 

好的,現在從查詢頁面彈出了編輯畫面

產品經理希望,在編輯畫面關閉的時候,要能夠刷新查詢頁面

怎麼實現?

 

image.png

增加editClosed 回調函數即可

 

其實上面的邏輯在大部分的情況下是需要完善的,關閉就刷新是不對的。

只有彈出的畫面,新增了數據或者修改了數據才應該刷新。對吧。否則就是一次性能浪費

僅僅是性能浪費嗎?不止!副作用很多。

 

那要實現修改後才刷新頁面怎麼辦?

image.png

上面的代碼,增加 紅色框線部分的代碼就完成了你的需求。

怎麼實現的,框架設計了敏捷開發框架《彈窗交互設計》後續分享

 

 

好吧,上面貌似都是基本的增刪改查功能。

 

那我要實現如下圖的,對這一行數據用戶【啟用】、【停用】功能怎麼實現

image.png

 

【啟用】

image.png

只需要一行代碼,告訴你要調用後臺哪個API即可。

參數都不要告訴?

你的關註點是對的,調用後臺API 

關註兩個點,一、調用哪個API、二、傳遞哪些參數

調用哪個API業務決定,參數框架抽象統一

簡單吧。

那繼續,啟用後,我要重新查詢下列表


image.png

繼續,產品經理說,這個操作要慎重,在操作前要彈出窗確認下是否要啟用

image.png

只要加上 msg:內容即可

image.png

 

那實現停用,只要考別這一行,改改即可

image.png

變化在於紅色的地方

 

好了,行內的啟用、停用實現了

產品經理又來了,用戶反饋我們需要批量的功能

image.png

 

代碼實現如下圖:

image.png

和前面行內的代碼,只有一個mode(模式)的區別

 

怎麼做到的?

敏捷開發框架抽象封裝了Action動作模型,EciAction類 通過抽象總結 極大的簡化代碼的開發

EciAction後續分享

 

繼續功能開發:

這裡設計了對用戶設置角色的功能

image.png

點擊按鈕【設置角色】彈出 設置角色畫面

 

image.png

同樣通過action動作模型 行為方式 採用 dialog彈出指定窗體來實現

url地址通過智能表達式解析實現開發的簡化

image.png

彈出的頁面地址 UserRole 參數自動註入。

{keyValue}就是主鍵值

智能處理主鍵嗎?NO 如果僅僅是主鍵,那就不能叫智能

業務需求是這樣的,彈出的標題,要有意義,能輔助讀懂業務含義

image.png

對用戶《昆山華東資訊》這個人設計角色,這樣不是更好

image.png

 還能解析 row上的所有欄位,這樣開發就進一步簡化了。

 可能在一個功能上簡化,感覺不到什麼,多了,就更能體現價值了。

例如 我們還有【分配許可權】的功能要開發

image.png

彈出效果:

image.png

代碼如下:

image.png

 

至此,介紹了 QueryPage的  6 成 功力,大家先瞭解下!歡迎和我交流  QQ:93346562

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 很多情況下,我們需要用到Tab 選項卡的情況 例如下麵 註冊審批頁面 這個場景是,註冊審批,包含兩部分,一個是對註冊組織機構的審批,一個是註冊用戶的審批那麼這個需要用個Tab選項卡來實現比較合適,而不是弄兩個功能菜單 那這個頁面怎麼實現呢。 關於Tab的使用,我們有兩種模式。 第一種模式:Tab只是 ...
  • serilog .net core 3.1 配置方式 安裝包dotnet add package Serilog dotnet add package Serilog.AspNetCore 早初始化模式 public class Program { public static IConfigurat ...
  • 1、給定一個int數組,編寫方法以統計所有偶數的值。 有很多方法可以做到這一點,但是最直接的兩種方法是: static long TotalAllEvenNumbers(int[] intArray) { return intArray.Where(i => i % 2 == 0).Sum(i => ...
  • 通過前面的學習我們應該熟練掌握了 QueryPage 查詢頁面模型 EditPage 編輯頁面模型 同時也掌握了,並不是一個頁面就只能是一個模型,可以是組合使用的情況 可以是 查詢+編輯的組合 也開是 查詢+查詢的組合 難道我們只有這兩種頁面模型嗎? 今天我們一起來學習我們開發中遇到的第三種頁面模型 ...
  • 敏捷開發框架初識組件式開發 可能這個叫法一定非常準確,但是的確實現了組件式的開發 那好吧,姑且就這麼叫吧 下麵講講這個頁面的由來: 首先我們提供了一個功能檢索的頁面,用於查詢所有的功能菜單 這個頁面的實現,QueryPage 太拿手了 查詢列表的所有功能全部搞定 點擊【編輯】或者雙擊進入編輯畫面 這 ...
  • 在複雜的頁面看看清問題的本質: 下麵的頁面,我說其實一部分是編輯頁面 好吧,我們一起來找到這個編輯頁面 我們通過實例來進一步分析 這個頁面是,用戶列表或者用戶編輯畫中點擊用戶【設置角色】彈出來的功能頁面 左側是待選擇的角色信息,右側是已經分配給 用戶的 角色信息 界面效果如下: 前面我們瞭解了兩個非 ...
  • 我們再次來一起研究下 QueryPage 查詢頁面模型 一般情況下我們遇到的比較多的,查詢模型就形如下圖的 查詢條件+查詢表格+分頁 的組合 圖一 下麵我們看下圖 圖二 我們先來找不同,非常明顯,就是一個是表格,一個是圖表 總的來講就是完全不同的內容 接著我們來找相同,都有一個查詢按鈕、都有清空 都 ...
  • 敏捷開發框架:編輯頁面模型 編輯頁面的開發: 下麵以用戶管理為例子,進行分析 如上圖,就是我們典型的編輯畫面 特點是:上面一排功能按鈕 中間是:表單 主要實現數據的編輯、載入、查看、保存、新增 等功能 頁面DOM結構如下: 從上到下依次看 eci-page-edit 表示當前頁面是編輯頁面 head ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...