Skip to content

02_项目架构解决方案

项目配置:

环境变量处理方案:

生产环境(正式运行环境) 和 开发环境(测试环境) 的环境变量配置:

接口模块封装方案:请求拦截器和响应拦截器

Axios 请求拦截器:

Axios 响应拦截器:

接口请求动态封装方案:

src/api 文件夹内写新建相关后端模块接口文件,封装相关接口:

数据 mock 方案:

如何 mock 数据longfan的博客-CSDN 博客_如何 mock 数据

Mock.js:http://mockjs.com/


用户鉴权:

Token 处理方案:

登录鉴权方案:

主动登出方案:

被动登出方案:


用户的系统权限:

1.判断权限动态生成路由:

权限设定:

json
meta: { title: "路由标题", icon: "edit", roles: ['admin1', 'admin2'] }

配合动态路由生成权限的路由:

1.从 router 里面读取 asyncRoutes 和 constantRoutes 的路由

2.登录后获取角色权限 roles

3.roles 是否包含 admin 权限:roles.includes('admin')

4.包含 admin 权限,将过滤后的 asyncRoutes 存到 vuex 中

5.不包含包含 admin 权限,遍历 routes 是否有访问权限,是,再遍历 children,过滤 children 更新 children,更新路由存入 res,将过滤后的 asyncRoutes 存到 vuex 中

6.asyncRoutes 和 constantRoutes 的路由合并:constantRoutes.concat(routes)

功能(按钮)权限处理方案:

v-premission 指令:v-premission=“['admin','admin2']” 指令定义:

v-premission指令.jpg

RBAC 权限分控系统:


导航:

根据动态路由表生成菜单:

permission 登录之后获取 token 后,根据权限生成的路由动态遍历出菜单

利用递归菜单组件组件(菜单组件自己调用自己)来完成多层菜单和菜单子选项 children 的遍历,显示出全部菜单

动态路由生成面包屑导航方案:

Breadcrumb

把路由和面包屑进行映射:router.matched属性:路由匹配过程的信息

js
// 根据路由生成面包屑
getBreadcrumb() {
  let matched = this.router.matched.filter(item => item.meta && item.meta.title)
  const first = matched[0]
  // 不是首页,便链接路由
  if(!this.isDashboard(first)) {
    matched = [{path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
  }
  // 级别筛选
  this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
}

测试:


其他开发中的解决方案:

图标 icon 方案:

  1. icon 图片

    1. 啊啊啊
  2. 图标库里打包成图标字体

    1. 对对对
  3. 纯 css 写的 icon

    1. 哈哈哈
  4. svg 图标:

    1. 嗯嗯嗯

联动处理:

动画处理:

国际化 in18 解决方案:

动态主题处理方案:

全屏处理方案:

页面检索处理方案:

TagsView 处理方案:

功能引导处理方案:

多组件:

基于文件选择和拖拽的 Excel 导入方案:

选择:

拖拽:

Excel 数据导出方案:

动态表格处理方案:

拖拽表格处理方案:

辅助库选择标准:

Markdown 编辑器方案:

富文本编辑器方案:

告警:

打包优化处理方案:

服务器、域名购买与备案标准:

前端项目发布部署方案:

Released under the MIT License.