- {/* Header */}
-
-
-
- Оспаривания
-
-
- Управление диспутами и проверка пруфов
-
-
- {pendingCount > 0 && (
-
- {pendingCount}
- ожида{pendingCount === 1 ? 'ет' : 'ют'} решения
-
- )}
-
-
- {/* Filters */}
-
-
-
-
-
-
- {/* Loading */}
- {isLoading ? (
-
-
-
- ) : disputes.length === 0 ? (
-
-
-
-
-
- {filter === 'pending' ? 'Нет оспариваний, ожидающих решения' :
- filter === 'open' ? 'Нет оспариваний в стадии голосования' :
- 'Нет оспариваний'}
-
-
- ) : (
-
- {disputes.map((dispute) => (
-
-
- {/* Left side - Info */}
-
-
-
-
-
- {dispute.challenge_title}
-
-
-
- {dispute.marathon_title}
-
-
-
-
- {/* Participants */}
-
-
-
- Автор:
- {dispute.participant_nickname}
-
-
-
-
Оспорил:
-
{dispute.raised_by_nickname}
-
-
-
- {/* Reason */}
-
-
Причина:
-
{dispute.reason}
-
-
- {/* Votes & Time */}
-
-
-
-
- {dispute.votes_valid}
-
-
/
-
-
- {dispute.votes_invalid}
-
-
-
•
-
{formatDate(dispute.created_at)}
- {dispute.status === 'open' && (
- <>
-
•
-
-
- {getTimeRemaining(dispute.expires_at)}
-
- >
- )}
-
-
-
- {/* Right side - Status & Actions */}
-
- {getStatusBadge(dispute.status)}
-
- {/* Link to assignment */}
- {dispute.assignment_id && (
-
-
- Открыть
-
- )}
-
- {/* Resolution buttons - show for open and pending_admin */}
- {(dispute.status === 'open' || dispute.status === 'pending_admin') && (
-
- {/* Vote recommendation for pending disputes */}
- {dispute.status === 'pending_admin' && (
-
- Рекомендация: {dispute.votes_invalid > dispute.votes_valid ? (
- невалидно
- ) : (
- валидно
- )}
-
- )}
-
- handleResolve(dispute.id, true)}
- isLoading={resolvingId === dispute.id}
- disabled={resolvingId !== null}
- icon={}
- >
- Валидно
-
- handleResolve(dispute.id, false)}
- isLoading={resolvingId === dispute.id}
- disabled={resolvingId !== null}
- icon={}
- >
- Невалидно
-
-
-
- )}
-
-
-
- ))}
-
- )}
-
- )
-}
diff --git a/frontend/src/pages/admin/AdminLayout.tsx b/frontend/src/pages/admin/AdminLayout.tsx
index 39878cb..23e6b16 100644
--- a/frontend/src/pages/admin/AdminLayout.tsx
+++ b/frontend/src/pages/admin/AdminLayout.tsx
@@ -12,15 +12,13 @@ import {
Shield,
MessageCircle,
Sparkles,
- Lock,
- AlertTriangle
+ Lock
} from 'lucide-react'
const navItems = [
{ to: '/admin', icon: LayoutDashboard, label: 'Дашборд', end: true },
{ to: '/admin/users', icon: Users, label: 'Пользователи' },
{ to: '/admin/marathons', icon: Trophy, label: 'Марафоны' },
- { to: '/admin/disputes', icon: AlertTriangle, label: 'Оспаривания' },
{ to: '/admin/logs', icon: ScrollText, label: 'Логи' },
{ to: '/admin/broadcast', icon: Send, label: 'Рассылка' },
{ to: '/admin/content', icon: FileText, label: 'Контент' },
diff --git a/frontend/src/pages/admin/index.ts b/frontend/src/pages/admin/index.ts
index ec6e772..e7822be 100644
--- a/frontend/src/pages/admin/index.ts
+++ b/frontend/src/pages/admin/index.ts
@@ -2,7 +2,6 @@ export { AdminLayout } from './AdminLayout'
export { AdminDashboardPage } from './AdminDashboardPage'
export { AdminUsersPage } from './AdminUsersPage'
export { AdminMarathonsPage } from './AdminMarathonsPage'
-export { AdminDisputesPage } from './AdminDisputesPage'
export { AdminLogsPage } from './AdminLogsPage'
export { AdminBroadcastPage } from './AdminBroadcastPage'
export { AdminContentPage } from './AdminContentPage'