一步步帶你做vue后臺管理框架(一)——介紹框架

系列教程《一步步帶你做vue后臺管理框架》第一課

github地址:vue-framework-wz
線上體驗地址:立即體驗

《一步步帶你做vue后臺管理框架》第一課:介紹框架
《一步步帶你做vue后臺管理框架》第二課:上手使用
《一步步帶你做vue后臺管理框架》第三課:登錄功能

簡介

在如今的科技公司中有很多前端的需求都是要寫一個類似于后臺管理框架,日常的工作中會有太多重復的內容加重我們程序員的工作,浪費我們的時間,導致不能早點下班回家吃飯。

普通程序員拿到一個項目總是會重新寫,寫路由花了兩小時,寫vuex花了兩小時,寫個Header組件花了1小時,側邊欄又要1小時,這樣下來項目拿到手一天的時間都沒真正去做項目的需求,再加上改bug,寫css,準備工作都要花三四天,等到產品過來催,還沒有真正去實現功能。這樣是極大的浪費時間****。

那么我們怎么才能成為一個高效率的程序員呢?

成功的秘籍就在于需要有一個自己的后臺管理框架,當你拿到一個項目,所有的UI組件、路由、狀態管理、登錄鑒權功能、等等都已經寫好,你只需要去復用代碼再加上少量的邏輯,當你一個小時做完準備工作,出去買杯咖啡回來看到你的同事還在苦逼的寫vue路由,你肯定會會心一笑:“框架在手,天下我有”。****

表格

表格是我們工作中最常見的組件。就拿寫一個表格來舉例吧


高下立判。傳統寫一個表格需要大量重復html,且需要自己寫css,自己定義數據渲染方式。效率低下且質量不高,而我們的框架已經定義好表格組件,只需要把注意力放在數據獲取上,工作瞬間輕松了很多。


再來看下wz框架表格組件在實際應用中的強大之處吧。


wz-table

篩選數據,擴展行,瞬間導出原始數據或排序后的數據等等強大的功能。

我們的框架已經定義好表格組件,上手即用,是不是又美觀又簡單好用啊。

不止表格,還有各種你工作中會遇到的組件,輕松完成工作中出現的復雜需求。

UI組件已經有了,我們的框架還有哪些特性呢?

自適應

自適應!!!現在很多vue框架都沒有自適應功能,而很多使用場景也在手機上會有,這也是wz后臺管理框架誕生的原因之一。想想要自己每次做自適應就頭疼,現在有了wz框架老板再也不用擔心我的界面適配問題了。

我們看下效果:


wz-index
wz-index

是不是很棒!wz框架基于超好用的開源UI iview,采用了row和col的思想,Row為一行,Col為一列,配置Col 的sm md lg 等屬性就可以做到自適應。
  代碼如下例

<Row>
     <Col :md="8" :sm="12" :lg="9"> 
    </Col>
</Row>

還有什么令人激動的特性呢?

登錄鑒權

莫過于登錄鑒權功能了!

產品要做登錄功能你把希望寄托于后端,后端不背鍋把鍋甩你身上?求人不如求己,wz框架已經替你封裝好登錄鑒權,只需發送服務端驗證一下用戶名密碼即可。

來看下我們炫酷的登錄界面

wz-login

炫酷狂拽吊炸天是不是。

