# vueAdminfrontEnd
**Repository Path**: er-jiu/vue-adminfront-End
## Basic Information
- **Project Name**: vueAdminfrontEnd
- **Description**: vueAdmin首次练习前后端分离项目
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-08-11
- **Last Updated**: 2022-02-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 前端
## 一、环境准备
前端使用Vue+ElementUI进行编写
### 1.Vue环境安装,新建项目
1. node可以提供安装Vue的工具,安装node:[Node.js (nodejs.org)](https://nodejs.org/zh-cn/)
2. 使用node安装Vue
```js
# 安装淘宝npm
npm install -g cnpm --registry=https://registry.npm.taobao.org
# vue-cli 安装依赖包
cnpm install --g vue-cli
```
3. 新建项目
```js
#可以使用vue的可视化界面进行项目的创建
vue ui
#也可以使用创建命令进行创建,之后的插件可以用npm命令进行安装
vue create 项目名称
```
### 2.element-UI组件库安装
1. 安装插件
```js
npm i element-ui
```
2. 配置
```js
//ElementUI,写在main.js中
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
```
### 3.安装axios、qs、mockjs
- **axios**:一个基于 promise 的 HTTP 库,类ajax
- **qs**:查询参数序列化和解析库
- **mockjs**:为我们生成随机数据的工具库
1. 安装插件
```js
#axios安装
npm i axios
#qs安装
npm i qs
#mock安装
npm i mockjs
```
2. 配置
```js
#axios配置,配置好了前后拦截的axios,写在新的axios.js中,并配置在main.js里面
import axios from 'axios'
import router from './router'
import Element from 'element-ui';
// axios.defaults.baseURL = 'http://localhost:8081'
const request = axios.create({
timeout: 5000,
headers:{
'Content-Type':"application/json; charset=utf-8"
}
})
request.interceptors.request.use(config=>{
config.headers['Authorization'] = localStorage.getItem("token")
return config
})
request.interceptors.response.use(
//接口能响应的处理
response=>{
console.log("response ->"+response)
let res = response.data
if(res.code === 200){
return response;
}else{
Element.Message.error(!res.msg?'系统异常':res.msg,{duration:3000})
return Promise.reject(res.msg)
}
},
//接口不能响应的时候进行的处理
error=>{
console.log(error)
let res = error.response
if(res.data){
error.Message = res.data.msg
}
if(res.status === 401){
router.push('/login')
}
Element.Message.error(error.Message,{duration:3000})
return Promise.reject(error)
}
)
export default request
//main.js中的axios
import axios from './axios'
Vue.prototype.$axios = axios
#qs配置
npm i qs
#mock配置
// 引入mockjs
const Mock = require('mockjs')
const Random = Mock.Random
//以下为假数据
let Result = {
code:200,
msg:'操作成功',
data:null
}
Mock.mock('/login','post',()=>{
Result.code=400
Result.msg="验证码错误"
return Result
})
```
### 4.router路由配置
配置为:
```js
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
```
## 二、登录界面开发
### 1.登录界面交互过程
1. 浏览器打开页面,发送axios请求给后端,也就是异步获取验证码请求。
2. 后端通过接口收到请求,由于是前后端分离项目,所以不可以使用session进行交互,所以禁用session。我们需要使用redis存储验证码value和随机码key,来解决多个用验证中的验证码归属问题。于是后端生成随机码、验证码、验证图片,将随机码和验证图片发送给前端。其中验证图片是以Base64字符发送给前端的
3. 前端收到验证图片和随机码,然后将填写好的from表单数据和随机码,发送给后端
4. 后端接收到前端的验证码、随机码和表单数据。对验证码进行验证以及匹配账号密码,正确则返回身份权限
5. 前端收到身份权限,将身份权限存储在localStorange中

### 2.Login页面以及js
> Login页面
```vue
欢迎来到VueAdmin管理系统
微信号:三层架构
构建、改造、展现
立即创建
重置
```
> 共享数据中存储token
```js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
token:''
},
mutations: {
SET_TOKEN(state,token){
state.token = token
localStorage.setItem("token",token)
}
},
actions: {
},
modules: {
}
})
```
### 3.前端拦截器的配置
如环境准备中的axios安装配置
## 三、后台管理系统界面开发
首页界面,我们使用elementUI进行开发。使用最传统的界面Container 布局容器

其中我们将Aside侧边栏和头部做成普通组件,而Main使用路由组件。
Home.vue
```vue
VueAdmin后台管理系统
```
侧边栏sideMenu.vue
```vue
```
路由组件Main.vue
```vue
主页
```
## 四、动态菜单栏开发
菜单栏由于权限的问题展现菜单栏也是不同的,前端通过接口获取信息,遍历展现。