diff --git a/frontend/desktop/.gitignore b/frontend/desktop/.gitignore index f0a91ba92dd..a09c663e148 100644 --- a/frontend/desktop/.gitignore +++ b/frontend/desktop/.gitignore @@ -27,7 +27,7 @@ yarn-error.log* # local env files .env*.local - +data/config.local.json # vercel .vercel diff --git a/frontend/desktop/data/config.json b/frontend/desktop/data/config.json new file mode 100644 index 00000000000..a1473a002e9 --- /dev/null +++ b/frontend/desktop/data/config.json @@ -0,0 +1,3 @@ +{ + "scripts": [] +} \ No newline at end of file diff --git a/frontend/desktop/deploy/manifests/deploy.yaml.tmpl b/frontend/desktop/deploy/manifests/deploy.yaml.tmpl index 83cfaad236a..79ae8456ba8 100644 --- a/frontend/desktop/deploy/manifests/deploy.yaml.tmpl +++ b/frontend/desktop/deploy/manifests/deploy.yaml.tmpl @@ -37,6 +37,10 @@ metadata: data: config.yaml: |- addr: :3000 + config.json: |- + { + "scripts": [] + } --- apiVersion: apps/v1 kind: Deployment @@ -165,6 +169,9 @@ spec: - name: desktop-frontend-volume mountPath: /config.yaml subPath: config.yaml + - mountPath: /app/data/config.json + name: desktop-frontend-volume + subPath: config.json resources: limits: cpu: 1000m diff --git a/frontend/desktop/src/pages/api/system/getSystemConfig.ts b/frontend/desktop/src/pages/api/system/getSystemConfig.ts new file mode 100644 index 00000000000..2b08d072f4b --- /dev/null +++ b/frontend/desktop/src/pages/api/system/getSystemConfig.ts @@ -0,0 +1,28 @@ +import { jsonRes } from '@/services/backend/response'; +import { SystemConfigType } from '@/types/system'; +import { readFileSync } from 'fs'; +import type { NextApiRequest, NextApiResponse } from 'next'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const config = await getSystemConfig(); + jsonRes(res, { + data: config, + code: 200 + }); +} + +const defaultConfig: SystemConfigType = { + scripts: [] +}; + +export async function getSystemConfig(): Promise { + try { + const filename = + process.env.NODE_ENV === 'development' ? 'data/config.local.json' : '/app/data/config.json'; + const res = JSON.parse(readFileSync(filename, 'utf-8')); + return res; + } catch (error) { + console.log('get system config error, set default'); + return defaultConfig; + } +} diff --git a/frontend/desktop/src/pages/index.tsx b/frontend/desktop/src/pages/index.tsx index 42f7b69403f..242a084a817 100644 --- a/frontend/desktop/src/pages/index.tsx +++ b/frontend/desktop/src/pages/index.tsx @@ -6,11 +6,14 @@ import { enableRecharge } from '@/services/enable'; import request from '@/services/request'; import useAppStore from '@/stores/app'; import useSessionStore from '@/stores/session'; +import { ApiResp } from '@/types'; +import { SystemConfigType } from '@/types/system'; import { parseOpenappQuery } from '@/utils/format'; import { useColorMode } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useRouter } from 'next/router'; +import Script from 'next/script'; import { createContext, useEffect, useState } from 'react'; const destination = '/signin'; interface IMoreAppsContext { @@ -35,6 +38,10 @@ export default function Home({ const setAutoLaunch = useAppStore((state) => state.setAutoLaunch); const cancelAutoLaunch = useAppStore((state) => state.cancelAutoLaunch); + const { data: systemConfig, refetch } = useQuery(['getSystemConfig'], () => + request>('/api/system/getSystemConfig') + ); + useEffect(() => { colorMode === 'dark' ? toggleColorMode() : null; }, [colorMode, toggleColorMode]); @@ -79,6 +86,9 @@ export default function Home({ return ( + {systemConfig?.data?.scripts?.map((item, i) => { + return