注意:在css中使用@路径,前需要加~,例如background-image: url(“~@/assets/common/login_back.png”);
在响应拦截器中对请求返回的结果做处理。
请求失败,抛出错误。
注意: 有无token ,
有则判断跳转页面是否是登录,有token且要去登录页面直接跳转到主页。有token其他页面,则直接放行。
无token则,判断是否是白名单页面(比如登录,和404页面),是则直接放行,否则则调用dispatch发起登录请求。并且跳转到登录页。
当图片异常时,使用自定义指令,调用onerror函数,把src转为默认头像。
参数dom为指令绑定的元素节点。options是一个对象,里面包含着绑定元素的一系列信息,value为src的值。
指令绑定的变量即为图片产生差错是默认图片。
主动介入(前端设置的超时时间)
登录成功后,存储登录成功的时间。
在请求拦截器中,判断有token之后,判断token是否过期。设置一个超时时间,利用发起请求的时间减去token创建的时间/1000和设定的超时时间比较。
如果超时,则调用退出登录请求,删除token。回到登录页面。
token的被动处理(token后端写的超时)
判断超时的错误码是否和后端设计的一致,超时则重复之前的行为(退出登录,删除token等)。
1.
把getToken()写在请求拦截器之前,所以每次的获取的token都是上次的token,跟新登录获取的token不一样。所以获取用户信息报token超时错误。
解决方法:只需要把getToken()方法写在请求拦截器中即可。这样在发起请求的时候再获取token就不会出错了。
二级路由的path不设置,则默认该路由为二级路由的默认路由。
meta中的title表示左侧导航栏的标题。icon则为图标。
左侧菜单的图标实际上读取的是meta属性的icon,这个icon需要我们提前放置在src/icons/svg目录下
slot-scope =“{data}”这里data是之前tree中data属性的每一行数据。再用treeNode接收到每一行的数据,传给子组件。
利用isRoot属性,来按需选择操作的功能,如果是根的话,只有添加操作。
返回的数据没有区分父子。但可以通过pid可以区分。
这里使用递归算法,来处理数据。
:mony.sync = “money” 代表这:mony=“money"以及绑定了一个自定义事件为update.money,当触发此自定义事件,则改变父组件的money值。
通过dialog的visible来实现显示与隐藏。
当对话框消失即触发该回调函数。
1.model为数据获取之后放在哪里。
2.label-width要和label-position一起使用,position是左右对其。
3.rules是验证规则
4. prop是获取参数提交到表单的model的。
5.rules规则的属性要和model的属性名对应。
1.写在data的return之前,函数有三个参数,value,为输入的值,callback为验证之后执行的回调。
如果不符合校验规则,直接调用callback里面传个error错误。
通过判断表单数据是否有id,
因为点编辑的时候,数据直接赋值到form参数上,渲染到表单上。发请求获取到的详情信息有id,
而新增的是没有id的。
编辑和新增因为有id的区别,他们以下需要修改:
直接赋值为空对象即可。
@close对话框一消失即调用。要注意数据此时请求是否以及发送。不然数据清空,发请求会出现问题。
v-loading指令,发请求的时候设置为true,请求结束,设置为false。
之前把窗口设置为隐藏放在了valid函数的外面,这样其实是先执行@close这个函数的,因为同步任务比异步微任务先执行。
而当执行请求的时候,此时表单数据已经被@close函数给清空了。
所以发生了一系列的错误。
左边的图标使用icon,用一个大盒子包裹。
左侧的文字说明则是使用具名插槽。
这样在不同的地方使用该组件时,可以替换不同的内容。
主要使用表格。
注意:表格中利用作用域插槽,来获取每一行的数据。
调用接口,删除员工。成功提示消息,失败提示消息。
利用el-dialog搭配sync来控制弹层的显示和消失。
1.使用一个input框和tree组件共同组成
2.当input触发focus事件时,获取部门数据。
3.设置一个showtree来控制tree组件的显示与消失。
4.当点击树形控件的数据时,调用selectNode方法,获取到选中的数据的值,把值写入到要提交的数据中。
5.并把showtree改变为false。
https://github.com/PanJiaChen/vue-element-admin/blob/master/src/components/UploadExcel/index.vue
1.创建新动态路由,当点击excel导入跳转到excel导入页面。
2.类似功能vue-admin-template已经提供,只需修改即可。
3.导入功能需要xlsx插件
4.安装xlsx。
5.复制的upload组件不需要修改。直接使用即可(导入xlsx方式需要修改一下)
6只需要修改on-success的函数。
7.因为excel的表头是中文,所以需要一系列操作对数据进行操作。需要把键名通过以下方法进行转为英文。
8.并通过dayjs对时间进行格式化。
9.发起请求,添加员工。(中间还可做一些数据处理,比如手机号唯一等等)。
基于js-xlsx封装了Export2Excel。
Export2Excel.js
首先获取所有员工的数据。
再调用formatJson函数来获取导入数据的格式。
再把header,data数据,文件名,复杂表头,单元格合并选项写在excel的export_json_to_excel函数的对象中。
利用el-tabs标签页实现该效果。
点击查看按钮时,传用户id过来。到用户详情页。
在created钩子中,获取数据,回显到表单中。通过校验规则进行更新。
封装成一个组件。并在created时调用数据,回显数据。校验数据。点击更新按钮,判断是否符合校验规则,通过则更新数据,发送修改请求。重新调用数据请求,回显。
同理。
配置腾讯云Cos
1.利用el-upload(照片墙)上传来实现。
2.利用照片墙的http-request属性覆盖默认的上传行为,自定义上传。
利用element进度条。首先设置一个变量percent,并设置v-show。
当上传失败或者上传成功后,1秒后percent变回0;
回显:
判断数据的图片是是否是多张的,是多张的通过split以逗号为分隔成为函数,即通过ref来获取上传图片组件的filelist设置为此函数。
保存:
判断照片墙组件的filelist是否每一项的status都是成功。
如果都是成功,则把每一项的图片拿出来连接为一个以逗号分隔的字符串。
如果图片为空,直接把图片的src设置为defaultImg。
点击图片,弹框出现。
设置showAvr为true,此时dom还没有进行渲染。
使用$nextTick(()=>{})钩子,等到下一次dom渲染完毕时,才能使用ref获取到弹框。使用QrCode的toCanvas改变为二维码。
使用 vue-print-nb插件
用法:import Print from ‘vue-print-nb’
Vue.use(Print);
使用方法:v-print=“id值”
即点击打印按钮,把id为printMe的dom全部打印。
而这里我设置id为printMe的dom节点为整个页面。
即给角色分配权限,而给用户赋予不同的角色,来给予权限。
1.页面访问权限
2. 按钮访问权限
3. API访问权限
1.点击角色,弹出对话框
2.发起请求,获取所有角色。
3.通过id来获取用户所拥有的角色。
4.修改拥有的角色。点击确定发起更改角色的api,修改成功。
1.发起api请求,获取所有权限点信息,
2.拿到数据,使用formatTree把数据转换为树形数据。
3.点击不同的添加权限,把id传入,权限添加在此id权限的子权限中。
4.编辑,删除权限,通过id传入api进行编辑删除。
1.点击分配权限,首先获取所有的权限点。
2.通过传入的id获取到该角色已经拥有的权限。
3.通过element的tree型组件,渲染权限点。
4.点击确定,完成角色的权限点的分配。
1.当有token,跳转其他页面时,发起请求获取用户信息权限标识。
2.拿到权限标识,发起action,把所有的动态路由和获取的标识进行比对。动态产生动态路由。
3.在mutations中合并静态路由和动态路由。
4.使用router的addRoutes(array)进行动态路由的添加。
5.注意:这里必须把404路由加在动态路由的最后一个。如果加在静态路由里,当重新刷新时,原有的权限也会消失。
因为每次刷新,动态路由还没有添加进去,先执行了404.
6.这里有个非常容易出问题的位置,当我们判断用户是否已经添加路由的前后,不能都是用next(),
// 在添加路由之后应该使用 next(to.path), 否则会使刷新页面之后 权限消失,这属于一个vue-router的已知缺陷
注意:本来应该拥有权限的页面出现了404,这是因为404的匹配权限放在了静态路由,而动态路由在没有addRoutes之前,找不到对应的地址,就会显示404,所以我们需要将404放置到动态路由的最后
通过用户信息的points。用户信息的points其实就是权限点时设置的权限标识。
1.只需要判断哪些points没有,其对应的功能就禁用。反之,则可以操作。
1.对element的calendar进行二次封装
2.使用样式穿透对不需要的效果进行修改,比如下月。
3.使用两个select来进行选择年份和月份。 created钩子中,使用获取当前时间。令他们选中的是当前的年份和时间。
4.使用for循环对数据进行初始化。
5.利用slot-scope,element的calendar的参数。
6.对选中的日期添加样式。
7.对星期日和星期天的日期添加样式。使用日期的getDay()进行判断。
1.首先安装依赖
2.在组件中建一个节点div,打上ref。
3.按需引入-参照官网的文档
4.写一个函数,用于构建图标。并在mounted钩子函数中调用该函数。
5.设置option,在函数中进行初始化。可以参照文档进行书写。echarts官网。
1.使用vue-i18n实现