You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
7.0 KiB
147 lines
7.0 KiB
5 months ago
|
<div class="grid" *ngIf="view=='detail'">
|
||
|
<div class="row-auto">
|
||
|
<mat-toolbar class="app-background-card">
|
||
|
<button mat-icon-button matTooltip="{{ 'shared.operation.back' | translate }}" (click)="exit()">
|
||
|
<mat-icon>arrow_back</mat-icon>
|
||
|
</button>
|
||
|
<h2 class="spacer header">{{detail.subject}}</h2>
|
||
|
<button mat-icon-button
|
||
|
matTooltip="{{ 'layouts.admin.message.markas' | translate }}{{ 'layouts.admin.message.unread' | translate | lowercase }}"
|
||
|
(click)="mark(false, detail.id)">
|
||
|
<mat-icon>mail</mat-icon>
|
||
|
</button>
|
||
|
<button mat-icon-button matTooltip="{{ 'shared.operation.delete' | translate }}" (click)="delete(detail.id)">
|
||
|
<mat-icon>delete</mat-icon>
|
||
|
</button>
|
||
|
</mat-toolbar>
|
||
|
<mat-divider></mat-divider>
|
||
|
<div class="source">
|
||
|
<img [src]="detail.source.avatar">
|
||
|
<div>
|
||
|
<p>{{detail.source.name}}</p>
|
||
|
<p class="app-foreground-secondary">{{detail.time | date:'yyyy-MM-dd HH:mm'}}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row-fill app-background-card">
|
||
|
<p style="margin: 24px;">{{detail.content}}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<mat-sidenav-container hasBackdrop="true" *ngIf="view=='list'">
|
||
|
<mat-sidenav #$filter mode="over" position="end" autoFocus="false">
|
||
|
<form autocomplete="off" [formGroup]="list.filter.form">
|
||
|
<mat-form-field>
|
||
|
<mat-label>{{ 'layouts.admin.message.subject' | translate }}</mat-label>
|
||
|
<input matInput formControlName="subject">
|
||
|
</mat-form-field>
|
||
|
<mat-form-field>
|
||
|
<mat-label>{{ 'layouts.admin.message.source' | translate }}</mat-label>
|
||
|
<input matInput formControlName="source">
|
||
|
</mat-form-field>
|
||
|
<mat-form-field>
|
||
|
<mat-label>{{ 'layouts.admin.message.time' | translate }}</mat-label>
|
||
|
<mat-date-range-input [rangePicker]="$picker">
|
||
|
<input matStartDate readonly formControlName="start" (focus)="$picker.open()">
|
||
|
<input matEndDate readonly formControlName="end" (focus)="$picker.open()">
|
||
|
</mat-date-range-input>
|
||
|
<mat-datepicker-toggle matSuffix [for]="$picker"></mat-datepicker-toggle>
|
||
|
<mat-date-range-picker #$picker></mat-date-range-picker>
|
||
|
</mat-form-field>
|
||
|
<mat-form-field>
|
||
|
<mat-label>{{ 'layouts.admin.message.flag' | translate }}</mat-label>
|
||
|
<mat-select formControlName="flag">
|
||
|
<mat-option
|
||
|
*ngFor="let item of [{id:false,name:'layouts.admin.message.unread'},{id:true,name:'layouts.admin.message.read'}]"
|
||
|
[value]="item.id">{{ item.name | translate }}</mat-option>
|
||
|
</mat-select>
|
||
|
</mat-form-field>
|
||
|
</form>
|
||
|
<button mat-flat-button color="primary"
|
||
|
(click)="search();$filter.toggle()">{{ 'shared.operation.filter' | translate | uppercase }}</button>
|
||
|
<button mat-stroked-button
|
||
|
(click)="reset();$filter.toggle()">{{ 'shared.operation.reset' | translate | uppercase }}</button>
|
||
|
</mat-sidenav>
|
||
|
<mat-sidenav-content class="grid" [loading]="list.loading">
|
||
|
<div class="row-auto">
|
||
|
<mat-toolbar *ngIf="list.selection.hasValue();else $toolbar" class="app-background-primary-lighter">
|
||
|
<span
|
||
|
class="spacer app-foreground-primary">{{ 'shared.data.selected' | translate : { len : list.selection.selected.length } }}</span>
|
||
|
<button mat-icon-button
|
||
|
matTooltip="{{ 'layouts.admin.message.markas' | translate }}{{ 'layouts.admin.message.read' | translate | lowercase }}"
|
||
|
(click)="mark(true)">
|
||
|
<mat-icon>drafts</mat-icon>
|
||
|
</button>
|
||
|
<button mat-icon-button
|
||
|
matTooltip="{{ 'layouts.admin.message.markas' | translate }}{{ 'layouts.admin.message.unread' | translate | lowercase }}"
|
||
|
(click)="mark(false)">
|
||
|
<mat-icon>mail</mat-icon>
|
||
|
</button>
|
||
|
<button mat-icon-button matTooltip="{{ 'shared.operation.deletes' | translate }}" (click)="delete()">
|
||
|
<mat-icon>delete</mat-icon>
|
||
|
</button>
|
||
|
</mat-toolbar>
|
||
|
<ng-template #$toolbar>
|
||
|
<mat-toolbar class="app-background-card">
|
||
|
<button mat-button color="primary"
|
||
|
(click)="refresh()">{{ 'layouts.admin.message.receive' | translate | uppercase }}</button>
|
||
|
<span class="spacer"></span>
|
||
|
<button mat-icon-button matTooltip="{{ 'shared.operation.dyeing' | translate }}"
|
||
|
[ngClass]="{'app-foreground-primary':this.list.colorful}" (click)="this.list.colorful=!this.list.colorful">
|
||
|
<mat-icon>brush</mat-icon>
|
||
|
</button>
|
||
|
<button mat-icon-button matTooltip="{{ 'shared.operation.filter' | translate }}" (click)="$filter.toggle()">
|
||
|
<mat-icon>filter_list</mat-icon>
|
||
|
</button>
|
||
|
</mat-toolbar>
|
||
|
<mat-divider></mat-divider>
|
||
|
</ng-template>
|
||
|
</div>
|
||
|
<div class="row-fill">
|
||
|
<table mat-table [dataSource]="list.rows">
|
||
|
<ng-container matColumnDef="select" sticky>
|
||
|
<th mat-header-cell *matHeaderCellDef>
|
||
|
<mat-checkbox (change)="select($event)"
|
||
|
[checked]="list.selection.hasValue()&&list.selection.selected.length==list.rows.length"
|
||
|
[indeterminate]="list.selection.hasValue()&&list.selection.selected.length!=list.rows.length">
|
||
|
</mat-checkbox>
|
||
|
</th>
|
||
|
<td mat-cell *matCellDef="let row">
|
||
|
<mat-checkbox (change)="$event ? list.selection.toggle(row) : null"
|
||
|
[checked]="list.selection.isSelected(row)">
|
||
|
</mat-checkbox>
|
||
|
</td>
|
||
|
</ng-container>
|
||
|
<ng-container matColumnDef="subject">
|
||
|
<th mat-header-cell *matHeaderCellDef>{{ 'layouts.admin.message.subject' | translate }}</th>
|
||
|
<td mat-cell [class.bold]="!row.flag" *matCellDef="let row">
|
||
|
<a (click)="read(row.id)">{{row.subject}}</a>
|
||
|
</td>
|
||
|
</ng-container>
|
||
|
<ng-container matColumnDef="time">
|
||
|
<th mat-header-cell *matHeaderCellDef>{{ 'layouts.admin.message.time' | translate }}</th>
|
||
|
<td mat-cell *matCellDef="let row"> {{ row.time | date:'yyyy-MM-dd HH:mm' }} </td>
|
||
|
</ng-container>
|
||
|
<ng-container matColumnDef="source">
|
||
|
<th mat-header-cell *matHeaderCellDef>{{ 'layouts.admin.message.source' | translate }}</th>
|
||
|
<td mat-cell *matCellDef="let row"> {{ row.source.name }} </td>
|
||
|
</ng-container>
|
||
|
<tr mat-header-row *matHeaderRowDef="list.columns; sticky: true"></tr>
|
||
|
<tr mat-row *matRowDef="let row; columns: list.columns;"
|
||
|
[ngClass]="{'app-background-accent-lighter':this.list.colorful&&!row.flag}"></tr>
|
||
|
<tr class="mat-row" [hidden]="list.loading" *matNoDataRow>
|
||
|
<td class="mat-cell no-data" [attr.colspan]="list.columns.length">{{ 'shared.data.empty' | translate }}
|
||
|
</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
</div>
|
||
|
<div class="row-auto">
|
||
|
<!-- --list.total 这有问题 切换页时候传的长度不对,kun 没改-->
|
||
|
<mat-divider></mat-divider>
|
||
|
<mat-paginator [length]="list.total" [pageIndex]="list.pageIndex" [pageSize]="list.pageSize"
|
||
|
(page)="refresh($event)">
|
||
|
</mat-paginator>
|
||
|
</div>
|
||
|
</mat-sidenav-content>
|
||
|
</mat-sidenav-container>
|