“站在巨人的肩膀上”,這樣一來,不要萬事親恭,在值得的方向上節約時間,畢竟人生就這么一次。在接觸ABP以來,一直想花點時間整合LayUI前端框架到ABP中,進而能夠逐漸打磨出一套適合自己的框架,開發習慣、項目架構、界面風格等等。在年前花了點時間了解了LayUI現有的后台模板,雖然LayUI自家的LayUIAdmin很不錯,但奈何於貧窮,因此繞道看看是否有前端同胞已經弄出來一份免費版的,比較了幾份后台模板后,找到了合適的X-Admin。
演示地址:http://123.207.15.233:9527/
碼雲地址:https://gitee.com/530521314/Partner.Surround.git
一、X-Admin前端框架和ABP框架
X-Admin是基於LayUI打造的一套前端框架,比起Bootstrap那種粗獷的風格,LayUI更加符合國人的審美觀,同時LayUI也對后端開發人員友好,在不完全掌握前端知識的前提下也能夠進行項目開發,官網地址:http://x.xuebingsi.com/。
ABP框架是一個用最佳實踐和流行技術開發現代Web應用程序的新起點,旨在快速搭建一個通用的Web應用框架和項目模板,集成着一些優秀的工具和思想,官網地址:https://aspnetboilerplate.com/。
如果覺得自己組合一套框架覺得繁瑣,可以試試使用52ABP框架,該套優秀的前后端框架由梁桐銘在ABP框架的基礎上進行整合,對於前后端相關功能進行改造,使滿足國人的開發習慣,官網地址:https://www.52abp.com/。
二、開始整合兩個框架
1、先從ABP官網下載項目模板。經過文件結構調整后,項目文件路徑如下,之所以項目文件路徑和官網下載下來的不完全一致,是經過了一些調整,適用自己的開發習慣,畢竟適合的才是最好的,在之前的生成流水線搭建中也提到過項目結構,目的是使之標准化,而不需要每次都要重新設置一下項目文件結構。(注意,此處我下載的是.Net Core+MPA版+去掉登錄、注冊、用戶、角色和多租戶功能)
2、下載X-Admin源碼包,解壓后,開始着手Ctrl+C、V操作,將需要的一些js、css等文件移入到ABP中。
3、去除在本次整合后部分在ABP中的不再需要的功能,如Boostrap及其相關的插件,並不是Boostrap不優秀而是LayUI是我的目的,功能相似下,沒必要在冗余存在。
並在bower包管理中刪除對Boostrap的依賴,盡可能的使用大部分LayUI及LayUI社區提供的插件和功能,以減少后端開發人員的學習和使用成本。
4、將X-Admin文件夾中的js文件及css文件移入到ABP中,部分ABP分裝了一層的js、css保持不變,仍然先存放着,如果后期確定不再使用,再進行移除ABP下載后自帶了一個main.css文件,可以使用這個文件或直接使用X-Admin中的css文件。
5、以現有的Layout母版頁復制一個(此處我命名為_LayoutBase),從X-Admin文件夾中查看index.html並復制Body標簽內的代碼到_Layout母版頁的Body中(我對底部的footer刪除了,位置不太合適),整理引用的js、css文件,具體可見我的Git倉庫中,使用控制器Home,方法Index的視圖作為使用_LayoutBase母版頁的視圖,其余頁面都將在Index界面中以iframe的形式出現,到現在,直接啟動項目后,初步的界面可以展現出來了。
三、優化展示效果
1、X-Admin中,對於側邊欄收縮采用的是直接全部隱藏,在該功能的基礎上改造一些功能,使得收縮后可以留下一列圖標,實現方式可以有很多種,此處采取使用js腳本去控制左側菜單寬度實現,在xadmin.js腳本中,找到$('.container .left_open').click()方法,然后在此基礎上進行改造,如以下改造,注意,部分css也需要改造,具體見倉庫源代碼中。
$('.container .left_open').click(function (event) { if (!$('.left-nav #nav .layui-nav-item').hasClass('nav-mini')) { //左側菜單 $('.left-nav #nav .layui-nav-item').addClass('nav-mini'); $('.left-nav').animate({ left: '0px', width: '60px' }, 100); $('.sub-menu li').each(function () { $(this).hide(); }); //右側內容 $('.page-content').animate({ left: '60px' }, 100); $('.page-content-bg').hide(); } else { //左側菜單 $('.left-nav .layui-nav-item').removeClass('nav-mini'); $('.left-nav').animate({ left: '0px', width: '220px' }, 100, function () { $('.sub-menu li').each(function () { $(this).show(); }); }); //右側內容 $('.page-content').animate({ left: '220px' }, 100); if ($(window).width() < 768) { $('.page-content-bg').show(); } } });
2、加入語言為簡體中文,在領域層中的本地資源配置中加入中文及中文語言包,此處我將中文設置為默認語言,更改原有默認的英文包的PithyDesign為PithyDesign-en,並增加一個PithyDesign.json內容與英文包一樣,將英文譯成中文即可。
增加中文並設置為默認選項,如有更多語言,可以在此基礎上進行擴展。
3、對X-Admin代碼包中存在的一些其它界面加入到ABP中如用戶、管理員的增刪改查界面、地址三級聯動、百度的ECharts圖表展示界面等,在增加前需要注意母版頁的設置,在按Url:Home/Index進入后台界面后,Index視圖直接套用_LayoutBase母版頁,然后其它功能頁以iframe的形式嵌入,其余功能頁使用_Layout母版頁。
至此,整合工作算是完成了,后期考慮提高一些操作上的體驗感,同時逐步完善如用戶登錄、注冊、組織機構、角色等基礎功能。
2019-02-21,望技術有成后能回來看見自己的腳步