107 lines
2.5 KiB
TypeScript
107 lines
2.5 KiB
TypeScript
/**
|
|
* 生成唯一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);
|
|
};
|
|
} |