资源分类

资源主要分两类:

  • 动态资源:在系统运行当中,通过管理界面创建的资源
  • 静态资源:通过代码管理资源数据,当系统启动时,自动初始化到数据库中
    • 静态资源是在静态原子的基础上实现的,请参见:静态原子

菜单是一种资源

前面已经提到,菜单是一种资源,因此,可以通过创建静态资源的方式来创建菜单。下面,我们以模块test-party为例,创建一个菜单:

定义静态资源(菜单)

定义一个静态资源数组

src/suite-vendor/test-party/modules/test-party/backend/src/config/static/resources.js

  1. 1module.exports = app => {
  2. 2 const moduleInfo = app.meta.mockUtil.parseInfoFromPackage(__dirname);
  3. 3 const resources = [
  4. 4 // menu
  5. 5 {
  6. 6 atomName: 'Kitchen-sink',
  7. 7 atomStaticKey: 'kitchenSink',
  8. 8 atomRevision: 1,
  9. 9 atomCategoryId: 'a-base:menu.Tools',
  10. 10 resourceType: 'a-base:menu',
  11. 11 resourceConfig: JSON.stringify({
  12. 12 actionModule: moduleInfo.relativeName,
  13. 13 actionPath: 'kitchen-sink/index',
  14. 14 }),
  15. 15 resourceIcon: ':business:kitchen-set',
  16. 16 appKey: 'test-party:appParty',
  17. 17 resourceRoles: 'root',
  18. 18 },
  19. 19 ];
  20. 20 return resources;
  21. 21};
  • atomName:资源名称,支持语言国际化。在这里,我们的菜单名称是Kitchen-sink

  • atomStaticKey:系统会自动添加模块名称作为前缀,从而形成系统唯一的原子Key,比如这里的:test-party:kitchenSink

  • atomRevision: 从0开始。当静态资源有任何属性变更时,将atomRevision依次递增,系统就会自动更新数据库里的数据

  • atomCategoryId: 资源归属目录

    • 基本格式为:{资源类型全称}.{级联目录}
    • 资源类型全称:模块a-base提供了一个资源类型menu,全称为a-base:menu。由于不同模块提供的资源类型统一管理,所以,以资源类型全称作为第一级目录,便于资源目录的分类管理
    • 级联目录:是以.相连的多级目录
    • 系统会自动解析目录结构得到目录Id,如果目录不存在会自动创建
  • resourceType: 资源类型全称。在这里,菜单的资源类型就是a-base:menu

  • resourceConfig: 资源配置信息。不同类型的资源有不同的结构约定

  • resourceConfig.actionModule + actionPath: 这是菜单资源的定义方式:当点击菜单项时,跳转前端页面的路径

  • resourceIcon:资源图标,比如:菜单资源的图标

  • appKey:App应用的atomStaticKey。在这里,是宴会应用test-party:appParty

    • 将菜单资源与App应用关联,从而决定App应用显示哪些菜单资源。参见:App应用
  • resourceRoles: 指定资源授权对象。系统会自动解析角色名称得到角色Id,并进行资源授权。有以下可选值:

    • 简单角色名,如authenticated
    • 级联角色名,如template.system
    • 逗号分隔的多个角色名,如authenticated,template.system

注册静态资源(菜单)

前面定义好一组静态资源,接下来就需要在模块的meta文件中进行注册

src/suite-vendor/test-party/modules/test-party/backend/src/meta.js

  1. 1const staticResources = require('./config/static/resources.js')(app);
  2. 2
  3. 3base: {
  4. 4 statics: {
  5. 5 'a-base.resource': {
  6. 6 items: staticResources,
  7. 7 },
  8. 8 },
  9. 9},
名称 说明
a-base.resource 原子类型的全称。在这里,原子类型resource是由模块a-base提供的
items 静态资源数组