# 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中 ![image](D:\Program Files\project\adminSystem\frontEnd\vueadmin\README.assets\image.png) ### 2.Login页面以及js > Login页面 ```vue ``` > 共享数据中存储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 布局容器 ![image-20210815085752904](D:\Program Files\project\adminSystem\frontEnd\vueadmin\README.assets\image-20210815085752904.png) 其中我们将Aside侧边栏和头部做成普通组件,而Main使用路由组件。 Home.vue ```vue ``` 侧边栏sideMenu.vue ```vue ``` 路由组件Main.vue ```vue ``` ## 四、动态菜单栏开发 菜单栏由于权限的问题展现菜单栏也是不同的,前端通过接口获取信息,遍历展现。