主要负责部门管理,药库药房,系统管理的研发,参与项目v1.0到v2.0的迭代let data = [{ id: 0, pId: null, name: '生物' },{ id: 1, pId: 0, name: '动物' },{ id: 2, pId: 0, name: '植物' },{ id: 3, pId: 0, name: '微生物' },{ id: 4, pId: 1, name: '哺乳动物' },{ id: 5, pId: 1, name: '卵生动物' },{ id: 6, pId: 2, name: '种子植物' },{ id: 7, pId: 2, name: '蕨类植物' },
]
export const arrayTwotree = (data, pid = '') => {// filter 过滤,查找子对象const tree = data.filter(item => item. === pid)tree.forEach(item => {//如果id与pid相同说明带有pid的对象是id这个对象的children 进行递归处理item.children = arrayTwotree(data, item.id)})return tree
}
_.debounce(getUsername(),1000) , - 手写防抖// 防抖的关键在于定时器的开始与清零function debounce(callback,delaytime){// 定义计时器let timer=nullreturn function(){//如果定时器不是null 则需要重新计时if (timer!=null) {clearTimeout(timer)}//如果定时器还是空 ,则开始倒计时timer=setTimeout(()=>{callback&&callback()}, delaytime)}}
_.throttle(getusername(),1000)// 节流固定的时间进行触发inputEl.oninput = throttle(inputChange, 2000)// 封装节流 :关键在于: 节流阀 以及时间间隔//1 如果不触发函数则节流阀关闭状态// 当你触发这个函数时先把节流阀关闭 然后在默认的时间间隔中打开function throttle(callback, delaytime) {let state=true //节流阀打开return function(){if (!state) { //当节流阀关闭,则直接退出该函数return; //callback不执行}else{//如果节流阀打开先把节流阀关闭//然后设置时间间隔后在自动打开state = false setTimeout(() => {callback && callback()state = true}, delaytime)}}
fileReader将文件转化为ArrayBuffer,在调用xlsx第三方包read()方法转成workbook,由于fileReader是异步函数,所以使用promise.all进行处理,读取多个文件导入详细解答
uploadExcel组件el-upload上传文件组件进行二次处理
fileReader方法把文件转换为二进制的数据(这里封装了一个Promise异步函数,只有resolve(成功)时才会进行文件的读取)read方法 并指定类型进行文件数据的读取sheet_to_json方法进行数据格式的转换(转成JSON数据格式)导出函数,
1. 调用表格中的@selection-change事件会拿到选中的数据,
2. 把拿到的选中的数据进行中英文的map切换
3. 调用xlsx中内置的方法,把数据转换为sheet格式
4. 新建一个表格使用xlsx里面内置的utils。book_new()方法创建
5. 利用book_append_sheet方法向表格插入数据
6. 调用writeFile方法把数据写入当前文件

token:access_token,一个负责刷新token:refresh_token,
解决方案一:
hasIsEdit,在按钮中调用hasIsEdit()函数,把传入的关键字和store的按钮权限进行对比,看看是否存在,如果存在就显示,不存在就隐藏解决方案二
①定义一个全局自定义指令:按钮级别的权限只需要在main.js里封装一个全局的指令或方法,这个方法只做一件事情,接收后端返回的标识,也就是该用户所拥有按钮级别权限的数组。
②拿到标识后,内部判断一下这个标识在不在该数组里面,不在就把该按钮的样式设置隐藏。
③在需要做按钮权限的地方调用:值为和后端约定的权限标识。
// 控制页面中按钮的级别
Vue.directive('allow', { // binding是个形参,接收调用自定义指令的标识进行判断inserted: function(el, binding) {// 1. 首先需要获取到vuex中用户按钮级别的权限信息console.log(binding, 'bindingbinding')const points = store.state.user.userInfo.roles.points// 2. 根据使用指令传过来的权限标识, 判断用户拥有按钮级别的权限if (!points.includes(binding.value)) {el.style.display = 'none'}}
})
//import_excel 是和后端约定的按钮权限标识

production:生产环境开发环境3. 公共资源 主要放置loader与resolve: {
4. extensions: ['.js', '.vue', '.json'],
5. alias: {
6. 'vue$': 'vue/dist/vue.esm.js',
7. '@': path.join(__dirname, '../src')
8. }
9. },
// css压缩
optimize-css-assets-webpack-plugin
//dist压缩包"zip-webpack-plugin": "^4.0.1"
//生产环境 copy静态资源"copy-webpack-plugin": "^11.0.0"
具体参考