首页 > 其他分享 >若依框架---脚手架讲解

若依框架---脚手架讲解

时间:2023-03-25 13:04:06浏览次数:32  
标签:若依 配置文件 src -- js --- 脚手架 目录 路由


目录

├── .husky                      -- husky 勾子
|   ├── commit-msg                  -- git commit规范检查代码
|   ├── pre-commit                  -- git commit前检查代码
├── .vscode                     -- vscode配置目录
├── bin                         -- 可执行文件目录
|   ├── build.bat                   -- 打包工程 == npm run build
|   ├── package.bat                 -- 安装 npm 依赖包 == npm install
|   └── run-web.bat                 -- 开发模式上启动工程 == npm run serve
├── public                      -- 静态资源文件目录
├── src                         -- 源码目录
|   ├── api                         -- 接口文件目录
|   |    ├── system                     -- 系统配置接口目录
|   |    ├── login.js                   -- 登录接口
|   |    └── menu.js                    -- 获取动态菜单接口
|   ├── assets                      -- 资源目录
|   |    ├── 401_images                 -- 401页面文件图片目录
|   |    ├── 404_images                 -- 404页面文件图片目录
|   |    ├── icons                      -- svg图标目录
|   |    ├── images                     -- 图片目录
|   |    ├── logo                       -- 工程logo
|   |    └── styles                     -- 样式目录
|   ├── components                  -- 组件目录
|   ├── directive                   -- 指令目录
|   |    ├── dialog                     -- 模态框指令
|   |    ├── module                     -- 剪切板指令
|   |    ├── permission                 -- 权限指令
|   |    └── index.js                   -- 入口文件
|   ├── layout                      -- 布局组件目录
|   ├── mock                        -- 模拟接口数据目录
|   ├── plugins                     -- 插件目录
|   |    ├── auth.js                    -- 权限功能插件
|   |    ├── cache.js                   -- 本地存储功能插件
|   |    ├── download.js                -- 下载功能插件
|   |    ├── index.js                   -- 入口文件
|   |    ├── modal.js                   -- 模态框相关功能插件(提示框、信息框、确认框等等)
|   |    └── tab.js                     -- 页签功能插件(页签全部关闭,其它关闭,右侧关闭,左侧关闭等等)
|   ├── router                      -- 路由组件目录
|   ├── store                       -- 状态管理目录
|   ├── utils                       -- 常用工具类目录
|   ├── views                       -- 页面目录
|   ├── App.vue                     -- App.vue 文件
|   ├── main.js                     -- main.js 文件
|   ├── permission.js               -- 路由守卫配置文件
|   └── settings                    -- 工程右侧边栏配置文件
├── .browserslistrc             -- browserslist配置文件
├── .editorconfig               -- editorconfig配置文件
├── .env.development            -- 工程开发环境配置文件
├── .env.production             -- 工程生产环境配置文件
├── .eslintignore               -- eslint忽略配置文件
├── .eslintrc.js                -- eslint配置文件
├── .gitignore                  -- git配置文件
├── .npmnc                      -- npm配置文件
├── .prettierignore             -- prettier忽略文件
├── .prettierrc.js              -- prettier配置文件
├── babel.config.js             -- babel配置文件
├── commitlint.config.js        -- commit规范配置文件
├── jsconfig.json               -- jsconfig配置文件
├── package.json                -- package.json文件
├── README.md                   -- 本文件
└── vue.config.js               -- 工程自定义配置文件

下面我对上面每个文件的作用进行一下简单讲解。

  1. .husky
    husky是一个让git hooks更简单使用的工具库。
    这个是版本7.x之后的husky配置目录,里面放置你定义的git hooks。如上图所示,我们定义了2个钩子:commit-msg和pre-commit。
    commit-msg:检查git commit -m "我是被检查的信息"的信息是否符合规范;
    pre-commit:git commit提交之前执行的操作,比如可以执行npm run test、npm run lint,具体命令可自由配置。
    在这里我说两句它们的执行顺序。
    当我们执行 git commit -m "xxxx"时,husky进行检查,发现有2个钩子,因为我们执行的是commit,所以它会优先于commit执行pre-commit这个钩子,而这个钩子里,我们配置的是一个npm 命令:npm run lint-staged。这时会从package.json中找到对应的命令"lint-staged"执行。在这里会执行我们的代码风格检查。
    当上述完成后,发现commit-msg这个钩子,然后执行这个它。它会判断我们的"xxxx"是否符合我们格式要求,符合之后才会提交。
  2. .vscode
    这个是vs code编辑器的配置目录,在这里我们有2个文件:extensions.json和settings.json。
    extensions.json: 配置了编辑器推荐的扩展插件与不推荐的扩展插件;
    settings.json:对编辑器进行配置,我们在这里配置了统一的注释模板。
  3. bin
    一个可执行命令的目录,这里有3个bat批处理文件,对一些npm命令进行简单封装。
    build.bat: 等价于npm run build,完成项目打包;
    package.bat: 等价于npm install --registry=registry.npm.taobao.org 使用淘宝镜像完成安装依赖;
    run-web.bat: 等价于npm run serve,启动开发服务器。
  4. public
    vue-cli命令行工具生成的静态资源目录,该目录的静态资源不会被webpack打包。
  5. src
    源码目录,下面会详细介绍。
  6. .browserslistrc
    为不同的前端工具提供一份共享的目标浏览器的配置。比如Babel, Autoprefixer等,发现该配置不包括IE浏览器,那么它们在生成代码时就可以忽略IE,只为指定的浏览添加腻子脚本。
  7. .editorconfig
    统一编辑器的一些配置,比如字符集、缩进风格等。vscode需要安装指定的插件。
  8. .env.development
    开发环境下配置文件,即我们npm run serve启动开发服务器时,一些变量的配置都是在这里完成的。比如请求的统一前缀等等。
  9. .env.production
    生成环境配置文件,与上述.env.development一样,当我们执行npm run build时,这里的配置将生效。
  10. .eslintignore
    eslint忽略文件,如果不想让eslint对某些文件或目录生效,可以在这里配置。
  11. .eslintrc.js
    eslint配置文件。eslint是一个前端js代码检测工具。
  12. .gitignore
    git忽略文件。
  13. .npmrc
    npm配置文件,可以配置私服地址、代理服务器地址等等。
  14. .prettierignore
    prettier忽略文件。
  15. .prettierrc.js
    prettier配置文件。prettier是一个前端代码格式化工具。prettier只专注于格式,比如函数名称前后是否有空格、单引号还是双引号、要不要结尾分号等,它不会改变源码;而eslint是源码检查,比如==应改为===、const代替var等等,它可能会改变你的源码。
  16. babel.config.js
    babel配置文件。babel是一个js编译器,可以将浏览器不支持的高级js语法转换成其支持的低版本js代码。
  17. commitlint.config.js
    commitlint配置文件。就是检查git commit信息是否符合规范的工具的配置文件。
  18. jsconfig.json
    jsconfig.json由tsconfig.json衍生而来,表明该目录是js项目的根目录,可以指定js语言服务提供的功能选项。如果有,可以优化vscode的编码体验,例如智能提示等,没有也不会影响代码质量。
  19. package.json
    node项目包管理文件。
  20. README.md
    说明文档。
  21. vue.config.js
    vue-cli生成的脚手架工程的自定义配置文件。在这里可以配置反向代理、webpack插件、生成打包的配置选项等等。

