| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
                        - import { useState } from 'react'
 - import type { FC } from 'react'
 - import { useTranslation } from 'react-i18next'
 - import type { Provider, ProviderWithQuota } from '../declarations'
 - import Tooltip from '@/app/components/base/tooltip'
 - import { InfoCircle } from '@/app/components/base/icons/src/vender/line/general'
 - import { getPayUrl } from '@/service/common'
 - import Button from '@/app/components/base/button'
 - import { formatNumber } from '@/utils/format'
 - 
 - type QuotaProps = {
 -   currentProvider: Provider
 - }
 - const Quota: FC<QuotaProps> = ({
 -   currentProvider,
 - }) => {
 -   const { t } = useTranslation()
 -   const [loading, setLoading] = useState(false)
 -   const systemTrial = currentProvider.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota)?.quota_type === 'trial') as ProviderWithQuota
 -   const systemPaid = currentProvider.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota)?.quota_type === 'paid') as ProviderWithQuota
 -   const QUOTA_UNIT_MAP: Record<string, string> = {
 -     times: t('common.modelProvider.card.callTimes'),
 -     tokens: 'Tokens',
 -   }
 - 
 -   const renderStatus = () => {
 -     const totalQuota = (systemPaid?.is_valid ? systemPaid.quota_limit : 0) + systemTrial.quota_limit
 -     const totalUsed = (systemPaid?.is_valid ? systemPaid.quota_used : 0) + systemTrial.quota_used
 - 
 -     if (totalQuota === totalUsed) {
 -       return (
 -         <div className='px-1.5 bg-[#FEF3F2] rounded-md text-xs font-semibold text-[#D92D20]'>
 -           {t('common.modelProvider.card.quotaExhausted')}
 -         </div>
 -       )
 -     }
 -     if (systemPaid?.is_valid) {
 -       return (
 -         <div className='px-1.5 bg-[#FFF6ED] rounded-md text-xs font-semibold text-[#EC4A0A]'>
 -           {t('common.modelProvider.card.paid')}
 -         </div>
 -       )
 -     }
 -     return (
 -       <div className='px-1.5 bg-primary-50 rounded-md text-xs font-semibold text-primary-600'>
 -         {t('common.modelProvider.card.onTrial')}
 -       </div>
 -     )
 -   }
 - 
 -   const renderQuota = () => {
 -     if (systemPaid?.is_valid)
 -       return formatNumber(systemPaid.quota_limit - systemPaid.quota_used)
 - 
 -     if (systemTrial.is_valid)
 -       return formatNumber(systemTrial.quota_limit - systemTrial.quota_used)
 -   }
 -   const renderUnit = () => {
 -     if (systemPaid?.is_valid)
 -       return QUOTA_UNIT_MAP[systemPaid.quota_unit]
 - 
 -     if (systemTrial.is_valid)
 -       return QUOTA_UNIT_MAP[systemTrial.quota_unit]
 -   }
 -   const handleGetPayUrl = async () => {
 -     setLoading(true)
 -     try {
 -       const res = await getPayUrl(`/workspaces/current/model-providers/${systemPaid.provider_name}/checkout-url`)
 - 
 -       window.location.href = res.url
 -     }
 -     finally {
 -       setLoading(false)
 -     }
 -   }
 - 
 -   return (
 -     <div className='flex justify-between px-4 py-3 border-b-[0.5px] border-b-[rgba(0, 0, 0, 0.5)]'>
 -       <div>
 -         <div className='flex items-center mb-1 h-5'>
 -           <div className='mr-1 text-xs font-medium text-gray-500'>
 -             {t('common.modelProvider.card.quota')}
 -           </div>
 -           {renderStatus()}
 -         </div>
 -         <div className='flex items-center text-gray-700'>
 -           <div className='mr-1 text-sm font-medium'>{renderQuota()}</div>
 -           <div className='mr-1 text-sm'>
 -             {renderUnit()}
 -           </div>
 -           <Tooltip
 -             selector='setting-model-card'
 -             htmlContent={
 -               <div className='w-[261px] text-gray-500'>{t('common.modelProvider.card.tip')}</div>
 -             }
 -           >
 -             <InfoCircle className='w-3 h-3 text-gray-400 hover:text-gray-700' />
 -           </Tooltip>
 -         </div>
 -       </div>
 -       {
 -         systemPaid && (
 -           <Button
 -             type='primary'
 -             className='mt-1.5 !px-3 !h-8 !text-[13px] font-medium !rounded-lg'
 -             onClick={handleGetPayUrl}
 -             disabled={loading}
 -           >
 -             {t('common.modelProvider.card.buyQuota')}
 -           </Button>
 -         )
 -       }
 -     </div>
 -   )
 - }
 - 
 - export default Quota
 
 
  |