当前位置:   article > 正文

bladex框架中双路由模块分析理解_this.$router.$avuerouter.formatroutes

this.$router.$avuerouter.formatroutes

1.路由

框架中的路由分两种,一种是页面中菜单的路由(后端路由),一种是不在页面菜单中的路由(前端路由)。

在页面菜单中的路由是指图中红框中的菜单中的路由

不在页面菜单中的路由为404、登录页、首页等不出现在菜单中的页面

1.添加/修改前端路由的操作

前端路由配置表路径:src\router\page\index.js(包含404、登录页、锁屏页等基础页面)

src\router\views\index.js(包含首页、个人信息等页面)

开发中需要添加前端路由时可以分类放在两个路由配置表中

2.添加/修改后端路由的操作

当需要添加/修改菜单里的页面时,直接在侧边栏的菜单管理里面添加/修改,如图

注:修改完成提示成功信息后,菜单栏中就会出现对应的菜单项,但是直接打开会跳到404,这个时候需要等待1-2分钟再重新进入对应页面就好了,

3.页面从后端获取菜单路由配置表

登录成功后进入如下页面

 页面结构:

  1. <template>
  2. <div class="avue-contail"
  3. :class="{'avue--collapse':isCollapse}">
  4. <div class="avue-header">
  5. <!-- 顶部导航栏 -->
  6. <top />
  7. </div>
  8. <div class="avue-layout">
  9. <div class="avue-left">
  10. <!-- 左侧导航栏 -->
  11. <sidebar />
  12. </div>
  13. <div class="avue-main">
  14. <!-- 顶部标签卡 -->
  15. <tags />
  16. <!-- 主体视图层 -->
  17. <el-scrollbar style="height:100%">
  18. <keep-alive>
  19. <router-view class="avue-view"
  20. v-if="$route.meta.keepAlive" />
  21. </keep-alive>
  22. <router-view class="avue-view"
  23. v-if="!$route.meta.keepAlive" />
  24. </el-scrollbar>
  25. </div>
  26. </div>
  27. <!-- <el-footer class="avue-footer">
  28. <img src="/svg/logo.svg"
  29. alt=""
  30. class="logo">
  31. <p class="copyright">© 2018 Avue designed by smallwei</p>
  32. </el-footer> -->
  33. <div class="avue-shade"
  34. @click="showCollapse"></div>
  35. </div>
  36. </template>

位置:src\page\index\index.vue

如果项目不需要顶栏、左侧导航栏等可以在对应标签上添加style="display:none"

在该vue文件中通过openMenu方法调取菜单路由,并且提供了一个点击顶部菜单后默认打开第一个菜单的方法,默认为注释状态,需要可以打开

  1. //打开菜单
  2. openMenu(item = {}) {
  3. this.$store.dispatch("GetMenu", item.id).then((data) => {
  4. if (data.length !== 0) {
  5. this.$router.$avueRouter.formatRoutes(data, true);
  6. }
  7. //当点击顶部菜单后默认打开第一个菜单
  8. /*if (!this.validatenull(item)) {
  9. let itemActive = {},
  10. childItemActive = 0;
  11. if (item.path) {
  12. itemActive = item;
  13. } else {
  14. if (this.menu[childItemActive].length === 0) {
  15. itemActive = this.menu[childItemActive];
  16. } else {
  17. itemActive = this.menu[childItemActive].children[childItemActive];
  18. }
  19. }
  20. this.$store.commit('SET_MENU_ID', item);
  21. this.$router.push({
  22. path: this.$router.$avueRouter.getPath({
  23. name: (itemActive.label || itemActive.name),
  24. src: itemActive.path
  25. }, itemActive.meta)
  26. });
  27. }*/
  28. });
  29. },

在openMenu方法中调用了中GetMenu方法 位置:src\store\modules\user.js

GetMenu:

  1. //获取系统菜单
  2. GetMenu({commit, dispatch}, parentId) {
  3. return new Promise(resolve => {
  4. getMenu(parentId).then((res) => {
  5. const data = res.data.data
  6. let menu = deepClone(data);
  7. menu.forEach(ele => {
  8. addPath(ele, true);
  9. })
  10. commit('SET_MENU', menu);
  11. commit('SET_MENU_ALL', menu);
  12. dispatch('GetButtons');
  13. resolve(menu)
  14. })
  15. })
  16. },

 其中getMenu在src\api\user.js

  1. export const getMenu = () => request({
  2. url: '/api/blade-system/menu/routes',
  3. method: 'get'
  4. });

由此获取菜单路由并存储在vuex中

注意:在添菜单管理配置菜单的路由时,如果该页面在菜单的第一层,不是包含子页面的菜单项,框架会自动在该页面的路径后面添加/index(通过GetMenu方法中的addPath方法添加的)。就是说如果页面在菜单第一层,则页面vue文件路径应为/pages/test/index.vue 在菜单管理中配置路由时,路径填写/pages/test 就好了。addPath方法:

  1. function addPath(ele, first) {
  2. const menu = website.menu;
  3. const propsConfig = menu.props;
  4. const propsDefault = {
  5. label: propsConfig.label || 'name',
  6. path: propsConfig.path || 'path',
  7. icon: propsConfig.icon || 'icon',
  8. children: propsConfig.children || 'children'
  9. }
  10. const icon = ele[propsDefault.icon];
  11. ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon;
  12. const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
  13. if (!isChild) ele[propsDefault.children] = [];
  14. if (!isChild && first && !isURL(ele[propsDefault.path])) {
  15. //在所有不包含子项且在菜单第一层的页面路径后添加/index
  16. ele[propsDefault.path] = ele[propsDefault.path] + '/index'
  17. } else {
  18. ele[propsDefault.children].forEach(child => {
  19. addPath(child);
  20. })
  21. }
  22. }

4.修改首页的操作

要修改首页路由时需要先在src\config\website.js 的全局配置文件中找到firstPage对象,修改value为需要的页面路由,因为登录成功后,跳转的路径就来自这里:

  1. fistPage: {
  2. label: "首页",
  3. value: "/pages/index",
  4. params: {},
  5. query: {},
  6. meta: {
  7. i18n: "dashboard"
  8. },
  9. group: [],
  10. close: false
  11. },

然后在src\router\page\index.js中写好路由配置

这样就完成首页路由的修改,如果不在路由配置表中配置路由,而是在菜单管理中配置的后端路由的话,登录后会跳转到404页面,这是由于后端的路由是在已经登录后为顶栏和左侧菜单请求的,在登录时并没有请求,所以搜索不到相应路由跳转到404,其跳转404的机制是在路由配置表中配置了如下路由:

  1. {
  2. path: '*',
  3. redirect: '/404'
  4. }

以后我有bladx相关问题在这里补充 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/296527
推荐阅读
相关标签
  

闽ICP备14008679号