Browse Source

реворк фильтров поиска 2

master
gsd 4 weeks ago
parent
commit
feec12cbec
  1. 9
      src/app/app.module.ts
  2. 14
      src/app/pages/banlist-page/banlist-page.component.html
  3. 13
      src/app/pages/banlist-page/banlist-page.component.ts
  4. 16
      src/app/pages/internal-components/abstract-search-table.component.ts
  5. 61
      src/app/pages/internal-components/dialogs/BanViewDialog.ts
  6. 2
      src/app/pages/messages-page/messages-page.component.html
  7. 25
      src/app/services/auth.service.ts

9
src/app/app.module.ts

@ -48,6 +48,8 @@ import {FilterMatChipServer} from "./pages/internal-components/search-filters/ba
import {FilterMatChipDateBegin} from "./pages/internal-components/search-filters/base/FilterMatChipDateBegin";
import {FilterMatChipDateEnd} from "./pages/internal-components/search-filters/base/FilterMatChipDateEnd";
import {FilterMatChipBanId} from "./pages/internal-components/search-filters/FilterMatChipBanId";
import {BanViewDialog} from "./pages/internal-components/dialogs/BanViewDialog";
import {MatDialogModule} from "@angular/material/dialog";
registerLocaleData(localeRu, "ru")
@ -68,7 +70,9 @@ registerLocaleData(localeRu, "ru")
FilterMatChipServer,
FilterMatChipDateBegin,
FilterMatChipDateEnd,
FilterMatChipBanId
FilterMatChipBanId,
//dialogs
BanViewDialog
],
imports: [
BrowserModule,
@ -97,7 +101,8 @@ registerLocaleData(localeRu, "ru")
MatSelectModule,
MatDatepickerModule,
MatNativeDateModule,
MatProgressSpinnerModule
MatProgressSpinnerModule,
MatDialogModule
],
providers: [
{provide: LOCALE_ID, useValue: 'ru' },

14
src/app/pages/banlist-page/banlist-page.component.html

@ -1,6 +1,6 @@
<div class="content-in-center-header" style="flex-direction: column;">
<h1>Бан лист</h1>
<h3>Скоро и ты сюда попадешь браток {{getCount()==undefined?'':'как и остальные ' + getCount() + ' карликов'}}</h3>
<h3>Скоро и ты сюда попадешь браток</h3>
</div>
<div class="content-in-center">
@ -55,7 +55,7 @@
<td mat-cell *matCellDef="let row" [matMenuTriggerFor]="accountMenu"> {{row.player_name}}
<mat-menu #accountMenu>
<button mat-menu-item (click)="filter.addAccountToSearch(row.player_name)">Добавить в поиск</button>
<button mat-menu-item (click)="searchPlayer(row.account_id)">Открыть профиль</button>
<button mat-menu-item (click)="authService.searchPlayer(row.account_id)">Открыть профиль</button>
</mat-menu></td>
</ng-container>
<ng-container matColumnDef="date">
@ -76,12 +76,18 @@
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> Действие </th>
<td mat-cell *matCellDef="let row"> пук</td>
<td mat-cell *matCellDef="let row">
<mat-icon [matMenuTriggerFor]="actionMenu" style="cursor: pointer">view_headline</mat-icon>
<mat-menu #actionMenu>
<button mat-menu-item (click)="openBanDialog(row)">Подробнее</button>
<button mat-menu-item *ngIf="row.active==true&&authService.isModerator()">Разбанить</button>
</mat-menu>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [style]="{'background-color':row.active?'rgba(255,0,0,0.25)':''}"></tr>
<!-- Row shown when there is no matching data. -->
<div *ngIf="!loading">

13
src/app/pages/banlist-page/banlist-page.component.ts

@ -8,6 +8,8 @@ import {ServerService} from "../../services/server.service";
import {PlayerService} from "../../services/player.service";
import {ActivatedRoute, Router} from "@angular/router";
import {MatTableDataSource} from "@angular/material/table";
import {MatDialog} from "@angular/material/dialog";
import {BanViewDialog} from "../internal-components/dialogs/BanViewDialog";
@Component({
selector: 'app-banlist-page',
@ -22,7 +24,8 @@ export class BanlistPageComponent extends AbstractSearchTable<Ban, BanSearchFilt
protected override playerService: PlayerService,
protected override router: Router,
protected override route: ActivatedRoute,
private banService: BanService) {
private banService: BanService,
private dialog: MatDialog) {
super(authService, serverService, playerService, route, router);
super.filter = new BanSearchFilter();
}
@ -44,6 +47,14 @@ export class BanlistPageComponent extends AbstractSearchTable<Ban, BanSearchFilt
this.getBanList();
}
openBanDialog(ban: Ban) {
this.dialog.open(
BanViewDialog, {
data: ban
}
);
}
addAdminIdToSearch(name: string) {
if (this.filter.admin_ids == null)
this.filter.admin_ids = [];

16
src/app/pages/internal-components/abstract-search-table.component.ts

@ -22,7 +22,7 @@ export abstract class AbstractSearchTable<T,U extends SearchFilter> implements A
err: boolean = false;
protected constructor(protected authService: AuthService,
protected constructor(public authService: AuthService,
protected serverService: ServerService,
protected playerService: PlayerService,
protected route: ActivatedRoute,
@ -52,18 +52,4 @@ export abstract class AbstractSearchTable<T,U extends SearchFilter> implements A
}
)
}
searchPlayer(account_id: number) {
if (!this.authService.isAuth()) {
return;
}
this.playerService.searchProfile(`[U:1:${account_id}]`).subscribe(
(res) => {
if (res.steam64 != null)
this.router.navigate(['profile', res.steam64])
},
(err) => {}
)
}
}

