vue-cli3.x 新建項目 vue create projectName

步驟如下

"vue create '項目名'" 創(chuàng)建項目 (需要vue-cli 3.x以上)

  1. 選擇第一步
    "Manually select features"
  2. 選擇第二步
    "Choose Vue version"
    "Babel"
    "Router"
    "Vuex"
    "CSS Pre-processorsx"
  3. 選擇第三步
    "2.x"
  4. 選擇第四步
    "n"
  5. 選擇第五步
    "Less"
  6. 選擇第六步
    "In package.json"
  7. 選擇第七步
    "n"

需要注意

  1. /App.vue 公共css
<style>
.el-loading-mask {
  /* background-color: rgba(255, 255, 255, 0.3) !important; */
}

#app {
  width: 100%;
  margin: 0 auto;
  min-width: 1300px;
  background: #fff;

  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
  font-size: 14px;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  /* AntD 字體家族:https://ant.design/docs/spec/font-cn#%E5%AD%97%E4%BD%93%E5%AE%B6%E6%97%8F */
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
    "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}
</style>
  1. 新增 /config/index.js 配置文件
export const config = {
    app_name: '小動物',
    api_host: 'https://dongwu.dev.iwto.cn',
    // api_host: 'http://localhost:9102',
    // api_host: '',// 打包用這個

}
  1. 新增 /vue.config.js 聲明打包相關(guān)配置
module.exports = {
    publicPath: "./",  // 可以設(shè)置成相對路徑理逊,這樣所有的資源都會被鏈接為相對路徑悦荒,打出來的包可以被部署在任意路徑
    outputDir: "./dist",  //打包時生成的生產(chǎn)環(huán)境構(gòu)建文件的目錄
    assetsDir: './static123456',  // 放置生成的靜態(tài)資源 (js告希、css忿檩、img卷拘、fonts) 的 (相對于 outputDir 的) 目錄
}
  1. 修改 /router/index.js 404頁面 和 測試頁面 和 首頁

  2. 新增網(wǎng)絡(luò)請求文件 /untils/request.js 并安裝 npm install axios

import axios from 'axios'



import { config as CONFIG } from '@/config/index.js'

import { Notification } from 'element-ui'

let msg = (data) => {
  Notification(data)
}

