From de081a5e3396e807d9ef886946aef834996b928c Mon Sep 17 00:00:00 2001
From: seaHi
Date: Fri, 14 Aug 2026 17:49:13 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E5=BB=BA=E7=AB=99=E6=97=A5=E6=9C=9F=E5=B9=B6=E5=9C=A8=E9=A1=B5?=
=?UTF-8?q?=E8=84=9A=E5=B1=95=E7=A4=BA=E8=BF=90=E8=A1=8C=E6=97=B6=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/routes/+layout.server.ts | 3 ++-
src/routes/+layout.svelte | 24 ++++++++++++++++++++++-
src/routes/admin/settings/+page.server.ts | 4 ++++
src/routes/admin/settings/+page.svelte | 10 ++++++++++
4 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts
index 9fc531f..0ddf7eb 100644
--- a/src/routes/+layout.server.ts
+++ b/src/routes/+layout.server.ts
@@ -17,7 +17,8 @@ export const load: LayoutServerLoad = async ({ platform }) => {
title: 'BlogFlare',
description: 'A high-performance blog powered by Cloudflare D1, R2, and KV.',
avatar_enabled: 'true',
- avatar_url: ''
+ avatar_url: '',
+ launch_date: ''
};
if (db) {
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 590b196..e2d12bd 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -7,6 +7,18 @@
import { page } from '$app/stores';
let scrolled = $state(false);
+ let uptimeText = $state('');
+
+ function calcUptime(launchDate: string): string {
+ if (!launchDate) return '';
+ const start = new Date(launchDate).getTime();
+ const diff = Date.now() - start;
+ if (diff < 0) return '';
+ const days = Math.floor(diff / 86400000);
+ const hours = Math.floor((diff % 86400000) / 3600000);
+ const minutes = Math.floor((diff % 3600000) / 60000);
+ return `${days} 天 ${hours} 小时 ${minutes} 分钟`;
+ }
onMount(() => {
const handleScroll = () => {
@@ -14,8 +26,16 @@
};
window.addEventListener('scroll', handleScroll);
+ // 初始化建站时长
+ const launchDate = $page.data.site?.launch_date || '';
+ uptimeText = calcUptime(launchDate);
+ const timer = setInterval(() => {
+ uptimeText = calcUptime(launchDate);
+ }, 60000);
+
return () => {
window.removeEventListener('scroll', handleScroll);
+ clearInterval(timer);
};
});
@@ -96,7 +116,9 @@
© {new Date().getFullYear()}
{$page.data.site?.title || 'BlogFlare'}
- 感谢陪伴:
+ {#if uptimeText}
+ 感谢陪伴:{uptimeText}
+ {/if}
diff --git a/src/routes/admin/settings/+page.server.ts b/src/routes/admin/settings/+page.server.ts
index 2bf031b..5122f92 100644
--- a/src/routes/admin/settings/+page.server.ts
+++ b/src/routes/admin/settings/+page.server.ts
@@ -42,6 +42,10 @@ export const actions: Actions = {
{
key: 'r2.public_domain',
value: data.get('r2_public_domain')?.toString() || 'https://assets.yourdomain.com'
+ },
+ {
+ key: 'site.launch_date',
+ value: data.get('site_launch_date')?.toString() || ''
}
];
diff --git a/src/routes/admin/settings/+page.svelte b/src/routes/admin/settings/+page.svelte
index 0bad080..32e5384 100644
--- a/src/routes/admin/settings/+page.svelte
+++ b/src/routes/admin/settings/+page.svelte
@@ -85,6 +85,16 @@
/>
请确保不要以斜杠 / 结尾
+
+
+
+ 用于在底栏显示"感谢陪伴 X 天 X 小时"
+