61
src/app/pages/internal-components/dialogs/BanViewDialog.ts

@ -0,0 +1,61 @@
import {Component, Inject} from "@angular/core";
import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from "@angular/material/dialog";
import {Ban} from "../../../entities/ban/Ban";
import {PlayerService} from "../../../services/player.service";
import {AuthService} from "../../../services/auth.service";
@Component({
selector: "app-ban-view-dialog",
template: `
<h1 mat-dialog-title style="color: black">Бан номер {{ban.id}}</h1>
<mat-dialog-content>
<div class="container responsive-grid-250">
<mat-card>
<mat-card-title>{{ban.active?'действующий':'снят'}}</mat-card-title>
<mat-card-subtitle>статус бана</mat-card-subtitle>
</mat-card>
<mat-card>
<mat-card-title>{{ban.ban_reason}}</mat-card-title>
<mat-card-subtitle>причина</mat-card-subtitle>
</mat-card>
<mat-card>
<mat-card-title>{{ban.banned_by}}</mat-card-title>
<mat-card-subtitle>забанил</mat-card-subtitle>
</mat-card>
<mat-card>
<mat-card-title>{{ban.timestamp | date:"HH:mm:ss dd/MM/yyyy"}}</mat-card-title>
<mat-card-subtitle>забанен</mat-card-subtitle>
</mat-card>
<mat-card>
<mat-card-title>{{ban.ban_length == 0 ? 'навсегда' : "на " + ban.ban_length + " минут"}}</mat-card-title>
<mat-card-subtitle>забанен</mat-card-subtitle>
</mat-card>
<mat-card *ngIf="ban.unbanned_timestamp">
<mat-card-title>{{ban.unbanned_timestamp | date:"HH:mm:ss dd/MM/yyyy"}}</mat-card-title>
<mat-card-subtitle>разбанен</mat-card-subtitle>
</mat-card>
<mat-card *ngIf="ban.unbanned_by_id">
<mat-card-title>{{ban.unbanned_by_id != "STEAM_0:0:0"?"модератор":"бан снят"}}</mat-card-title>
<mat-card-subtitle>{{ban.unbanned_by_id != "STEAM_0:0:0"?"разбанил":"через время"}}</mat-card-subtitle>
</mat-card>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-raised-button style="cursor: pointer" (click)="authService.searchPlayer(ban.steam_id);close()">Открыть профиль</button>
<button mat-button mat-raised-button style="cursor: pointer" (click)="authService.searchPlayer(ban.banned_by_id);close()">Профиль модератора</button>
<button mat-button mat-raised-button [disabled]="ban.unbanned_by_id ==null || ban.unbanned_by_id == 'STEAM_0:0:0'">Профиль кто разбанил</button>
<button mat-button mat-raised-button mat-dialog-close="true">Закрыть</button>
</mat-dialog-actions>
`
})
export class BanViewDialog {
constructor(
@Inject(MAT_DIALOG_DATA) public ban: Ban,
public authService: AuthService,
private dialogRef: MatDialogRef<any>) {
}
close() {
this.dialogRef.close();
}
}

2
src/app/pages/messages-page/messages-page.component.html

@ -57,7 +57,7 @@
<td mat-cell *matCellDef="let row" [matMenuTriggerFor]="accountMenu"> {{row.account_name}}
<mat-menu #accountMenu>
<button mat-menu-item (click)="filter.addAccountToSearch(row.account_name)">Добавить в поиск</button>
<button mat-menu-item (click)="searchPlayer(row.account_id)">Открыть профиль</button>
<button mat-menu-item (click)="authService.searchPlayer(row.account_id)">Открыть профиль</button>
</mat-menu></td>
</ng-container>

25
src/app/services/auth.service.ts

@ -4,6 +4,7 @@ import {ProfileRequestData} from "../entities/profile/ProfileRequestData";
import {SteamData} from "../entities/profile/SteamData";
import {SteamIDs} from "../entities/profile/SteamIDs";
import {Permition} from "../entities/profile/Permition";
import {Router} from "@angular/router";
@Injectable({
providedIn: 'root'
@ -14,7 +15,7 @@ export class AuthService {
steamIds: SteamIDs | null = null;
permition: Permition | null = null;
constructor(private playerService: PlayerService) {
constructor(private playerService: PlayerService, private router: Router) {
this.playerService.getProfile(null, [ProfileRequestData.STEAM_DATA, ProfileRequestData.PERMITION])
.subscribe((res) => {
this.steamdata = res.steam_data;
@ -45,4 +46,26 @@ export class AuthService {
isModerator() {
return this.isAdmin() || this.permition?.flags.indexOf("cde") != -1;
}
searchPlayer(account: number|string|undefined) {
if (!this.isAuth()) {
return;
}
if (typeof account == 'undefined')
return;
let search = "";
if (typeof account == 'number')
search = `[U:1:${account}]`
else search = account
this.playerService.searchProfile(search).subscribe(
(res) => {
if (res.steam64 != null)
this.router.navigate(['profile', res.steam64])
},
(err) => {}
)
}
}

Loading…
Cancel
Save