| | |
| | | // 日期格式化 |
| | | export function parseTime(time: any, pattern?: string) { |
| | | if (arguments.length === 0 || !time) { |
| | | return null; |
| | | } |
| | | const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'; |
| | | let date; |
| | | if (typeof time === 'object') { |
| | | date = time; |
| | | } else { |
| | | if (typeof time === 'string' && /^[0-9]+$/.test(time)) { |
| | | time = parseInt(time); |
| | | } else if (typeof time === 'string') { |
| | | time = time |
| | | .replace(new RegExp(/-/gm), '/') |
| | | .replace('T', ' ') |
| | | .replace(new RegExp(/\.[\d]{3}/gm), ''); |
| | | } |
| | | if (typeof time === 'number' && time.toString().length === 10) { |
| | | time = time * 1000; |
| | | } |
| | | date = new Date(time); |
| | | } |
| | | const formatObj: { [key: string]: any } = { |
| | | y: date.getFullYear(), |
| | | m: date.getMonth() + 1, |
| | | d: date.getDate(), |
| | | h: date.getHours(), |
| | | i: date.getMinutes(), |
| | | s: date.getSeconds(), |
| | | a: date.getDay() |
| | | }; |
| | | return format.replace(/{(y|m|d|h|i|s|a)+}/g, (result: string, key: string) => { |
| | | let value = formatObj[key]; |
| | | // Note: getDay() returns 0 on Sunday |
| | | if (key === 'a') { |
| | | return ['日', '一', '二', '三', '四', '五', '六'][value]; |
| | | } |
| | | if (result.length > 0 && value < 10) { |
| | | value = '0' + value; |
| | | } |
| | | return value || 0; |
| | | }); |
| | | if (arguments.length === 0 || !time) { |
| | | return null; |
| | | } |
| | | const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'; |
| | | let date; |
| | | if (typeof time === 'object') { |
| | | date = time; |
| | | } else { |
| | | if (typeof time === 'string' && /^[0-9]+$/.test(time)) { |
| | | time = parseInt(time); |
| | | } else if (typeof time === 'string') { |
| | | time = time |
| | | .replace(new RegExp(/-/gm), '/') |
| | | .replace('T', ' ') |
| | | .replace(new RegExp(/\.[\d]{3}/gm), ''); |
| | | } |
| | | if (typeof time === 'number' && time.toString().length === 10) { |
| | | time = time * 1000; |
| | | } |
| | | date = new Date(time); |
| | | } |
| | | const formatObj: { [key: string]: any } = { |
| | | y: date.getFullYear(), |
| | | m: date.getMonth() + 1, |
| | | d: date.getDate(), |
| | | h: date.getHours(), |
| | | i: date.getMinutes(), |
| | | s: date.getSeconds(), |
| | | a: date.getDay() |
| | | }; |
| | | return format.replace(/{(y|m|d|h|i|s|a)+}/g, (result: string, key: string) => { |
| | | let value = formatObj[key]; |
| | | // Note: getDay() returns 0 on Sunday |
| | | if (key === 'a') { |
| | | return ['日', '一', '二', '三', '四', '五', '六'][value]; |
| | | } |
| | | if (result.length > 0 && value < 10) { |
| | | value = '0' + value; |
| | | } |
| | | return value || 0; |
| | | }); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param propName |
| | | */ |
| | | export const addDateRange = (params: any, dateRange: any[], propName?: string) => { |
| | | const search = params; |
| | | search.params = typeof search.params === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; |
| | | dateRange = Array.isArray(dateRange) ? dateRange : []; |
| | | if (typeof propName === 'undefined') { |
| | | search.params['beginTime'] = dateRange[0]; |
| | | search.params['endTime'] = dateRange[1]; |
| | | } else { |
| | | search.params['begin' + propName] = dateRange[0]; |
| | | search.params['end' + propName] = dateRange[1]; |
| | | } |
| | | return search; |
| | | const search = params; |
| | | search.params = typeof search.params === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; |
| | | dateRange = Array.isArray(dateRange) ? dateRange : []; |
| | | if (typeof propName === 'undefined') { |
| | | search.params['beginTime'] = dateRange[0]; |
| | | search.params['endTime'] = dateRange[1]; |
| | | } else { |
| | | search.params['begin' + propName] = dateRange[0]; |
| | | search.params['end' + propName] = dateRange[1]; |
| | | } |
| | | return search; |
| | | }; |
| | | |
| | | // 回显数据字典 |
| | | export const selectDictLabel = (datas: any, value: number | string) => { |
| | | if (value === undefined) { |
| | | return ''; |
| | | } |
| | | const actions = []; |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == '' + value) { |
| | | actions.push(datas[key].label); |
| | | return true; |
| | | } |
| | | }); |
| | | if (actions.length === 0) { |
| | | actions.push(value); |
| | | } |
| | | return actions.join(''); |
| | | if (value === undefined) { |
| | | return ''; |
| | | } |
| | | const actions = []; |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == '' + value) { |
| | | actions.push(datas[key].label); |
| | | return true; |
| | | } |
| | | }); |
| | | if (actions.length === 0) { |
| | | actions.push(value); |
| | | } |
| | | return actions.join(''); |
| | | }; |
| | | |
| | | // 回显数据字典(字符串数组) |
| | | export const selectDictLabels = (datas: any, value: any, separator: any) => { |
| | | if (value === undefined || value.length === 0) { |
| | | return ''; |
| | | } |
| | | if (Array.isArray(value)) { |
| | | value = value.join(','); |
| | | } |
| | | const actions: any[] = []; |
| | | const currentSeparator = undefined === separator ? ',' : separator; |
| | | const temp = value.split(currentSeparator); |
| | | Object.keys(value.split(currentSeparator)).some((val) => { |
| | | let match = false; |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == '' + temp[val]) { |
| | | actions.push(datas[key].label + currentSeparator); |
| | | match = true; |
| | | } |
| | | }); |
| | | if (!match) { |
| | | actions.push(temp[val] + currentSeparator); |
| | | } |
| | | }); |
| | | return actions.join('').substring(0, actions.join('').length - 1); |
| | | if (value === undefined || value.length === 0) { |
| | | return ''; |
| | | } |
| | | if (Array.isArray(value)) { |
| | | value = value.join(','); |
| | | } |
| | | const actions: any[] = []; |
| | | const currentSeparator = undefined === separator ? ',' : separator; |
| | | const temp = value.split(currentSeparator); |
| | | Object.keys(value.split(currentSeparator)).some((val) => { |
| | | let match = false; |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == '' + temp[val]) { |
| | | actions.push(datas[key].label + currentSeparator); |
| | | match = true; |
| | | } |
| | | }); |
| | | if (!match) { |
| | | actions.push(temp[val] + currentSeparator); |
| | | } |
| | | }); |
| | | return actions.join('').substring(0, actions.join('').length - 1); |
| | | }; |
| | | |
| | | // 字符串格式化(%s ) |
| | | export function sprintf(str: string) { |
| | | if (arguments.length !== 0) { |
| | | let flag = true, |
| | | i = 1; |
| | | str = str.replace(/%s/g, function () { |
| | | const arg = arguments[i++]; |
| | | if (typeof arg === 'undefined') { |
| | | flag = false; |
| | | return ''; |
| | | } |
| | | return arg; |
| | | }); |
| | | return flag ? str : ''; |
| | | } |
| | | if (arguments.length !== 0) { |
| | | let flag = true, |
| | | i = 1; |
| | | str = str.replace(/%s/g, function () { |
| | | const arg = arguments[i++]; |
| | | if (typeof arg === 'undefined') { |
| | | flag = false; |
| | | return ''; |
| | | } |
| | | return arg; |
| | | }); |
| | | return flag ? str : ''; |
| | | } |
| | | } |
| | | |
| | | // 转换字符串,undefined,null等转化为"" |
| | | export const parseStrEmpty = (str: any) => { |
| | | if (!str || str == 'undefined' || str == 'null') { |
| | | return ''; |
| | | } |
| | | return str; |
| | | if (!str || str == 'undefined' || str == 'null') { |
| | | return ''; |
| | | } |
| | | return str; |
| | | }; |
| | | |
| | | // 数据合并 |
| | | export const mergeRecursive = (source: any, target: any) => { |
| | | for (const p in target) { |
| | | try { |
| | | if (target[p].constructor == Object) { |
| | | source[p] = mergeRecursive(source[p], target[p]); |
| | | } else { |
| | | source[p] = target[p]; |
| | | } |
| | | } catch (e) { |
| | | source[p] = target[p]; |
| | | } |
| | | } |
| | | return source; |
| | | for (const p in target) { |
| | | try { |
| | | if (target[p].constructor == Object) { |
| | | source[p] = mergeRecursive(source[p], target[p]); |
| | | } else { |
| | | source[p] = target[p]; |
| | | } |
| | | } catch (e) { |
| | | source[p] = target[p]; |
| | | } |
| | | } |
| | | return source; |
| | | }; |
| | | |
| | | /** |
| | |
| | | * @param {*} children 孩子节点字段 默认 'children' |
| | | */ |
| | | export const handleTree = <T>(data: any[], id?: string, parentId?: string, children?: string): T[] => { |
| | | const config: { |
| | | id: string; |
| | | parentId: string; |
| | | childrenList: string; |
| | | } = { |
| | | id: id || 'id', |
| | | parentId: parentId || 'parentId', |
| | | childrenList: children || 'children' |
| | | }; |
| | | const config: { |
| | | id: string; |
| | | parentId: string; |
| | | childrenList: string; |
| | | } = { |
| | | id: id || 'id', |
| | | parentId: parentId || 'parentId', |
| | | childrenList: children || 'children' |
| | | }; |
| | | |
| | | const childrenListMap: any = {}; |
| | | const nodeIds: any = {}; |
| | | const tree: T[] = []; |
| | | const childrenListMap: any = {}; |
| | | const nodeIds: any = {}; |
| | | const tree: T[] = []; |
| | | |
| | | for (const d of data) { |
| | | const parentId = d[config.parentId]; |
| | | if (childrenListMap[parentId] == null) { |
| | | childrenListMap[parentId] = []; |
| | | } |
| | | nodeIds[d[config.id]] = d; |
| | | childrenListMap[parentId].push(d); |
| | | } |
| | | for (const d of data) { |
| | | const parentId = d[config.parentId]; |
| | | if (childrenListMap[parentId] == null) { |
| | | childrenListMap[parentId] = []; |
| | | } |
| | | nodeIds[d[config.id]] = d; |
| | | childrenListMap[parentId].push(d); |
| | | } |
| | | |
| | | for (const d of data) { |
| | | const parentId = d[config.parentId]; |
| | | if (nodeIds[parentId] == null) { |
| | | tree.push(d); |
| | | } |
| | | } |
| | | const adaptToChildrenList = (o: any) => { |
| | | if (childrenListMap[o[config.id]] !== null) { |
| | | o[config.childrenList] = childrenListMap[o[config.id]]; |
| | | } |
| | | if (o[config.childrenList]) { |
| | | for (const c of o[config.childrenList]) { |
| | | adaptToChildrenList(c); |
| | | } |
| | | } |
| | | }; |
| | | for (const d of data) { |
| | | const parentId = d[config.parentId]; |
| | | if (nodeIds[parentId] == null) { |
| | | tree.push(d); |
| | | } |
| | | } |
| | | const adaptToChildrenList = (o: any) => { |
| | | if (childrenListMap[o[config.id]] !== null) { |
| | | o[config.childrenList] = childrenListMap[o[config.id]]; |
| | | } |
| | | if (o[config.childrenList]) { |
| | | for (const c of o[config.childrenList]) { |
| | | adaptToChildrenList(c); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | for (const t of tree) { |
| | | adaptToChildrenList(t); |
| | | } |
| | | for (const t of tree) { |
| | | adaptToChildrenList(t); |
| | | } |
| | | |
| | | return tree; |
| | | return tree; |
| | | }; |
| | | |
| | | /** |
| | |
| | | * @param {*} params 参数 |
| | | */ |
| | | export const tansParams = (params: any) => { |
| | | let result = ''; |
| | | for (const propName of Object.keys(params)) { |
| | | const value = params[propName]; |
| | | const part = encodeURIComponent(propName) + '='; |
| | | if (value !== null && value !== '' && typeof value !== 'undefined') { |
| | | if (typeof value === 'object') { |
| | | for (const key of Object.keys(value)) { |
| | | if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') { |
| | | const params = propName + '[' + key + ']'; |
| | | const subPart = encodeURIComponent(params) + '='; |
| | | result += subPart + encodeURIComponent(value[key]) + '&'; |
| | | } |
| | | } |
| | | } else { |
| | | result += part + encodeURIComponent(value) + '&'; |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | let result = ''; |
| | | for (const propName of Object.keys(params)) { |
| | | const value = params[propName]; |
| | | const part = encodeURIComponent(propName) + '='; |
| | | if (value !== null && value !== '' && typeof value !== 'undefined') { |
| | | if (typeof value === 'object') { |
| | | for (const key of Object.keys(value)) { |
| | | if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') { |
| | | const params = propName + '[' + key + ']'; |
| | | const subPart = encodeURIComponent(params) + '='; |
| | | result += subPart + encodeURIComponent(value[key]) + '&'; |
| | | } |
| | | } |
| | | } else { |
| | | result += part + encodeURIComponent(value) + '&'; |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | }; |
| | | |
| | | // 返回项目路径 |
| | | export const getNormalPath = (p: string): string => { |
| | | if (p.length === 0 || !p || p === 'undefined') { |
| | | return p; |
| | | } |
| | | const res = p.replace('//', '/'); |
| | | if (res[res.length - 1] === '/') { |
| | | return res.slice(0, res.length - 1); |
| | | } |
| | | return res; |
| | | if (p.length === 0 || !p || p === 'undefined') { |
| | | return p; |
| | | } |
| | | const res = p.replace('//', '/'); |
| | | if (res[res.length - 1] === '/') { |
| | | return res.slice(0, res.length - 1); |
| | | } |
| | | return res; |
| | | }; |
| | | |
| | | // 验证是否为blob格式 |
| | | export const blobValidate = (data: any) => { |
| | | return data.type !== 'application/json'; |
| | | return data.type !== 'application/json'; |
| | | }; |