賣座后臺(tái)管理系統(tǒng)知識(shí)體系

賣座后臺(tái)管理系統(tǒng)知識(shí)體系

目錄

  1. vue-cli3 創(chuàng)建項(xiàng)目(略)

  2. 重置樣式和公共樣式(略)

  3. 路由配置(略)

  4. 使用餓了么 ui 庫(kù)捂襟,請(qǐng)看文檔(略)

  5. 布局組件(已完成)

  6. vue 原生點(diǎn)擊事件(已完成)

  7. vuex

  8. axios 攔截器(完成一半)

  9. 打包部署項(xiàng)目

  10. active-class

  11. 父子組件通信

  12. vue-cli3 腳手架配置

五律适、布局組件

  1. 拷貝餓了么的布局容器
  2. 展開(kāi)側(cè)邊欄的設(shè)置 :default-openeds 設(shè)置
  3. 樣式調(diào)整
    • layout 組件設(shè)置 padding-top
    • 頭部調(diào)整(固定定位)
    • 側(cè)邊欄 html=>body=>#app>div>aside 高度全部設(shè)為 100%

六椒袍、vue 原生點(diǎn)擊事件
在組件上添加事件的時(shí)候需要添加修飾符剧罩。native 來(lái)綁定事件固翰,比如

  <el-submenu index="2" @click.native="open('2')"></el-submenu>

八收厨、axios 攔截器

文檔地址:http://huruqing.cn/docs/Vue/advance/02.axios.html

  1. 在新建 /utils/request.js

  2. 使用 axios 創(chuàng)建實(shí)例围俘,配置 baseUrl 和超時(shí)時(shí)間

    const service = axios.create({
        // 配置基本的路徑
        baseURL: 'http://132.232.87.95:3000/admin',
        timeout: 5000 // 請(qǐng)求超時(shí)時(shí)間(因?yàn)樾枰{(diào)試后臺(tái),所以設(shè)置得比較大)
    })
    
  3. response 攔截器讓我們?cè)谡?qǐng)求成功之后砸讳,統(tǒng)一做某些處理(完整的代碼請(qǐng)看項(xiàng)目)

    // response 攔截器
    service.interceptors.response.use(res => {
            if (res.data.code == 666) {
                return res.data
            } else {
                return Promise.reject(res.data.msg);
            }
        },
        error => {
            return Promise.reject(error)
        });
    
    export default service;
    
  4. 把 axios 掛載在 Vue 的原型上

import $axios from '@/utils/request';
Vue.prototype.$axios = $axios;
  1. 發(fā)送請(qǐng)求只需要這樣寫(xiě)
let url = "/city/getList";
this.$axios
    .get(url)
    .then(res => {
    this.list = res.cities;
    console.log(res.cities);
})
    .catch(err => {
    console.log(err);
});

九、打包部署項(xiàng)目(上線)

  1. 全局變量 process.env

    let env = process.env.NODE_ENV;
    let baseURL = '';
    // 開(kāi)發(fā)環(huán)境
    if (env === 'development') {
        baseURL = 'http://jun.huruqing.cn:3000/admin';
    } else {
        // 生產(chǎn)環(huán)境
        baseURL = 'http://jun.huruqing.cn:3000/admin';
    }
    

    web04 班因?yàn)闂l件限制界牡,所以簿寂,開(kāi)發(fā)和生產(chǎn)用同一套代碼

  2. 配置打包路徑和資源訪問(wèn)路徑

    • 新建 /vue.config.js, 代碼如下

      // 以陳燦為例
      module.exports = {
           // 資源路徑
          publicPath: '/maizuo/chencan/',
          // 打包路徑
          outputDir: 'chencan',
          // 關(guān)閉eslint檢查
          lintOnSave: false
      }
      
  3. 執(zhí)行 npm run build 命令,然后把生成的文件夾 chencan 上傳到 jun.huruqing.cn/maizuo/

十宿亡、路由表和側(cè)邊欄配置

  1. 導(dǎo)出路由數(shù)組

    export const routes = [];
    
  2. 導(dǎo)入路由數(shù)組

    import {routes} from '@/router/index'
    
  3. item.meta && item.meta.title => && 左邊為 false 的時(shí)候常遂,不會(huì)繼續(xù)執(zhí)行

  4. 設(shè)置默認(rèn)值

    function test(data) {
     data = data || {};
     console.log(data.aa);
    }
    

十一、路由守衛(wèi)

  1. 配置全局路由守衛(wèi)

    let routes = [];
    let router = new Router({
        routes
    })
    
    router.beforeEach((to, from, next) => {
        // 修改網(wǎng)頁(yè)標(biāo)題
        document.title = to.meta.title;
        next();
    })
    
    export default router;
    
    • to: Route: 即將要進(jìn)入的目標(biāo) 路由對(duì)象
    • from: Route: 當(dāng)前導(dǎo)航正要離開(kāi)的路由
    • next
  2. 利用路由守衛(wèi)讓沒(méi)登錄的時(shí)候挽荠,不管訪問(wèn)什么頁(yè)面都調(diào)到登錄頁(yè)面

