簡潔后台管理模版


原文地址:簡潔后台管理模版
之前給客戶開發一個簡單的后台管理系統,本來准備套用AdminLTE的,但客戶嫌棄太臃腫,而且又需要有多tab頁面切換,於是從我代碼庫中找到好久前就寫過的管理后台,根據需求重寫。這是基於jQuery,加上自己編寫基礎樣式,從零搭建起來的框架,在這個輕量級模版的基礎上進行開發vue項目。現在順便將這個模版搭建成我的前端demo的管理系統,而這篇文章就講述下如何實現簡單的后台管理系統。

效果請看: manage-demo:https://edwardzhong.github.io/sites/manage-demo/
manage

項目架構

基於gulp自動化工具,使用less預編譯,使用swig模版引擎編譯html。

基礎樣式base.css,字體庫raleway,圖標庫fontello,js基礎庫jQuery。

同時使用webpack為vue.js配置好開發環境,在src文件夾里面可以直接開發vue項目,里面有簡單的vue樣例。當然想用react的也可以更改為react庫。

文件目錄

  • dist 文件生成目錄
  • src 源文件目錄,里面為vue項目的文件
  • img 圖片文件夾
  • lib 類庫文件夾
  • less less文件
  • pages 頁面文件夾
  • index.html 首頁(母板頁)
  • gulpfile.js
  • webpack.config.js
  • package.json

  而我們現在要做的就是最外層的框架頁,也就是母板頁,為了使其更加輕便,同時適應更多類型的項目,只使用了最基礎的jquery來實現功能。

基礎樣式庫

每個前端開發者做過大量項目后,基本都會有自己的樣式庫吧。我的base-css是參考了部分bootstrap和pure的樣式庫,精簡了很多組件,非常的輕量級。詳細代碼請看https://github.com/edwardzhong/base-csss,less預編譯,gulp自動化,可以自由選擇所需要的組件后再打包,經過這樣定制打包后的樣式體積就更加的小了。該樣式庫主要包括如下組件:

  • normalize:html5標簽修復
  • grid:響應式網格
  • alert
  • button
  • breadcrumb
  • dialog
  • form
  • menu
  • pager
  • pagination
  • panel
  • tab
  • table

有了基礎樣式之后,我們搭建系統就方便很多了。

實現母板頁

后台管理系統最重要的就是母板頁(index.html),我們一步步來實現它。

布局

基本就是左右布局:左邊導航部分固定寬度,右邊內容部分寬度自適應。實現這個布局有很多種方式,這里不詳敘,從實現動畫和自適應方面考慮,我采用的是絕對定位的方式。左邊的導航欄隱藏顯示動畫是通過設置margin-left和transition屬性實現的。

/*左邊導航欄*/
.menu-wrap {
    position: absolute;
    transition: margin-left .3s ease-in-out;
    top: 50px;left: 0;
    width: 200px;
    height: calc(100% - 50px);
    overflow-y: scroll;
}
/*右邊內容部分*/
.main {
    height: calc(100% - 50px);
    overflow: hidden;
    margin-left: 200px;
    transition: margin-left .3s ease-in-out;
}

導航欄

導航欄就是使用ul列表布局,如果要實現多級的子菜單就在相應li下再嵌套一個ul列表即可,然后添加樣式,添加css3動畫等。布局示例請看如下的代碼:

<ul id="menuList" class="side-menu">
  <li class="children">
    <a data-type="tab" title="Html Component" href="javascript:;"><i class="icon-doc-text"></i><span>Html Component</span></a>
    <ul style="height: 0px;">
      <li><a data-type="tab" title="Alert" href="./pages/alert.html"><span> Alert</span></a> </li>
      <li><a data-type="tab" title="Page" href="./pages/page.html"><span> Page</span></a> </li>
      <li><a data-type="tab" title="Panel" href="./pages/panel.html"><span> Panel</span></a> </li>
    </ul>
  </li>
  <li>
    <a title="My Blog" href="/"><i class="icon-bookmark"></i><span>My Blog</span></a>
  </li>
</ul>

實現多tab內容面

很多后台管理模版都是通過模版引擎編譯頁面內容,這樣生成的每個頁面都會包含導航欄和內容塊,這樣的好處就是編寫比較簡單。但是點擊導航欄里的鏈接就回重新加載整個頁面,在網速不佳的情況,就會看到整個頁面在跳動。

另一種方式是使用frameset或iframe,嵌套頁面。這樣內容頁和母版頁是分離的,分別加載的。這樣會體驗比較好,編寫的代碼也是隔離的。但也是隔離了作用域,所以要專門處理框架內外層通信的問題,同時編寫也會稍麻煩。

我這里選用的是iframe方案,因為使用多iframe實現母板頁多tab顯示比較方便。這樣左邊導航欄點擊后就會創建新的iframe並填入鏈接,然后再將該iframe插入內容塊。同時tab欄也對應插入一一對應的tab標簽,這樣點擊tab標簽就隱藏顯示對應iframe塊。請看如下的html代碼結構:

<div id="main" class="main">
  <nav class="nav">
    <!-- tab標簽 -->
    <ul id="nav" class="menu-tabs">
      <li><a>...</a><li>
      <li><a>...</a><li>
    </ul>
  </nav>
  <!-- 頁面iframe -->
  <div class="page-con">
    <div class="page"><iframe src="..."></iframe></div>
    <div class="page"><iframe src="..."></iframe></div>
  </div>
</div>

母板頁的添加iframe和添加tab標簽的代碼

//添加頁面
function appendPage(url){
    $('.page-con .page').removeClass('active');
    $('.page-con').append('<div class="page active"><iframe src="'+url+'" frameborder="0" width="100%" height="100%"></iframe></div>');
}

//添加tab
function appendTab(txt){
    $nav.find('li').removeClass('active');
    $nav.append('<li data-txt="'+txt+'" class="active"><a href="javascript:;">'+txt+'<i class="close">×</i></a></li>');
    var w=setTabWidth();
    //移動到新增tab
    $navParent.animate({'scrollLeft':w+'px'},600); 
}

當然這中間有很多細節,比如添加,刪除,選擇,滾動頁面,tab欄的選擇關閉,tab欄內容超出頁面寬度的處理,當前tab如何滾動到當前顯示區等,具體實現可以查看github代碼。

內容頁

完成母板頁之后,接下來就是添加內容頁了。首先就是定義導航鏈接,添加了自定義屬性data-type="tab"的鏈接就是要在右邊內容iframe打開的頁面,否則就是打開外部鏈接了。每個在iframe打開的a標簽要配置title屬性,因為我是通過title來區分頁面是否已經打開過,tab中已經存在就不再打開。

內容頁既可以是靜態頁面,也可以用vue,react構造頁面,demo里面有部分頁面使用了vue來實現邏輯功能。

<ul id="menuList" class="side-menu">
  <!-- 要添加到iframe中的鏈接 -->
  <li><a data-type="tab" title="Alert" href="./pages/alert.html"><span> Alert</span></a> </li>
  <!-- 外部鏈接跳轉 -->
  <li><a title="My Blog" href="/"><i class="icon-bookmark"></i><span>My Blog</span></a></li>
</ul>

總結

這個模版還有很多地方需要完善,可以在此基礎上修改添加相應功能,也可以在此基礎上使用vue,react實現內容頁的功能。 具體細節請查看代碼:https://github.com/edwardzhong/manage-demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM