1、搭建框架
再修改文件目录,各文件编写示例
用了ts,所有的形参都要定义类型
配置
用单引号,取消分号等,统一代码,eslint禁用,就不会报错了
2、登录界面
1、界面
2、表单验证
3、确认密码
4、验证密码
3、菜单
3-1、动态权限菜单
1、打印菜单组件,建立对应的路由组件(platform)
2、格式化动态菜单,因为比接口菜单多了路由映射成的组件
引入view中的组件,实现后面的匹配
打印所有组件
添加动态路由核心
界面显示动态菜单
pinia组件获取值与vuex有所不同
3-2、动态菜单图标组件映射
动态组件 <component :is=''/>实现
4、菜单管理
4-1、树形控件
利用el-tree组件
4-2、子菜单列表
界面
可以调子菜单接口
也可直接调用store里面的菜单列表
4-3、 添加菜单
添加完成后关闭事件,涉及子传父
4-4、刷新
5、角色管理
5-1、 对于数据格式不同的过滤操作
5-2、实现
5-3、 添加角色
点击弹框
界面,vue分离
引用
添加后关闭弹框,子组件触发,故涉及子传父
5-4、编辑角色(复用添加弹框)
定义弹框类型-编辑/添加
引用
引用添加弹框,框内赋对应值,编辑框涉及传参
父组件
子组件
但先点了编辑后,点添加,还需判断编辑还是添加,如果是添加需重置成''
5-5、角色权限管理
1、菜单权限
使用反馈组件中的抽屉组件el-drawer+el-tree
选中菜单节点打勾,坑点---需要选中节点是否与菜单数据均为同步/异步
具体实现,涉及父传子
权限自动根据节点勾上,点击一个换另一个,需要销毁组件,用v-if
设置角色的菜单权限
存在问题,设置权限后,菜单变多,出现重复,可以找后端联调,重复数据的问题出在哪里
2、按钮权限
1、自定义全局指令
即资源权限,使用自定义指令实现
接口
获取资源权限,登录时保存,同菜单列表一起,promise处理异步,async,await将异步变成同步写法
是否显示对应的编辑/删除框,利用自定义指令全局设置
具体实现
分离,自定义指令,放进direcitve文件夹,app实例中引用
使用
2、自定义插件
介绍
将上述自定义指令设置为自定义插件,提供全局功能的技术
引用,app实例中集成
6、业务分离
6-1、js--封装hooks
6-2、封装类型--ts
引用
7、组件通讯
父传子
子传父
组间双向数据绑定--父传子+子传父
案例
el-row三栏布局快速调
8、用户管理
界面
1、定义类型
2、定义hooks
8-2、过滤url地址
8-3、添加账户
界面
注册带头像上传
注册的密码需要加密,否则登录不上
添加后自动关闭+刷新
法一: 组间通讯,v-model绑定变量数据+watch侦听器
法二 : 子传父
刷新也可在添加成功关闭弹框后后再调一次角色列表
8-4、图片上传
实现上传预览,读图片文件
检查图片格式,但下述方法由于自动上传图片功能取消了,因此可以换个地方检验,添加账户前或者预览图片前,也可将上传前的操作返回false,阻止自动上传
9、项目难点问题
9-1、 刷新界面数据消失白屏
法一:修改系统启动处
法二:数据持久化存储
9-2、统一登录认证
全局导航守卫,没登录情况下不能访问的页面直接跳转到的登录页
引入
9-3、无感刷新token
status: 1401,无token,1403,token过期需重新登录
实现原理,类似酒店
前端具体设计
9-4、axios二次封装
10、echats图表
10-1 定时器轮询显示图表
倒计时轮询调接口更新图表,缺点:定时器的定时会导致大屏不能实时显示有延迟
优化,离开当前页后不再实时更新图表
10-2 webSockets
后面像前面方法的数据赋值,直接将数据单独设置变量
将分支推送到远程存储库时遇到错误: rejected Updates were rejected because the remote contains work that you do not have locally
在仓库目录下执行 git pull origin master --allow-unrelated-histories 之后就可以成功的pull,push了