vue 框架总结 使用elementUI

安装脚手架 vueCli

npm install -g @vue/cli
vue create template_demo
cd template
npm run serve

安装elementUI

npm i element-ui -S

main.js

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

安装路由

npm install vue-router --save

app.vue

<template>
	<div id="app">
		<router-view :key="$route.fullPath" />
	</div>
</template>

<script>
	export default {
		name: 'App',
		components: {}
	}
</script>

<style>

</style>

在src下新建目录router router下新建index.js
src>router>index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const routes = [{
		path: '/',
		name: 'login',
		meta: {
			title: '登录'
		},
		component: () => import('../views/login/login.vue')
	},
	{
		path: '/index',
		name: 'index',
		meta: {
			title: '首页'
		},
		component: () => import('../views/index/index.vue')
	},
]

const router = new VueRouter({
	mode: 'hash',
	base: process.env.BASE_URL,
	routes,
	scrollBehavior(to, from, savedPosition) {
		if (savedPosition) {
			return savedPosition
		} else {
			return {
				x: 0,
				y: 0
			}
		}
	}
})
router.beforeEach((to, from, next) => {
	if (to.meta.title) {
		document.title = to.meta.title
	}
	next()
})
export default router

main.js 引入

import router from './router'

new Vue({
	router,
  render: h => h(App),
}).$mount('#app')

在src下新建 views文件
在这里插入图片描述
分别创建index>index.vue login>login.vue
login.vue

<template>
	<div>
		我是登录页
		<div class="index" @click="goIndex">去首页</div>
	</div>
</template>

<script>
	export default {
		data() {
			return {};
		},
		methods: {
			//   提交
			goIndex() {
				this.$router.push({
					path: '/index'
				})

				//登录api请求完成后跳转
				// ...
				// this.$api.goLogin(this.formData).then(res => {
				// 	if (res.code == 200) {
				// 		sessionStorage.setItem('user', JSON.stringify(res.data))
				// 		this.$message.success(res.msg)
				// 		// 完成后跳转
				// 		setTimeout(() => {
				// 			this.$router.push({
				// 				path: '/index'
				// 			})
				// 		}, 1000)
				// 	} else {
				// 		this.$message.error(res.msg)
				// 	}
				// })
			}
		}
	};
</script>

<style>
	.index{
		color: #ff0000;
	}
</style>

index.vue

<template>
	<div>我是首页</div>
</template>

<script>
</script>

<style>
</style>


全局 store管理
安装vuex

npm install --save vuex

在src在新建store文件 在store文件下新建index.js
src>store>index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
	state: {},
	mutations: {},
	actions: {},
	modules: {}
})

main.js 引入

import store from './store'

new Vue({
	store,
  render: h => h(App),
}).$mount('#app')

api请求
在index.vue中看到需要api接口

在src下新建utils 存放全局方法
安装依赖 axios js-cookie

npm install --save js-cookie
npm install axios

在utils下新建auth.js
src>utils>auth.js

import Cookies from 'js-cookie'
const TokenKey = 'vue_admin_template_token'
export function getToken() {
  return Cookies.get(TokenKey)
}
export function setToken(token) {
  return Cookies.set(TokenKey, token)
}
export function removeToken() {
  return Cookies.remove(TokenKey)
}

在utils下新建errorCode.js (可以参考vue-admin-template中自己编写)
src>utils>errorCode.js

export default {
  '401': '认证失败,无法访问系统资源',
  '403': '当前操作没有权限',
  '404': '访问资源不存在',
  'default': '系统未知错误,请反馈给管理员'
}

在utils下新建request.js (可以参考vue-admin-template中自己编写)
src>utils>request.js

import axios from 'axios'
import {Notification,MessageBox,Message} from 'element-ui'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项,表示请求URL公共部分
	baseURL: process.env.VUE_APP_BASE_API,
	// 超时
	timeout: 5000 
})
// request拦截器
service.interceptors.request.use(config => {
	// 是否需要设置 token
	const isToken = (config.headers || {}).isToken === false
	if (getToken() && !isToken) {
		config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
	}
	return config
}, error => {
	console.log(error)
	Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
		// 未设置状态码则默认成功状态 根据返回状态码调整
		const code = res.data.code || 200;
		// 获取错误信息
		const msg = errorCode[code] || res.data.msg || errorCode['default']
		if (code === 401) {
			MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
				confirmButtonText: '重新登录',
				cancelButtonText: '取消',
				type: 'warning'
			}).then(() => {
					location.href = '/login';
			})
		} else if (code === 500) {
			Message({
				message: msg,
				type: 'error'
			})
			return Promise.reject(new Error(msg))
		} else if (code !== 200) {
			Notification.error({
				title: msg
			})
			return Promise.reject('error')
		} else {
			return res.data
		}
	},
	error => {
		console.log('err' + error)
		let {
			message
		} = error;
		if (message == "Network Error") {
			message = "后端接口连接异常";
		} else if (message.includes("timeout")) {
			message = "系统接口请求超时";
		} else if (message.includes("Request failed with status code")) {
			message = "系统接口" + message.substr(message.length - 3) + "异常";
		}
		Message({
			message: message,
			type: 'error',
			duration: 5 * 1000
		})
		return Promise.reject(error)
	}
)

export default service

在src在新建api文件 api文件下新建index.js

import request from '../utils/request'

// 获取短信验证码
export function getCodeImg(query) {
	return request({
		url: 'student/sendCode',
		method: 'get',
		params: query
	})
}

// 登录
export function goLogin(query) {
	return request({
		url: 'student/logonUser',
		method: 'post',
		params: query
	})
}

main.js中引入

import * as api from './api/index'
Vue.prototype.$api = api

根目录下 新建vue.config.js

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

function resolve(dir) {
	return path.join(__dirname, dir)
}

const name = '官网' // 标题

const port = 80 // 端口

// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
module.exports = {
	// 部署生产环境和开发环境下的URL。
	// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
	// 例如 https://www.qqkj.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.qqkj.com/admin/,则设置 baseUrl 为 /admin/。
	publicPath: "/",
	// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
	outputDir: 'dist',
	// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
	assetsDir: 'static',
	// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
	productionSourceMap: false,
	// webpack-dev-server 相关配置
	devServer: {
		host: '0.0.0.0',
		port: port,
		open: true,
		proxy: {
			// 参考: https://cli.vuejs.org/config/#devserver-proxy
			"/api": {
				target: `http://127.0.0.1:8082`,
				changeOrigin: true,
				pathRewrite: {
					'^/api' : ''
				}
			}
		},
		disableHostCheck: true
	},
	configureWebpack: {
		name: name,
		resolve: {
			alias: {
				'@': resolve('src')
			}
		}
	}
}

基本的vue框架就完成了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希望……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值