邏輯就是登錄的時候輸入密碼存到cookie里,可以由個人選擇加密方式,每次在路由跳轉的時候利用router.beforeEach((to, from, next) 判斷是否有token,如果有,發送到服務端驗證,如果通過,就繼續路由,如果沒有,就重定向到登錄界面,后面會用詳細的教程講一下。

鑒權也是一樣的道理,在router配置中加上 
meta: { role: ['Administrator'] },在router.beforeEach()中判斷要去的那個界面是否需要權限。并且側邊欄是根據可訪問的路由動態生成的,不同級別的用戶可以看到的側邊欄是不一樣的,這就在一定程度上做到了簡單的權限管理的功能。

可以看一下這端代碼,就是登錄鑒權的核心。

router.beforeEach((to, from, next) => {
  // console.log(to)
  NProgress.start(); // 開啟Progress
  if (store.getters.token) { // 判斷是否有token


            // alert('dont need login ');
           if (to.path === '/login') {
              next({ path: '/' });
            }  
             else {//如果不是去login 而是其他需要判定權限的
              // console.log(store.getters.roles)
              if (store.getters.roles.length === 0) { // 如果當前用戶沒有拉取完user_info信息
                store.dispatch('GetInfo').then(res => { // 拉取user_info
                  const roles = res.data.role;
                  store.dispatch('GenerateRoutes', { roles }).then(() => { // 生成可訪問的路由表
                    router.addRoutes(store.getters.addRouters) // 動態添加可訪問路由表
                    // console.log(store.getters.addRouters);
                    next({ ...to }); // hack方法 確保addRoutes已完成
                  })
                })
              } else {
                // 沒有動態改變權限的需求可直接next() 刪除下方權限判斷 ↓
                if (hasPermission(store.getters.roles, to.meta.role)) {
                  // console.log(to.meta.role)
                  // console.log("has permission");
                  next();//
                } else {
                  // console.log("has no permission");

                  next({ path: '/', query: { noGoBack: true } });
                }
                // 可刪 ↑
              }
            }


  } else {
    if (whiteList.indexOf(to.path) !== -1) { // 在免登錄白名單,直接進入
      next()
    } else {
      alert('please login');
      next('/login'); // 否則全部重定向到登錄頁
      NProgress.done(); // 在hash模式下 改變手動改變hash 重定向回來 不會觸發afterEach 暫時hack方案 ps:history模式下無問題,可刪除該行!
    }
  }
});

說完特性,我們再來看看框架的目錄結構。

build和config是webpack的配置文件,src中存放著框架的主要文件,api是已經封裝好的api請求,components是我們的UI組件。mock是便于我們前端調試的一個工具,可以截獲http請求,返回數據,從而做到獨立于后端開發,加快我們的開發進度,當我們需要請求服務器的時候要把這個文件夾刪掉。

我們需要新加頁面就在views里面加上新的界面文件,然后在router里配置好路由就可以正常訪問了。

當我們需要提交頁面放到服務器上也很簡單,運行

npm run build:prod

項目目錄下就會多出一個dist文件夾,里面有index.html文件和static文件夾,放在服務器上就行。不需要在服務器上安裝任何環境,甚至不需要node即可。

再也不用為發布項目操心了。

項目目錄結構

├── build                      // 構建相關  
├── config                     // 配置相關
├── src                        // 源代碼
│   ├── api                    // 所有請求
│   ├── components             // 全局UI組件
│   ├── directives              // 全局指令
│   ├── mock                   // mock數據
│   ├── router                 // 路由
│   ├── store                  // 全局store管理
│   ├── utils                  // 全局公用方法
│   ├── containers              // 自適應布局組合
│   ├── vendor                  // UI組件依賴js
│   ├── views                   // views界面
│   │    ├── charts             //圖表組件
│   │    ├── components         //首頁組件
│   │    ├── login              //登錄界面
│   │    ├── pages              //錯誤界面
│   │    └── permission        //權限測試界面
│   ├── App.vue                // 入口頁面
│   └── main.js                // 入口 加載組件 初始化等
├── static                     // 靜態資源
│   ├── bower_components        //七牛SDK
│   ├── css                     //css
│   ├── js                      //js
│   └── Jquery.min.js           // jq
├── .babelrc                   // babel-loader 配置
├── eslintrc.js                // eslint 配置項
├── .gitignore                 // git 忽略項
├── favicon.ico                // favicon圖標
├── index.html                 // html模板
└── package.json               // package.json

關于框架的介紹就基本是這些了,wz框架的特點就在于自適應、登錄鑒權、封裝好UI組件、簡單易上手、穩定高效。
希望大家多多使用,多多宣傳。

大家有什么問題最好去我github提issues,文章評論評論較長時間才查看一次。

接下來的教程講一下封裝UI組件、router、webpack、node命令行構建工具等內容。
希望大家看了這系列教程都能制作出自己的前端框架,從而在工作中得心應手。

如果喜歡就點個start鼓勵下作者吧。

github地址:vue-framework-wz
線上體驗地址:立即體驗

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容