import React, { useMemo } from 'react'; import { ModalBody, Flex, Box, Table, Thead, Tbody, Tr, Th, Td, TableContainer } from '@chakra-ui/react'; import { BillItemType } from '@fastgpt/global/support/wallet/bill/type.d'; import dayjs from 'dayjs'; import { BillSourceMap } from '@fastgpt/global/support/wallet/bill/constants'; import { formatStorePrice2Read } from '@fastgpt/global/support/wallet/bill/tools'; import MyModal from '@/components/MyModal'; import { useTranslation } from 'next-i18next'; const BillDetail = ({ bill, onClose }: { bill: BillItemType; onClose: () => void }) => { const { t } = useTranslation(); const filterBillList = useMemo( () => bill.list.filter((item) => item && item.moduleName), [bill.list] ); const { hasModel, hasTokens, hasInputTokens, hasOutputTokens, hasCharsLen, hasDuration, hasDataLen, hasDatasetSize } = useMemo(() => { let hasModel = false; let hasTokens = false; let hasInputTokens = false; let hasOutputTokens = false; let hasCharsLen = false; let hasDuration = false; let hasDataLen = false; let hasDatasetSize = false; bill.list.forEach((item) => { if (item.model !== undefined) { hasModel = true; } if (typeof item.tokenLen === 'number') { hasTokens = true; } if (typeof item.inputTokens === 'number') { hasInputTokens = true; } if (typeof item.outputTokens === 'number') { hasOutputTokens = true; } if (typeof item.charsLength === 'number') { hasCharsLen = true; } if (typeof item.duration === 'number') { hasDuration = true; } if (typeof item.datasetSize === 'number') { hasDatasetSize = true; } }); return { hasModel, hasTokens, hasInputTokens, hasOutputTokens, hasCharsLen, hasDuration, hasDataLen, hasDatasetSize }; }, [bill.list]); return ( {/* {t('wallet.bill.bill username')}: {t(bill.memberName)} */} {t('wallet.bill.Number')}: {bill.id} {t('wallet.bill.Time')}: {dayjs(bill.time).format('YYYY/MM/DD HH:mm:ss')} {t('wallet.bill.App name')}: {t(bill.appName) || '-'} {t('wallet.bill.Source')}: {t(BillSourceMap[bill.source]?.label)} {t('wallet.bill.Total')}: {bill.total}元 {t('wallet.bill.Bill Module')} {hasModel && } {hasTokens && } {hasInputTokens && } {hasOutputTokens && } {hasCharsLen && } {hasDuration && } {hasDatasetSize && ( )} {filterBillList.map((item, i) => ( {hasModel && } {hasTokens && } {hasInputTokens && } {hasOutputTokens && } {hasCharsLen && } {hasDuration && } {hasDatasetSize && } ))}
{t('wallet.bill.Module name')}{t('wallet.bill.Ai model')}{t('wallet.bill.Token Length')}{t('wallet.bill.Input Token Length')}{t('wallet.bill.Output Token Length')}{t('wallet.bill.Text Length')}{t('wallet.bill.Duration')}{t('support.wallet.subscription.type.extraDatasetSize')}费用(¥)
{t(item.moduleName)}{item.model ?? '-'}{item.tokenLen ?? '-'}{item.inputTokens ?? '-'}{item.outputTokens ?? '-'}{item.charsLength ?? '-'}{item.duration ?? '-'}{item.datasetSize ?? '-'}{formatStorePrice2Read(item.amount)}
); }; export default BillDetail;