[人力资源管理平台vue项目]- -思路及功能点总结
目录
一、技术栈
- 项目主要技术栈: Vue + Vuex + Vue-Router + Vue-cli + Axios + Element-ui + ES2015+
- 环境:Node.js环境
- git版本控制: Gitee
- npm管理工具: 淘宝镜像
- 编辑器: Vscode+插件vetur+校验eslint
- css扩展语言: scss
- 集成模板: Vue-element-admin 官网地址 基础模板
- 主页面展示
二、主要功能
1.路由功能
(1) 静态路由
(2) 动态路由
(3) 路由导航守卫 主要的运用场景: 只有拥有某些权限之后才可以进入到某些页面中去
to:目标路由对象
from:即将离开的路由对象
next:路由跳转
next() 放行
next(false)中断路由
next('/')和next({path:'/'})指定到哪里去
例如 没有授权登录,地址栏输入对应的路由地址,也可以直接的跳转,这是我们就可以使用路由导航守卫来控制路由页面的跳转
router.beforeEach((to,from,next) => {
NProgress.start()
NProgress.done()
})
router.afterEach(() => {
NProgress.done()
})
2.权限功能
通过create创建axios实例
import axios from 'axios'
const service = axios create({
baseURL: ,
timeout:
})
export default service
(1) 请求拦截器
axios的请求拦截器 请求拦截器的运用场景 1) 处理token的统一注入问题 2) 处理token是否过期主动和被动处理
service.interceptors.request.use(
config => {
if(store.getters.token){
if(isTimeout()){
store.dispatch('user/logout')
router.push('/login')
return Promise.reject(new Error('token超时了'))
}
config.headers['Authorization'] = `Bearer ${store.getters.token}`
}
return config
},error => {
if (error.response && error.response.data && error.response.data.code === 10002) {
store.dispatch('user/logout')
router.push('/login')
} else {
Message.error(error.message)
}
return Promise.reject(error)
})
(2) 相应拦截器
运用场景? 处理返回的数据以及响应回来的错误
service.interceptors.response.use(response => {
},error => {
return Promise.reject(error)
})
3.其他功能
(1) 国际化(语言的改变)
安装国际化语言包i18n
npm i vue-i18n
import VueI18n from 'vue-i18n'
import elementEN from 'element-ui/lib/locale/lang/en'
import elementZH from 'element-ui/lib/locale/lang/zh-CN'
Vue.use(VueI18n)
export default new VueI18n({
locale: 获取en或者其他语言 || 'zh',
messages: {
en: {
...elementEN
},
zh: {
...elementZH
}
}
})
这里:我们同样只能修改element相关的语言,自定义的话可以采用类比方法进行修改
(2) 动态主题(更改背景颜色)
封装颜色选择组件 ThemePicker 代码地址
import ThemePicker from './ThemePicker'
Vue.component('ThemePicker', ThemePicker)
<!-- 放置全屏插件 -->
<theme-picker />
思路:此项目我们使用element组件库,使用此组件我们只会改变element本身的颜色,所以我们还需要改变自定义颜色 如何做呢?
1.既然是可变的,我们需要改变的颜色必然不能写死
2.我们需要一个变量,可以同时控制多个组件中的背景颜色 怎么可以实现呢?
3.一个中间人vuex可以很好地帮我们帮我们解决这个问题,并且在vuex的数据时可控的
4.因此我们就可以同是通过这个组件改变颜色,同时控制element的颜色和自定义的颜色
(3) 头像上传、浏览器的打印功能
对象存储使用文档地址
安装JavaScript SDK
npm i cos-js-sdk-v5 --save
思路:在这里,采用一个腾讯云的图片方案,就是利用腾讯云免费托管我们的图片,在自己的数据库中只保存一个地址。
创建完成后,我们可以获取自己的公钥和私钥,并且可以创建存储桶, 设置存储桶的权限为 公有读,私有写
1.如何上传到存储桶
var cos = new COS({
SecretId: ' ',
SecretKey: ' ',
});
cos.putObject({
Bucket: ' ',
Region: 'ap-beijing',
Key: params.file.name,
Body: params.file,
StorageClass: 'STANDARD'
}, function(err, data) {
console.log(err || data)
})
2.上传之前的校验
beforeUpload(file) {
const types = ['image/jpeg', 'image/gif', 'image/bmp', 'image/png']
if (!types.includes(file.type)) {
this.$message.error('上传图片只能是 JPG、GIF、BMP、PNG 格式!')
return false
}
const maxSize = 5 * 1024 * 1024
if (maxSize < file.size) {
this.$message.error('图片大小最大不能超过5M')
return false
}
return true
}
那么,我们该如何上传图片呢? (业务需求)
1.我们需要一个上传的组件 使用element的upload的组件 (详情见element官方文档)
2.选择符合格式和规则的图片
3.要上传到哪里呢? (腾讯云)
4.实现什么功能 (图片的预览,上传成功后可以返回图片地址,删除,添加)
注意点,因为我们要上传到腾讯云,所以element的upload组件的action方法的参数要设置为#,禁止默认的跳转
因此我们就需要一个方法来进行自定义跳转 :http-request="upload"
(4) excel导入导出
excel导入
导入所需要的excel组件
npm i xlsx
如何实现?
1.上传文件的组件
2.选择一个符的excel文件
3.调整传入的数据格式
excel导出
由于 Export2Excel不仅依赖js-xlsx还依赖file-saver和script-loader。
npm install xlsx file-saver -S
npm install script-loader -S -D
excel导出 路由懒加载(因为并不常用)
import('@/vendor/Export2Excel').then(excel => {
excel.export_json_to_excel({
header: tHeader,
data,
filename: 'excel-list',
autoWidth: true,
bookType: 'xlsx'
})
})
一个一转多维数组的方法
arrTrans(num, arr) {
const iconsArr = []
arr.forEach((item, index) => {
const page = Math.floor(index / num)
if (!iconsArr[page]) {
iconsArr[page] = []
}
iconsArr[page].push(item)
})
return iconsArr
}
}
(5) 全屏
1、安装全局插件
npm i screenfull --save-dev
import screenfull from 'screenfull'
<div @click="changeScreen" />
changeScreen() {
if (!ScreenFull.isEnabled) {
this.$message.warning('此时全屏组件不可用')
return
}
ScreenFull.toggle()
}
(6) Echarts的使用
echarts官网地址 需要注意的是,安装的版本可能比较新,也许不太契合所需!!!
(7) 二维码的生成 // 一个生成二维码的网站 [草料二维码](https://cli.im/)
- 安装生成二维码的插件
npm i qrcode
import QrCode from 'qrcode'
QrCode.toCanvas(dom, info)
三、其他功能
1.Vuex做了什么事?
- token的响应式保存,
- 用户登录请求操做
- 用户登出操做
- 获取用户资料
- 路由的操做
- tab多页签
2.将列表型的数据转化成树形数?
实现思路 递归路由
export function tranListToTreeData(list, rootValue) {
var arr = []
list.forEach(item => {
if (item.pid === rootValue) {
const children = tranListToTreeData(list, item.id)
if (children.length) {
item.children = children
}
arr.push(item)
}
})
return arr
}
3.如何封装公共组件?
通过插槽可以留坑位,这样我们就可以随意的我们指定的结构
如何封装组件 pagetools
<el-row type="flex" justify="space-between" align="middle">
<el-col>
<div v-if="showBefore" class="before">
<slot name="before" />
</div>
</el-col>
<el-col>
<el-row type="flex" justify="end">
<slot name="after" />
</el-row>
</el-col>
</el-row>
如何使用?
<page-tools :show-before="true">
<templete slot="before">
<span>共166条记录</span>
</templete>
<template slot="after">
<el-button>导入</el-button>
</template>
</page-tools>
4.自定义指令的使用?
示例:
el:绑定的元素
binding:一个对象,配置参数
export const imageerror = {
inserted(el,binding){},
componentUpdated(el, binding) {}
}
注册:
Vue.directive('指令名','指令对象')
使用:
<img v-imageerror="xxx" src='xxx' />
5.过滤器的使用?
封装: 格式化时间格式
Vue.filter('format', value => {
return dayjs(value).format('YYYY-MM-DD')
})
使用:
'需要过滤的对象' | '过滤器'
五、道阻且长,任重而道远!!!
|