From 4446373f01ab4cc53dcf9bcd5b5ef485a0985d68 Mon Sep 17 00:00:00 2001 From: gsd <mamu@ebal.net> Date: Sun, 30 Mar 2025 00:07:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=BE=D0=BE=D0=BE=20=D0=BA=D1=80=D1=83?= =?UTF-8?q?=D1=82=D0=BE=D0=BE=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B4=D0=B0=20=D0=B5=D1=89=D0=B5=20=D0=B8=20=D0=B8=D0=B3=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app.module.ts | 4 +- src/app/entities/servers/Player.ts | 4 +- .../servers-page/servers-page.component.html | 65 ++++++++++++++++++- .../servers-page/servers-page.component.ts | 8 +-- src/app/services/action.service.ts | 3 +- src/app/services/tf2data.service.ts | 28 ++++++++ src/styles.scss | 13 +++- 7 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 src/app/services/tf2data.service.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 475c85a..d538857 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -29,6 +29,7 @@ import {FormsModule} from "@angular/forms"; import {ServerService} from "./services/server.service"; import {registerLocaleData} from "@angular/common"; import localeRu from "@angular/common/locales/ru"; +import {Tf2dataService} from "./services/tf2data.service"; registerLocaleData(localeRu, "ru") @@ -65,7 +66,8 @@ registerLocaleData(localeRu, "ru") AnnonceService, PlayerService, BanService, - ServerService + ServerService, + Tf2dataService ], bootstrap: [AppComponent] }) diff --git a/src/app/entities/servers/Player.ts b/src/app/entities/servers/Player.ts index d18004d..99f2d1e 100644 --- a/src/app/entities/servers/Player.ts +++ b/src/app/entities/servers/Player.ts @@ -1,3 +1,5 @@ +import {SteamIDs} from "../profile/SteamIDs"; + export interface Player { clz: number|null; deads: number; @@ -10,7 +12,7 @@ export interface Player { pos: number[]; score: number; state: string; - steam: any; + steam: SteamIDs; steam2: string; team: number; } diff --git a/src/app/pages/servers-page/servers-page.component.html b/src/app/pages/servers-page/servers-page.component.html index 7bf87d3..526a8ab 100644 --- a/src/app/pages/servers-page/servers-page.component.html +++ b/src/app/pages/servers-page/servers-page.component.html @@ -85,9 +85,68 @@ {{player.score}} / {{player.deads}} / {{player.duration}} </mat-panel-description> </mat-expansion-panel-header> - <p>Ид игрока: {{player.id}}</p> - <p>Пинг: {{player.ping}}</p> - <p>Потери пакетов: {{player.loss}}</p> + <div class="container responsive-grid-100"> + <mat-card> + <mat-card-title>{{player.score}}</mat-card-title> + <mat-card-subtitle>очков набрано</mat-card-subtitle> + </mat-card> + <mat-card> + <mat-card-title>{{player.deads}}</mat-card-title> + <mat-card-subtitle>смертей</mat-card-subtitle> + </mat-card> + <mat-card> + <mat-card-title>{{player.ping}}</mat-card-title> + <mat-card-subtitle>пинг игрока</mat-card-subtitle> + </mat-card> + <mat-card> + <mat-card-title>{{player.loss}}</mat-card-title> + <mat-card-subtitle>потери пакетов</mat-card-subtitle> + </mat-card> + <mat-card *ngIf="player.clz != null"> + <mat-card-title>{{tf2data.TFClassType[player.clz]}}</mat-card-title> + <mat-card-subtitle>на сервере</mat-card-subtitle> + </mat-card> + <mat-card *ngIf="player.team != null"> + <mat-card-title>{{tf2data.TFTeam[player.team]}}</mat-card-title> + <mat-card-subtitle>команда</mat-card-subtitle> + </mat-card> + </div> + <div class="container responsive-grid-250"> + <mat-card> + <mat-card-content> + <p *ngIf="player.steam.steam2" style="cursor: pointer" (click)="actionService.copyToClipboard(player.steam.steam2) && actionService.showSnack('Скопировано в буфер обмена')">{{player.steam.steam2}}</p> + <p *ngIf="player.steam.steam3" style="cursor: pointer" (click)="actionService.copyToClipboard(player.steam.steam3) && actionService.showSnack('Скопировано в буфер обмена')">{{player.steam.steam3}}</p> + <p *ngIf="player.steam.steam64" style="cursor: pointer" (click)="actionService.copyToClipboard(player.steam.steam64) && actionService.showSnack('Скопировано в буфер обмена')">{{player.steam.steam64}}</p> + </mat-card-content> + </mat-card> + <mat-card style="cursor: pointer" + *ngIf="player.steam.steam64 != null" + (click)="actionService.goToUrlViaRouter(['profile', player.steam.steam64])"> + <mat-card-title>Открыть профиль</mat-card-title> + <mat-card-subtitle>на сайте</mat-card-subtitle> + </mat-card> + <mat-card style="cursor: pointer" + (click)="actionService.goToUrlViaTab(player.steam.community_url)"> + <mat-card-title >Открыть профиль</mat-card-title> + <mat-card-subtitle>в стиме</mat-card-subtitle> + </mat-card> + <mat-card style="cursor: pointer" + (click)="actionService.showSnack('Пока что нет')"> + <mat-card-title>Пожаловаться</mat-card-title> + <mat-card-subtitle>на игрока который играет</mat-card-subtitle> + </mat-card> + </div> + <div class="container responsive-grid-300"> + <mat-card> + <mat-card-title>Забанить</mat-card-title> + </mat-card> + <mat-card> + <mat-card-title>Кикнуть</mat-card-title> + </mat-card> + <mat-card> + <mat-card-title>Кинуть в мут</mat-card-title> + </mat-card> + </div> </mat-expansion-panel> </mat-expansion-panel> </div> diff --git a/src/app/pages/servers-page/servers-page.component.ts b/src/app/pages/servers-page/servers-page.component.ts index 3a36aee..86696c6 100644 --- a/src/app/pages/servers-page/servers-page.component.ts +++ b/src/app/pages/servers-page/servers-page.component.ts @@ -3,6 +3,7 @@ import {WebsocketServersListenerService} from "../../services/websocket-servers- import {Server} from "../../entities/servers/Server"; import {KeyValue} from "@angular/common"; import {ActionService} from "../../services/action.service"; +import {Tf2dataService} from "../../services/tf2data.service"; @Component({ selector: 'app-servers-page', @@ -14,7 +15,8 @@ export class ServersPageComponent implements OnInit { servers:{[srv_name: string]:Server|any} = {}; constructor(private servers_ws:WebsocketServersListenerService, - public actionService: ActionService) { } + public actionService: ActionService, + public tf2data: Tf2dataService) { } ngOnInit(): void { this.servers_ws.getServers().subscribe((r) => { @@ -22,10 +24,6 @@ export class ServersPageComponent implements OnInit { }); } - private updateProp<TObj, K extends keyof TObj>(obj: TObj, key: K, value: TObj[K]) { - return {...obj, [key]: value}; - } - setServers(servers: {[srv_name: string]:Server|any}) { const keys_current = Object.keys(this.servers); const keys_update = Object.keys(servers); diff --git a/src/app/services/action.service.ts b/src/app/services/action.service.ts index b2f451f..85a4a84 100644 --- a/src/app/services/action.service.ts +++ b/src/app/services/action.service.ts @@ -20,7 +20,8 @@ export class ActionService { return true; } - public goToUrlViaRouter(...url: string[]): boolean { + public goToUrlViaRouter(url: string[]|null|undefined): boolean { + if (url == null) return false; this.router.navigate(url) return true; } diff --git a/src/app/services/tf2data.service.ts b/src/app/services/tf2data.service.ts new file mode 100644 index 0000000..8aec175 --- /dev/null +++ b/src/app/services/tf2data.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class Tf2dataService { + TFClassType: string[] = [ + "ХЗ", + "Скаут", + "Снайпер", + "Солдат", + "Подрывник", + "Медик", + "Пулеметчик", + "Пиро", + "Шпион", + "Инженер" + ] + + TFTeam: string[] = [ + "ХЗ", + "Наблюдатель", + "Красная", + "Синия" + ] + + constructor() { } +} diff --git a/src/styles.scss b/src/styles.scss index 69479b8..f16e383 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -67,7 +67,7 @@ span { font-family: LatoBlack, Roboto, "Helvetica Neue", sans-serif; } -.mat-card-subtitle { +.mat-card-subtitle, mat-card-content { font-family: LatoThin, Roboto, "Helvetica Neue", sans-serif; } @@ -194,3 +194,14 @@ span { gap: 24px; } +.responsive-grid-100 { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); + gap: 24px; +} + +.responsive-grid-300 { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 24px; +}