File

src/app/crm/contact/contact.component.ts

Implements

OnInit

Metadata

selector crm-contact
styleUrls ./contact.component.scss
templateUrl ./contact.component.html

Index

Properties
Methods

Constructor

constructor(service: ContactService, dialog: MatDialog)
Parameters :
Name Type Optional
service ContactService No
dialog MatDialog No

Methods

isAllSelected
isAllSelected()
Returns : boolean
masterToggle
masterToggle()
Returns : void
ngOnInit
ngOnInit()
Returns : void
onDeleteTriggered
onDeleteTriggered()
Returns : void
onEditorTriggered
onEditorTriggered(item)
Parameters :
Name Optional
item No
Returns : void
onNew
onNew(event)
Parameters :
Name Optional
event No
Returns : void
onUpdateContact
onUpdateContact(contact)
Parameters :
Name Optional
contact No
Returns : void
rowSelection
rowSelection(row, event)
Parameters :
Name Optional
row No
event No
Returns : void

Properties

dataSource
Type : any
Default value : new MatTableDataSource([])
displayedColumns
Type : string[]
Default value : [ 'select', 'name', 'phone', 'relation', 'company', 'mail', 'star' ]
paginator
Type : MatPaginator
Decorators :
@ViewChild(MatPaginator, {static: false})
selection
Default value : new SelectionModel(true, [])
sort
Type : MatSort
Decorators :
@ViewChild(MatSort, {static: false})
import {
  Component,
  OnInit,
  Inject,
  ViewEncapsulation,
  ViewChild
} from '@angular/core';
import { MatDialog } from '@angular/material';
import { MAT_DIALOG_DATA } from '@angular/material';
import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material';
import { SelectionModel } from '@angular/cdk/collections';
import { ContactService } from './contact.service';

@Component({
  selector: 'crm-contact',
  templateUrl: './contact.component.html',
  styleUrls: ['./contact.component.scss']
})
export class ContactComponent implements OnInit {
  displayedColumns: string[] = [
    'select',
    'name',
    'phone',
    'relation',
    'company',
    'mail',
    'star'
  ];

  dataSource: any = new MatTableDataSource([]);
  selection = new SelectionModel(true, []);

  @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
  @ViewChild(MatSort, { static: false }) sort: MatSort;

  constructor(private service: ContactService, private dialog: MatDialog) { }

  ngOnInit() {
    this.service.getList().subscribe(res => {
      this.dataSource = new MatTableDataSource(res);
      this.dataSource.paginator = this.paginator;
    });
  }

  isAllSelected() {
    const numSelected = this.selection.selected.length;
    const numRows = this.dataSource.data.length;
    return numSelected === numRows;
  }

  masterToggle() {
    this.isAllSelected()
      ? this.selection.clear()
      : this.dataSource.data.forEach(row => this.selection.select(row));
  }

  rowSelection(row, event) {
    this.selection.toggle(row);
    this.onUpdateContact(row);
  }

  onNew(event) {
    let dialogRef = this.dialog.open(ContactUpdateComponent, {
      width: '500px',
      data: {}
    });

    dialogRef.afterClosed().subscribe(result => {
      console.log('The dialog was closed');
    });
  }

  onEditorTriggered(item) {
    console.log(item);
    let dialogRef = this.dialog.open(ContactUpdateComponent, {
      width: '500px',
      data: item
    });

    dialogRef.afterClosed().subscribe(result => {
      console.log('The dialog was closed');
    });
  }

  onDeleteTriggered() {
    console.log(this.selection.selected);
    // this.service.delete(this.selection.selected);
  }

  onUpdateContact(contact) {
    const dialogRef = this.dialog.open(ContactUpdateComponent, {
      width: '400px',
      panelClass: 'contact-dialog-form',
      data: contact
    });

    dialogRef.afterClosed().subscribe(result => {
      console.log(result);
    });
  }
}

@Component({
  selector: 'crm-contact-upate',
  templateUrl: './update.component.html',
  styleUrls: ['./update.component.scss'],
  encapsulation: ViewEncapsulation.None
})
export class ContactUpdateComponent {
  constructor(@Inject(MAT_DIALOG_DATA) public data: any) { }
}
<button mat-raised-button (click)="onNew($event)">
  <mat-icon>add</mat-icon> 添加
</button>
<button
  mat-raised-button
  (click)="onDeleteTriggered()"
  [disabled]="!selection.hasValue()"
>
  <mat-icon>delete</mat-icon> 删除
</button>

<div class="mat-elevation-z4">
  <div class="table-container">
    <table class="table-hover" mat-table [dataSource]="dataSource">
      <ng-container matColumnDef="select">
        <th mat-header-cell *matHeaderCellDef>
          <mat-checkbox
            (change)="$event ? masterToggle() : null"
            [checked]="selection.hasValue() && isAllSelected()"
            [indeterminate]="selection.hasValue() && !isAllSelected()"
          >
          </mat-checkbox>
        </th>
        <td mat-cell *matCellDef="let row">
          <mat-checkbox
            (click)="$event.stopPropagation()"
            (change)="$event ? selection.toggle(row) : null"
            [checked]="selection.isSelected(row)"
          >
          </mat-checkbox>
        </td>
      </ng-container>

      <ng-container matColumnDef="name" sticky>
        <th mat-header-cell *matHeaderCellDef>姓名</th>
        <td mat-cell *matCellDef="let element">{{ element.name }}</td>
      </ng-container>

      <ng-container matColumnDef="phone">
        <th mat-header-cell *matHeaderCellDef>手机</th>
        <td mat-cell *matCellDef="let element">{{ element.phone }}</td>
      </ng-container>

      <ng-container matColumnDef="relation">
        <th mat-header-cell *matHeaderCellDef>关系</th>
        <td mat-cell *matCellDef="let element">{{ element.relation }}</td>
      </ng-container>

      <ng-container matColumnDef="company">
        <th mat-header-cell *matHeaderCellDef>单位</th>
        <td mat-cell *matCellDef="let element">{{ element.company }}</td>
      </ng-container>

      <ng-container matColumnDef="mail">
        <th mat-header-cell *matHeaderCellDef>邮箱</th>
        <td mat-cell *matCellDef="let element">{{ element.mail }}</td>
      </ng-container>

      <ng-container matColumnDef="star" stickyEnd>
        <th mat-header-cell *matHeaderCellDef>操作</th>
        <td
          mat-cell
          *matCellDef="let element"
          (click)="onEditorTriggered(element); $event.stopPropagation()"
        >
          编辑
        </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr
        mat-row
        *matRowDef="let row; columns: displayedColumns"
        (click)="rowSelection(row)"
      ></tr>
    </table>
  </div>

  <mat-paginator [pageSize]="10"></mat-paginator>
</div>

<button mat-fab class="contact-add-btn" (click)="onNew($event)"><mat-icon>person_add</mat-icon></button>
<!-- <stbui-speed-dial>
  <button mat-mini-fab>
    <mat-icon>search</mat-icon>
  </button>
  <button mat-mini-fab>
    <mat-icon>edit</mat-icon>
  </button>
  <button mat-mini-fab>
    <mat-icon>home</mat-icon>
  </button>
</stbui-speed-dial> -->

./contact.component.scss

:host {
  display: block;
  margin: 24px;
}

button {
  margin: 0 16px 16px 0;
}

.table-container {
  position: relative;
  overflow: auto;
}

table {
  width: 100%;
}

.contact-add-btn {
  position: fixed;
  bottom: 20px;
  right: 20px;
}

.avatar {
  border-radius: 50%;
  width: 100%;
  height: 100%;
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""