下面说说src

  1. src/api
    接口目录,项目页面调用的接口都统一在这里配置,只有少数接口是在页面中配置。比如上传文件组件,它需要配置一个后台接口地址,除了这种特殊情况,其它一律在这里配置,并尽量保障目录结构与页面目录结构一致,以方便快速查找。
  2. src/assets
    静态资源目录,在这里可以放一些图片、svg、样式文件。考虑到svg的方便操作、可压缩伸缩等优势,以及项目已经对svg封装了通用组件,方便引用,请优先使用它。
  3. src/components
    封装的通用组件,请熟悉它、熟悉它、熟悉它。一是尽量重用,提高代码利用率;二是防止组件碎片化。
  4. src/directive
    自定义指令,是对vue内置指令的补充,可完成一些比较实现的操作,请熟悉其用法。
  5. src/layout
    布局组件,负责整个项目的布局,主要在路由配置中使用,请小心修改。
  6. src/mock
    mock目录,主要在无后台接口的情况下生成模拟数据。
  7. src/plugins
    插件目录,主要是对element-ui一些提示组件的封装,方便页面引用。
  8. src/router
    路由配置目录。在路由必须属性的基础上添加了一些自定义属性,方便生成菜单栏时使用。具体可以参考文件中相关注释。
  9. src/store
    vuex配置目录。主要是一些全局配置和当前登录用户的配置信息。
  10. src/utils
    工具类。index.js与ruoyi.js封装了一些无业务的工具方法,应着重掌握;其它工具类偏相于某一方面需要了解。
  11. src/views
    页面目录。请尽量做到地址栏路由路径、页面目录结构、接口目录结构三者统一,方便快速查找。比如地址栏为xxx/system/users/1,那页面与接口目录结构也尽量为system/users,这样可避免去资源配置中查看某个路由对应的文件地址,提高效率。
  12. src/App.vue
    vue 根组件。
  13. src/main.js
    项目初始化,即入口文件。
  14. src/permission.js
    权限文件,主要利用路由守卫功能实现权限管理。
  15. src/settings.js
    项目布局配置文件,其值会作为默认值在vuex中初始化。

这里简单说说登录及权限流程。

  1. 当我们打开一个地址时,因为监测到地址栏变化了,即路由发生了变化,路由守卫功能开始执行。对应的代码为:src/permission.js。在这里我们发现它调用getToken()获取token。如果获取到了,则进入我们地址栏指定的页面;如果没有获取到,则进入登录页面,路由地址为"/login"。
  2. 登录页面为src/views/login.vue。这里需要注意的是,登录时没有调用相关的接口,而是调用了某个vuex的action。登录页面我们通过this.$store.dispatch('Login',xxx),调用了名为"Login"的Action。
  3. 现在我们进入src/store/modules/user.js,然后找到Login。这个方法调用了我们的后台接口,当请求成功后,它会保存token,过期时间,然后resolve(),即把控制权又交给我们第2步中调用它的方法。
  4. 当通过resolve()再次进入后,我们执行成功回调,这里只有一个功能,进入首页,路由为"/"。
  5. 通过查询路由文件src/router/index.js,我们知道"/"对应的文件为src/views/index.vue。当我们进入这个地址对应的页面时,路由又发生了变化,即由"/login"变成了"/"。这时,又被路由守卫拦截了,因为我们已经在第3步保存了token,这次我们进入有token的分支。这里又分了2个分支:如果有权限,直接进入页面;如果没有权限,则调用action。我们是第一次进入,没有角色权限,继续调用store.dispatch('GetInfo')。
  6. 通过调用名为"GetInfo"的action,我们又进入了文件src/store/modules/user.js。然后找到GetInfo方法,它调用了后台接口,请求用户信息,成功之后,我们保存了用户头像、角色、权限、名称等等,然后通过resolve(res)把执行权限交还给调用者。
  7. resolve(res)之后,我们又回到了src/permission.js文件,进入GetInfo的成功回调,在这里我们发现它又调用了一个action:store.dispatch('GenerateRoutes')。
  8. 通过调用名为"GenerateRoutes"的action,我们进入文件src/store/modules/permission.js。然后找到GenerateRoutes方法,它调用了后台接口,返回请求路由信息,成功之后,我们保存了当前登录用户能获取到的所有路由数据,我们保存这些路由数据,把它转换一下数据格式,方便我们的菜单组件渲染出它们。最后我们通过resolve(rewriteRoutes)把执行权限交还给调用者。
  9. resolve(rewriteRoutes)之后,我们又回到src/permission.js文件,进入GenerateRoutes的成功回调,在这里我们添加动态路由,然后通过next()进入我们的页面。至此,我们终于通过登录进入首页了。
  10. 当我们再进入其它时,因为我们已经有了token,有了角色信息,有了路由信息,我们就通过next()直接进入我们想要的页面了。

