feat: 新增站点公告系统与多项体验优化
此提交完成了以下核心功能与优化: 1. 新增站点公告全流程支持:包含公告模型、CRUD接口、管理后台页面、公告详情页与首页展示 2. 实现评论楼层化与回复嵌套:重构评论系统为树状结构,支持回复评论与层级限制 3. 添加用户在线状态追踪:异步更新用户最后活跃时间并做SQL限频 4. 优化用户体验:移动端浮动操作条、统一板块标签样式、用户页签到积分展示、注册即登录优化 5. 其他细节优化:SEO站点地图新增公告页、评论分页与统计、登录/注册表单增强等
This commit is contained in:
@@ -12,3 +12,38 @@ export function formatRelative(dateStr: string): string {
|
||||
if (diff < 365 * day) return `${Math.floor(diff / (30 * day))}个月前`;
|
||||
return `${Math.floor(diff / (365 * day))}年前`;
|
||||
}
|
||||
|
||||
/** 去掉末尾多余的 .0(12.0 → 12,1.25 → 1.3 由 toFixed 保证) */
|
||||
function trimTenths(v: number): string {
|
||||
return String(Number(v.toFixed(1)));
|
||||
}
|
||||
|
||||
/** 紧凑数字:999 / 1.2K / 128K / 2.3M(站点数据卡) */
|
||||
export function formatCompact(n: number): string {
|
||||
if (!Number.isFinite(n)) return "0";
|
||||
if (n < 1000) return String(Math.round(n));
|
||||
if (n < 1_000_000) {
|
||||
const v = n / 1000;
|
||||
return `${v >= 100 ? Math.round(v) : trimTenths(v)}K`;
|
||||
}
|
||||
return `${trimTenths(n / 1_000_000)}M`;
|
||||
}
|
||||
|
||||
function pad2(n: number) {
|
||||
return String(n).padStart(2, "0");
|
||||
}
|
||||
|
||||
/** 短日期:今年显示 MM-DD,往年显示 YYYY-MM-DD(右栏公告用) */
|
||||
export function formatShortDate(dateStr: string): string {
|
||||
const d = new Date(dateStr);
|
||||
const md = `${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
|
||||
return d.getFullYear() === new Date().getFullYear()
|
||||
? md
|
||||
: `${d.getFullYear()}-${md}`;
|
||||
}
|
||||
|
||||
/** 完整日期 YYYY-MM-DD */
|
||||
export function formatDate(dateStr: string): string {
|
||||
const d = new Date(dateStr);
|
||||
return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user