Vite+Vue3+Element-plus+Axios+Router前端框架搭建 1
记录自己的学习路程,bu'qi1.打开VSCode2.terminal终端输入命令npm init @vitejs/appvite.config.js内容如下import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'constpath=require("path");//https://vitejs.dev/config/expo
记录自己的学习路程,每天再进步一点点
1.打开VSCode
2.terminal终端输入命令npm init @vitejs/app

vite.config.js内容如下
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require("path");
// https://vitejs.dev/config/
export default defineConfig({
alias: {
// 配置路径别名
'@': path.resolve(__dirname, 'src'),
'view': path.resolve(__dirname, 'src/view'),
'com': path.resolve(__dirname, 'src/components'),
'api': path.resolve(__dirname, 'src/api'),
'utils': path.resolve(__dirname, 'src/utils'),
},
plugins: [vue()],
// hostname: '0.0.0.0',
// port: 8090,
// 是否自动在浏览器打开
// open: true,
// 是否开启 https
https: false,
// 服务端渲染
ssr: false,
/**
* 在生产中服务时的基本公共路径。
* @default '/'
*/
base: './',
/**
* 与“根”相关的目录,构建输出将放在其中。如果目录存在,它将在构建之前被删除。
* @default 'dist'
*/
outDir: 'dist',
server: {
proxy: {
'/api': {
target: 'http://192.168.163.154:8088/',
changeOrigin: true,
ws: true,
pathRewrite: {
"^/api": ""
}
},
},
}
})
3.配置路由(下载router4版本)
npm install vue-router@4 -s

4.在src文件夹下面创建文件夹views/login,在login文件夹下面创建login.vue
5.编辑src/router/index.js,内容如下:

目录截图如下

6.在配置文件main.js中添加router的配置,如图

7.安装vuex使用命令npm install vuex@next
8.在src下创建store文件夹,添加index.js文件
import { createStore } from 'vuex'
export default createStore({
state() {
return {
count: 0,
};
},
mutations: {
increment(state) {
state.count++;
},
},
actions: {
increment(context) {
context.commit("increment");
},
},
});

9.安装axios和qs
npm install axios -S
npm install qs -S
10.在项目中创建axios.js如图,根据需要自己设定具体文件夹名称,这里设置为src/common/axios.js

