0.0.3 • Published 5 years ago

ptc-server-table v0.0.3

Weekly downloads
5
License
-
Repository
-
Last release
5 years ago

ptc-server-Table

###import { PtcServerTableModule } from 'ptc-server-table'

描述

用途 該套件為伺服器端渲染表格 , 具有分頁 , 排序 , 切換頁面長度 ...等功能

整合內容 元件內部整合 meterial 樣式與 cdk tool

參考文獻

mat-table 表格主體

sort-header 排序表頭

paginator 切頁功能

屬性

屬性定義名稱型態預設值描述
@Input()optionsPtcServerTableOptionsnull
@Input()isVisibleBtnSearchbooleantruep-check 生效 是否顯示查詢按鈕
@Input()isVisibleBtnDeletebooleantruep-check 生效 是否顯示刪除按鈕
@Input()isVisibleBtnEditbooleantruep-check 生效 是否顯示編輯按鈕
@Input()heightstringnull定義表格最高高度 , 若超出則scroll
@Input()noDataLabelstring'無資料'無資料時呈現文字
@Input()lastPageLabelstringnull往最後一頁按鈕之tooltip
@Input()nextPageLabelstringnull往下一頁按鈕之tooltip
@Input()previousPageLabelstringnull往上一頁按鈕之tooltip
@Input()firstPageLabelstringnull往第一頁按鈕之tooltip
@Input()itemsPerPageLabelstring'分頁筆數'分頁筆數呈現文字
@Input()setRangeLabel(page: number, pageSize: umber, length: number) => string{起始筆數} - {最後筆數} of {總共筆數}呈現分頁資訊
@Output()onBtnDeleteEventEmitter<any>p-check 生效 按下刪除按鈕後回呼事件
@Output()onBtnEditEventEmitter<any>p-check 生效 按下編輯按鈕後回呼事件
@Output()onBtnSearchEventEmitter<any>p-check 生效 按下查詢按鈕後回呼事件
@Output()onPageChangeEventEmitter<any>當切換頁面大小時,觸發的回呼事件
@Output()onHeaderChangeEventEmitter<any>當排序標頭變更時,觸發的回呼事件
@Output()onAjaxErrorEventEmitter<any>當ajax發生錯誤時 , 觸發的回呼事件
@Output()beforeAjaxEventEmitter<any>當ajax執行前 , 觸發的回呼事件
@Output()onAjaxSuccessEventEmitter<any>當ajax執行後 , 成功的回呼事件
@Output()onAjaxEventEmitter<any>當ajax執行後 , 結果回傳前之回呼事件

方法

名稱型態描述
getSelectRowsany[]p-check 生效 取得勾選之項目
clearItemsany[]p-check 生效 清除勾選之項目
rendervoid渲染表格內容
resetvoid重置表格內容

物件

PtcAjaxOptions

傳輸資料到 server site 之物件定義

名稱型態預設值描述
urlstringnull執行http request 網址
methodstringGETPOST , GET , PATCH , PUT , DELETE
bodyPtcServerTableRequestnew PtcServerTableRequest()內文
headersanynull-
responseTypeanyjson-

PtcServerTableOptions

表格顯示定義

名稱型態預設值描述
columnsany[]nulltext : 表頭文字 name : 定義渲染對應 customer : 是否客製化欄位
pageSizeOptionsnumber[]5,10,20頁面長度定義清單
pageSizenumber0頁面預設選取長度
pageIndexnumber0當前頁面
ajaxPtcAjaxOptionsnullajax 設定值

PtcServerTableRequest

傳出物件定義

名稱型態預設值描述
pageIndexnumber0查詢定義起始頁數
pageSizenumber0查詢定義頁面長度
criteriaTnull送回server site 的查詢物件
sortnumbernull排序欄位 , 來源為定義之 column
directionstringnull排序方式 asc or desc

PtcServerTableResponse

傳入物件之定義
名稱型態預設值描述
dataT[][]回傳物件清單
isSuccessbooleanfalse查詢定義頁面長度
totalCountnumber0回傳物件的總數字
extensionanynull回傳其他物件
messagestringnull回傳結果文字

