mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-07 10:12:27 +08:00
Initial commit
This commit is contained in:
120
frontend/src/utils/announcement.ts
Normal file
120
frontend/src/utils/announcement.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
/**
|
||||
* 公告类型相关工具函数
|
||||
*/
|
||||
import { AlertCircle, AlertTriangle, Wrench, Info, type LucideIcon } from 'lucide-vue-next'
|
||||
|
||||
export type AnnouncementType = 'important' | 'warning' | 'maintenance' | 'info'
|
||||
|
||||
interface AnnouncementTypeConfig {
|
||||
icon: LucideIcon
|
||||
iconColor: string
|
||||
label: string
|
||||
bgColor: string
|
||||
borderColor: string
|
||||
textColor: string
|
||||
}
|
||||
|
||||
const announcementTypeConfigs: Record<AnnouncementType, AnnouncementTypeConfig> = {
|
||||
important: {
|
||||
icon: AlertCircle,
|
||||
iconColor: 'text-rose-600 dark:text-rose-400',
|
||||
label: '重要公告',
|
||||
bgColor: 'bg-rose-50 dark:bg-rose-950/30',
|
||||
borderColor: 'border-rose-200 dark:border-rose-800',
|
||||
textColor: 'text-rose-800 dark:text-rose-200'
|
||||
},
|
||||
warning: {
|
||||
icon: AlertTriangle,
|
||||
iconColor: 'text-amber-600 dark:text-amber-400',
|
||||
label: '警告通知',
|
||||
bgColor: 'bg-amber-50 dark:bg-amber-950/30',
|
||||
borderColor: 'border-amber-200 dark:border-amber-800',
|
||||
textColor: 'text-amber-800 dark:text-amber-200'
|
||||
},
|
||||
maintenance: {
|
||||
icon: Wrench,
|
||||
iconColor: 'text-orange-600 dark:text-orange-400',
|
||||
label: '维护通知',
|
||||
bgColor: 'bg-orange-50 dark:bg-orange-950/30',
|
||||
borderColor: 'border-orange-200 dark:border-orange-800',
|
||||
textColor: 'text-orange-800 dark:text-orange-200'
|
||||
},
|
||||
info: {
|
||||
icon: Info,
|
||||
iconColor: 'text-primary dark:text-primary',
|
||||
label: '系统公告',
|
||||
bgColor: 'bg-primary/5',
|
||||
borderColor: 'border-primary/20',
|
||||
textColor: 'text-foreground'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告类型配置
|
||||
*/
|
||||
export function getAnnouncementConfig(type: string): AnnouncementTypeConfig {
|
||||
return announcementTypeConfigs[type as AnnouncementType] || announcementTypeConfigs.info
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告图标组件
|
||||
*/
|
||||
export function getAnnouncementIcon(type: string): LucideIcon {
|
||||
return getAnnouncementConfig(type).icon
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告图标颜色
|
||||
*/
|
||||
export function getAnnouncementIconColor(type: string): string {
|
||||
return getAnnouncementConfig(type).iconColor
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告类型标签
|
||||
*/
|
||||
export function getAnnouncementTypeLabel(type: string): string {
|
||||
return getAnnouncementConfig(type).label
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告背景颜色
|
||||
*/
|
||||
export function getAnnouncementBgColor(type: string): string {
|
||||
return getAnnouncementConfig(type).bgColor
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告边框颜色
|
||||
*/
|
||||
export function getAnnouncementBorderColor(type: string): string {
|
||||
return getAnnouncementConfig(type).borderColor
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公告文字颜色
|
||||
*/
|
||||
export function getAnnouncementTextColor(type: string): string {
|
||||
return getAnnouncementConfig(type).textColor
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Markdown 内容转换为纯文本摘要
|
||||
*/
|
||||
export function getPlainTextSummary(content: string, maxLength = 120): string {
|
||||
const cleaned = content
|
||||
.replace(/```[\s\S]*?```/g, ' ')
|
||||
.replace(/`[^`]*`/g, ' ')
|
||||
.replace(/!\[[^\]]*]\([^)]*\)/g, ' ')
|
||||
.replace(/\[[^\]]*]\(([^)]*)\)/g, '$1')
|
||||
.replace(/[#>*_~]/g, '')
|
||||
.replace(/\n+/g, ' ')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim()
|
||||
|
||||
if (cleaned.length <= maxLength) {
|
||||
return cleaned
|
||||
}
|
||||
|
||||
return `${cleaned.slice(0, maxLength).trim()}...`
|
||||
}
|
||||
Reference in New Issue
Block a user