• 工具方法


    1.路由相关

    getRoutes

    参数

    [path](String):路径

    [routerData](Object):路由配置

    返回

    (Array) :path下的所有子路由

    示例

    import React, { Component } from 'react';
    import { Route, Switch, Redirect } from 'dva/router';
    import { connect } from 'dva';
    import { getRoutes } from 'utils/utils';
    
    @connect(({ global }) => ({
      routerData: global.routerData,
    }))
    export default class RouteIndex extends Component {
      render() {
        const { match, routerData } = this.props;
        const routes = getRoutes(match.path, routerData);
        return (
          <Switch>
            {routes.map(item => (
              <Route key={item.key} path={item.path} component={item.component} exact={item.exact} />
            ))}
            {routes.length > 0 ? (
              <Redirect key={match.path} exact from={match.path} to={routes[0].path} />
            ) : null}
          </Switch>
        );
      }
    }
    

    getRoutesContainsSelf

    参数

    [path](String):路径

    [routerData](Object):路由配置

    返回

    (Array) :path以及path下的所有子路由

    示例

    import React from 'react';
    import { getRoutesContainsSelf } from 'utils/utils';
    import Route from './Route';
    import Switch from './Switch';
    
    export default function getTabRoutes({ pane, routerData, NotFound, menu, activeTabKey } = {}) {
      const { key: tabKey, path: tabPath } = pane;
      const matchRoutes = getRoutesContainsSelf(tabKey, routerData).map(item => {
        return <Route key={item.key} path={item.path} exact={item.exact} component={item.component} />;
      });
      return (
        <Switch tabKey={tabKey} activeTabKey={activeTabKey} tabPathname={tabPath} key={tabKey}>
          {matchRoutes}
          {menu.length === 0 ? null : <Route render={NotFound} />}
        </Switch>
      );
    }
    

    getModuleRouters

    参数

    [app]!object: dva.app对象

    [modules] (Array<Object>): 模块路由方法集合

    返回

    {Object} 返回模块路由对象集合

    示例

    import { getModuleRouters } from 'utils/utils';
    import * as hzeroFrontHagdRouters from 'hzero-front-hagd/lib/utils/router';
    export default app =>
      getModuleRouters(app, [
        hzeroFrontHagdRouters,
      ]);
    

    resolveRequire

    参数

    [module]object: 获取 require(‘moduleName’) 或者 import(‘moduleName’) 的真正的导出对象

    示例

    import {resolveRequire} from 'utils/utils';
    moment.locale(resolveRequire(antdLocale).locale); // TODO: LocaleProvider 中会设置 moment.locale,为何突然不起作用了?
    

    2.url相关

    isUrl

    参数

    [path](String):路径

    返回

    (Boolean) :经过逻辑判断后的值

    示例

    import { isUrl } from 'utils/utils'
    
    isUrl('https://www.hand-china.com/')
    //=> true
    

    generateUrlWithGetParam

    参数

    [url](String):统一资源定位符

    [params](Object):要传的get参数

    返回

    (String) :带get参数URL的字符串

    示例

    import { generateUrlWithGetParam, filterNullValueObject } from 'utils/utils'
    
    const url = 'https://www.hand-china.com/'
    const params = { id:1 };
    const filterNullQuery = filterNullValueObject(params);
    const newUrl = generateUrlWithGetParam(url, filterNullQuery);
    // => https://www.hand-china.com/?id=1
    

    getUrlParam

    参数

    [param](Object): 参数

    返回

    (String) :对应的参数部分

    示例

    import { getUrlParam } from 'utils/utils'
    
    const param = {
          a: 1,
          b: 2,
          c: undefined,
        };
      getUrlParam(param)
        // => ?a=1&b=2
    

    3.accesstoken相关

    extractAccessTokenFromHash

    参数

    [hash](String):hash值

    返回

    (String) :accessToken

    示例

    import { extractAccessTokenFromHash } from 'utils/utils'
    
    const token = extractAccessTokenFromHash(window.location.hash);
    // => 00000000-0000-0000-0000-000000000000
    

    getAccessToken

    返回

    (String) :accessToken

    示例

    import { getAccessToken } from 'utils/utils'
    
    getAccessToken();
    // => 00000000-0000-0000-0000-000000000000
    
    

    setAccessToken

    参数

    [token](String):要设定的accessToken

    示例

    import { setAccessToken } from 'utils/utils'
    
    const token = '11111111-1111-1111-1111-111111111111'
    setAccessToken(token);
    getAccessToken();
    // => 11111111-1111-1111-1111-111111111111
    

    removeAccessToken

    示例

    import { removeAccessToken} from 'utils/utils'
    
     removeAccessToken();
     getAccessToken();
     // => undefined
    

    4.分页相关

    createPagination

    参数

    data(Object){

    [number|start](Number):当前页

    [size](Number):每页大小

    [totalElements|total](Number):列表条数

    }:数据列表对象

    [pageSizeOptions = [‘10’, ‘20’, ‘50’, ‘100’]](Array):每页显示条数列表

    返回

    (Object) :经过生成页面分页后的参数对象

    示例

    import { createPagination } from 'utils/utils'
    
    const res = {
        content: []
        number: 0
        size: 10
        totalElements: 1000
    }
    const pageSizeOptions = ['11', '20', '50', '100']
    createPagination(res,pageSizeOptions)
        // => {
        //   showSizeChanger: true,
        //   pageSizeOptions: ['11', '20', '50', '100'],
        //   current: 1,
        //   pageSize: 10,
        //   total: 1000,
        //   showTotal: function,
        // }
    

    addItemToPagination

    参数

    [length](Number):数据列表长度

    [pagination](Object):原始分页对象

    返回

    (Object) :经过更新页面分页信息后的参数对象

    示例

    import { addItemToPagination } from 'utils/utils'
    
        const pagination = {
          showSizeChanger: true,
          pageSizeOptions: ['10', '20', '50', '100'],
          current: 1,
          pageSize: 10,
          total: 1000,
          showTotal: function,
        }
    addItemToPagination( 10, pagination)
        // => {
        //   showSizeChanger: true,
        //   pageSizeOptions: [ '11', '20', '50', '100'],
        //   current: 1,
        //   pageSize: 11,
        //   total: 1001,
        //   sourceSize: 10,
        //   showTotal: function,
        // }
    

    delItemToPagination

    参数

    [length](Number):数据列表长度

    [pagination](Object):原始分页对象

    返回

    (Object) :经过更新页面分页信息后的参数对象

    示例

    import { delItemToPagination } from 'utils/utils'
    
        const pagination = {
          showSizeChanger: true,
          pageSizeOptions: ['10', '20', '50', '100'],
          current: 1,
          pageSize: 10,
          total: 1000,
          showTotal: function,
        }
    delItemToPagination( 10, pagination)
        // => {
        //   showSizeChanger: true,
        //   pageSizeOptions: ['9', '20', '50', '100'],
        //   current: 1,
        //   pageSize: 9,
        //   total: 999,
        //   sourceSize: 10,
        //   showTotal: function,
        // }
    ...
    

    addItemsToPagination

    参数

    [addItemsLength](Number):新增数据长度

    [currentLength](Number):当前数据长度

    [pagination](Object):原始分页对象

    返回

    (Object) :经过更新页面分页信息后的参数对象

    示例

    import { addItemsToPagination } from 'utils/utils'
    
    const pagination = {
          showSizeChanger: true,
          pageSizeOptions: ['10', '20', '50', '100'],
          current: 1,
          pageSize: 10,
          total: 1000,
          showTotal: function,
        }
    addItemsToPagination(2, 10, pagination)
        // => {
        //   showSizeChanger: true,
        //   pageSizeOptions: ['12', '20', '50', '100'],
        //   current: 1,
        //   pageSize: 12,
        //   total: 1002,
        //   sourceSize: 10,
        //   showTotal: function,
        // }
    

    delItemsToPagination

    参数

    [delItemsLength](Number):移除数据长度

    [currentLength](Number):当前数据长度

    [pagination](Object):原始分页对象

    返回

    (Object) :经过更新页面分页信息后的参数对象

    示例

    import { delItemsToPagination } from 'utils/utils'
    
    const pagination = {
          showSizeChanger: true,
          pageSizeOptions: ['10', '20', '50', '100'],
          current: 1,
          pageSize: 10,
          total: 1000,
          showTotal: function,
        }
    delItemsToPagination(2, 10, pagination)
        // => {
        //   showSizeChanger: true,
        //   pageSizeOptions: ['10', '20', '50', '100'],
        //   current: 1,
        //   pageSize: 10,
        //   total: 998,
        //   sourceSize: 10,
        //   showTotal: function,
        // }
    

    5.用户信息相关

    getCurrentOrganizationId

    返回

    (Number) :当前租户id

    示例

    import { getCurrentOrganizationId } from 'utils/utils'
    
    getCurrentOrganizationId()
        // => 0
    
    

    getUserOrganizationId

    返回

    (Number) :当前用户所属租户ID

    示例

    import { getUserOrganizationId } from 'utils/utils'
    
    getUserOrganizationId()
        // => 0
    

    getCurrentUserId

    返回

    [key](Number) :当前登录用户id

    示例

    import { getCurrentUserId } from 'utils/utils'
    
    getCurrentUserId()
        // => 0
    
    

    getCurrentUser

    返回

    (Object) :当前登录用户信息

    示例

    import { getCurrentUser } from 'utils/utils'
    
    getCurrentUser();
        // => {
        //   id: 0,
        //   ...
        // }
    

    getCurrentRole

    返回

    (Object) :当前登录用户的角色信息

    示例

    import { getCurrentRole } from 'utils/utils'
    
    getCurrentRole();
        // => {
        //   id: 0,
        //   name: '平台管理员',
        //   level: 'site',
        //   code: 'role/site/default/administrator',
        // }
    

    getCurrentTenant

    返回

    (Object) :当前租户信息

    示例

    import { getCurrentTenant } from 'utils/utils'
    
    getCurrentTenant();
        // => {
        //   tenantId: 0,
        //   tenantName: 'HZERO平台',
        //   tenantNum: 'HZERO' ,
        // }
    

    isTenantRoleLevel

    返回

    (Boolean) :经过逻辑判断后的值

    示例

    import { isTenantRoleLevel } from 'utils/utils'
    
    isTenantRoleLevel();
        // => true
    

    6.存储相关

    getSession

    参数

    [key](String):键值

    返回

    (Number) :传入参数对应键值的的value

    示例

    import { getSession } from 'utils/utils'
    
    getSession(a)
    // => false
    
    

    setSession

    参数

    [key](Number) :传入参数对应键值的的value

    [value](任何类型的数据): 要存储的值

    示例

    import { setSession } from 'utils/utils'
    
    setSession('a', 1);
    =getSession('a');
        // => 1
    

    removeAllCookie

    示例

    import { removeAllCookie } from 'utils/utils'
    
    removeAllCookie();
    getAccessToken();
    // => undefined
    

    7.时间相关

    getDateFormat

    返回

    (String) :日期格式化字符串

    示例

    import { getDateFormat } from 'utils/utils'
    
    getDateFormat()
        // => YYYY-MM-DD
    

    getDateTimeFormat

    返回

    (String) :日期格式化字符串

    示例

    import { getDateTimeFormat } from 'utils/utils'
    
    getDateTimeFormat()
        // => YYYY-MM-DD HH:mm:ss
    

    getTimeFormat

    返回

    (String) :时间格式化字符串

    示例

    import { getTimeFormat } from 'utils/utils'
    
    getTimeFormat()
        // => HH:mm:ss
    

    getTimeZone

    返回

    (String) :当前设置的时区

    示例

    import { getTimeZone } from 'utils/utils'
    
    getTimeZone()
        // => GMT+8
    

    disabledTime

    参数

    [data](String|Moment): 时间日期字符串

    [type](String): 类型,可选 start, end

    示例

    import { disabledTime } from 'utils/utils';
    disabledTime={() => {
      return {
        disabledHours: () => this.range(0, moment(releaseDateValidator).hours()),
        disabledMinutes: () => this.range(0, moment(releaseDateValidator).minutes()),
        disabledSeconds: () => this.range(0, moment(releaseDateValidator).seconds()),
      };
    }}
    

    8.组件相关

    getEditTableData

    参数

    [dataSource](Array): 表格数据源

    [filterList](Array): 过滤新增操作中的属性字段,例如:[‘children’, ‘unitId’],默认过滤 $form

    [scrollOptions]Object: 配置form效验报错后的滚动行为,默认是基于页面滚动,如果需要基于表格内滚动,需要:{ container: document.querySelector('.ant-table-body') }

    [treeChildrenAlias = ‘children’]String: 表格数据源

    返回

    (Object) 返回行内编辑表格中的数据

    示例

    import { getEditTableData } from 'utils/utils';
    ...
    const validationDataSource = getEditTableData(dataSource, ['id', '_status']);
    ...
    

    9.集合操作相关

    mapTree

    参数

    [tree](Array):树

    [iter](Function):遍历方法

    [options= {childrenName: ‘children’,childrenNullable: false }](Array):配置

    返回

    (Boolean) :转化过后的树

    示例

    
    const tree = [{
      type: 'test',
    },{
      type: 'not',
    }]
    mapTree(
          tree,
          (item,parent) => {
            const newType = 'test'
            return {
              ...item,
              type: newType,
            };
          },
          { childrenNullable: true }
        )
      // => [{
    //   type: 'test',
    // },{
    //   type: 'test',
    // }]
    
    

    10.文件相关

    getAttachmentUrl

    参数

    [url](String): 上传接口返回的url

    [bucketName](String): 桶名

    [tenantId](Number): 租户Id

    [bucketDirectory](String): 文件目录

    [storageCode](String): 存储配置编码

    返回

    (String) 可访问的文件URL

    示例

    import { getAttachmentUrl } from 'utils/utils'
    
    <img
      src={
        getAttachmentUrl(
        url,
        'example',
        organizationId
      )}
      alt="logo"
      width="100%"
    />
    

    11.密码相关

    encryptPwd

    参数

    [password](String): 密码

    [publicKey](String): 公钥,有公钥 使用 rsa 加密, 否则使用 md5 加密

    返回

    (String) 加密后的密码

    示例

    import { encryptPwd } from 'utils/utils'
    
    encryptPwd('123456', 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJL0JkqsUoK6kt3JyogsgqNp9VDGDp+t3ZAGMbVoMPdHNT2nfiIVh9ZMNHF7g2XiAa8O8AQWyh2PjMR0NiUSVQMCAwEAAQ==')
    // => dxgtAPFCG0XTbvBHYR9C4UGH7wJlBkDJB0SRUCBsv1kCJRxwU0H71fWsZ9+BRZHf/DtWeE31HDjK+g20KZ1zJQ==
    
    

    encryptMd5

    参数

    [password](String): 密码

    返回

    (String) 加密后的密码

    示例

    import { encryptMd5 } from 'utils/utils'
    
    encryptMd5('123456')
    // => MTIzNDU2
    
    

    12.通用方法

    isPromise

    参数

    [obj](Object):对象

    返回

    (Boolean) :经过逻辑判断后的值

    示例

    ...
    let obj =new Promise(function() {
        // 这个function内部写的就是具体的异步操作
    }
    isPromise(obj)
    // => true
    

    tableScrollWidth

    参数

    [columns](array): 表格列

    [fixWidth](number): 不固定宽度列需要补充的宽度

    返回

    (number) 返回计算过的 x 值

    示例

    import { tableScrollWidth } from 'utils/utils';
    <Table
      bordered
      rowKey="id"
      columns={columns}
      scroll={{ x: tableScrollWidth(columns) }}
    />
    

    filterNullValueObject

    参数

    [obj](Object):要过滤的对象

    返回

    (Object) :经过过滤后的对象

    示例

    import { filterNullValueObject } from 'utils/utils'
    
    const obj = {
        a: 1,
        b: '2',
        c: undefined,
        d: '',
        e: [],
        f: null,
        }
    filterNullValueObject(obj)
        // => {
        //   a: 1,
        //   b: '2',
        // }
    
    

    parseParameter

    参数

    [params](Object){

    [page](Object): 分页信息

    [sort](Object): 排序信息

    [body](Object): 其余信息

    } :传入的查询参数

    返回

    (Object) :解析后的查询参数

    示例

    import { parseParameter } from 'utils/utils'
    
    const pagination = {
          showSizeChanger: true,
          current: 1,
          pageSize: 10,
          total: 1000,
        }
    const sort ={
          field: 'a',
          order: 'ascend',
        }
    const params={
          id: 1
    }
    parseParameter({ page: pagination, body: params })
        // => {
        //   page: 0,
        //   size: 10,
        //   id: 1,
        //   sort: "a,asc"
        // }
    

    parseParameters

    参数

    [params](Object){

    [page](Object): 分页信息

    [sort](Object): 排序信息

    } :传入的查询参数

    返回

    (Object) :解析后的查询参数

    示例

    import { parseParameters } from 'utils/utils'
    
    const pagination = {
          showSizeChanger: true,
          pageSizeOptions: [ '11', '20', '50', '100'],
          current: 1,
          pageSize: 11
          total: 1001,
          sourceSize: 10,
        }
    const sort ={
          field: 'a',
          order: 'descend',
        }
    const params={
          id: 1
    }
    parseParameters({ page: pagination, sort, ...params })
        // => {
        //   id: 1,
        //   page: 0,
        //   size: 11,
        //   sort: "a,desc"
        // }
    

    getResponse

    参数

    [response](Object):异步请求取到返回的消息

    [errorCallback](Function):回调函数

    返回

    (Object) :经过调整后的消息,如果传入对象是 消息,返回undefined

    示例

    import { getResponse } from 'utils/utils'
    
    const response = {
        a: 1,
        b: 2,
        }
    getResponse(response)
        // => {
        //   a: 1,
        //   b: 2,
        // }
    
    const response = {
        a: 1,
        b: 2,
        falied: true,
        }
    getResponse(response)
        // => undefined
    

    listenDownloadError

    参数

    [errorCode]String: 后端返回的错误类型

    [msg]String: 自定义错误提示标题

    [noticeType]String: 报错提示类型

    返回

    (String) :对应的错误信息

    示例

    import { listenDownloadError } from 'utils/utils'
    
    // 监听导出错误时 postMessage 事件
    listenDownloadError(
      'downloadError',
      intl.get('hzero.common.notification.export.error').d('导出异常')
    );
    

    getCodeMeaning

    参数

    [value](any): 值集中某对象的value

    [code](Array<Object>): 值集集合

    返回

    (String) 对应的meaning

    示例

    import { getCodeMeaning } from 'utils/utils'
    
    const code=[
      {value: "default", meaning: "预定义"},
      {value: "custom", meaning: "自定义"}
      ]
    getCodeMeaning( 'default', code )
        // => 预定义
    

    getCurrentLanguage

    返回

    (String) 系统当前语言

    示例

    import { getCurrentLanguage } from 'utils/utils'
    
    getCurrentLanguage()
        // => zh_CN
    

    getPlatformVersionApi

    参数

    [api](String): api

    返回

    (string) 返回对应的平台版本API

    示例

    import { getPlatformVersionApi, parseParameters } from 'utils/utils';
    export async function queryClause(params) {
      const param = parseParameters(params);
      return request(`${HZERO_PLATFORM}/v1/${getPlatformVersionApi('dashboard-clause')}`, {
        method: 'GET',
        query: param,
      });
    }
    

    newArray

    参数

    [start](Number|Moment): 开始值

    [end](Number): 结束值

    返回

    (Array) 返回对应的响应数组

    示例

    import { newArray } from 'utils/utils';
    console.log(newArray(2, 5)); // [2, 3, 4]
    

    getRefFormData

    参数

    [ref](React.RefObject: 表单的 ref

    返回

    (Object) 返回对应的表单数据

    示例

    import { getRefFormData } from 'utils/utils';
    const params = getRefFormData(this.filterFormRef);