// 獲取登錄狀態(tài)isLogi的值 this.$store.state
import store from '../store/index';

router.beforeEach((to, from, next) => {
    // console.log('登錄狀態(tài)', store.state.isLogin);
    // 修改網(wǎng)頁(yè)標(biāo)題
    document.title = to.meta.title;

    let isLogin = store.state.isLogin;
    debugger;
    // 如果沒(méi)登錄,并且去的頁(yè)面不是登錄頁(yè)面, 就跳轉(zhuǎn)到登陸頁(yè)面
    if (!isLogin && to.path !== '/login') {
        next('/login');
    } else {
        next();
    }
})

export default router;

十二克胳、級(jí)聯(lián)組件的使用 (影院模塊的制作)

  1. 覆蓋餓了么的樣式

    • 給組件起一個(gè)不會(huì)重復(fù)的class,模塊名+組件名,比如

      <div class="cinema-add">   // cinema模塊的add組件
      
    • 使用兩個(gè)style,一個(gè)加scoped,另外一個(gè)不加

    • 覆蓋餓了么組件樣式

      <style lang="less">
      .cinema-add {
           .el-cascader {
              display: block;
          }
      }
      </style>
      

      // 下面的style用來(lái)寫(xiě)本組件的樣式

      <style lang="less" scoped>
          
      </style>
      
    1. Promise.all,同時(shí)發(fā)多個(gè)請(qǐng)求

      // promise1,promise2都是promise對(duì)象
      Promise.all([promise1,promise2]).then(res=> { 
        // res是一個(gè)數(shù)組,返回兩個(gè)promise的數(shù)據(jù)
      })
      
      // 獲取城市列表和地區(qū)列表
      getList() {
          let cityUrl = '/city/allCity';
          let areaUrl = '/area/allArea'; 
          // 獲取城市列表的promise
          let cityPromise = this.$axios.get(cityUrl);
          // 獲取地區(qū)列表的promise
          let areaPromise = this.$axios.get(areaUrl);
      
          Promise.all([cityPromise,areaPromise]).then(res=> {
              console.log(res);
          }).catch(err=> {
              this.$message.error(err);
          })
      },
      
    2. 把城市列表和地區(qū)列表編程級(jí)聯(lián)組件需要的數(shù)據(jù)格式

       getList() {
            let cityUrl = "/city/allCity";
            let areaUrl = "/area/allArea";
            // 獲取城市列表的promise
            let cityPromise = this.$axios.get(cityUrl);
            // 獲取地區(qū)列表的promise
            let areaPromise = this.$axios.get(areaUrl);
            Promise.all([cityPromise, areaPromise])
              .then(res => {
                //   console.log(res);
                // 把城市列表和地區(qū)列表編程級(jí)聯(lián)組件需要的數(shù)據(jù)格式
                let cityList = res[0].cities;
                let areaList = res[1].areas;
                
                let newCityList = cityList.map(city => {
                  // 找出城市對(duì)應(yīng)的地區(qū)列表
                  let newAreaList = areaList.filter(area => {
                    return area.cityId === city.cityId;
                  });
                  // 地區(qū)列表變成組件需要的數(shù)據(jù)結(jié)構(gòu)
                  newAreaList = newAreaList.map(area=> {
                      return {
                          value: area.areaId,
                          label: area.name
                      }
                  })
      
                  return {
                    value: city.cityId,
                    label: city.name,
                    children: newAreaList
                  };
                });
              //   console.log(newCityList);
                this.options = newCityList;
              })
              .catch(err => {
                this.$message.error(err);
              });
      
      1. 級(jí)聯(lián)組件添加清空,搜索,禁用

      2. 子組件向父組件傳數(shù)據(jù)

        • 父組件自定義事件

           <Address @getAddress="getAddress"></Address>
           
           getAddress(data) {
               console.log('父組件收到的數(shù)據(jù)',data);
           },
          
        • 自組件通過(guò)$emit觸發(fā)父組件定義的自定義事件

          handleChange(value) {
              this.$emit('getAddress',value);
          }
          

十三、請(qǐng)求的loading和axios.finally

.finally不管請(qǐng)求成功或失敗都會(huì)執(zhí)行回調(diào)

cinemaDetail(cinemaId) {
    let loading = this.$loading({
        lock: true,
        text: "努力加載中...",
        background: "rgba(0, 0, 0, 0.7)"
    });
    let url = "/cinema/getDetail2?cinemaId="+ cinemaId;
    this.$axios.get(url).then(res => {
        console.log(res);
    }).catch(err => {
        this.$message.error(err);
    }).finally(()=> {
        loading.close();
    })
},

十四圈匆、動(dòng)態(tài)路由配置

例子1:

// 路由配置
  {
      path: 'edit/:cinemaId',
      meta: {
      title: 'edit'
      },
      component: () => import('@/pages/demo/edit')
  }, 
// 頁(yè)面跳轉(zhuǎn)
<router-link to="/demo/edit/a1234444">去編輯</router-link>
// 獲取cinemaId的值
this.$route.params.cinemaId; 

例子2: 傳多個(gè)參數(shù)

// 路由配置
{
     path: 'edit/:cinemaId/:cityId/:areaId',
     meta: {
     title: 'edit'
     },
     component: () => import('@/pages/demo/edit')
 }, 
 // 頁(yè)面跳轉(zhuǎn)
 <router-link to="/demo/edit/a1234444/b234234/c1234234">去編輯</router-link>
// 獲取cinemaId,cityId,areaId
let {cinemaId,cityId,areaId} = this.$route.params;

十五毯欣、添加和編輯共用同一個(gè)組件(以城市模塊為例)

  1. 判斷當(dāng)前路由是添加還是編輯

    • 方法一: 獲取cityId,有cityId為編輯頁(yè)面,沒(méi)有則是添加頁(yè)面

      this.$route.params.cityId;
      

      具體代碼如下

      <template>
        <div>
          <el-button>{{isAdd?'立即添加':'立即編輯'}}</el-button>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            // 是否是添加頁(yè)面
            isAdd: true
          };
        },
      
        created() {
          let cityId = this.$route.params.cityId;
          this.isAdd = !!cityId ? false : true;
        }
      };
      </script>
      
  • 方法二: 通過(guò)this.$route.path來(lái)判斷

    <template>
      <div>
        <el-button>{{isAdd?'立即添加':'立即編輯'}}</el-button>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {};
      },
    
      computed: {
        isAdd() {
          return this.$route.path.includes("add");
        }
      }
    };
    </script>
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臭脓,隨后出現(xiàn)的幾起案子酗钞,更是在濱河造成了極大的恐慌,老刑警劉巖来累,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚作,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嘹锁,警方通過(guò)查閱死者的電腦和手機(jī)葫录,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)领猾,“玉大人米同,你說(shuō)我怎么就攤上這事骇扇。” “怎么了面粮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵少孝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我熬苍,道長(zhǎng)稍走,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任柴底,我火速辦了婚禮婿脸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柄驻。我一直安慰自己狐树,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鸿脓。 她就那樣靜靜地躺著褪迟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪答憔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天掀抹,我揣著相機(jī)與錄音虐拓,去河邊找鬼。 笑死傲武,一個(gè)胖子當(dāng)著我的面吹牛蓉驹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揪利,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼态兴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疟位?” 一聲冷哼從身側(cè)響起瞻润,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甜刻,沒(méi)想到半個(gè)月后绍撞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡得院,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年傻铣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥绞。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡非洲,死狀恐怖鸭限,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情两踏,我是刑警寧澤败京,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缆瓣,受9級(jí)特大地震影響喧枷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弓坞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一隧甚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渡冻,春花似錦戚扳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至超歌,卻和暖如春砍艾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巍举。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工脆荷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懊悯。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓蜓谋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親炭分。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桃焕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 2019-10-22 賣座后臺(tái)管理系統(tǒng)知識(shí)體系 目錄 vue-cli3 創(chuàng)建項(xiàng)目(略) 重置樣式和公共樣式[htt...
    欣簡(jiǎn)書(shū)閱讀 514評(píng)論 2 0
  • 賣座后臺(tái)管理系統(tǒng)知識(shí)體系 目錄 vue-cli3 創(chuàng)建項(xiàng)目(略) 重置樣式和公共樣式(略) 路由配置(略) 使用餓...
    前端陳陳陳閱讀 617評(píng)論 0 1
  • ## 框架和庫(kù)的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**。> > 庫(kù)(lib...
    Rui_bdad閱讀 2,910評(píng)論 1 4
  • 響應(yīng)式布局的理解 響應(yīng)式開(kāi)發(fā)目的是一套代碼可以在多種終端運(yùn)行,適應(yīng)不同屏幕的大小,其原理是運(yùn)用媒體查詢,在不同屏幕...
    懶貓_6500閱讀 787評(píng)論 0 0
  • 今天下了一整天的雨捧毛,我沒(méi)怎么出去慢慢地開(kāi)始能安安穩(wěn)穩(wěn)地學(xué)點(diǎn)知識(shí)了對(duì)于知識(shí)观堂,我感覺(jué)接觸到的,還是愿意去學(xué)習(xí)的呀忧,至于對(duì)...
    憑欄情動(dòng)閱讀 117評(píng)論 0 1