diff --git a/apps/web/components/ProjectCard.tsx b/apps/web/components/ProjectCard.tsx
index 8f03b4f..1fa3fe7 100644
--- a/apps/web/components/ProjectCard.tsx
+++ b/apps/web/components/ProjectCard.tsx
@@ -1,5 +1,5 @@
import Link from "next/link";
-import { BookOpen, ChevronRight, Clock3, Sparkles } from "lucide-react";
+import { BookOpen, ChevronRight, Clock3 } from "lucide-react";
import { Badge } from "@/components/ui/Badge";
import type { ProjectResponse } from "@/lib/api/types";
@@ -67,12 +67,8 @@ export function ProjectCard({ project, compact = false }: ProjectCardProps) {
{project.genre ? {project.genre} : null}
-
-
- 创作中
-
{pendingCount > 0 ? (
- {pendingCount} 待审稿
+ {pendingCount} 待审
) : null}
diff --git a/apps/web/components/settings/ProvidersSettings.tsx b/apps/web/components/settings/ProvidersSettings.tsx
index 00996fb..4c3a56f 100644
--- a/apps/web/components/settings/ProvidersSettings.tsx
+++ b/apps/web/components/settings/ProvidersSettings.tsx
@@ -21,6 +21,7 @@ import { Select } from "@/components/ui/Select";
import { StatusNote } from "@/components/ui/StatusNote";
import { TextInput } from "@/components/ui/TextInput";
import { api } from "@/lib/api/client";
+import { cardClass } from "@/lib/ui/variants";
import {
API_KEY_PROVIDERS,
KNOWN_PROVIDERS,
@@ -91,17 +92,22 @@ export function ProvidersSettings({
const saveRouting = async (): Promise => {
setSavingRouting(true);
- const { data, error } = await api.PUT("/settings/providers", {
- body: { tier_routing: draftsToRoutingInput(routing) },
- });
- setSavingRouting(false);
- if (error || !data) {
- toast("保存档位路由失败,请重试", "error");
- return;
+ try {
+ const { data, error } = await api.PUT("/settings/providers", {
+ body: { tier_routing: draftsToRoutingInput(routing) },
+ });
+ if (error || !data) {
+ toast("保存档位路由失败,请重试", "error");
+ return;
+ }
+ setProviders(data.providers ?? []);
+ setRouting(toRoutingDrafts(data.tier_routing ?? []));
+ toast("档位路由已保存", "success");
+ } catch {
+ toast("保存档位路由失败,请检查后端连接", "error");
+ } finally {
+ setSavingRouting(false);
}
- setProviders(data.providers ?? []);
- setRouting(toRoutingDrafts(data.tier_routing ?? []));
- toast("档位路由已保存", "success");
};
const saveCredential = async (providerId: string): Promise => {
@@ -111,43 +117,53 @@ export function ProvidersSettings({
return;
}
setSavingId(providerId);
- const { data, error } = await api.PUT("/settings/providers", {
- body: { credentials: [{ provider: providerId, api_key: apiKey }] },
- });
- setSavingId(null);
- if (error || !data) {
- toast("保存凭据失败,请重试", "error");
- return;
+ try {
+ const { data, error } = await api.PUT("/settings/providers", {
+ body: { credentials: [{ provider: providerId, api_key: apiKey }] },
+ });
+ if (error || !data) {
+ toast("保存凭据失败,请重试", "error");
+ return;
+ }
+ setProviders(data.providers ?? []);
+ setDrafts((prev) => ({ ...prev, [providerId]: "" }));
+ toast("凭据已保存", "success");
+ } catch {
+ toast("保存凭据失败,请检查后端连接", "error");
+ } finally {
+ setSavingId(null);
}
- setProviders(data.providers ?? []);
- setDrafts((prev) => ({ ...prev, [providerId]: "" }));
- toast("凭据已保存", "success");
};
const testConnection = async (providerId: string): Promise => {
setTestingId(providerId);
- const { data, error } = await api.POST("/settings/providers/test", {
- body: { provider: providerId },
- });
- setTestingId(null);
- if (error || !data) {
- toast("测试连接失败", "error");
- return;
+ try {
+ const { data, error } = await api.POST("/settings/providers/test", {
+ body: { provider: providerId },
+ });
+ if (error || !data) {
+ toast("测试连接失败", "error");
+ return;
+ }
+ setResults((prev) => ({
+ ...prev,
+ [providerId]: { ok: data.ok, capabilities: data.capabilities },
+ }));
+ toast(
+ data.ok ? "连接成功" : "连接未通过",
+ data.ok ? "success" : "error",
+ );
+ } catch {
+ toast("测试连接失败,请检查后端连接", "error");
+ } finally {
+ setTestingId(null);
}
- setResults((prev) => ({
- ...prev,
- [providerId]: { ok: data.ok, capabilities: data.capabilities },
- }));
- toast(data.ok ? "连接成功" : "连接未通过", data.ok ? "success" : "error");
};
return (