前端插件页面路由定义

本功能基于最新版前端产品代码(最后更新:2022-07-01,小 mes 版本: @epichust/unimax-smt@0.1.6,)

v5 项目使用前端插件

目前前端插件在使用上各有不同,根据各自用法来使用,大部分情况是通过 vue 提供的插件调用方式:

import Vue from "vue";
import plugin from "@epichust/demo-plugin";

Vue.use(plugin, {}) // 若有特殊参数,会在第二个参数对象中去完成定义

插件内部页面需要在菜单展示

在某些插件中有独特的页面需要在菜单中去展示,此时插件内部就无法完成,需要搭配整个前端项目应用的路由实例,去将这些页面加入到路由中。

在前端插件开发时,定义一个针对需要加路由页面的一套规则,以便项目的路由去匹配这个规则,从而将插件内部页面注册为菜单路由。

这个路由匹配规则写法如下:

export const routeRule = {
    // 匹配方法,返回一个Boolean值,代表一个路由是否使用这套规则
    validator(menuNode, route) {},
    // 获取vue路由的path属性
    getPath(menuNode, route) {},
    // 获取vue路由的component属性,即vue文件
    getImport(menuNode, route) {},
}

以卡片布局插件为例:卡片布局在配置好一个页面之后,需要在“菜单定义”中增加菜单,此时卡片布局的插件定义的路由规则如下:

const widgetLayoutRule = { 
  validator(menuNode, route) {
    // console.log(path);
    return menuNode.url.startsWith("widgetLayout");
  },
  getPath(menuNode, route) {
    route.props = true;
    menuNode.url = menuNode.url + "/" + menuNode.rel;
    return `/widgetLayout/:code/${menuNode.rel}`;
  },
  getImport(menuNode, route) {
    function setRelToName(page) {
      // console.log(rel);
      if (page.default.keepAlive) {
        page.default.name = menuNode.rel;
      }
      return page;
    }
    return () => import("./widget-page.vue").then(setRelToName);
  },
};

在项目路由中加入匹配规则

在前端代码中引入插件时,同时将插件规则导入,并加入到项目应用路由实例。

// 应用路由工具对象
import appRouterHelper from "./router/appRouterHelper";
// 插件路由规则
import { widgetLayoutRule } from "@epichust/widget-layout";
// 将插件规则添加进来
appRouterHelper.addImportRules(widgetLayoutRule);

录入菜单数据

接下来去“菜单定义”中新增卡片布局页面,在“菜单定义”中的 url 属性,需要填 widgetLayout/(code),满足规则 validator 返回 true,并且菜单标识必须选择“插件”,这样才能正确触发 validator,否则会被当作产品或项目页面。

image.png

这样配置好菜单及权限后,在左侧菜单内就会有对应的菜单数据。

image.png