09 . Vue登录,注册组件及主页布局,用户管理,数据统计功能
开发模式
前后端分离
前端技术栈
/* Vue
Vue-Router
Element-UI
Axios
Echarts
*/
后端项目技术栈
/* Node.js
Express
Jwt
Mysql
Sequelize
*/
项目初始化
初始化步骤
/* 1.安装Vue脚手架
2.通过Vue脚手架创建项目
3.配置Vue路由
4.配置Element-UI组件库
5.配置axios库
6.初始化git远程仓库
7.将本地项目托管到Github或码云中
*/
创建项目请看我写的前面Vue脚手架创建使用
https://www.cnblogs.com/you-men/p/14015406.html
后台项目环境安装配置
mysqlcreate database mydb charset=utf8;
use mydb
source /root/mydb.sql
测试后台接口是否正常
登录概述
登录业务流程
/* 1. 在登录页输入用户名和密码
2. 调用后台接口进行验证
3. 通过验证之后,根据后台的响应状态跳转到项目主页
*/
登录业务技术点
/* 1. http是无状态的
2. 通过cookie在客户端记录状态
3. 通过session在服务器端记录状态
4. 通过token方式维持状态
*/
token原理分析
token登录实现
登录页面布局
通过Element-UI组件实现布局
/* el-form
el-form-item
el-input
el-button
字体图标
*/
每当我们开发一个新功能最好开一个新分支,开发完毕没问题再合并到Master分支
/* git checkout -b
git checkout -b login 创建login分支
git branch 查看当前所有分支
*/
路由导航守卫控制访问权限
如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面
// 为路由对象,添加beforeEach 导航守卫router.beforeEach((to,from,next) => {
// 如果用户访问的登录页,直接放行
if (to.path == '/login') return next()
// 从sessionStorage中获取保存的token值
const tokenStr = window.sessionStorage.getItem('token')
if(!tokenStr) return next('/login')
next()
})
退出功能
基于token的方式实现退出比较简单,只需要销毁本地的token即可,这样后续的请求就不会携带token, 必须重新登录生成一个新的token之后才可以访问页面
// 清空tokenwindow.sessionStorage.clear()
// 跳转到登录页
this.$router.push('/login')
提交登录功能
git提交
git add .git commit -m "add login Features"
git branch
* login
master
git branch
login
* master
git merge login
git push
主页布局
通过接口获取菜单数据
通过axios请求拦截器添加token,保证有获取数据的权限
// axios请求拦截axios.inteerceptors.request.use(config => {
// 为请求头对象,添加Token验证的Authorization字段
config.headers.Authorization = window.sessionStorage.getItem('token')
return config
})
提交用户代码
git checkout -b usergit branch
login
master
* user
git add .
git commit -m "完成用户列表功能的开发"
git push -u origin user
git checkout master
git merge user
git push
权限功能开发
创建新分支
git checkout -b rightsgit push -u origin rights
权限管理业务分析
通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制, 即每个用户分配一个特定的角色,角色包括不通的功能权限.
获取渲染权限列表
获取渲染角色列表
提交权限功能代码
git add .git commit -m "完成权限功能开发"
git push
git checkout master
git merge rights
git push
分类管理
数据统计功能
创建新分支
git checkout -b reportgit push -u origin report
配置路由报表组件
数据报表功能
简单使用echarts
<template> <div>
<!-- 面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>数据统计</el-breadcrumb-item>
<el-breadcrumb-item>数据报表</el-breadcrumb-item>
</el-breadcrumb>
<!-- 卡片视图区域 -->
<el-card>
<!-- 2.为Echarts准备一个具备大小(宽高)的Dom -->
<div ></div>
</el-card>
</div>
</template>
<script>
// 1. 导入echarts
import echarts from 'echarts'
export default {
mounted() {
// 3.只有执行到mounted,页面上的元素渲染完毕,可以初始化图表了
var myChart = echarts.init(document.getElementById('main'))
// 4. 准备数据和配置项
var option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data: ['销量']
},
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
}
// 5. 展示数据
myChart.setOption(option)
},
methods: {}
}
</script>
<style lang="less" scoped>
</style>
基于时间统计的折线图
<template> <div>
<!-- 面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>数据统计</el-breadcrumb-item>
<el-breadcrumb-item>数据报表</el-breadcrumb-item>
</el-breadcrumb>
<!-- 卡片视图区域 -->
<el-card>
<!-- 2.为Echarts准备一个具备大小(宽高)的Dom -->
<div ></div>
</el-card>
</div>
</template>
<script>
// 1. 导入echarts
import echarts from 'echarts'
import _ from 'lodash'
export default {
data() {
return {
// 需要合并的数据
options: {
title: {
text: '用户来源'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#E9EEF3'
}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [{
boundaryGap: false
}],
yAxis: [{
type: 'value'
}]
}
}
},
async mounted() {
// 3.只有执行到mounted,页面上的元素渲染完毕,可以初始化图表了
var myChart = echarts.init(document.getElementById('main'))
const {
data: res
} = await this.$http.get('reports/type/1')
if (res.meta.status !== 200) {
return this.$message.error('获取折线图数据失败!')
}
// 4. 准备数据和配置项
const result = _.merge(res.data,this.options)
// 5. 展示数据
myChart.setOption(result)
},
methods: {}
}
</script>
<style lang="less" scoped>
</style>
添加进度条
/* npm install --save nprogress
*/
基于拦截器实现进度条
import NProgress from 'nprogress'import 'nprogress/nprogress.css'
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
// 在request拦截器中展示进度条 NProgress.start()
axios.interceptors.request.use(config => {
// 为请求头对象,添加Token验证的Authorization字段
// 在最后必须return config
// console.log(config)
NProgress.start()
config.headers.Authorization = window.sessionStorage.getItem('token')
return config
})
// 在response 拦截器中隐藏进度条 NProgress.donne()
axios.interceptors.response.use(config =>{
NProgress.done()
return config
})
以上是 09 . Vue登录,注册组件及主页布局,用户管理,数据统计功能 的全部内容, 来源链接: utcz.com/z/378965.html