ваше сообщение коммита

This commit is contained in:
2025-08-07 20:27:24 +03:00
parent cde35ac576
commit 0a72902c37
44 changed files with 3594 additions and 1447 deletions

View File

@@ -90,6 +90,7 @@ import { reactive } from 'vue';
import useBlockchainNetworks from '@/composables/useBlockchainNetworks';
import api from '@/api/axios';
import { useAuthContext } from '@/composables/useAuth';
import eventBus from '@/utils/eventBus';
const props = defineProps({
authTokens: { type: Array, required: true }
});
@@ -97,7 +98,7 @@ const emit = defineEmits(['update']);
const newToken = reactive({ name: '', address: '', network: '', minBalance: 0 });
const { networkGroups, networks } = useBlockchainNetworks();
const { isAdmin } = useAuthContext();
const { isAdmin, checkTokenBalances, address, checkAuth } = useAuthContext();
async function addToken() {
if (!newToken.name || !newToken.address || !newToken.network) {
@@ -109,7 +110,30 @@ async function addToken() {
...newToken,
minBalance: Number(newToken.minBalance) || 0
});
emit('update');
// После добавления токена перепроверяем баланс пользователя и обновляем состояние аутентификации
try {
if (address.value) {
await checkTokenBalances(address.value);
console.log('[AuthTokensSettings] Баланс токенов перепроверен после добавления');
}
// Обновляем состояние аутентификации чтобы отразить изменения роли
await checkAuth();
console.log('[AuthTokensSettings] Состояние аутентификации обновлено после добавления токена');
// Уведомляем App.vue об изменении настроек аутентификации
eventBus.emit('auth-settings-saved');
console.log('[AuthTokensSettings] Событие auth-settings-saved отправлено');
} catch (balanceError) {
console.error('[AuthTokensSettings] Ошибка при перепроверке баланса:', balanceError);
}
// Небольшая задержка для синхронизации с backend
setTimeout(() => {
emit('update');
}, 100);
newToken.name = '';
newToken.address = '';
newToken.network = '';
@@ -130,7 +154,29 @@ async function removeToken(index) {
try {
const response = await api.delete(`/settings/auth-token/${token.address}/${token.network}`);
console.log('[AuthTokensSettings] Успешное удаление:', response.data);
emit('update');
// После удаления токена перепроверяем баланс пользователя и обновляем состояние аутентификации
try {
if (address.value) {
await checkTokenBalances(address.value);
console.log('[AuthTokensSettings] Баланс токенов перепроверен после удаления');
}
// Обновляем состояние аутентификации чтобы отразить изменения роли
await checkAuth();
console.log('[AuthTokensSettings] Состояние аутентификации обновлено после удаления токена');
// Уведомляем App.vue об изменении настроек аутентификации
eventBus.emit('auth-settings-saved');
console.log('[AuthTokensSettings] Событие auth-settings-saved отправлено');
} catch (balanceError) {
console.error('[AuthTokensSettings] Ошибка при перепроверке баланса:', balanceError);
}
// Небольшая задержка для синхронизации с backend
setTimeout(() => {
emit('update');
}, 100);
} catch (e) {
console.error('[AuthTokensSettings] Ошибка при удалении токена:', e);
console.error('[AuthTokensSettings] Response:', e.response);

View File

@@ -77,6 +77,7 @@ import AuthTokensSettings from './AuthTokensSettings.vue';
import { useRouter } from 'vue-router';
import { useAuthContext } from '@/composables/useAuth';
import NoAccessModal from '@/components/NoAccessModal.vue';
import wsClient from '@/utils/websocket';
// Состояние для отображения/скрытия дополнительных настроек
const showRpcSettings = ref(false);
@@ -234,6 +235,22 @@ const saveSecuritySettings = async () => {
// Загрузка настроек при монтировании компонента
onMounted(() => {
loadSettings();
// Подписываемся на WebSocket события для обновления списка токенов
wsClient.onAuthTokenAdded(() => {
console.log('[SecuritySettingsView] WebSocket: токен добавлен, обновляем список');
loadSettings();
});
wsClient.onAuthTokenDeleted(() => {
console.log('[SecuritySettingsView] WebSocket: токен удален, обновляем список');
loadSettings();
});
wsClient.onAuthTokenUpdated(() => {
console.log('[SecuritySettingsView] WebSocket: токен обновлен, обновляем список');
loadSettings();
});
});
// --- Методы для RPC ---