diff --git a/src/routes/admin/settings/+page.server.ts b/src/routes/admin/settings/+page.server.ts index 51b9a63..aa6a2ba 100644 --- a/src/routes/admin/settings/+page.server.ts +++ b/src/routes/admin/settings/+page.server.ts @@ -34,54 +34,13 @@ export const load: PageServerLoad = async ({ locals, platform }) => { }; export const actions: Actions = { - updateWebAnalytics: async ({ request, platform }) => { + updateBasicSettings: async ({ request, platform }) => { const db = platform?.env?.DB; if (!db) return fail(500, { error: '数据库未连接' }); const data = await request.formData(); - const token = data.get('web_analytics_token')?.toString().trim() || ''; + const autoWebp = data.get('upload_auto_webp') === 'true' ? 'true' : 'false'; - try { - await db - .prepare( - `INSERT INTO settings (key, value, updated_at) - VALUES (?, ?, CURRENT_TIMESTAMP) - ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP` - ) - .bind('site.web_analytics_token', token) - .run(); - return { success: true }; - } catch (err: any) { - console.error('Failed to update web analytics token', err); - return fail(500, { error: '保存统计设置失败' }); - } - }, - updateUploads: async ({ request, platform }) => { - const db = platform?.env?.DB; - if (!db) return fail(500, { error: '数据库未连接' }); - - const data = await request.formData(); - const enabled = data.get('upload_auto_webp') === 'true'; - try { - await db - .prepare( - `INSERT INTO settings (key, value, updated_at) - VALUES (?, ?, CURRENT_TIMESTAMP) - ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP` - ) - .bind('upload.auto_webp', String(enabled)) - .run(); - return { success: true }; - } catch (err) { - console.error('Failed to update upload settings', err); - return fail(500, { error: '保存图片上传设置失败' }); - } - }, - updateSiteInfo: async ({ request, platform }) => { - const db = platform?.env?.DB; - if (!db) return fail(500, { error: '数据库未连接' }); - - const data = await request.formData(); const updates = [ { key: 'site.title', value: data.get('site_title')?.toString() || 'BlogFlare' }, { @@ -99,6 +58,12 @@ export const actions: Actions = { { key: 'site.launch_date', value: data.get('site_launch_date')?.toString() || '' + }, + { key: 'upload.auto_webp', value: autoWebp }, + { key: 'agent.api_token', value: data.get('agent_api_token')?.toString() || '' }, + { + key: 'site.web_analytics_token', + value: data.get('web_analytics_token')?.toString().trim() || '' } ]; @@ -115,30 +80,8 @@ export const actions: Actions = { } return { success: true }; } catch (err: any) { - console.error('Failed to update site info', err); - return fail(500, { error: '保存站点信息失败' }); - } - }, - updateApiToken: async ({ request, platform }) => { - const db = platform?.env?.DB; - if (!db) return fail(500, { error: '数据库未连接' }); - - const data = await request.formData(); - const token = data.get('agent_api_token')?.toString() || ''; - - try { - await db - .prepare( - `INSERT INTO settings (key, value, updated_at) - VALUES (?, ?, CURRENT_TIMESTAMP) - ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP` - ) - .bind('agent.api_token', token) - .run(); - return { success: true }; - } catch (err: unknown) { - console.error('Failed to update api token', err); - return fail(500, { error: '保存 API Token 失败' }); + console.error('Failed to update basic settings', err); + return fail(500, { error: '保存基础设置失败' }); } }, updateAliases: async ({ request, platform }) => { diff --git a/src/routes/admin/settings/+page.svelte b/src/routes/admin/settings/+page.svelte index 94ecfc0..ccdfe59 100644 --- a/src/routes/admin/settings/+page.svelte +++ b/src/routes/admin/settings/+page.svelte @@ -63,20 +63,47 @@
{#if activeTab === 'basic'} -
-
-

站点基础信息

+
+
+

系统与安全环境

+
+
+ 驱动框架 + SvelteKit 5 + Cloudflare +
+
+ 当前管理员 + {data.user?.email || '未知用户'} +
+
+ 数据库绑定 + {data.platformEnv} +
+
+ R2存储绑定 + {data.r2Env} +
+
+ 鉴权模式 + Cloudflare Access (Zero Trust) +
+
+
+
-
{ - return async ({ update }) => { - update({ reset: false }); - }; - }} - class="alias-form" - > +
+ { + return async ({ update }) => { + update({ reset: false }); + }; + }} + class="alias-form" + > +
+

站点基础信息

@@ -121,89 +148,31 @@ />
- -
- -
- -
- -
- -
-

系统与安全环境

-
-
- 驱动框架 - SvelteKit 5 + Cloudflare -
-
- 当前管理员 - {data.user?.email || '未知用户'} -
-
- 数据库绑定 - {data.platformEnv} -
-
- R2存储绑定 - {data.r2Env} -
-
- 鉴权模式 - Cloudflare Access (Zero Trust) -
-
-
+
-
-

图片上传

-
{ - return async ({ update }) => { - await update({ reset: false }); - }; - }} - class="alias-form" - > +
+

图片上传

-

+

默认关闭。开启后,后台各入口上传的 JPEG / PNG 图片会在浏览器中以 80% 质量转换为 WebP,保持原尺寸及透明背景。GIF、动态 PNG 和已有 WebP 保持原格式。 仅影响新上传图片;直接调用上传 API 的客户端需自行转换。

-
- -
- -
+
-
+
-
-

API 与 AI 集成

-

- 配置允许 AI 或第三方工具直接管理文章的 API 访问令牌 (Token)。请求 API 时请在 HTTP Header - 中添加 Authorization: Bearer <Token>。 -

- -
{ - return async ({ update }) => { - update({ reset: false }); - }; - }} - class="alias-form" - > +
+

API 与 AI 集成

+

+ 配置允许 AI 或第三方工具直接管理文章的 API 访问令牌 (Token)。请求 API 时请在 HTTP Header + 中添加 Authorization: Bearer <Token>。 +

@@ -230,31 +199,17 @@ >
-
- -
- -
+
-
+
-
-

Cloudflare Web Analytics

-

- 填写 Cloudflare Web Analytics 统计脚本中的 token,用于采集页面浏览量和访问次数。 请勿填写 - Site Tag;它是查询标识,不能用于浏览器采集。后台查询还需配置 CF_ACCOUNT_ID, 并确保 - CF_API_TOKEN 具有该账户的 Account Settings Read 和 Account Analytics Read 权限。 -

-
{ - return async ({ update }) => { - update({ reset: false }); - }; - }} - class="alias-form" - > +
+

Cloudflare Web Analytics

+

+ 填写 Cloudflare Web Analytics 统计脚本中的 token,用于采集页面浏览量和访问次数。 + 请勿填写 Site Tag;它是查询标识,不能用于浏览器采集。后台查询还需配置 CF_ACCOUNT_ID, + 并确保 CF_API_TOKEN 具有该账户的 Account Settings Read 和 Account Analytics Read 权限。 +

-
- -
- -
+
+ +
+ +
+
{/if}