feat: 全局设置系统 — settings 表、CRUD 路由、主题偏好持久化

This commit is contained in:
2026-06-05 23:10:32 +08:00
parent e2eba6dc1f
commit 3f88e33bd1
23 changed files with 652 additions and 54 deletions

View File

@@ -0,0 +1,38 @@
import { Card, Segmented } from "antd";
import { useSettings } from "../../shared/hooks/use-settings";
import { parseThemePreference, useThemePreference } from "../../shared/hooks/use-theme-preference";
const THEME_OPTIONS = [
{ label: "系统", value: "system" },
{ label: "明亮", value: "light" },
{ label: "黑暗", value: "dark" },
] as const;
export function SettingsPage() {
const { preference, setPreference } = useThemePreference();
const { isUpdating, updateSettings } = useSettings();
const handleThemeChange = (value: string) => {
const theme = parseThemePreference(value);
updateSettings(
{ theme },
{
onSuccess: () => {
setPreference(theme);
},
},
);
};
return (
<Card extra={isUpdating ? "保存中..." : undefined} title="主题" type="inner">
<Segmented
block
onChange={(value) => handleThemeChange(value)}
options={THEME_OPTIONS.map((option) => ({ label: option.label, value: option.value }))}
value={preference}
/>
</Card>
);
}