import AccountContainer from '../components/AccountContainer'; import { Box, Flex, Grid, Progress, useDisclosure } from '@chakra-ui/react'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useTranslation } from 'next-i18next'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useUserStore } from '@/web/support/user/useUserStore'; import { TeamMemberRoleEnum } from '@fastgpt/global/support/user/team/constant'; import dynamic from 'next/dynamic'; import { useState, useMemo } from 'react'; import WorkflowVariableModal from './components/WorkflowVariableModal'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { serviceSideProps } from '@fastgpt/web/common/system/nextjs'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { GET } from '@/web/common/api/request'; import type { checkUsageResponse } from '@/pages/api/support/user/team/thirtdParty/checkUsage'; import MyBox from '@fastgpt/web/components/common/MyBox'; const LafAccountModal = dynamic(() => import('@/components/support/laf/LafAccountModal')); const OpenAIAccountModal = dynamic(() => import('./components/OpenAIAccountModal')); export type ThirdPartyAccountType = { name: string; icon: string; iconColor?: string; key?: string; intro: string; onClick?: () => void; isOpen?: boolean; active: boolean; usage?: { used: number; total: number; }; }; const ThirdParty = () => { const { t } = useTranslation(); const { feConfigs } = useSystemStore(); const { toast } = useToast(); const { isOpen: isOpenLaf, onClose: onCloseLaf, onOpen: onOpenLaf } = useDisclosure(); const { isOpen: isOpenOpenai, onClose: onCloseOpenai, onOpen: onOpenOpenai } = useDisclosure(); const [workflowVariable, setWorkflowVariable] = useState(); const { userInfo } = useUserStore(); const isOwner = userInfo?.team?.role === TeamMemberRoleEnum.owner; const defaultAccountList: ThirdPartyAccountType[] = useMemo( () => [ { name: t('account_thirdParty:laf_account'), icon: 'support/account/laf', intro: t('common:support.user.Laf account intro'), onClick: onOpenLaf, isOpen: !!feConfigs?.lafEnv, active: !!userInfo?.team?.lafAccount?.appid }, { name: t('account_thirdParty:openai_account_configuration'), iconColor: 'black', icon: 'common/openai', intro: t('account_thirdParty:open_api_notice'), onClick: onOpenOpenai, isOpen: feConfigs?.show_openai_account, active: userInfo?.team?.openaiAccount?.key !== undefined } ], [ feConfigs?.lafEnv, feConfigs?.show_openai_account, onOpenLaf, onOpenOpenai, t, userInfo?.team?.lafAccount?.appid, userInfo?.team?.openaiAccount?.key ] ); const { data: workflowVariables = [], loading } = useRequest2( async (): Promise => { return Promise.all( (feConfigs?.externalProviderWorkflowVariables || []).map(async (item) => { const usage = await (async () => { try { return await GET('/support/user/team/thirtdParty/checkUsage', { key: item.key }); } catch (err) { return; } })(); const account = { key: item.key, name: item.name, active: userInfo?.team?.externalWorkflowVariables?.[item.key] !== undefined, icon: 'common/variable', iconColor: 'primary.600', intro: item.intro || t('account_thirdParty:no_intro') }; return { ...account, usage, onClick: () => setWorkflowVariable(account), isOpen: item.isOpen }; }) ); }, { manual: false, refreshDeps: [ feConfigs?.externalProviderWorkflowVariables, userInfo?.team?.externalWorkflowVariables ] } ); const accountList = useMemo( () => [...defaultAccountList, ...workflowVariables], [defaultAccountList, workflowVariables] ); return ( {t('account_thirdParty:third_party_account')} {t('account_thirdParty:third_party_account_desc')} {accountList .filter((item) => item.isOpen) .map((item) => ( toast({ title: t('account_thirdParty:error.no_permission'), status: 'warning' }) } position={'relative'} > {item.name} {item.active ? t('account_thirdParty:configured') : t('account_thirdParty:not_configured')} {item.intro} {item.active && item.usage && ( {t('account_thirdParty:usage')} {item.usage?.total ? ( {item.usage.used}/{item.usage.total} ) : ( {t('account_thirdParty:unavailable')} )} )} ))} {isOpenLaf && userInfo && ( )} {isOpenOpenai && userInfo && ( )} {workflowVariable && ( setWorkflowVariable(undefined)} /> )} ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content, ['account', 'account_thirdParty'])) } }; } export default ThirdParty;