// create an axios instance
const service = axios.create({
  // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // baseURL: 'http://127.0.0.1:9024', // url = base url + request url
  // baseURL: 'http://jianzhan.dev.xinzhidi.cn', // url = base url + request url
  baseURL:'http://yinni.dev.iwto.cn/',
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 10000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    if (!('data' in config)) {
      config.data = {}
    }

    if (localStorage.getItem('user_id')) {
      config.headers['xzd-login-user-id'] = localStorage.getItem('user_id')
    }
    if (localStorage.getItem('user_token')) {
      config.headers['xzd-login-user-token'] = localStorage.getItem('user_token')
    }

    // if (!('user_id' in config.data)) {
    //   config.data.user_id = localStorage.getItem('user_id')
    // }
    // if (!('user_token' in config.data)) {
    //   config.data.user_token = localStorage.getItem('user_token')
    // }


    config.baseURL = CONFIG.api_host;

    // console.log('請求:' + config.baseURL + config.url, config.data);
    return config
  },
  error => {
    // do something with request error
    msg({
      type: 'error',
      title: '提示',
      message: error
    })
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  response => {
    const res = response.data
    // console.log('響應(yīng):'+response.config.baseURL+response.config.url, res);

    if (res.code == 200) {
      return res;
    } else if (res.code == 201) {
      msg({
        type: 'error',
        title: '提示',
        message: res.msg
      })
      return Promise.reject(res.msg)
    } else if (res.code == 202) {
      msg({
        type: 'error',
        title: '提示',
        message: res.msg
      })
      localStorage.setItem('user_id', '')
      localStorage.setItem('user_token', '')
      return Promise.reject(res.msg)
    } else {
      return Promise.reject('res.code 尚未定義錯誤')
    }

  },
  error => {
    msg({
      type: 'error',
      title: '提示',
      message: error
    })
    return Promise.reject(error)
  }
)

export default service

  1. 頁面loading效果 /public/index.html
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <!-- <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> -->
    <title></title>
    <style>
        html,
        body,
        #app {
            /* height: 100%; */
            margin: 0px;
            padding: 0px;
        }

        #loader-wrapper {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 999999;
            background: #0d0d1bcf;
        }

        #loader {
            display: block;
            position: relative;
            left: 50%;
            top: 50%;
            width: 150px;
            height: 150px;
            margin: -75px 0 0 -75px;
            border-radius: 50%;
            border: 3px solid transparent;
            /* COLOR 1 */
            border-top-color: #FFF;
            -webkit-animation: spin 2s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -ms-animation: spin 2s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -moz-animation: spin 2s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -o-animation: spin 2s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            animation: spin 2s linear infinite;
            /* Chrome, Firefox 16+, IE 10+, Opera */
            z-index: 1001;
        }

        #loader:before {
            content: "";
            position: absolute;
            top: 5px;
            left: 5px;
            right: 5px;
            bottom: 5px;
            border-radius: 50%;
            border: 3px solid transparent;
            /* COLOR 2 */
            border-top-color: #FFF;
            -webkit-animation: spin 3s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -moz-animation: spin 3s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -o-animation: spin 3s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -ms-animation: spin 3s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            animation: spin 3s linear infinite;
            /* Chrome, Firefox 16+, IE 10+, Opera */
        }

        #loader:after {
            content: "";
            position: absolute;
            top: 15px;
            left: 15px;
            right: 15px;
            bottom: 15px;
            border-radius: 50%;
            border: 3px solid transparent;
            border-top-color: #FFF;
            /* COLOR 3 */
            -moz-animation: spin 1.5s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -o-animation: spin 1.5s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -ms-animation: spin 1.5s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            -webkit-animation: spin 1.5s linear infinite;
            /* Chrome, Opera 15+, Safari 5+ */
            animation: spin 1.5s linear infinite;
            /* Chrome, Firefox 16+, IE 10+, Opera */
        }

        @-webkit-keyframes spin {
            0% {
                -webkit-transform: rotate(0deg);
                /* Chrome, Opera 15+, Safari 3.1+ */
                -ms-transform: rotate(0deg);
                /* IE 9 */
                transform: rotate(0deg);
                /* Firefox 16+, IE 10+, Opera */
            }

            100% {
                -webkit-transform: rotate(360deg);
                /* Chrome, Opera 15+, Safari 3.1+ */
                -ms-transform: rotate(360deg);
                /* IE 9 */
                transform: rotate(360deg);
                /* Firefox 16+, IE 10+, Opera */
            }
        }

        @keyframes spin {
            0% {
                -webkit-transform: rotate(0deg);
                /* Chrome, Opera 15+, Safari 3.1+ */
                -ms-transform: rotate(0deg);
                /* IE 9 */
                transform: rotate(0deg);
                /* Firefox 16+, IE 10+, Opera */
            }

            100% {
                -webkit-transform: rotate(360deg);
                /* Chrome, Opera 15+, Safari 3.1+ */
                -ms-transform: rotate(360deg);
                /* IE 9 */
                transform: rotate(360deg);
                /* Firefox 16+, IE 10+, Opera */
            }
        }

        /* JavaScript Turned Off */

        #loader-wrapper .load_title {
            font-family: 'Open Sans';
            color: #FFF;
            font-size: 19px;
            width: 100%;
            text-align: center;
            z-index: 9999999999999;
            opacity: 1;
            line-height: 30px;

            position: absolute;
            bottom: 0;
        }

        #loader-wrapper .load_title span {
            font-weight: normal;
            font-style: italic;
            font-size: 13px;
            color: #FFF;
            opacity: 0.5;
        }
    </style>

</head>

<body>
    <div id="app">
        <div id="loader-wrapper">
            <div id="loader"></div>
            <div class="load_title">
                正在加載,請耐心等待...
                <br>
                <span>v1.3</span>
            </div>
        </div>
    </div>
</body>

</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叫搁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逞度,更是在濱河造成了極大的恐慌额划,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件档泽,死亡現(xiàn)場離奇詭異俊戳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)馆匿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門抑胎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渐北,你說我怎么就攤上這事阿逃。” “怎么了赃蛛?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵恃锉,是天一觀的道長。 經(jīng)常有香客問我呕臂,道長淡喜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任诵闭,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疏尿。我一直安慰自己瘟芝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布褥琐。 她就那樣靜靜地躺著锌俱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敌呈。 梳的紋絲不亂的頭發(fā)上贸宏,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音磕洪,去河邊找鬼吭练。 笑死,一個胖子當(dāng)著我的面吹牛析显,可吹牛的內(nèi)容都是我干的鲫咽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼谷异,長吁一口氣:“原來是場噩夢啊……” “哼分尸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歹嘹,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箩绍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尺上,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體材蛛,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年尖昏,在試婚紗的時候發(fā)現(xiàn)自己被綠了仰税。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡抽诉,死狀恐怖陨簇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迹淌,我是刑警寧澤河绽,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站唉窃,受9級特大地震影響耙饰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纹份,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一苟跪、第九天 我趴在偏房一處隱蔽的房頂上張望廷痘。 院中可真熱鬧,春花似錦件已、人聲如沸笋额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兄猩。三九已至,卻和暖如春鉴未,著一層夾襖步出監(jiān)牢的瞬間枢冤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工铜秆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留淹真,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓羽峰,卻偏偏與公主長得像趟咆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梅屉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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