diff --git a/frontend/src/ASNsNewManager.jsx b/frontend/src/ASNsNewManager.jsx index 421d3f2..b6ea9e7 100644 --- a/frontend/src/ASNsNewManager.jsx +++ b/frontend/src/ASNsNewManager.jsx @@ -217,7 +217,7 @@ function ASNsNewManager() { {error} - setError('')}> + )} @@ -231,7 +231,7 @@ function ASNsNewManager() { {success} - setSuccess('')}> + )} diff --git a/frontend/src/BillingManager.jsx b/frontend/src/BillingManager.jsx index 89581d2..8dade77 100644 --- a/frontend/src/BillingManager.jsx +++ b/frontend/src/BillingManager.jsx @@ -55,6 +55,8 @@ function BillingManager() { note: '' }); const [editingPayment, setEditingPayment] = useState(null); // { serverId, index } + const [showDeletePaymentModal, setShowDeletePaymentModal] = useState(false); + const [paymentToDelete, setPaymentToDelete] = useState(null); // { serverId, index, data } // Состояние для курсов валют const [exchangeRates, setExchangeRates] = useState({ @@ -349,6 +351,36 @@ function BillingManager() { } } + // Удаление платежа из истории + const handleDeletePayment = () => { + if (!paymentToDelete || !paymentToDelete.serverId || paymentToDelete.index == null) { + setShowDeletePaymentModal(false); + return; + } + const { serverId, index } = paymentToDelete; + setBillingData(prev => prev.map(s => { + if (s.id !== serverId) return s; + const payments = Array.isArray(s.payments) ? [...s.payments] : []; + if (index >= 0 && index < payments.length) { + payments.splice(index, 1); + } + const last = payments + .slice() + .sort((a,b) => new Date(b.date) - new Date(a.date))[0]; + return { + ...s, + payments, + lastPaymentDate: last?.date || '', + lastPaymentAmount: last?.amount || 0, + lastPaymentCurrency: last?.currency || s.monthlyCostCurrency || 'USD' + }; + })); + setShowDeletePaymentModal(false); + setPaymentToDelete(null); + setSuccess('Платеж удалён'); + setTimeout(() => setSuccess(''), 3000); + }; + function getCountryFlag(countryRaw) { if (!countryRaw) return ''; const value = String(countryRaw).trim(); @@ -893,7 +925,7 @@ function BillingManager() {
- +
@@ -954,6 +986,16 @@ function BillingManager() { > + @@ -1086,6 +1128,41 @@ function BillingManager() { }} /> )} + + {/* Модалка удаления платежа */} + {showDeletePaymentModal && ( +
+
+
+
+
Удалить платеж
+ +
+
+

Вы уверены, что хотите удалить выбранный платеж?

+ {paymentToDelete && ( +
+
Сервер: {paymentToDelete.data?.server?.hostName}
+
Дата: {formatDate(paymentToDelete.data?.date)}
+
Сумма: {formatCurrency(paymentToDelete.data?.amount, paymentToDelete.data?.currency)}
+ {paymentToDelete.data?.note && ( +
Комментарий: {paymentToDelete.data?.note}
+ )} +
+ )} +
+
+ + +
+
+
+
+ )} ); } diff --git a/frontend/src/DataManager.jsx b/frontend/src/DataManager.jsx index d233f9d..206122c 100644 --- a/frontend/src/DataManager.jsx +++ b/frontend/src/DataManager.jsx @@ -190,7 +190,7 @@ function DataManager({ entityName, entityKey, placeholder }) { {error} - setError('')}> + )} @@ -204,7 +204,7 @@ function DataManager({ entityName, entityKey, placeholder }) { {success} - setSuccess('')}> + )} diff --git a/frontend/src/DomainsNewManager.jsx b/frontend/src/DomainsNewManager.jsx index 3988aea..696a949 100644 --- a/frontend/src/DomainsNewManager.jsx +++ b/frontend/src/DomainsNewManager.jsx @@ -222,7 +222,7 @@ function DomainsNewManager() { {error} - setError('')}> + )} @@ -236,7 +236,7 @@ function DomainsNewManager() { {success} - setSuccess('')}> + )} diff --git a/frontend/src/IPRangesManager.jsx b/frontend/src/IPRangesManager.jsx index 0716c11..1270fc0 100644 --- a/frontend/src/IPRangesManager.jsx +++ b/frontend/src/IPRangesManager.jsx @@ -232,7 +232,7 @@ function IPRangesManager() { {error} - setError('')}> + )} @@ -246,7 +246,7 @@ function IPRangesManager() { {success} - setSuccess('')}> + )} diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx index 4f7b7e5..d8338c5 100644 --- a/frontend/src/ServerManager.jsx +++ b/frontend/src/ServerManager.jsx @@ -428,7 +428,7 @@ function ServerManager() { {error} - setError('')}> + )} @@ -442,7 +442,7 @@ function ServerManager() { {success} - setSuccess('')}> + )} @@ -760,9 +760,9 @@ function ServerManager() {

Существующие связи ({connections.length})

-
-
-
Имя хостера
+
+
+
Сервер A