搭vue项目(初级版)

 这个项目只有 会员管理和直播管理两个模块。创建两个模块是为了验证一下路由跳转。

 下载项目: 可以到我的资源中下载压缩包 或者 

git clone 前端项目搭建: 前端搭建的项目,仅供学习使用

 1.安装vue-cli,全局只需要安装一次,如果安装过一次,就不用在安装了。

创建项目

vue create hello-world

1. 创建好项目之后我们就可以开始修改一些配置,修改的文件是 vue.config.js

修改配置的介绍可以到官网学习一下vue-cli配置参考

'use strict'
const path = require('path')

function resolve(dir) {
  // 生成路径  `${__dirname/${dir}}`
  return path.join(__dirname, dir)
}
process.env.VUE_APP_VERSION = require("./package.json").version;
module.exports = {
  // 基本 url
  publicPath: process.env.VUE_APP_BASE_URL || '/',

  // 打包时生成的文件目录
  outputDir: 'dist',

  // 打包之后放置生成的静态资源(js、css、img、fonts)
  assetsDir: 'static',

  // 每次保存时,设置为 true 或 'warning' 时,eslint-loader 会将 lint 错误输出为编译警告。
  // 默认情况下,警告仅仅会被输出到命令行,且不会使得编译失败。
  // lintOnSave: process.env.NODE_ENV === 'development',  // 在开发环境下只提示不会导致编译失败
  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
  productionSourceMap: false,

  // webpack-dev-server 相关配置
  devServer: {
    host: 'localhost',    // 可以运行
    port: '8023',
    // 自动打开浏览器
    open: true,
    // 为接口前端自己加一个前缀,但不会传给后端
    proxy: {
      ['/api']: {
        target: process.env.VUE_APP_BASE_API,
        // target: 'https://demo-api.apipost.cn/api',
        pathRewrite: {
          ['^/api']: '',  // 传给后端时 如果为 /api 则 重写为 空
        }
      }
    },
    // disableHostCheck: true,   // 搭配host: '0.0.0.0',为了其他设备可以访问本地服务
    historyApiFallback: true,
    allowedHosts: 'all',
  },

  css: {
    loaderOptions: {
      sass: {
        // 依次导入的公用的scss变量,公用的scss混入,共用的默认样式
        // 别名配置
        additionalData: `@import "./src/styles/variables.scss";`
      }
    }
  },

  // 该对象将会被 webpack-merge 合并入最终的 webpack 配置。
  configureWebpack: {
    resolve: {
      // 别名配置
      alias: {
        '@': resolve('src')     // 这里的resolve用的上边的函数
      }
    }
  },

  // 定义具名的 loader 规则和具名插件
  chainWebpack(config) {
    // 修复HMR
    config.resolve.symlinks(true)

    // 设置loader
    // https://blog.csdn.net/cai_niao5623/article/details/126424871
  },
}

cconst path = require('path')

path模块是nodejs官方提供的,用来处理路径的模块。

path.join():将多个路径片段拼接成一个完整的路径字符串。

process.env.VUE_APP_VERSION

process.env.VUE_APP_BASE_URL

这些数据来自

 这些配置的使用请去官网学习一下,模式和环境变量 | Vue CLI

2. 安装router,安装store,安装组件element-ui。开始写页面,路由跳转。

安装store: 安装 | Vuex

安装router: 安装 | Vue Router

安装组件:Element - The world's most popular Vue UI framework

安装好后开始在入口文件main.js中引用

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui'
import './styles/element-variables.scss'
import router from "./router"
import store from './store'
import './permission' // permission control



Vue.config.productionTip = false

Vue.use(ElementUI);


new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App),

})

在开发中,每个项目有自己的基本页面框架,这个项目中基本页面框架写在了layout文件夹中。就是第一张图的布局

3. 安装axios,调用接口

安装:axios中文文档|axios中文网 | axios

使用axios

import axios from 'axios';
import errorCode from '@/utils/errorCode';
import { Message } from 'element-ui'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// 创建实例
const service = axios.create({
    baseURL: process.env.NODE_ENV === 'development' ? 'api' : process.env.VUE_APP_BASE_API,
    timeout: 20000,
})

// service.defaults.headers.common['Authorization'] = AUTH_TOKEN;

// 添加请求拦截器
service.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么

    // 是否需要设置 token
    // const isToken = (config.headers || {}).isToken === false
    // if (getToken() && !isToken) {
    //     config.headers = window.CONFIG.headers // 让每个请求携带自定义token 请根据实际情况自行修改
    // }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
})

// 添加响应拦截器
service.interceptors.response.use(function (res) {
    // 对响应数据做点什么
    // console.log("请求接口--success", res);
    const code = res.data.code || 200;
    const msg = errorCode[code] || res.data.msg || errorCode['default'];
    if (code === 200) {
        return res.data;
    } else {
        Message({
            message: msg,
            type: 'error'
        })
        return Promise.reject(res.data)
    }
}, function (error) {
    // console.log("请求接口--error");
    let { message: msg, response, config } = error
    if (msg === 'Network Error') {
        msg = '后端接口连接异常'
    } else if (msg.includes('timeout')) {
        msg = '系统接口请求超时'
    } else if (response) {
        let status = response.status
        msg = '系统接口:' + status + '异常'
    }
    Message({
        message: `${msg}:${config.url}`,
        type: 'error',
        duration: 5 * 1000
    })
    return Promise.reject(error);
})

export default service

在api文件夹中引入使用

import request from '@/utils/request';

export function getRouters(params) {
    return request({
        url: 'https://console-mock.apipost.cn/app/mock/project/d098023d-15c4-49cd-a1d6-d4e1124f3e56//api/demo/getRouters',
        method: 'get',
        params
    })
}

到这一步,简易版的项目需要安装的内容已经安装结束了。

接下来,开始画页面,调用接口获取菜单配置

省略画页面的过程......

画好了面包屑,需要将调用接口获取的菜单配置在store中保存起来。

后边的内容需要看每个开发团队的开发习惯了,可以前往下载我的项目代码简单了解一下,自行消化一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值