• 单据权限维度开发


    数据权限维度是租户级在子账户管理的权限维护和角色管理维护数据权限的权限数据里展示的页面,可能存在跨模块的情况, 最终使用了 customize 解决方案。

    说明

    1 在需要开发数据权限维度的模块 新建/修改 以下文件

    /src/customize
    ├── customizeDimensions.js
    └── index.js 
    

    2 在需要开发数据权限维度的模块 修改以下文件

    /src/utils
    ├── router.js
    

    举例

    1 定义 数据权限维度 customize

    /**
     * 如果 数据权限维度存在 则加载数据权限维度
     * 否则 返回 null
     * @param cardCode
     * @return {Promise<null|*>}
     */
    // hiam模块 数据权限维度的 customize
    /* hzero-front-hiam/src/customize/dimensions.js */
    import { isFunction } from 'lodash';
    
    import { mapCustomize } from 'utils/customize';
    
    /**
     * 如果 存在 则加载页面
     * 否则 返回 null
     * @param dimensionCode
     * @return {Promise<null|*>}
     */
    export async function loadDimensionAsync(dimensionCode) {
      if (mapCustomize.has({ module: 'hzero-front-hiam', feature: 'dimensions', key: dimensionCode })) {
        const layout = mapCustomize.get({
          module: 'hzero-front-hiam',
          feature: 'dimensions',
          key: dimensionCode,
        });
        if (isFunction(layout && layout.component)) {
          const dimension = await layout.component();
          return dimension;
        }
      }
      return null;
    }
    
    export function setDimension(dimensionConfig) {
      // TODO: 判断是否需要检查 重复设置的问题
      mapCustomize.set({
        module: 'hzero-front-hiam',
        feature: 'dimensions',
        key: dimensionConfig.code,
        data: { component: dimensionConfig.component },
      });
    }
    
    

    2 使用 数据权限维度的 customize

    
    /* src/utils/router.js */
    // ... 其他代码
    // 增加 customize 的引入
    import '../customize';
    // ... 其他代码
    
    /* src/customize/index.js */
    // 引入 工作流模块 的数据权限维度配置
    import './customizeDimensions';
    
    /* src/customize/customizeDimensions.js */
    
    // 引入 存储 数据权限维度配置的方法
    import { setDimension } from 'hzero-front-hiam/lib/customize/dimensions';
    // 引入  加在 model 的包装方法
    import { dynamicWrapper } from '../utils/router';
    // 设置 编码为 DEMO 的 数据权限维度
    
    setDimension({
     code: 'DEMO',
     component: async () => {
       return dynamicWrapper(window.dvaApp, ['cards/demo'], () =>
         import('../routes/Dimensions/demo')
       );
     },
    });