工具方法
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
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
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.存储相关
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
removeAllCookie
- 移除所有cookie
示例
import { removeAllCookie } from 'utils/utils'
removeAllCookie();
getAccessToken();
// => undefined
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.集合操作相关
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
参数
[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是否为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);