From 0692f52fc6c672084446fef16f9c832b7a99b4d6 Mon Sep 17 00:00:00 2001 From: "Terentev A. A." Date: Sat, 11 Oct 2025 12:03:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D1=88=D0=BD=D0=B5=D0=B9=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/contracts/user/UserBaseEntitry.ts | 2 + src/widgets/players-table/lib/columns.tsx | 270 ++++++++++-------- 2 files changed, 147 insertions(+), 125 deletions(-) diff --git a/src/shared/api/contracts/user/UserBaseEntitry.ts b/src/shared/api/contracts/user/UserBaseEntitry.ts index 10501ad..2e75232 100644 --- a/src/shared/api/contracts/user/UserBaseEntitry.ts +++ b/src/shared/api/contracts/user/UserBaseEntitry.ts @@ -31,6 +31,8 @@ export interface PlayerBaseEntity { expiredDate: string; textureSkinUrl: string; textureCloakUrl: string; + externalTextureSkinUrl: string; + externalTextureCloakUrl: string; textureSkinGuid: string; textureCloakGuid: string; fullSkinUrl?: any; diff --git a/src/widgets/players-table/lib/columns.tsx b/src/widgets/players-table/lib/columns.tsx index 8b538d0..031cdc9 100644 --- a/src/widgets/players-table/lib/columns.tsx +++ b/src/widgets/players-table/lib/columns.tsx @@ -3,7 +3,18 @@ import React, { useMemo, useState } from 'react'; import { createColumnHelper } from '@tanstack/table-core'; import { format } from 'date-fns'; -import { Ban as BanIcon, GavelIcon, MoreVertical, ShieldCheck, Trash, User, Monitor, Laptop, Smartphone, Tablet } from 'lucide-react'; +import { + Ban as BanIcon, + GavelIcon, + Laptop, + Monitor, + MoreVertical, + ShieldCheck, + Smartphone, + Tablet, + Trash, + User, +} from 'lucide-react'; import { DataTableColumnHeader } from '@/entities/Table'; import { PlayerBaseEntity } from '@/shared/api/contracts'; @@ -129,144 +140,153 @@ function PlayerDetailsDialog({ {/* Tabs layout for player card */}
- - Обзор - Текстуры - Авторизации - Сети/IP - Сервер - + + Обзор + Текстуры + Авторизации + Сети/IP + Сервер + -
- -
-
-
-
Статус
-
- {player.isBanned ? ( - - Заблокирован - - ) : ( - - Не заблокирован - +
+ +
+
+
+
Статус
+
+ {player.isBanned ? ( + + Заблокирован + + ) : ( + + Не заблокирован + + )} +
+ {player.isLauncherStarted && ( +
+ + + Лаунчер запущен + +
+ )} +
+
+
Сессия истекает
+
{sessionStr}
+
+
+
+ {addresses.length > 0 && ( +
+
IP адреса
+
{addresses.join(', ')}
+
)}
- {player.isLauncherStarted && ( -
- - Лаунчер запущен -
- )}
+
+ +
-
Сессия истекает
-
{sessionStr}
+
Текстуры
+
+ {player.externalTextureSkinUrl && ( + skin + )} + {player.externalTextureCloakUrl && ( + cloak + )} + {!player.externalTextureSkinUrl && !player.externalTextureCloakUrl && ( +
Нет текстур.
+ )} +
-
-
- {addresses.length > 0 && ( -
-
IP адреса
-
{addresses.join(', ')}
+ + + +
+
Авторизации
+
+ {(player.authHistory || []).map((h, idx) => ( +
+
{getDeviceIcon(h.device)}
+
+
+
+ {h.device || 'Неизвестное устройство'} +
+ {h.hwid && ( + + HWID: {h.hwid} + + )} +
+
+ {h.address || '-'} +
+
+ {timeAgo(h.date)} + + {h.protocol} + +
+
+
+ ))} + {(!player.authHistory || player.authHistory.length === 0) && ( +
Нет данных.
+ )}
- )} -
-
- +
+ - -
-
Текстуры
-
- {player.textureSkinUrl && ( - skin - )} - {player.textureCloakUrl && ( - cloak - )} - {!player.textureSkinUrl && !player.textureCloakUrl && ( -
Нет текстур.
+ + {addresses.length > 0 ? ( +
+ {addresses.map((a) => ( + + {a} + + ))} +
+ ) : ( +
Нет IP адресов.
)} -
-
-
+ - -
-
Авторизации
-
- {(player.authHistory || []).map((h, idx) => ( -
-
- {getDeviceIcon(h.device)} -
-
-
-
- {h.device || 'Неизвестное устройство'} -
- {h.hwid && ( - - HWID: {h.hwid} - - )} -
-
- {h.address || '-'} -
-
- {timeAgo(h.date)} - {h.protocol} -
-
+ + {Array.isArray((player as any).serverJoinHistory) ? ( +
+ {(player as any).serverJoinHistory?.length || 0} записей
- ))} - {(!player.authHistory || player.authHistory.length === 0) && ( + ) : (
Нет данных.
)} -
+
- - - - {addresses.length > 0 ? ( -
- {addresses.map((a) => ( - - {a} - - ))} -
- ) : ( -
Нет IP адресов.
- )} -
- - - {Array.isArray((player as any).serverJoinHistory) ? ( -
- {(player as any).serverJoinHistory?.length || 0} записей -
- ) : ( -
Нет данных.
- )} -
-
- +