簡單談談如何提高後臺管理系統的易用性、可操作性和人性化程度
前言
筆者從學校做兼職到工作這些年已經開發了或者參與開發了十多套後臺管理系統(後面簡稱BMS
),而使用過的BMS
就不計其數了。多數情況下,BMS
主要面對的使用者是公司內部人員,為了節約人力成本,BMS
的開發通常沒有前端工程師參與,或者前端工程師簡單參與,這樣就直接導致了BMS
的易用性、可操作性和人性化程度都慘不忍睹,反正是自己人用嘛,湊合就行了。但是誰不希望自己做出來的系統能得到大家的肯定呢?然而現實往往是殘忍的,工期在後面追著呢。在以下內容中,筆者根據多年經驗總結,談談如何在保證進度的前提下,提高BMS
的易用性、可操作性和人性化程度。由於篇幅原因,簡單說說實現的原理,也算是拋磚引玉,讓大家少走彎路。
開始
1、選一套美觀、大氣、易用、可擴充套件性高的模板
放在第一條寫是因為這條太重要了,這條走錯,就只能一錯到底,因為專案到中後期要更換模板是不可能 的。筆者曾經接手一套BMS
,介面醜陋、漏洞百出,封裝得特別死,想自己擴充套件功能非常麻煩,最奇葩的是,所有頁面都是在主頁通過在新的Tab
標籤裡追加DOM
方式開啟,更多的就不說了,吐槽要適可而止。筆者推薦基於Bootstrap 3
的Metronic
或者AdminLTE2
,通過適當精簡,很快就可以搭建一套優秀BMS
前端框架。
2、列表頁面
BMS
的列表頁面基本上是三種形式:
(1)分頁列表:推薦 Bootstrap Table
外掛(http://bootstrap-table.wenzhixin.net.cn),筆者進行了適當的擴充套件,可參考 http://blog.csdn.net/lhtzbj12/article/details/77170489 ,結合官方提供的外掛(http://bootstrap-table.wenzhixin.net.cn/extensions )可以輕易的實現自定義排序、顯示/隱藏列、保持分頁引數等功能。
(2)樹形列表:推薦jquery-treetable
外掛(http://ludo.cubicphuse.nl/jquery-treetable/ ), 原皮膚挺醜的,刪除一部分css
後,就會使用Bootstrap
表格樣式。
(3)表單頁面:採用ajaxfileupload
在提交表單前就將檔案(圖片)上傳並做格式驗證,筆者對這個外掛進行了修改,解決了BUG
,可參考 http://blog.csdn.net/lhtzbj12/article/details/76407956 ;使用jquery.validate
進行驗證;統一用ajax
進行提交,可參考 http://blog.csdn.net/lhtzbj12/article/details/65442537 ;簡單表單頁面在父頁中彈出,複雜的表單頁面跳走(後面內容會提到如何保持父頁面狀態)
3、彈出層
告別alert
吧!推薦使用Layer
(http://layer.layui.com/),你想要的效果,它基本上都可以滿足,而且可以擴充套件皮膚,以便於與已有的模板風格保持一致。為了統一效果,每次彈出層都從第一層頁面彈出,即在彈出的頁面裡再次彈出時,使用parent.layer.open
,這兩個彈出層之間是可以進行資料傳遞的。
4、下拉選單
推薦使用 Bootstrap-select
(http://silviomoreto.github.io/bootstrap-select/ ),與Bootstrap
相容得最好的下拉選單外掛。
5、頁面狀態保持
簡單點說,就是使用者徹底離開某頁面(關掉瀏覽器)後,再回到這個頁面時仍然儲存著離開的樣子,下面只是解析實現原理,具休實現需要根據實現情況,筆者在實際專案中都簡單封裝成外掛,使用起來特別簡單。
(1)分頁列表:如果使用了Boostraptable
就可以官方的cookie
外掛實現將當前頁數、分頁顯示數量、顯示/隱藏列等儲存至cookie
,這個外掛是有BUG
,筆者已經修復
(2)樹形列表:在展開、收縮事件裡將展開的id
儲存至cookie
,頁面載入,從cookie
讀取,將相應的節點展開
(3)滾動條位置:重新整理前或者離開前將滾動條位置儲存至cookie
,頁面載入時,從cookie
讀取並滾動到相應位置
(4)搜尋條件:一般都放到一個form
表單,點選搜尋按鈕時將所有條件儲存至cookie
,開啟頁面時獲取並附值
(5)複雜互動介面:開啟頁面時將資料整體讀取儲存到前端頁面,所有對資料的操作都在前端進行,每次在更改資料時,都將更改後的資料儲存到localStorage
裡,最終儲存時再儲存到伺服器。如果未儲存到伺服器端就離開頁面然後返回頁面時,從localStorage
裡讀取資料,詢問使用者是否繼續編輯,筆者簡單封裝了外掛,便於對localStorage
進行操作,可參考 http://blog.csdn.net/lhtzbj12/article/details/78277436
6、高亮提示
在列表頁,編輯某條資料結束後,重新整理列表時,改變被編輯資料Dom
元素的背景顏色,並閃動若干次,如果因為調整了排序導致資料跳到了可視區域外,則設定滾動條位置,使其出現在可以區域內
7、長時間任務進度顯示
涉及到匯入資料等操作時往往需要很長時間,來一個loading
層顯然不是最好的方式,筆者採用多執行緒
+AJAX
+Redis
,將任務狀態儲存在Redis
裡,實現適時進度顯示,並且,離開頁面後再回到頁面,進度條繼續顯示,進行中時,可以進行暫停、繼續、停止,實現步驟如下:
(1)前端:頁面開啟時,ajax
請求,獲取Redis
裡的任務狀態,任務狀態如果是“進行中”,則禁用【匯入】按鈕(不讓開始新的任務),設定setTimeout
,每隔2s再次請求;如果是“空閒”,則隱藏進度條,顯示【匯入】按鈕;
(2)點選【匯入】按鈕發出請求;伺服器端開啟新執行緒進行匯入任務,迴圈讀取資料,每一輪迴圈結束後,更新任務進度;前端每隔2s ajax
請求任務進度,更新進度條;
(3)任務迴圈進行中,點選【暫停】,Redis
裡任務狀態更新為“暫停”,迴圈裡發現狀態為“暫停”則在子迴圈裡反覆獲取任務狀態,如果為“暫停”則繼續子迴圈,如果為“進行中”或者“停止”(點選【繼續】、【停止】更新Redis
裡的任務狀態),則跳出子迴圈;
(4)迴圈裡出現異常時將任務狀態更新為“意外中斷”,前端發現任務中斷後,顯示【強制關閉】按鈕,點選【強制關閉】後將任務狀態設定為“停止”;
(5)大迴圈結束後,判斷是否因為【停止】而結束迴圈,不是則將任務狀態更新為“完成”;
(6)前端發現狀態為“停止”或者“完成”,顯示“停止”或者“完成”的狀態3秒後,ajax
請求,將任務狀態更新為“空閒”。
補充:這裡的前端進度實時顯示最好是用websocket
實現,但是受瀏覽器、伺服器等條件限制,筆者將進度狀態儲存至redis
,ajax
請求任務狀態時從redis
獲取。
總結
暫時寫到這裡,將來有時間的話將裡面的外掛和難點詳細介紹。
相關文章
- 簡單搭建後臺管理系統佈局
- 簡單的後臺管理系統vue-cli3.0+element-uiVueUI
- 簡單談談Spring的IoCSpring
- 談談WINDOWS下重灌系統後oracle的恢復WindowsOracle
- EasyUI - 一個簡單的後臺管理系統入門例項UI
- 談談MYSQL索引是如何提高查詢效率的MySql索引
- 簡單談談MySQL的loose index scanMySqlIndex
- 談一談對vuex的簡單理解Vue
- 簡單談談DNS協議DNS協議
- 談談目前國內已知的主機管理系統現狀和使用感受
- 淺談Unix系統管理(轉)
- 簡單談談服務間的連線
- 談談你對Java平臺的理解,你對Java平臺到底瞭解到了什麼程度?Java
- 簡單談談Cross Entropy LossROS
- 後臺管理系統
- 淺談活動中臺系統技術債管理實踐
- 談一談對vue-router的簡單理解Vue
- 簡單來談談Unicode與emojiUnicode
- 簡單談談Hilt——依賴注入框架依賴注入框架
- 10.03.30專題 “《簡單之美》作者老倪談專案管理之道--複雜系統簡單化“專案管理
- 從一個簡單的Java單例示例談談併發Java單例
- 談談主動式後設資料管理
- 淺談OA管理系統的優越性
- 談談RxSwift和狀態管理Swift
- 淺談如何提高防禦DDOS的效果
- 談談作業系統的多程式作業系統
- 淺談IDC企業如何有效提高售後服務
- Thinkphp後臺管理系統PHP
- AlphaCms後臺管理系統ACM
- ITKEE後臺管理系統
- LaraCMS 後臺管理系統ACM
- 簡單談談面向2024年的遊戲出海遊戲
- 簡單談談我理解的React元件生命週期React元件
- 簡單談談PCB電路板的表面處理工藝
- 談談優惠券系統的設計
- 談談秒殺系統的落地方案
- Doxygen簡單經驗談。。。
- 談談ACT手遊戰鬥系統