以上就是一个完整的登录流程。

下面说说如何配置路由,权限

通过跟踪上面第6步,我们知道,权限信息被保存在store/user模块下。为了验证,我们可以打开开发者工具,切换到Vue标签,找到Vuex进行查看。

若依框架---脚手架讲解_若依框架

从图中我看到,当前登录用户为admin;它的角色是一个数组,有一个admin角色;它的权限也是一个数组,权限是"::*"。

 1. 添加目录时,我们要打开“系统管理/菜单管理”,选择新增

若依框架---脚手架讲解_配置文件_02

上级菜单:按需要选择即可,如果自己是顶级就选择为“主类目”;

菜单类型:若依的要求是“目录”嵌套“菜单”;“菜单”包含“按钮”;

菜单图标:略;

菜单名称:略;

显示排序:略;

是否外链:是,这将不会再包含子内容,当点击时,将打开它指定的外部地址;

路由地址:如果外链为是,则地址需为http(s)开头,即为外部地址;反之,则为项目内部路由地址。注:项目内部地址不需求以“/”开头。

显示菜单:控制菜单在左侧菜单栏的显示与隐藏;

菜单状态:控制菜单的状态。

2. 添加菜单

若依框架---脚手架讲解_javascript_03

上级菜单:正常的选择时选择目录,如果你选择非目录时,会造成显示问题;

菜单类型:略;

菜单图标:略;

菜单名称:略;

显示排序:略;

是否外链:同上;

路由地址:同上;注意:这里地址不需要写上父级的名称,比如你想把路由定义为“/system/users”,因为父级已经指定为“system”了,所以这里只需要为“users”即可。若依会根据它所处的路径把它的父级自动加上。所以你想在一个目录下配置一个/foo是不成功的。

组件地址:views下的文件地址,比如说system/user/index

权限字符:就是给这个菜单定义一个权限名称,不能与其它重名;

路由参数:传递一些参数,一般不需要;

是否缓存:是,在标签打开中被缓存,当然该组件的名称也要正确;

是示状态:同上;

菜单状态:同上。

3. 添加按钮

若依框架---脚手架讲解_若依框架_04

上级菜单:同上,只能指定为菜单;

菜单类型:略;

菜单名称:略;

显示排序:略;

权限字符:给这个按钮定义一个名称,方便根据权限显示与隐藏它,名称唯一。

4. 最后我们看一下最终生成的图片

若依框架---脚手架讲解_前端_05

这样就完成了一个典型的目录、菜单、按钮添加。

如果我们查看若依的页面,会发现它的用户列表页面是一个独立的路由,而新增和修改只是依附与列表页面上的2个按钮显示出的弹框。那我们可以把新增也写成一个独立的路由吗?

答案是可以,但会造成路由配置冗长问题。

用户管理,也就是用户列表页面,现在是一个独立的路由,对应的组件为"system/user/index";

如果我们的新增也为一个独立路由,并且组件为"system/user/user-add"。

那我们这个配置在哪里呢?

能配置在用户管理下吗?

答案是不可以,因为用户管理是菜单,菜单只能包含按钮,如果包含菜单可能显示不出来。

那我们只能把这个配置的与“用户管理”平级,如果每个菜单都这样配置,这个配置列表将会特别长,并且也不利于我们给某个角色分配权限时选择相应的菜单权限,因为我可能只分配了新增与修改权限而遗忘了列表权限,但我无法进入列表页面,新增与修改也就没有意义了。

