zoukankan      html  css  js  c++  java
  • 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

    后台项目环境安装配置
    mysql
    
    create 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之后才可以访问页面

    // 清空token
    window.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 user
    git 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 rights
    git push -u origin rights
    
    权限管理业务分析

    通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制, 即每个用户分配一个特定的角色,角色包括不通的功能权限.

    获取渲染权限列表
    获取渲染角色列表
    提交权限功能代码
    git add .
    git commit -m "完成权限功能开发"
    git push
    git checkout master
    
    git merge rights
    git push
    

    分类管理

    数据统计功能

    创建新分支
    git checkout -b report
    git 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 id="main" style=" 600px;height:400px;"></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 id="main" style=" 750px;height:400px;"></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
    })
    
  • 相关阅读:
    C#------对SQLServer进行简单的增,删,改,查
    WinForm------点击Control弹出MessageBox
    WinForm------窗体初始化位置的显示
    WinForm------GridControl的部分属性介绍
    C#------编码规范
    vs------安装window net.framework 出现严重错误解决方法
    jsp------实现MD5加密
    jquery------捕获异常处理
    jquery------显示加载的js时出现中文乱码解决方法
    sublime3 常用功能总结
  • 原文地址:https://www.cnblogs.com/you-men/p/14033567.html
Copyright © 2011-2022 走看看