[重构] 前端改造v3

This commit is contained in:
ryan
2026-03-11 14:53:45 +08:00
parent 5e963dc472
commit 13cc880f67
19 changed files with 2253 additions and 44 deletions
+3 -3
View File
@@ -11,19 +11,19 @@ export const dashboardNavigation: NavigationItem[] = [
href: '/proxy-routes',
label: '反代规则',
shortLabel: '规则',
description: '阶段 3 接入列表、表单与发布动作。',
description: '已接入列表、表单、证书匹配与发布动作。',
},
{
href: '/config-versions',
label: '配置版本',
shortLabel: '版本',
description: '阶段 3 接入版本预览、激活与回滚体验。',
description: '已接入版本预览、发布前 diff 与重新激活。',
},
{
href: '/nodes',
label: '节点管理',
shortLabel: '节点',
description: '阶段 3 接入状态标签、部署命令与更新动作。',
description: '已接入状态标签、部署命令、心跳与更新动作。',
},
{
href: '/apply-logs',
+71
View File
@@ -0,0 +1,71 @@
const dateTimeFormatter = new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
});
const relativeTimeFormatter = new Intl.RelativeTimeFormat('zh-CN', {
numeric: 'auto',
});
function toDate(value: string | Date | null | undefined) {
if (!value) {
return null;
}
const date = value instanceof Date ? value : new Date(value);
return Number.isNaN(date.getTime()) ? null : date;
}
export function formatDateTime(value: string | Date | null | undefined) {
const date = toDate(value);
if (!date) {
return '—';
}
return dateTimeFormatter.format(date).replace(/\//g, '-');
}
export function formatRelativeTime(value: string | Date | null | undefined) {
const date = toDate(value);
if (!date) {
return '—';
}
const diffMs = date.getTime() - Date.now();
const diffSeconds = Math.round(diffMs / 1000);
const absSeconds = Math.abs(diffSeconds);
if (absSeconds < 60) {
return relativeTimeFormatter.format(diffSeconds, 'second');
}
const diffMinutes = Math.round(diffSeconds / 60);
if (Math.abs(diffMinutes) < 60) {
return relativeTimeFormatter.format(diffMinutes, 'minute');
}
const diffHours = Math.round(diffMinutes / 60);
if (Math.abs(diffHours) < 24) {
return relativeTimeFormatter.format(diffHours, 'hour');
}
const diffDays = Math.round(diffHours / 24);
if (Math.abs(diffDays) < 30) {
return relativeTimeFormatter.format(diffDays, 'day');
}
const diffMonths = Math.round(diffDays / 30);
if (Math.abs(diffMonths) < 12) {
return relativeTimeFormatter.format(diffMonths, 'month');
}
const diffYears = Math.round(diffMonths / 12);
return relativeTimeFormatter.format(diffYears, 'year');
}