解决的办法只能是修改若依的源码,此外按下不表。

5. 按钮权限的使用

若依框架---脚手架讲解_前端_06

'system:user:add'是我们给新增按钮起的权限名称,也可以从第4步的截图中看出。

在这里v-hasPermi是我们自定义的一个指令,它的src/directive/permission/hasPermi.js源码如下:

import store from '@/store';

export default {
  inserted(el, binding, vnode) {
    const { value } = binding;
    const allPermission = '*:*:*';
    const permissions = store.getters && store.getters.permissions;

    if (value && value instanceof Array && value.length > 0) {
      const permissionFlag = value;

      const hasPermissions = permissions.some((permission) => {
        return allPermission === permission || permissionFlag.includes(permission);
      });

      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else {
      throw new Error('请设置操作权限标签值');
    }
  },
};

如果我们有它指定的权限,或者我们的权限为'::*',则它会在页面显示;反之,它会被从页面中删除。这样就做到了按钮级权限分配。

菜单配置,权限按钮的使用就先介绍到这里,其它后面再补。

标签:若依,配置文件,src,--,js,---,脚手架,目录,路由
From: https://blog.51cto.com/u_15949848/6149302

相关文章

  • RT-Thread BSP qemu-virt64-aarch64 挂载 ext4文件系统
    前言经常简单的配置,在RT-ThreadBSPqemu-virt64-aarch64上可以支持fat文件系统,但是如何支持ext4文件系统呢?经过验证,也是配置使能ext4就可以支持ext4软件包当前RT......
  • Java开发 - ELK初体验
    前言前面我们讲过消息队列,曾提到消息队列也具有保存消息日志的能力,今天要说的EL看也具备这个能力,不过还是要区分一下功能的。消息队列的日志主要指的是Redis的AOF,实际上只是......
  • DINO-DETR论文学习记录
    摘要我们介绍了DINO(带有改进的去噪器box的DETR),一种最先进的端到端对象检测器。DINO通过使用对比方式进行去噪训练、混合查询选择方法进行锚点初始化以及用于框预测的ookfo......
  • RT-Thread BSP qemu-virt64-aarch64 文件系统
    前言前面大体上搭建了RT-ThreadBSPqemu-virt64-aarch64的交叉编译环境,运行后发现,文件系统没有挂载上,感觉是没有mkfs。通过RT-Thread官方的文档,找到了解决方法创建独立......
  • Java - 配置中心初体验
    目录前言配置中心介绍什么是配置中心Nacos配置中心数据结构命名空间分组服务配置中心添加配置读取配置本地添加依赖本地添加配置测试结语前言前文讲了ELK,ELK说简单也简单,说......
  • [FastAPI-22]响应模型-response_model
    importtypingfromfastapiimportFastAPI,Responsefromfastapi.responsesimportJSONResponsefrompydanticimportBaseModelapp=FastAPI()'''响应模型s......
  • 关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)
    关于aws-s3-bucket-静态网站托管相关的查询,这里笔者主要整理一下基于AWSSDKforPython(Boto3)方式,相关的判断和逻辑1、首先是判断s3-bucket有没有开启静态网站托管,即页......
  • go gin web应用-通过中间件形式实现通用的参数检验
    都知道gin在web开发方面应用广泛,但在参数校验上,之前写一堆POST接口的时候,每个接口的业务代码里都要去实现validate校验逻辑,感觉代码复用糟糕。为解决这问题,想到通过......
  • MFC-CStringArray
            ......
  • 因果推断dowhy之-ihdp数据集上的案例学习
    0x01.案例背景IHDP(InfantHealthandDevelopmentProgram)就是一个半合成的典型数据集,用于研究“专家是否家访”对“婴儿日后认知测验得分”之间的关系。原数据集是基......