11.编辑axios.js的文件内容
import axios from "axios"
// import store from '../store';
// import {router} from '../router/index';
// let vm = new Vue();
const instance = axios.create({
baseURL: 'http://192.168.163.154:8001/api',
timeout: 30000
})
instance.defaults.withCredentials = false;
//设置axios为form-data
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 请求拦截
instance.interceptors.request.use(config => {
// 自定义header,可添加项目token
let token = localStorage.getItem('token');
config.headers['Authorization'] = "Bearer "+token;
return config;
}, error => {
console.log(error);
return Promise.reject(error);
})
// 响应拦截
instance.interceptors.response.use(response => {
// const resCode = response.status;
// if (resCode === 200) {
// return Promise.resolve(response);
// } else {
// return Promise.reject(response);
// }
return response;
}, error => {
if (error && error.response) {
// const resCode = error.response.status;
// switch (resCode) {
// case 401:
// vm.$Message.error(error.response.data.message);
// // store.commit('logout', this);
// // store.commit('clearOpenedSubmenu');
// // console.log('token-0', store.state.app.token);
// router.replace({
// path: '/login'
// });
// break;
// case 403:
// vm.$Message.error('拒绝访问');
// break;
// case 404:
// vm.$Message.error('网络请求不存在');
// break;
// case 405:
// vm.$Message.error('请求方法未允许');
// break;
// case 408:
// vm.$Message.error('请求超时');
// break;
// case 500:
// vm.$Message.error('服务器连接错误');
// break;
// case 501:
// vm.$Message.error('网络未实现');
// break;
// case 502:
// vm.$Message.error('网络错误');
// break;
// case 503:
// vm.$Message.error('服务不可用');
// break;
// case 504:
// vm.$Message.error('网络超时');
// break;
// // 其他状态码错误提示
// default:
// vm.$Message.error(error.response.data.message);
// }
console.log(error);
}
return Promise.reject(error);
})
/*
*封装get方法
*@param{String} url [请求地址]
*@param{Object} params 请求参数
*/
export function Get(url, params) {
return new Promise((resolve, reject) => {
instance.get(url,{
params: params
}).then((res) => {
resolve(res.data);
}).catch((error) => {
console.log(error);
reject(error.data);
})
})
}
/**
*封装post方法
*@param{String} url 请求地址
*@param{Object} params 请求参数
*/
export function Post(url, data) {
return new Promise((resolve, reject) => {
instance.post(url, data).then((res) => {
resolve(res.data);
}).catch((error) => {
console.log(error);
reject(error.data);
})
})
}
/**
*封装put方法
*@param{String} url 请求地址
*@param{Object} params 请求参数
*/
export function Put(url, params) {
return new Promise((resolve, reject) => {
instance.put(url, params).then((res) => {
resolve(res.data);
}).catch((error) => {
console.log(error);
reject(error.data);
})
})
}
/**
*封装patch方法
*@param{String} url 请求地址
*@param{Object} params 请求参数
*/
export function Patch(url, params) {
return new Promise((resolve, reject) => {
instance.put(url, params).then((res) => {
resolve(res.data);
}).catch((error) => {
console.log(error);
reject(error.data);
})
})
}
/**
*封装delete方法
*@param{String} url [请求地址]
*@param{Object} params [请求参数]
*/
export function Delete(url, params) {
return new Promise((resolve, reject) => {
instance.delete(url, {
params: params
}).then((res) => {
resolve(res.data);
}).catch((error) => {
console.log(error);
reject(error.data);
})
})
}
12.main.js中全局引用axios

13.安装element-plus 命令 npm install element-plus --save
在main.js中引入,即可正常使用了

14.编写Login.vue
<template>
<div class="login-bac">
<el-row>
<img src="../../assets/logo.png" />
</el-row>
<el-row>
<div class="flag">Login</div>
</el-row>
<el-row class="accountBox">
<el-col :span="3"></el-col>
<el-col :span="18"><el-input v-model="account" placeholder="账号" clearable></el-input></el-col>
<el-col :span="3"></el-col>
</el-row>
<el-row class="passwordBox">
<el-col :span="3"></el-col>
<el-col :span="18">
<el-input
v-model="password"
placeholder="密码"
show-password></el-input></el-col>
<el-col :span="3"></el-col>
</el-row>
<el-row class="password">
<el-button type="primary" class="submit" @click="OnLogin">登录</el-button>
</el-row>
</div>
</template>
<script>
import {useRouter} from 'vue-router'
var router=useRouter();
export default {
data() {
return {
account: "",
password: ""
};
},
methods: {
OnLogin() {
var isLogin=false;
//这里添加登录服务器验证
if(this.account.trim().length>0&&this.password.trim().length>0)
{
isLogin=true;
}
if(isLogin){
//验证成功,使用replace,避免登录成功后通过浏览器历史记录返回登录页面
this.$router.replace({path:'/homepage'})
}else{
//验证失败
this.&router.push({
path: '/login'
})
}
}
},
};
</script>
<style>
.login-bac{
border-style:solid;
border-width:1px;
border-block-color: #444444;
width: 400px;
height: 500px;
/* 居中设置 */
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
/* 阴影设置 */
box-shadow: 2px 2px 8px #333333;
}
img {
margin-top: 50px;
width: 40px;
height: 40px;
margin-left: auto;
margin-right: auto;
}
.flag {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
font: 5em sans-serif;
margin: auto;
text-shadow: 2px 2px 6px #111111;
}
.accountBox {
display: block;
margin-top: 40px;
}
.passwordBox {
display: block;
margin-top: 20px;
}
.el-button.submit {
width: 150px;
margin-top:20px;
margin-left: auto;
margin-right:auto;
}
</style>
更多推荐
所有评论(0)