簡潔後臺管理模版

来源:http://www.cnblogs.com/edwardloveyou/archive/2017/12/01/7931674.html
-Advertisement-
Play Games

原文地址: "簡潔後臺管理模版" 之前給客戶開發一個簡單的後臺管理系統,本來準備套用AdminLTE的,但客戶嫌棄太臃腫,而且又需要有多tab頁面切換,於是從我代碼庫中找到好久前就寫過的管理後臺,根據需求重寫。這是基於jQuery,加上自己編寫基礎樣式,從零搭建起來的框架,在這個輕量級模版的基礎上進 ...


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

效果請看:manage-demo:http://jeffzhong.space/sites/manage-demo/


項目架構

  基於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


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

-Advertisement-
Play Games
更多相關文章
  • 這是曾經的一個面試題,正好引出狀態機編程思想。挺不錯的一個例子。 題目描述 給定一個字元串,它由以下字元組成: 左括弧“(” 右括弧“)” 下劃線“_” 大小寫字母構成的字元串(單字母也算作字元串) 該字元串組成有以下規則限定: 括弧成對出現且不會嵌套,保證語法正確 字元串可以出現在括弧內,也可以出 ...
  • 閑暇之餘,開發了一款休閑類app,雖然用戶量不多,但確實花了不少心血在這上面。然而,開發出來的結果,與之前想好的架構,還是有不少區別。 下麵,記錄下這款app架構的演變: 最初,只想寫個app,能與機器人進行聊天。架構隨意搭(或者說沒有架構),快速開發出來就好: 最初(無架構)版本 很簡單,按照代碼 ...
  • 對於大型網站,分層和分隔的一個主要目的是為了切分後的模塊便於分散式部署,即將不同模塊部署在不同的伺服器上,通過遠程調用協同工作。分散式意味著可以使用更多的電腦完同樣的工作,電腦越多,CPU、記憶體、存儲資源就越多,能過處理的併發訪問和數據量就越大,進而能夠為更多的用戶提供服務。 ...
  • Pipeline使用了groovy語法,同時可以使用所有jenkins插件在groovy里進行調用,可以說通過UI可以實現的功能使用pipeline也可以實現,這一點我在上一篇文章里已經說明,今天主要說一下pipeline里的公用類庫,你可以自己定義方法,一般地一個方法一個文件,擴展名為groovy ...
  • 各位朋友好,本章節我們繼續講第五個設計模式。 在生活中,我們都知道手機記憶體卡是無法直接接電腦的,因為記憶體卡的卡槽比較小,而電腦只有USB插孔,此時我們需要用到讀卡器。這個讀卡器就相當於是適配器。這是生活上的適配器,那麼在OO對象中,適配器就是將一個介面轉換成另一個介面,使得客戶可以使用。 適配器模式 ...
  • 一、背景&問題 之前框架是一個基於SOA思想設計的分散式框架。各應用通過服務方式提供使用,服務之間通信是RPC方式調用,具體實現基於.NET的WCF通信平臺。框架存在如下2個問題: 1、高併發處理能力不足。一當高併發請求,可能出現多個服務待定處理,導致整個系統出現瓶頸。 2、隨著移動端廣泛應用,服務 ...
  • 上一章我們學習了裝飾者模式,這章LZ帶給大家的是單例模式。 首先單例模式是用來幹嘛的?它是用來實例化一個獨一無二的對象!那這有什麼用處?有一些對象我們只需要一個,比如緩存,線程池等。而事實上,這類對象只能有一個示例,如果製造多個示例,就會導致許多問題產生,比如程式的行為異常,資源使用過量。而單例模式 ...
  • ////發表時間(now) function p(s) { return s < 10 ? '0' + s : s; } var myDate = new Date(); //獲取當前年 var year = myDate.getFullYear(); //獲取當前月 var month = myD ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...