| import dayjs from 'dayjs'; | 
| import { BoleRegExp, Message } 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 copyTextToClipboard(text: string) { | 
|   if (navigator.clipboard && window.isSecureContext) { | 
|     // navigator clipboard 向剪贴板写文本 | 
|     navigator.clipboard | 
|       .writeText(text) | 
|       .then(() => { | 
|         Message.successMessage('已复制'); | 
|       }) | 
|       .catch((error) => { | 
|         console.error('Failed to copy text to clipboard:', error); | 
|       }); | 
|   } else { | 
|     // 创建text area | 
|     let textArea = document.createElement('textarea'); | 
|     textArea.value = text; | 
|     // 使text area不在viewport,同时设置不可见 | 
|     textArea.style.position = 'absolute'; | 
|     textArea.style.opacity = 0 as any; | 
|     textArea.style.left = '-999999px'; | 
|     textArea.style.top = '-999999px'; | 
|     document.body.appendChild(textArea); | 
|     textArea.select(); | 
|     let res = document.execCommand('copy'); | 
|     if (res) { | 
|       Message.successMessage('已复制'); | 
|     } | 
|     textArea.remove(); | 
|   } | 
| } | 
|   | 
| export function addStarForString(str: string, start = 0, end = 0) { | 
|   return str.substring(0, start) + '*'.repeat(end - start) + str.substring(end); | 
| } | 
|   | 
| export function addStarForEmail(str: string) { | 
|   const end = str.lastIndexOf('.'); | 
|   return addStarForString(str, 2, end); | 
| } |