diff --git a/src/pages/config/gitea/page.tsx b/src/pages/config/gitea/page.tsx index 0c9c0d8..d54847d 100644 --- a/src/pages/config/gitea/page.tsx +++ b/src/pages/config/gitea/page.tsx @@ -5,10 +5,20 @@ import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { giteaConfigSchema } from './store/schema'; import { toast } from 'sonner'; +import { useLayoutStore } from '../../auth/store'; +import { useShallow } from 'zustand/shallow'; +import { useEffect } from 'react'; export const GiteaConfigPage = () => { - const { config, setConfig, resetConfig } = useGiteaConfigStore(); + const { config, setConfig, resetConfig, saveToRemote, loadFromRemote, checkConfig } = useGiteaConfigStore(); + const layoutStore = useLayoutStore(useShallow(state => ({ me: state.me }))) + + useEffect(() => { + if (layoutStore.me) { + checkConfig({ isUser: !!layoutStore.me, reload: true }) + } + }, []) const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); @@ -66,6 +76,15 @@ export const GiteaConfigPage = () => { + {layoutStore.me && <> + + + + } diff --git a/src/pages/config/gitea/store/index.ts b/src/pages/config/gitea/store/index.ts index 36807ce..fa03eba 100644 --- a/src/pages/config/gitea/store/index.ts +++ b/src/pages/config/gitea/store/index.ts @@ -1,10 +1,15 @@ import { create } from 'zustand'; import type { GiteaConfig } from './schema'; +import { queryLogin } from '@/modules/query'; +import { toast } from 'sonner'; type GiteaConfigState = { config: GiteaConfig; setConfig: (config: Partial) => void; resetConfig: () => void; + saveToRemote: () => Promise; + loadFromRemote: () => Promise; + checkConfig: (opts?: { isUser?: boolean, reload?: boolean }) => Promise; }; const DEFAULT_CONFIG: GiteaConfig = { @@ -35,7 +40,7 @@ const saveConfig = (config: GiteaConfig) => { } }; -export const useGiteaConfigStore = create()((set) => ({ +export const useGiteaConfigStore = create()((set, get) => ({ config: loadInitialConfig(), setConfig: (newConfig) => set((state) => { @@ -47,4 +52,50 @@ export const useGiteaConfigStore = create()((set) => ({ saveConfig(DEFAULT_CONFIG); return set({ config: DEFAULT_CONFIG }); }, + saveToRemote: async () => { + const _config = get().config; + const res = await queryLogin.post({ + path: 'config', + key: 'update', + data: { + key: 'gitea_config.json', + data: _config, + } + }); + if (res.code === 200) { + toast.success('保存到远端成功') + } else { + toast.error('保存到远端失败') + } + }, + loadFromRemote: async () => { + const setConfig = (config: GiteaConfig) => set({ config }); + const res = await queryLogin.post({ + path: 'config', + key: 'get', + data: { + key: 'gitea_config.json', + } + }) + if (res.code === 404) { + toast.error('远端配置不存在') + return; + } + if (res.code === 200) { + const config = res.data?.data as GiteaConfig; + setConfig(config); + toast.success('获取远端配置成功') + } + }, + checkConfig: async (opts?: { isUser?: boolean, reload?: boolean }) => { + const { GITEA_TOKEN } = get().config; + if (!GITEA_TOKEN && opts?.isUser) { + await get().loadFromRemote(); + if (opts?.reload) { + location.reload(); + } + return true + } + return false + } }));