import crypto from 'crypto'; import { useToast } from '@/hooks/useToast'; import dayjs from 'dayjs'; /** * copy text data */ export const useCopyData = () => { const { toast } = useToast(); return { copyData: async (data: string, title: string = '复制成功') => { try { if (navigator.clipboard) { await navigator.clipboard.writeText(data); } else { throw new Error(''); } } catch (error) { const textarea = document.createElement('textarea'); textarea.value = data; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); } toast({ title, status: 'success', duration: 1000 }); } }; }; /** * 密码加密 */ export const createHashPassword = (text: string) => { const hash = crypto.createHash('sha256').update(text).digest('hex'); return hash; }; /** * 对象转成 query 字符串 */ export const Obj2Query = (obj: Record) => { const queryParams = new URLSearchParams(); for (const key in obj) { queryParams.append(key, `${obj[key]}`); } return queryParams.toString(); }; /** * 格式化时间成聊天格式 */ export const formatTimeToChatTime = (time: Date) => { const now = dayjs(); const target = dayjs(time); // 如果传入时间小于60秒,返回刚刚 if (now.diff(target, 'second') < 60) { return '刚刚'; } // 如果时间是今天,展示几时:几秒 if (now.isSame(target, 'day')) { return target.format('HH:mm'); } // 如果是昨天,展示昨天 if (now.subtract(1, 'day').isSame(target, 'day')) { return '昨天'; } // 如果是前天,展示前天 if (now.subtract(2, 'day').isSame(target, 'day')) { return '前天'; } // 如果是今年,展示某月某日 if (now.isSame(target, 'year')) { return target.format('M月D日'); } // 如果是更久之前,展示某年某月某日 return target.format('YYYY/M/D'); };