Upload at 2026-01-01T09:09:44Z
This commit is contained in:
107
src/utils/helpers.ts
Normal file
107
src/utils/helpers.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* 生成唯一ID
|
||||
* @returns 唯一标识符
|
||||
*/
|
||||
export function generateId(): string {
|
||||
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化时间戳
|
||||
* @param date 日期对象
|
||||
* @returns 格式化的时间字符串
|
||||
*/
|
||||
export function formatTimestamp(date: Date): string {
|
||||
const now = new Date();
|
||||
const diff = now.getTime() - date.getTime();
|
||||
|
||||
// 小于1分钟显示"刚刚"
|
||||
if (diff < 60000) {
|
||||
return '刚刚';
|
||||
}
|
||||
|
||||
// 小于1小时显示分钟
|
||||
if (diff < 3600000) {
|
||||
const minutes = Math.floor(diff / 60000);
|
||||
return `${minutes}分钟前`;
|
||||
}
|
||||
|
||||
// 小于24小时显示小时
|
||||
if (diff < 86400000) {
|
||||
const hours = Math.floor(diff / 3600000);
|
||||
return `${hours}小时前`;
|
||||
}
|
||||
|
||||
// 超过24小时显示具体时间
|
||||
return date.toLocaleString('zh-CN', {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测文本中的URL
|
||||
* @param text 文本内容
|
||||
* @returns URL数组
|
||||
*/
|
||||
export function detectUrls(text: string): string[] {
|
||||
const urlRegex = /(https?:\/\/[^\s]+)/g;
|
||||
return text.match(urlRegex) || [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 将文本中的URL转换为链接
|
||||
* @param text 文本内容
|
||||
* @returns 包含链接的HTML字符串
|
||||
*/
|
||||
export function linkifyText(text: string): string {
|
||||
const urlRegex = /(https?:\/\/[^\s]+)/g;
|
||||
return text.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer" class="text-blue-600 hover:text-blue-800 underline">$1</a>');
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测代码块
|
||||
* @param text 文本内容
|
||||
* @returns 是否包含代码块
|
||||
*/
|
||||
export function hasCodeBlock(text: string): boolean {
|
||||
return text.includes('```') || text.includes('`');
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取代码块语言
|
||||
* @param text 文本内容
|
||||
* @returns 代码语言
|
||||
*/
|
||||
export function extractCodeLanguage(text: string): string {
|
||||
const match = text.match(/```(\w+)/);
|
||||
return match ? match[1] : 'text';
|
||||
}
|
||||
|
||||
/**
|
||||
* 延迟函数
|
||||
* @param ms 延迟毫秒数
|
||||
* @returns Promise
|
||||
*/
|
||||
export function delay(ms: number): Promise<void> {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
/**
|
||||
* 防抖函数
|
||||
* @param func 要防抖的函数
|
||||
* @param wait 等待时间
|
||||
* @returns 防抖后的函数
|
||||
*/
|
||||
export function debounce<T extends (...args: any[]) => any>(
|
||||
func: T,
|
||||
wait: number
|
||||
): (...args: Parameters<T>) => void {
|
||||
let timeout: ReturnType<typeof setTimeout>;
|
||||
return (...args: Parameters<T>) => {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(() => func(...args), wait);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user