import React, { useState } from 'react'; import MyModal from '@/components/MyModal'; import { useTranslation } from 'next-i18next'; import { Box, Flex, ModalBody, NumberInput, NumberInputField, NumberInputStepper, NumberIncrementStepper, NumberDecrementStepper, ModalFooter, Button } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import { getTeamDatasetValidSub, posCheckTeamDatasetSizeSub, postUpdateTeamDatasetSizeSub, putTeamDatasetSubStatus } from '@/web/support/wallet/sub/api'; import Markdown from '@/components/Markdown'; import MyTooltip from '@/components/MyTooltip'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import { useConfirm } from '@/web/common/hooks/useConfirm'; import { useRequest } from '@/web/common/hooks/useRequest'; import { useRouter } from 'next/router'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { formatTime2YMDHM } from '@fastgpt/global/common/string/time'; import MySelect from '@/components/Select'; import { SubStatusEnum, SubTypeEnum, subSelectMap } from '@fastgpt/global/support/wallet/sub/constants'; import { SubDatasetSizePreviewCheckResponse } from '@fastgpt/global/support/wallet/sub/api.d'; import { formatStorePrice2Read } from '@fastgpt/global/support/wallet/bill/tools'; import { useUserStore } from '@/web/support/user/useUserStore'; const SubDatasetModal = ({ onClose }: { onClose: () => void }) => { const { subPlans } = useSystemStore(); const datasetStorePrice = subPlans?.extraDatasetSize?.price || 0; const { t } = useTranslation(); const router = useRouter(); const { ConfirmModal, openConfirm } = useConfirm({}); const { userInfo } = useUserStore(); const [datasetSize, setDatasetSize] = useState(0); const [isRenew, setIsRenew] = useState('false'); const { data: teamSubPlan } = useQuery(['getTeamDatasetValidSub'], getTeamDatasetValidSub, { onSuccess(res) { setIsRenew(res?.extraDatasetSize?.status === SubStatusEnum.active ? 'true' : 'false'); setDatasetSize((res?.extraDatasetSize?.nextExtraDatasetSize || 0) / 1000); } }); const { mutate: onClickUpdateSub, isLoading: isPaying } = useRequest({ mutationFn: () => postUpdateTeamDatasetSizeSub({ size: datasetSize }), onSuccess() { setTimeout(() => { router.reload(); }, 100); }, successToast: t('common.Update success'), errorToast: t('common.error.Update error') }); const { mutate: onClickPreviewCheck, isLoading: isFetchingPreviewCheck } = useRequest({ mutationFn: () => posCheckTeamDatasetSizeSub({ size: datasetSize }), onSuccess(res: SubDatasetSizePreviewCheckResponse) { if (!res.payForNewSub) { onClickUpdateSub(''); return; } else { openConfirm( () => { if (!res.balanceEnough) return; onClickUpdateSub(''); }, undefined, 当前额外容量: {teamSubPlan?.extraDatasetSize?.currentExtraDatasetSize || 0}条 新的额外容量: {res.newSubSize}条 新套餐价格: {formatStorePrice2Read(res.newPlanPrice)}元 本次需支付: {formatStorePrice2Read(res.payPrice)}元 有效时长: 30天 账号余额: {formatStorePrice2Read(userInfo?.team?.balance).toFixed(3)}元 {!res.balanceEnough && ( 账号余额不足,请先充值余额再购买额外容量。 )} )(); } }, errorToast: t('common.error.Update error') }); const { mutate: onUpdateStatus } = useRequest({ mutationFn: (e: 'true' | 'false') => { setIsRenew(e); return putTeamDatasetSubStatus({ status: subSelectMap[e], type: SubTypeEnum.extraDatasetSize }); }, successToast: t('common.Update success'), errorToast: t('common.error.Update error') }); const isLoading = isPaying || isFetchingPreviewCheck; return ( <> {t('support.user.Price')} {t('support.wallet.subscription.Current dataset store')}: {teamSubPlan?.extraDatasetSize?.currentExtraDatasetSize || 0} {t('core.dataset.data.unit')} {teamSubPlan?.extraDatasetSize?.nextExtraDatasetSize !== undefined && ( {t('support.wallet.subscription.Next sub dataset size')}: {teamSubPlan?.extraDatasetSize?.nextExtraDatasetSize || 0} {t('core.dataset.data.unit')} )} {!!teamSubPlan?.extraDatasetSize?.startTime && ( 订阅开始时间: {formatTime2YMDHM(teamSubPlan?.extraDatasetSize?.startTime)} )} {!!teamSubPlan?.extraDatasetSize?.expiredTime && ( 订阅到期时间: {formatTime2YMDHM(teamSubPlan?.extraDatasetSize?.expiredTime)} )} 是否自动续费: {t('support.wallet.subscription.Update extra dataset size')} { setDatasetSize(Number(e)); }} > 000{t('core.dataset.data.unit')} {datasetSize * 1000 !== teamSubPlan?.extraDatasetSize?.nextExtraDatasetSize && ( )} ); }; export default SubDatasetModal;