工具方法
1.路由相关
getRoutes
- 用来找到当前 path 的所有子路由
参数
[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 的路由和所有子路由
参数
[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是否为url的逻辑判断
参数
[path](String):路径
返回
(Boolean) :经过逻辑判断后的值
示例
import { isUrl } from 'utils/utils'
isUrl('https://www.hand-china.com/')
//=> true
generateUrlWithGetParam
- 在传参前,需要过滤params中的undefined、function、symbol等
- 生成带Get参数的URL
参数
[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
- 得到get请求后面的参数部分,并去掉参数值为空的
参数
[param](Object): 参数
返回
(String) :对应的参数部分
示例
import { getUrlParam } from 'utils/utils'
const param = {
      a: 1,
      b: 2,
      c: undefined,
    };
  getUrlParam(param)
    // => ?a=1&b=2
getAttachmentUrl
- 通过文件服务器的接口获取可访问的文件URL
参数
[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%"
/>
3.accesstoken相关
extractAccessTokenFromHash
- 传入哈希值抽取AccessToken
参数
[hash](String):hash值
返回
(String) :accessToken
示例
import { extractAccessTokenFromHash } from 'utils/utils'
const token = extractAccessTokenFromHash(window.location.hash);
// => 00000000-0000-0000-0000-000000000000
getAccessToken
- 从cookie中获取accessToken
返回
(String) :accessToken
示例
import { getAccessToken } from 'utils/utils'
getAccessToken();
// => 00000000-0000-0000-0000-000000000000
setAccessToken
- 设定accessToken
参数
[token](String):要设定的accessToken
示例
import { setAccessToken } from 'utils/utils'
const token = '11111111-1111-1111-1111-111111111111'
setAccessToken(token);
getAccessToken();
// => 11111111-1111-1111-1111-111111111111
removeAccessToken
- 移除accessToken
示例
import { removeAccessToken} from 'utils/utils'
 removeAccessToken();
 getAccessToken();
 // => undefined
removeAllCookie
- 移除所有cookie
示例
import { removeAllCookie } from 'utils/utils'
removeAllCookie();
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
- 获取当前租户id
返回
(Number) :当前租户id
示例
import { getCurrentOrganizationId } from 'utils/utils'
getCurrentOrganizationId()
    // => 0
getUserOrganizationId
- 获取当前用户所属租户ID
返回
(Number) :当前用户所属租户ID
示例
import { getUserOrganizationId } from 'utils/utils'
getUserOrganizationId()
    // => 0
getCurrentUserId
- 获取当前登录用户id
返回
[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.session相关
getSession
- 获取传入参数对应键值的sessionStorage
参数
[key](String):键值
返回
(Number) :传入参数对应键值的的value
示例
import { getSession } from 'utils/utils'
getSession(a)
// => false
setSession
- 会将传入的值转换为JSON字符串进行存储
- 存储sessionStorage
参数
[key](Number) :传入参数对应键值的的value
[value](任何类型的数据): 要存储的值
示例
import { setSession } from 'utils/utils'
setSession('a', 1);
=getSession('a');
    // => 1
7.时间相关
getDateFormat
- 获取日期(date)格式化字符串
- 日期格式化字符串由当前登录用户信息中获取
- 默认通用常量中的DEFAULT_DATE_FORMAT
返回
(String) :日期格式化字符串
示例
import { getDateFormat } from 'utils/utils'
getDateFormat()
    // => YYYY-MM-DD
getDateTimeFormat
- 获取日期(dateTime)格式化字符串
- 日期格式化字符串由当前登录用户信息中获取
- 默认通用常量中的DEFAULT_DATETIME_FORMAT
返回
(String) :日期格式化字符串
示例
import { getDateTimeFormat } from 'utils/utils'
getDateTimeFormat()
    // => YYYY-MM-DD HH:mm:ss
getTimeFormat
- 获取时间(time)格式化字符串
- 时间格式化字符串由当前登录用户信息中获取
- 默认通用常量中的DEFAULT_TIME_FORMAT
返回
(String) :时间格式化字符串
示例
import { getTimeFormat } from 'utils/utils'
getTimeFormat()
    // => HH:mm:ss
getTimeZone
- 获取当前设置的时区
- 当前设置的时区由当前登录用户信息中获取
返回
(String) :当前设置的时区
示例
import { getTimeZone } from 'utils/utils'
getTimeZone()
    // => GMT+8
disabledTime
- 和DataPicker相关
- 生成 antd 的时间禁用支持函数
参数
[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
- 和EditTable组件相关
- 获取行内编辑表格中的 form
参数
[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.通用方法
isPromise
- 返回传入的obj是否为Promise对象的逻辑判断
参数
[obj](Object):对象
返回
(Boolean) :经过逻辑判断后的值
示例
...
let obj =new Promise(function() {
    // 这个function内部写的就是具体的异步操作
}
isPromise(obj)
// => true
tableScrollWidth
- 和Table组件相关
- 计算滚动表格的宽度(如果 fixWidth 不传或者为0, 会将没有设置宽度的列 宽度假设为 200)
参数
[columns](array): 表格列
[fixWidth](number): 不固定宽度列需要补充的宽度
返回
(number) 返回计算过的 x 值
示例
import { tableScrollWidth } from 'utils/utils';
<Table
  bordered
  rowKey="id"
  columns={columns}
  scroll={{ x: tableScrollWidth(columns) }}
/>
filterNullValueObject
- 返回一个过滤后的对象
- 过滤掉对象值为 undefined 和 空字符串 和 空数组 的属性
参数
[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获取对应的meaning
参数
[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
参数
[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 获取表单数据
- 推荐使用 wrappedComponentRef,不推荐使用 ref
参数
[ref](React.RefObject): 表单的 ref
返回
(Object) 返回对应的表单数据
示例
import { getRefFormData } from 'utils/utils';
const params = getRefFormData(this.filterFormRef);