diff --git a/frontend/src/BillingManager.jsx b/frontend/src/BillingManager.jsx index 1c32705..398b00c 100644 --- a/frontend/src/BillingManager.jsx +++ b/frontend/src/BillingManager.jsx @@ -36,6 +36,7 @@ import BulkActionsBar from './components/BulkActionsBar.jsx'; function BillingManager() { const [billingData, setBillingData] = useState([]); + const [servers, setServers] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); @@ -106,12 +107,14 @@ function BillingManager() { lastPaymentAmount: 0, lastPaymentCurrency: 'USD', status: 'active', - notes: '' + notes: '', + serverId: '', }); useEffect(() => { fetchBillingData(); fetchExchangeRates(); + fetchServers(); }, []); const fetchExchangeRates = async () => { @@ -137,6 +140,16 @@ function BillingManager() { } }; + const fetchServers = async () => { + try { + const res = await api.get(`/servers`); + setServers(Array.isArray(res.data) ? res.data : []); + } catch (error) { + console.error('Ошибка при загрузке серверов для привязки биллинга:', error); + // связь необязательная, поэтому не показываем отдельную ошибку пользователю + } + }; + const fetchBillingData = async () => { setLoading(true); try { @@ -191,7 +204,8 @@ function BillingManager() { lastPaymentAmount: 0, lastPaymentCurrency: 'USD', status: 'active', - notes: '' + notes: '', + serverId: '', }); setShowAddModal(true); }; @@ -251,6 +265,13 @@ function BillingManager() { } }; + // Карта серверов по id для быстрой привязки + const serversById = new Map( + (servers || []) + .filter(s => s && s.id) + .map(s => [s.id, s]) + ); + // Вычисляем общую сумму последних платежей const totalLastPayments = billingData.reduce((sum, item) => { return sum + (item.lastPaymentAmount || 0); @@ -713,6 +734,7 @@ function BillingManager() { {sortOrder === 'asc' ? '↑' : '↓'} )} +