使用方式(範例)

app.module.ts

import { PtcServerTableModule } from 'ptc-server-table'

@NgModule({
  declarations: [
    AppComponent,
  ],
  
  imports: [  
	 ...
    PtcServerTableModule //add this line.
  ],

  bootstrap: [AppComponent]
})
export class AppModule { }

app.component.ts

import { PtcServerTableComponent, PtcServerTableOptions, PtcAjaxOptions, PtcServerTableRequest } from 'ptc-server-table';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {


  isLoading = false;

  @ViewChild('ptcServerTable') ptcServerTable: PtcServerTableComponent;

  opts = new PtcServerTableOptions();

  constructor(){
    
    this.opts.ajax = new PtcAjaxOptions();
    this.opts.ajax.url = 'http://{yourip}/api/values/GetList/';
    this.opts.ajax.method = 'POST';
    this.opts.columns = [
      {
        text: '全選',
        name: 'p-check' // it will render checkbox
      },
      {
        text: '名稱',
        name: 'Name',
  
      },
      {
        text: '信箱',
        name: 'Email',
  
      },
      {
        text: '帳戶',
        name: 'Account',
  
      },
      {
        text: '操作',
        name: 'p-operator', // it will render btn group
  
      },
       {
        text: '客製化欄位',
        name: 'customer', 
  	     customer : true,
      },
    ]
    this.opts.pageSizeOptions = [5, 10, 20];
    this.opts.pageSize = 20;
    this.opts.pageIndex = 4;
    
  }

  beforeAjax($event){
    this.isLoading = true;
    alert('before ajax')
  }

    
  onAjax($event : PtcServerTableRequest<any>) {
    alert('onAjax' + JSON.stringify($event));
    
    let objA = {
      Name : 'chenhungtzu',
      Phone : '0926366680'
    }
    $event.criteria = objA 
  }

  onAjaxSuccess($event){
    this.isLoading = false;
    alert('after ajax success'+ JSON.stringify($event))
  }
  
  onAjaxError($event){
    this.isLoading = false;
    alert('after ajax error'+ JSON.stringify($event))
  }

  onBtnDelete($event){
    alert('delete' + JSON.stringify($event))
  }

  onBtnSearch($event){
    alert('serach'+ JSON.stringify($event))
  }

  onBtnEdit($event){
    alert('edit'+ JSON.stringify($event))
  }

  onPageChange($event) {
    alert('page change' + JSON.stringify($event));
  }

  getSelectItem($event){
    alert('select' + this.ptcServerTable.getSelectRows())
  }
 
  setRangeLabel(page: number, pageSize: number, length: number): string {
    if (length == 0 || pageSize == 0) {
      return `0 of ${length}`;
    }
    length = Math.max(length, 0);
    const startIndex = page * pageSize;
    const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;
    return `第 ${startIndex + 1}筆 - 第 ${endIndex} 筆 , 共 ${length} 筆資料`;
  }

  render($event){
    this.ptcServerTable.render();
  }

  reset($event){
    this.ptcServerTable.reset();
  }

app.component.html

<!-- table -->
 <app-ptc-server-table #ptcServerTable 
  [options]="opts" 
  [templateRefs]= "{customer : customerRef}"
  [setRangeLabel]="setRangeLabel"
    (onPageChange)="onPageChange($event)" 
    (onBtnDelete)="onBtnDelete($event)" 
    (onBtnSearch)="onBtnSearch($event)"
    (onBtnEdit)="onBtnEdit($event)"
    (onAjaxError)="onAjaxError($event)"
    (onAjaxSuccess)="onAjaxSuccess($event)"
    (onAjax)="onAjax($event)"
    (beforeAjax)="beforeAjax($event)"
    >
  </app-ptc-server-table><!-- end table -->
  
   <ng-template #customerRef  let-row="row">
    客製化欄位 , {{row}} 
  </ng-template>

index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>TestCore</title>
  <base href="/">
  <!-- add this line-->
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
  <!-- add this line-->
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
</body>
</html>