| import dayjs from 'dayjs'; | 
| import { BoleRegExp } from '@bole-core/core'; | 
| import { round, floor, omitBy } from 'lodash'; | 
|   | 
| export function format(date: string | Date, fmt = 'YYYY-MM-DD') { | 
|   return date ? dayjs(date).format(fmt) : ''; | 
| } | 
|   | 
| export const canPreviewFun = (url: string) => { | 
|   const _can = BoleRegExp.RegCanPreview.test(url); | 
|   BoleRegExp.RegCanPreview.lastIndex = 0; | 
|   return _can; | 
| }; | 
|   | 
| export function toRound(val: number, num = 2) { | 
|   if (val >= 0) { | 
|     return round(val, num); | 
|   } else { | 
|     const abs = Math.abs(val); | 
|     return 0 - round(abs, num); | 
|   } | 
| } | 
|   | 
| export function toThousand(input) { | 
|   const num = toRound(Number(input)).toFixed(2); | 
|   if (Number(num) >= 0) { | 
|     return num.toString().replace(/(^|\s)\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ',')); | 
|   } else { | 
|     const posNum = (0 - Number(num)).toFixed(2); | 
|     return ( | 
|       '-' + posNum.toString().replace(/(^|\s)\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ',')) | 
|     ); | 
|   } | 
| } | 
|   | 
| export function guid() { | 
|   return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { | 
|     const r = (Math.random() * 16) | 0, | 
|       v = c === 'x' ? r : (r & 0x3) | 0x8; | 
|     return v.toString(16); | 
|   }); | 
| } | 
|   | 
| export function setTemplateId() { | 
|   return guid().replace(/-/g, '').toUpperCase().slice(0, 16); | 
| } | 
|   | 
| // 时间 0填充 | 
| const timePad = (num: number) => { | 
|   return num < 10 ? '0' + num : num; | 
| }; | 
|   | 
| export const secondsToMinutes = (seconds: number) => { | 
|   const minutes = floor(seconds / 60); | 
|   const resetSeconds = seconds % 60; | 
|   return `${timePad(minutes)}:${timePad(resetSeconds)}`; | 
| }; | 
|   | 
| export const hiddenIDNumber = (realIDNumber: string) => | 
|   realIDNumber.replace(/^(.{6})(?:\d+)(.{4})$/, '$1********$2'); | 
|   | 
| export const hiddenPhoneNumber = (realPhoneNumbe: string) => | 
|   realPhoneNumbe.replace(/^(.{3})(?:\d+)(.{4})$/, '$1****$2'); | 
|   | 
| export function filterJoin(list: any[], separator = '-') { | 
|   return list.filter(Boolean).join(separator); | 
| } | 
|   | 
| export class StringUtils { | 
|   static insertSpaces(str: string, space = 4) { | 
|     if (!str) return ''; | 
|     const regex = new RegExp(`(.{${space}})`, 'g'); | 
|     return str.replace(regex, '$1 '); | 
|   } | 
|   | 
|   static societyCreditCodeInsertSpaces(str: string) { | 
|     if (!str) return ''; | 
|     return str.replace(/(.{4})(.{4})(.{4})(.{6})/g, '$1 $2 $3 $4'); | 
|   } | 
|   | 
|   static idNumberInsertSpaces(str: string) { | 
|     if (!str) return ''; | 
|     return str.replace(/(.{3})(.{3})(.{4})(.{4})(.{4})/g, '$1 $2 $3 $4 $5'); | 
|   } | 
|   | 
|   static phoneNumberAddSpace(realPhoneNumber: string) { | 
|     if (!realPhoneNumber) return ''; | 
|     return realPhoneNumber.replace(/^(\d{3})(\d*)(\d{4})$/, '$1 $2 $3'); | 
|   } | 
| } | 
|   | 
| export function paginateList<T>(list: T[], pageIndex: number, pageSize: number) { | 
|   const startIndex = (pageIndex - 1) * pageSize; | 
|   const endIndex = startIndex + pageSize; | 
|   return list.slice(startIndex, endIndex); | 
| } | 
|   | 
| export function omitByFalse<T>(object: { [key: string]: any }) { | 
|   return omitBy(object, (v) => !v) as any as T; | 
| } | 
|   | 
| export function filterCN(str: string) { | 
|   return str.replace(/[\u4e00-\u9fa5]/gi, ''); | 
| } | 
|   | 
| export function filterNumbersFromString(str: string) { | 
|   return str.replace(/\D/g, ''); | 
| } | 
|   | 
| export function calculateAge(idCardNumber) { | 
|   if (BoleRegExp.RegIDCard.test(idCardNumber)) { | 
|     const birthDateStr = idCardNumber.match(/(\d{6})(\d{8})/)[2]; | 
|     const birthDate = new Date( | 
|       birthDateStr.substring(0, 4), | 
|       birthDateStr.substring(4, 6) - 1, | 
|       birthDateStr.substring(6, 8) | 
|     ); | 
|   | 
|     // Calculate age | 
|     const today = new Date(); | 
|     const age = | 
|       today.getFullYear() - | 
|       birthDate.getFullYear() - | 
|       (today.getMonth() < birthDate.getMonth() || | 
|       (today.getMonth() === birthDate.getMonth() && today.getDate() < birthDate.getDate()) | 
|         ? 1 | 
|         : 0); | 
|   | 
|     return age; | 
|   } | 
|   return null; | 
| } |