st 表格

st 并不是在创造另一个表格组件,而是在 nz-table 基础上以可配置形式渲染表格,在中后台里这种方式可以满足绝大多数场景,但又可以更易地管理表格渲染动作。

关于数据源

data 支持三种不同格式数据源,整体分为:URL和静态数据两类;但可以透过参数的配置达到不同的效果,同时有非常多参数可通过 AlainSTConfig 重置默认值,使整个 st 组件模板达到极简。

URL

指的是通过一个 URL 字符串来获取数据。

  • 通过 req.paramsreq.method 等参数解决请求数据格式问题

  • 通过 res.reName 重置数据 key 而无须担心后端数据格式是否满足 st 需求

  • 通过 res.process 可以对表格渲染前对数据进一步优化

  • 通过 page.zeroIndexed 可以调整 http 请求时 pi 参数是否遵循 0 基索引,默认情况下为 1 基索引

  • 若返回体的值是数组类型,则强制不分页

  • 使用 _HttpClient 发起请求,因此满足 AlainThemeConfig 的配置也适用

静态数据

指的是通过指定值为 STData[]Observable<STData[]>,二者都遵循以下规则:

  • page.front 前端分页,默认:true

    • truest 根据 data 长度受控分页,包括:排序、过滤等

    • false 由用户通过 totaldata 参数受控分页,并维护 (change) 当分页变更时重新加载数据

  • page.show 是否显示分页器;当未指定时若 ps>total 情况下自动不显示

常见问题

Cannot read property ‘text’ of undefined

若组件已经加载完毕,此时如果再次改变 columns 时可能会出现该错误,这是因为 st 每次只会根据 columns 对数据处理,当列定义发生改变后可能会因为列定义与现有数据无法配对,可能需要使用 this.st.resetColumns({ columns: [], emitReload: true }) 来更新列定义并重新加载数据。

  1. import { STModule } from '@delon/abc/st';

代码演示

st 表格 - 图1

基本

快速生成表格;利用 res 可以适配后端数据格式。

  1. import { Component, ViewChild } from '@angular/core';
  2. import { STColumn, STComponent } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-basic',
  5. template: `
  6. <button nz-button nzType="primary" (click)="setRow()">setRow Method</button>
  7. <st #st [widthMode]="{ type: 'strict' }" [data]="url" [req]="{ params: params }" [columns]="columns"></st>
  8. `,
  9. })
  10. export class ComponentsStBasicComponent {
  11. url = `/users?total=2&field=list`;
  12. params = { a: 1, b: 2 };
  13. @ViewChild('st', { static: false }) private st: STComponent;
  14. columns: STColumn[] = [
  15. { title: '编号', index: 'id', width: 80 },
  16. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  17. { title: '邮箱', index: 'email', width: 80 },
  18. { title: '电话', index: 'phone' },
  19. { title: { text: '佣金', optional: '(单位:元)', optionalHelp: '计算公式=订单金额 * 0.6%' }, index: 'price', type: 'currency' },
  20. { title: '注册时间', type: 'date', index: 'registered' },
  21. ];
  22. setRow(): void {
  23. this.st.setRow(0, { price: 100000000 })
  24. }
  25. }

st 表格 - 图2

自定义数据

data 属性支持 STData[]Observable 数据类型。

  1. import { Component, OnInit } from '@angular/core';
  2. import { STColumn, STChange } from '@delon/abc/st';
  3. import { of } from 'rxjs';
  4. import { delay } from 'rxjs/operators';
  5. @Component({
  6. selector: 'components-st-custom-data',
  7. template: `
  8. <div class="mb-md">
  9. <button (click)="st.clear()" nz-button>Clear Data</button>
  10. <button (click)="st.reload()" nz-button>Reload Data</button>
  11. <button (click)="st.clearStatus(); st.reload()" nz-button>Clear Status</button>
  12. </div>
  13. <st #st [data]="users" [columns]="columns" (change)="change($event)"></st>
  14. `,
  15. })
  16. export class ComponentsStCustomDataComponent implements OnInit {
  17. users: any[] = [];
  18. columns: STColumn[] = [
  19. {
  20. title: '编号',
  21. index: 'id',
  22. type: 'checkbox',
  23. selections: [
  24. {
  25. text: '小于25岁',
  26. select: data => data.forEach(item => (item.checked = item.age < 25)),
  27. },
  28. {
  29. text: '大于25岁',
  30. select: data => data.forEach(item => (item.checked = item.age >= 25)),
  31. },
  32. ],
  33. },
  34. {
  35. title: '姓名',
  36. index: 'name',
  37. sort: {
  38. compare: (a, b) => a.name.length - b.name.length,
  39. },
  40. filter: {
  41. type: 'keyword',
  42. fn: (filter, record) => !filter.value || record.name.indexOf(filter.value) !== -1,
  43. },
  44. },
  45. {
  46. title: '年龄',
  47. index: 'age',
  48. sort: {
  49. compare: (a, b) => a.age - b.age,
  50. },
  51. filter: {
  52. menus: [{ text: '20岁以下', value: [0, 20] }, { text: '20-25岁', value: [20, 25] }, { text: '25岁以上', value: [25, 100] }],
  53. fn: (filter, record) => record.age >= filter.value[0] && record.age <= filter.value[1],
  54. multiple: false,
  55. },
  56. },
  57. {
  58. title: '状态',
  59. type: 'badge',
  60. index: 'status',
  61. badge: {
  62. 1: { text: 'Success', color: 'success' },
  63. 2: { text: 'Error', color: 'error' },
  64. 3: { text: 'Processing', color: 'processing' },
  65. 4: { text: 'Default', color: 'default' },
  66. 5: { text: 'Warning', color: 'warning' },
  67. },
  68. },
  69. ];
  70. ngOnInit(): void {
  71. of(
  72. Array(100)
  73. .fill({})
  74. .map((_item: any, idx: number) => {
  75. return {
  76. id: idx + 1,
  77. name: `name ${idx + 1}`,
  78. age: Math.ceil(Math.random() * 10) + 20,
  79. status: Math.floor(Math.random() * 5) + 1,
  80. };
  81. }),
  82. )
  83. .pipe(delay(500))
  84. .subscribe(res => (this.users = res));
  85. }
  86. change(e: STChange) {
  87. console.log(e);
  88. }
  89. }

st 表格 - 图3

列类型

支持十种不同列类型:行号、多选、单选、徽标、标签、图片、数字、货币、日期、布尔徽章、枚举。也可以使用自定义列完成更复杂渲染。

  1. import { Component } from '@angular/core';
  2. import { STColumn, STColumnBadge, STColumnTag } from '@delon/abc/st';
  3. const BADGE: STColumnBadge = {
  4. 1: { text: '成功', color: 'success' },
  5. 2: { text: '错误', color: 'error' },
  6. 3: { text: '进行中', color: 'processing' },
  7. 4: { text: '默认', color: 'default' },
  8. 5: { text: '警告', color: 'warning' },
  9. };
  10. const TAG: STColumnTag = {
  11. 1: { text: '成功', color: 'green' },
  12. 2: { text: '错误', color: 'red' },
  13. 3: { text: '进行中', color: 'blue' },
  14. 4: { text: '默认', color: '' },
  15. 5: { text: '警告', color: 'orange' },
  16. };
  17. const r = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1) + min);
  18. @Component({
  19. selector: 'components-st-type',
  20. template: `
  21. <button nz-button (click)="reload()">Reload</button>
  22. <st #st [data]="users" [columns]="columns" [page]="{ position: 'both' }"></st>
  23. `,
  24. })
  25. export class ComponentsStTypeComponent {
  26. users: any[] = [];
  27. columns: STColumn[] = [
  28. { title: '行号', type: 'no' },
  29. { title: '姓名', index: 'name' },
  30. { title: '年龄', index: 'age', type: 'number' },
  31. { title: 'tag', index: 'tag', type: 'tag', tag: TAG },
  32. { title: 'badge', index: 'badge', type: 'badge', badge: BADGE },
  33. { title: 'Enum', index: 'enum', type: 'enum', enum: { 1: '壹', 2: '贰', 3: '叁' } },
  34. { title: 'yn', index: 'yn', type: 'yn' },
  35. ];
  36. reload() {
  37. this.users = Array(10)
  38. .fill({})
  39. .map((_item: any, idx: number) => {
  40. return {
  41. id: idx + 1,
  42. name: `name ${idx + 1}`,
  43. age: r(10, 50),
  44. tag: r(1, 5),
  45. badge: r(1, 5),
  46. enum: r(1, 3),
  47. yn: [true, false][r(1, 5) % 2],
  48. };
  49. });
  50. }
  51. constructor() {
  52. this.reload();
  53. }
  54. }

st 表格 - 图4

可选择

利用 change 监听所选的数据。

  1. import { Component } from '@angular/core';
  2. import { STColumn, STData, STChange } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-checkbox',
  5. template: `<st [data]="url" [columns]="columns"
  6. [req]="{params: params}" [res]="{process: dataProcess}"
  7. (change)="change($event)"></st>`,
  8. })
  9. export class ComponentsStCheckboxComponent {
  10. url = `/users?total=100`;
  11. params = { a: 1, b: 2 };
  12. columns: STColumn[] = [
  13. { title: '编号', index: 'id.value', type: 'checkbox' },
  14. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  15. { title: '邮箱', index: 'email' },
  16. { title: '电话', index: 'phone' },
  17. { title: '注册时间', type: 'date', index: 'registered' },
  18. ];
  19. change(e: STChange) {
  20. console.log('change', e);
  21. }
  22. dataProcess(data: STData[]) {
  23. return data.map((i: STData, index: number) => {
  24. i.disabled = index === 0;
  25. return i;
  26. });
  27. }
  28. }

st 表格 - 图5

搜索表单

配合 load() & reset() 实现搜索表单。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-form',
  5. template: `
  6. <div class="mb-md">
  7. <input nz-input [(ngModel)]="params.name" name="name" nzPlaceHolder="请输入姓名" style="width: 100px;" class="mr-sm">
  8. <button nz-button (click)="st.load(1)" [nzType]="'primary'">搜索</button>
  9. <button nz-button (click)="params = {}; st.reset()">重置</button>
  10. </div>
  11. <st #st [data]="url" [req]="{params: params}" [columns]="columns"></st>
  12. `,
  13. })
  14. export class ComponentsStFormComponent {
  15. url = `/users?total=100`;
  16. params: any = { name: 'asdf' };
  17. // mock
  18. columns: STColumn[] = [
  19. { title: '编号', index: 'id', default: '-' },
  20. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  21. { title: '邮箱', index: 'email' },
  22. { title: '电话', index: 'phone' },
  23. { title: '注册时间', type: 'date', index: 'registered' },
  24. ];
  25. }

st 表格 - 图6

行事件

利用 (change) 实现点击行回调,因于DOM事件在同一元素上无法区分单或双击,若明确不需要双击事件,可以设定 rowClickTime 值为 0 以防止 200ms 迟延。

打开控制面板了解打印明细。

  1. import { Component } from '@angular/core';
  2. import { STColumn, STChange } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-row-click',
  5. template: `
  6. <st [data]="url"
  7. [req]="{params: params}" [columns]="columns"
  8. (change)="_click($event)"></st>`,
  9. })
  10. export class ComponentsStRowClickComponent {
  11. url = `/users?results=3`;
  12. params = { a: 1, b: 2 };
  13. // mock
  14. columns: STColumn[] = [
  15. { title: '编号', index: 'id' },
  16. { title: '邮箱', index: 'email' },
  17. { title: '电话', index: 'phone' },
  18. {
  19. title: '',
  20. buttons: [
  21. {
  22. text: 'btn',
  23. type: 'link',
  24. click: (e: any) => console.log('btn click', e),
  25. },
  26. ],
  27. },
  28. ];
  29. _click(e: STChange) {
  30. console.log(e);
  31. }
  32. }

st 表格 - 图7

单选框

利用 change 监听所选的数据。

  1. import { Component } from '@angular/core';
  2. import { STColumn, STData, STChange } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-radio',
  5. template: `<st [data]="url" [columns]="columns"
  6. [req]="{params: params}" [res]="{process: dataChange}"
  7. (change)="change($event)"></st>`,
  8. })
  9. export class ComponentsStRadioComponent {
  10. url = `/users?total=300`;
  11. params = { a: 1, b: 2 };
  12. columns: STColumn[] = [
  13. { title: '编号', index: 'id', type: 'radio' },
  14. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  15. { title: '邮箱', index: 'email' },
  16. { title: '电话', index: 'phone' },
  17. { title: '注册时间', type: 'date', index: 'registered' },
  18. ];
  19. change(ret: STChange) {
  20. console.log('change', ret);
  21. }
  22. dataChange(data: STData[]) {
  23. return data.map((i: STData, index: number) => {
  24. i.disabled = index === 0;
  25. i.hidden = index === 1;
  26. return i;
  27. });
  28. }
  29. }

st 表格 - 图8

后端筛选和排序

利用 multiSort 支持多字段排序。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-sort',
  5. template: `
  6. <button nz-button (click)="st.reset()">重置</button>
  7. <st #st [data]="url" [req]="{ params: params }" [columns]="columns" multiSort></st>
  8. `,
  9. })
  10. export class ComponentsStSortComponent {
  11. url = `/users?total=200`;
  12. params = { a: 1, b: 2 };
  13. columns: STColumn[] = [
  14. { title: '编号', index: 'id' },
  15. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  16. {
  17. title: '姓名',
  18. index: 'name.last',
  19. format: (item, _col, index) => `${index + 1}: ${item.name.last} ${item.name.first}`,
  20. sort: true,
  21. },
  22. {
  23. title: '国家',
  24. index: 'nat',
  25. filter: {
  26. menus: [{ text: '中国', value: 'CH' }, { text: '美国', value: 'US' }, { text: '德国', value: 'DE' }],
  27. },
  28. sort: true,
  29. },
  30. {
  31. title: '性别',
  32. index: 'gender',
  33. filter: {
  34. menus: [{ text: 'male', value: 'male' }, { text: 'female', value: 'female' }],
  35. multiple: false,
  36. },
  37. sort: true,
  38. },
  39. { title: '注册时间', type: 'date', index: 'registered' },
  40. ];
  41. }

st 表格 - 图9

可展开

使用 #expand 模板实现可展开,允许接收 itemindexcolumn 三个值。附加可实现:嵌套子表格。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-expand',
  5. template: `
  6. <st [data]="users" [columns]="columns" [expand]="expand" expandRowByClick expandAccordion>
  7. <ng-template #expand let-item let-index="index" let-column="column">
  8. {{ item.description }}
  9. </ng-template>
  10. </st>
  11. `,
  12. })
  13. export class ComponentsStExpandComponent {
  14. users: any[] = Array(10)
  15. .fill({})
  16. .map((_item: any, idx: number) => {
  17. return {
  18. id: idx + 1,
  19. name: `name ${idx + 1}`,
  20. age: Math.ceil(Math.random() * 10) + 20,
  21. // 是否显示展开按钮
  22. showExpand: idx !== 0,
  23. description: `${idx + 1}. My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.`,
  24. };
  25. });
  26. columns: STColumn[] = [
  27. { title: '编号', index: 'id' },
  28. { title: '姓名', index: 'name' },
  29. { title: '年龄', index: 'age' },
  30. {
  31. buttons: [
  32. {
  33. text: 'Button',
  34. },
  35. ],
  36. },
  37. ];
  38. }

st 表格 - 图10

自定义列

创建一个带有 st-row="custom-name"ng-template,并在列描述 render: 'custom-name' 指定名称;模板允许接收 itemindexcolumn 三个值。

如果指定 type="title" 表示是对标题自定义列。附加可实现:表头分组。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-render',
  5. template: `
  6. <div class="mb-md">
  7. <nz-checkbox-group [(ngModel)]="customColumns" name="customColumns" (ngModelChange)="st.resetColumns({ emitReload: true })"></nz-checkbox-group>
  8. </div>
  9. <st #st [data]="users" [columns]="columns">
  10. <ng-template st-row="customTitle" type="title" let-c>
  11. {{ c.title.text }}
  12. <span nz-dropdown [nzDropdownMenu]="menuTpl" nzTrigger="click" [nzClickHide]="false" nzPlacement="bottomRight">
  13. <i nz-icon nzType="down"></i>
  14. </span>
  15. <nz-dropdown-menu #menuTpl="nzDropdownMenu">
  16. <div class="ant-table-filter-dropdown p-sm">
  17. <input type="text" nz-input placeholder="Search name" [(ngModel)]="searchValue" name="searchValue" class="width-sm mr-sm">
  18. <button nz-button [nzType]="'primary'" (click)="st.load(2)">Search</button>
  19. </div>
  20. </nz-dropdown-menu>
  21. </ng-template>
  22. <ng-template st-row="custom" let-item let-index="index">
  23. <span nz-tooltip [nzTooltipTitle]="'年龄:' + item.age">tooltip: {{item.age}}-{{index}}</span>
  24. </ng-template>
  25. </st>
  26. `,
  27. })
  28. export class ComponentsStRenderComponent {
  29. searchValue: string;
  30. users: any[] = Array(10)
  31. .fill({})
  32. .map((_item: any, idx: number) => {
  33. return {
  34. id: idx + 1,
  35. name: `name ${idx + 1}`,
  36. age: Math.ceil(Math.random() * 10) + 20,
  37. };
  38. });
  39. columns: STColumn[] = [
  40. { title: '编号', index: 'id' },
  41. { title: '姓名', index: 'name', iif: () => this.isChoose('name') },
  42. { title: '年龄', index: 'age', iif: () => this.isChoose('age') },
  43. {
  44. title: '自定义',
  45. renderTitle: 'customTitle',
  46. render: 'custom',
  47. iif: () => this.isChoose('custom'),
  48. },
  49. ];
  50. customColumns = [
  51. { label: '姓名', value: 'name', checked: true },
  52. { label: '年龄', value: 'age', checked: true },
  53. { label: '自定义', value: 'custom', checked: true },
  54. ];
  55. isChoose(key: string): boolean {
  56. return !!this.customColumns.find(w => w.value === key && w.checked);
  57. }
  58. }

st 表格 - 图11

自定义按钮组

透过简单的配置产生一组日常按钮组(目标组件示例:DemoModalComponentDemoDrawerComponent)。

对话框由ModalHelper处理,抽屉由DrawerHelper处理。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. import { NzMessageService } from 'ng-zorro-antd/message';
  4. import { DemoModalComponent, DemoDrawerComponent } from '@shared';
  5. @Component({
  6. selector: 'components-st-buttons',
  7. template: `
  8. <st [data]="users" [columns]="columns"></st>
  9. `,
  10. })
  11. export class ComponentsStButtonsComponent {
  12. constructor(private message: NzMessageService) {}
  13. users: any[] = Array(10)
  14. .fill({})
  15. .map((_item: any, idx: number) => {
  16. return {
  17. id: idx + 1,
  18. name: `name ${idx + 1}`,
  19. age: Math.ceil(Math.random() * 10) + 20,
  20. };
  21. });
  22. columns: STColumn[] = [
  23. { title: '序号', type: 'no' },
  24. { title: '编号', index: 'id' },
  25. { title: '姓名', index: 'name' },
  26. { title: '年龄', index: 'age' },
  27. {
  28. title: '操作区',
  29. buttons: [
  30. {
  31. text: 'Edit',
  32. icon: 'edit',
  33. type: 'modal',
  34. modal: {
  35. component: DemoModalComponent,
  36. },
  37. click: (_record, modal) => this.message.success(`重新加载页面,回传值:${JSON.stringify(modal)}`),
  38. },
  39. {
  40. text: 'Drawer',
  41. type: 'drawer',
  42. drawer: {
  43. title: '编辑',
  44. component: DemoDrawerComponent,
  45. },
  46. click: (_record, modal) => this.message.success(`重新加载页面,回传值:${JSON.stringify(modal)}`),
  47. },
  48. {
  49. icon: 'check-circle',
  50. click: record => this.message.info(`check-${record.name}`),
  51. iif: record => record.id % 2 === 0,
  52. iifBehavior: 'disabled',
  53. tooltip: `Is disabled button`,
  54. },
  55. {
  56. icon: 'delete',
  57. type: 'del',
  58. pop: {
  59. title: 'Yar you sure?',
  60. okType: 'danger',
  61. icon: 'star',
  62. },
  63. click: (record, _modal, comp) => {
  64. this.message.success(`成功删除【${record.name}】`);
  65. comp!.removeRow(record);
  66. },
  67. iif: record => record.id % 2 === 0,
  68. },
  69. {
  70. text: '更多',
  71. children: [
  72. {
  73. text: record => (record.id === 1 ? `过期` : `正常`),
  74. click: record => this.message.error(`${record.id === 1 ? `过期` : `正常`}【${record.name}】`),
  75. },
  76. {
  77. text: `审核`,
  78. click: record => this.message.info(`check-${record.name}`),
  79. iif: record => record.id % 2 === 0,
  80. iifBehavior: 'disabled',
  81. tooltip: 'This is tooltip',
  82. },
  83. {
  84. type: 'divider',
  85. },
  86. {
  87. text: `重新开始`,
  88. icon: 'edit',
  89. click: record => this.message.success(`重新开始【${record.name}】`),
  90. },
  91. ],
  92. },
  93. ],
  94. },
  95. ];
  96. }

st 表格 - 图12

自定义小部件

类型为 widget 自定义小部件,例如点击头像处理。

  1. import { Component, ViewChild } from '@angular/core';
  2. import { STColumn, STComponent } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-widget',
  5. template: `
  6. <div class="mb-md">
  7. <button (click)="st.clear()" nz-button>Clear Data</button>
  8. <button (click)="st.reload()" nz-button>Reload Data</button>
  9. <button (click)="st.clearStatus(); st.reload()" nz-button>Clear Status</button>
  10. <button (click)="changeImg()" nz-button>Change Img Data</button>
  11. </div>
  12. <st #st [data]="url" [columns]="columns"></st>
  13. `,
  14. })
  15. export class ComponentsStWidgetComponent {
  16. url = `/users?total=100`;
  17. @ViewChild('st', { static: false }) private st: STComponent;
  18. columns: STColumn[] = [
  19. { title: '编号', index: 'id', width: 80 },
  20. {
  21. title: '自定义头像',
  22. type: 'widget',
  23. widget: { type: 'img', params: ({ record }) => ({ img: record.picture.thumbnail }) },
  24. width: 150,
  25. },
  26. { title: '邮箱', index: 'email' },
  27. ];
  28. changeImg(): void {
  29. this.st.setRow(0, { picture: { thumbnail: 'https://ng-alain.com/assets/img/logo-color.svg' } }, { refreshSchema: true, emitReload: false });
  30. }
  31. }

st 表格 - 图13

固定列

对于列数很多的数据,可以使用 leftright 固定前后的列,横向滚动查看其它数据,需要和 scroll.x 配合使用。

固定列使用了 sticky 属性,浏览器支持情况可以参考这里

  • 若列头与内容不对齐或出现列重复,请指定列的宽度 width

  • 建议指定 scroll.x 为大于表格宽度的固定值或百分比。注意,且非固定列宽度之和不要超过 scroll.x

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-fixed',
  5. template: `
  6. <st [data]="users" [columns]="columns" [scroll]="{x: '1300px'}"></st>
  7. `,
  8. })
  9. export class ComponentsStFixedComponent {
  10. users: any[] = Array(10)
  11. .fill({})
  12. .map((_item: any, idx: number) => {
  13. return {
  14. id: idx + 1,
  15. name: `name ${idx + 1}`,
  16. age: Math.ceil(Math.random() * 10) + 20,
  17. };
  18. });
  19. columns: STColumn[] = [
  20. { title: '编号1', index: 'id', fixed: 'left', width: 100 },
  21. { title: '编号2', index: 'id', fixed: 'left', width: 100 },
  22. { title: '编号3', index: 'id', fixed: 'left', width: 100 },
  23. { title: '编号4', index: 'id' },
  24. { title: '编号5', index: 'id' },
  25. { title: '编号6', index: 'id' },
  26. { title: '编号7', index: 'id' },
  27. { title: '编号8', index: 'id' },
  28. { title: '编号8', index: 'id' },
  29. { title: '编号8', index: 'id' },
  30. { title: '编号8', index: 'id' },
  31. { title: '编号8', index: 'id' },
  32. { title: '姓名10', index: 'name', fixed: 'right', width: 100 },
  33. { title: '姓名11', index: 'name', fixed: 'right', width: 100 },
  34. { title: '年龄12', index: 'age', fixed: 'right', width: 100 },
  35. ];
  36. }

st 表格 - 图14

表头分组

columns[n] 可以内嵌 children,以渲染分组表头。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-grouping-columns',
  5. template: ` <st #st [data]="url" [req]="{ params: params }" [columns]="columns" bordered size="middle"> </st>`,
  6. })
  7. export class ComponentsStGroupingColumnsComponent {
  8. url = `/users?total=2&field=list`;
  9. params = { a: 1, b: 2 };
  10. columns: STColumn[] = [
  11. { title: '编号', index: 'id', sort: true },
  12. {
  13. title: 'Other',
  14. children: [
  15. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  16. { title: '邮箱', index: 'email' },
  17. {
  18. title: '姓名',
  19. sort: true,
  20. children: [
  21. { title: 'first', index: 'name.first', sort: true },
  22. { title: 'last', index: 'name.last' },
  23. ],
  24. },
  25. ],
  26. },
  27. ];
  28. }

st 表格 - 图15

响应式

小屏幕下将以响应模式堆叠显示,responsiveHideHeaderFooter 属性可以使大屏幕不显示头和尾,反之。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-responsive',
  5. template: `
  6. <st [data]="url" [req]="{params: params}" [columns]="columns"
  7. header="The header" footer="The footer" responsiveHideHeaderFooter>
  8. </st>`,
  9. })
  10. export class ComponentsStResponsiveComponent {
  11. url = `/users?total=100`;
  12. params = { a: 1, b: 2 };
  13. columns: STColumn[] = [
  14. { title: '编号', index: 'id' },
  15. { title: '头像', type: 'img', width: 60, index: 'picture.thumbnail' },
  16. { title: '邮箱', index: 'email' },
  17. { title: '电话', index: 'phone' },
  18. { title: '注册时间', type: 'date', index: 'registered' },
  19. ];
  20. }

st 表格 - 图16

统计

支持 countdistinctCountsumaveragemaxmin、自定义统计方法。

  1. import { Component } from '@angular/core';
  2. import { STColumn } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-statistical',
  5. template: `
  6. <button nz-button (click)="data = []">Clean Data</button>
  7. <st #st [data]="data" [columns]="columns" [body]="bodyTpl">
  8. <ng-template #bodyTpl let-s>
  9. <ng-container *ngIf="st.count > 0">
  10. <tr>
  11. <td>合计</td>
  12. <td>{{ s.len.text }} 个</td>
  13. <td>{{ s.dc.text }}</td>
  14. <td class="text-right">{{ s.sum.text }}</td>
  15. <td class="text-right">{{ s.avg.text }}</td>
  16. <td class="text-right">{{ s.min.text }}</td>
  17. <td class="text-right">{{ s.max.text }}</td>
  18. <td class="text-right">{{ s.custom.text }}</td>
  19. </tr>
  20. <tr class="bg-grey-lighter">
  21. <td colspan="3">性别平均值</td>
  22. <td class="text-right">{{ s.sum.value / s.dc.value | _currency }}</td>
  23. <td colspan="4"></td>
  24. </tr>
  25. </ng-container>
  26. </ng-template>
  27. </st>
  28. `,
  29. })
  30. export class ComponentsStStatisticalComponent {
  31. data: any[] = Array(100)
  32. .fill({})
  33. .map((_item: any, idx: number) => {
  34. return {
  35. id: idx + 1,
  36. price: ~~(Math.random() * 100),
  37. age: ~~(Math.random() * 100) > 50 ? '女' : '男',
  38. };
  39. });
  40. columns: STColumn[] = [
  41. { title: '行号', type: 'no' },
  42. { title: '编号', index: 'id', statistical: 'count', key: 'len' },
  43. { title: '性别', index: 'age', statistical: 'distinctCount', key: 'dc' },
  44. { title: 'Sum', index: 'price', type: 'currency', statistical: 'sum', key: 'sum' },
  45. { title: 'Average', index: 'price', type: 'currency', statistical: 'average', key: 'avg' },
  46. { title: 'Min', index: 'price', type: 'currency', statistical: 'min', key: 'min' },
  47. { title: 'Max', index: 'price', type: 'currency', statistical: 'max', key: 'max' },
  48. {
  49. title: 'Custom',
  50. index: 'price',
  51. type: 'currency',
  52. statistical: { type: values => ({ value: values[0], text: `**${values[0]}` }), currency: false },
  53. key: 'custom',
  54. },
  55. ];
  56. }

st 表格 - 图17

虚拟滚动

虚拟滚动,结合 cdk scrolling 的虚拟滚动,用于巨量数据加载。可以通过获得 cdkVirtualScrollViewport 进行进一步操作,见本示例及 API

  1. import { Component, ViewChild, OnDestroy, AfterViewInit } from '@angular/core';
  2. import { STColumn, STPage, STComponent } from '@delon/abc/st';
  3. import { Subject } from 'rxjs';
  4. import { takeUntil } from 'rxjs/operators';
  5. @Component({
  6. selector: 'components-st-virtual',
  7. template: `
  8. <button nz-button (click)="scrollToIndex(200)">Scroll To Index 200</button>
  9. <st #st [data]="data" [columns]="columns" [page]="page" virtualScroll [scroll]="{ x: '1300px', y: '240px' }"></st>
  10. `,
  11. })
  12. export class ComponentsStVirtualComponent implements AfterViewInit, OnDestroy {
  13. private destroy$ = new Subject();
  14. @ViewChild('st', { static: false }) st: STComponent;
  15. page: STPage = {
  16. front: false,
  17. show: false,
  18. };
  19. data: any[] = Array(2000)
  20. .fill({})
  21. .map((_item: any, idx: number) => {
  22. return {
  23. id: idx + 1,
  24. price: ~~(Math.random() * 100),
  25. };
  26. });
  27. columns: STColumn[] = [
  28. { title: '编号', index: 'id', width: 100 },
  29. { title: '价格1', index: 'price', width: 100 },
  30. { title: '价格2', index: 'price', width: 100 },
  31. { title: '价格3', index: 'price', width: 100 },
  32. { title: '价格4', index: 'price', width: 100 },
  33. { title: '价格5', index: 'price', width: 100 },
  34. { title: '价格6', index: 'price', width: 100 },
  35. { title: '价格7', index: 'price', width: 100 },
  36. { title: '价格8', index: 'price', width: 100 },
  37. { title: '价格9', index: 'price', width: 100 },
  38. { title: '价格10', index: 'price', width: 100 },
  39. ];
  40. scrollToIndex(index: number): void {
  41. this.st.cdkVirtualScrollViewport.scrollToIndex(index);
  42. }
  43. ngAfterViewInit(): void {
  44. this.st.cdkVirtualScrollViewport.scrolledIndexChange.pipe(takeUntil(this.destroy$)).subscribe(data => {
  45. console.log('scroll index to', data);
  46. });
  47. }
  48. ngOnDestroy(): void {
  49. this.destroy$.next();
  50. this.destroy$.complete();
  51. }
  52. }

st 表格 - 图18

导出Excel

将表格数据保存为 Excel。

  1. import { Component, ViewChild } from '@angular/core';
  2. import { STColumn, STComponent } from '@delon/abc/st';
  3. @Component({
  4. selector: 'components-st-export',
  5. template: `
  6. <button nz-button (click)="st.export()">Export</button>
  7. <button nz-button (click)="st.export(true)">Export Filtered Data</button>
  8. <button nz-button (click)="st.export(data, { filename: 'via-data.xlsx', sheetname: 'user' })">Export via data</button>
  9. <st #st [data]="data" [columns]="columns" class="mt-sm"></st>
  10. `,
  11. })
  12. export class ComponentsStExportComponent {
  13. @ViewChild('st', { static: false }) st: STComponent;
  14. data: any[] = Array(10000)
  15. .fill({})
  16. .map((_item: any, index: number) => {
  17. return {
  18. id: index + 1,
  19. picture: {
  20. thumbnail: `https://randomuser.me/api/portraits/thumb/women/${Math.min(index + 1, 30)}.jpg`,
  21. },
  22. email: `e${index + 1}@qq.com`,
  23. phone: `phone - ${index + 1}`,
  24. price: Math.ceil(Math.random() * 10000000) + 10000000,
  25. registered: new Date(),
  26. };
  27. });
  28. columns: STColumn[] = [
  29. { title: '编号', index: 'id' },
  30. {
  31. title: '头像',
  32. type: 'img',
  33. width: 60,
  34. index: 'picture.thumbnail',
  35. exported: false,
  36. },
  37. { title: '邮箱', index: 'email' },
  38. { title: '电话', index: 'phone' },
  39. {
  40. title: '数字',
  41. index: 'price',
  42. type: 'number',
  43. sort: {
  44. compare: (a, b) => a.price - b.price,
  45. },
  46. },
  47. { title: '货币', index: 'price', type: 'currency' },
  48. { title: '注册时间', type: 'date', index: 'registered' },
  49. ];
  50. }

API

st

成员说明类型默认值
[columns]列描述STColumn[]-
[data]数据源string, STData[], Observable<STData[]>-
[req]请求体配置STReq-
[res]返回体配置STRes-
[pi]当前页码number1
[ps]每页数量,当设置为 0 表示不分页,默认:10number10
[total]当前总数据,在服务器渲染时需要传入,默认:0number0
[page]分页器配置STPage-
[noResult]无数据时显示内容string,TemplateRef<void>-
[bordered]是否显示边框booleanfalse
[size]table大小‘small’,’middle’,’default’‘default’
[widthMode]设置表格宽度模式STWidthMode-
[rowClassName]表格行的类名(record: STData, index: number) => string-
[loading]页面是否加载中,当指定 null 由 st 受控boolean | nullnull
[loadingIndicator]加载指示符TemplateRef<void>-
[loadingDelay]延迟显示加载效果的时间(防止闪烁)number0
[scroll]横向或纵向支持滚动,也可用于指定滚动区域的宽高度:{ x: “300px”, y: “300px” }{ y?: string; x?: string }-
[virtualScroll]是否启用虚拟滚动模式,与 [nzScroll] 配合使用booleanfalse
[virtualItemSize]虚拟滚动时每一列的高度,与 cdk itemSize 相同number54
[virtualMaxBufferPx]缓冲区最大像素高度,与 cdk maxBufferPx 相同number200
[virtualMinBufferPx]缓冲区最小像素高度,低于该值时将加载新结构,与 cdk minBufferPx 相同number100
[virtualForTrackBy]虚拟滚动数据 TrackByFunction 函数TrackByFunction<T>-
[singleSort]单排序规则
若不指定,则返回:columnName=ascend|descend
若指定,则返回:sort=columnName.(ascend|descend)
STSingleSortnull
[multiSort]是否多排序,当 sort 多个相同值时自动合并,建议后端支持时使用boolean, STMultiSortfalse
[rowClickTime]行单击多少时长之类为双击(单位:毫秒)number200
[header]表格标题string,TemplateRef<void>-
[footer]表格底部string,TemplateRef<void>-
[bodyHeader]表格顶部额外内容,一般用于添加合计行TemplateRef<STStatisticalResults>-
[body]表格额外内容,一般用于添加合计行TemplateRef<STStatisticalResults>-
[widthConfig]表头分组时指定每列宽度,与 STColumn 的 width 不可混用string[]-
[expandRowByClick]通过点击行来展开子行booleanfalse
[expandAccordion]手风琴模式booleanfalse
[expand]当前列是否包含展开按钮,当数据源中包括 expand 表示展开状态TemplateRef<void>-
[responsive]是否开启响应式booleantrue
[responsiveHideHeaderFooter]是否在小屏幕下才显示顶部与底部booleanfalse
(change)变化时回调,包括:pipscheckboxradiosortfilterclickdblClickexpand 变动EventEmitter<STChange>-
(error)异常时回调EventEmitter<STError>-

组件属性与方法

名称说明
[filteredData]获取过滤后所有数据
- 本地数据:包含排序、过滤后不分页数据
- 远程数据:不传递 pips 两个参数
[count]获取当前页的条目数
[list]获取当前页的数据列表
resetColumns(options?: STResetColumnsOption)重置列描述
load(pi = 1, extraParams?: any, options?: STLoadOptions)加载指定页
reload(extraParams?: any, options?: STLoadOptions)刷新当前页
reset(extraParams?: any, options?: STLoadOptions)重置且重新设置 pi1,包含单多选、排序、过滤状态(同默认状态一并清除)
removeRow(data: STData | STData[] | number)移除行
setRow(index: number, item: STData, options?: { refreshSchema?: boolean; emitReload?: boolean })修改行数据,支持部分字段更新
clear(cleanStatus = true)清空所有数据
clearStatus()清空所有状态(包含单多选、排序、过滤状态)
clearCheck()清除所有 checkbox
clearRadio()清除所有 radio
export(newData?: STData[] | true, opt?: STExportOptions)导出Excel,确保已经导入 XlsxModule

一些细节:

  • extraParams 若不传递表示保留原始值

  • STLoadOptions.merge 是否合并模式,即 extraParams 跟新值合并而非替代

  • STLoadOptions.toTop 是否跳转至顶部,若不指定由 page.toTop 来决定

使用方式

  1. @Component({
  2. template: `
  3. <st #st></st>
  4. <button (click)="st.load()"></button>
  5. <button (click)="st.reset()">重置</button>
  6. `
  7. })
  8. class TestComponent {
  9. @ViewChild('st', { static: false }) comp: STComponent;
  10. // this.comp.load();
  11. }

STReq

成员说明类型默认值
[type]分页类型,page 使用 pips 组合;skip 使用 skiplimit 组合page,skippage
[params]额外请求参数,默认自动附加 pips 至URLany-
[method]请求方法‘POST’,’GET’,’HEAD’,’PUT’,’PATCH’,’DELETE’‘GET’
[body]请求体 body,当 method: POST 时有效any-
[headers]请求体 headersany-
[reName]重命名请求参数 pipsSTReqReNameType{ pi: ‘pi’, ps: ‘ps’, skip: ‘skip’, limit: ‘limit’ }
[allInBody]是否将请求所有参数数据都放入 body 当中(url 地址本身参数除外),仅当 method: ‘POST’ 时有效booleanfalse
[lazyLoad]是否延迟加载数据,即渲染结束后不会主动发起请求booleanfalse
[process]请求前数据处理(requestOptions: STRequestOptions) => STRequestOptions-

STRes

成员说明类型默认值
[reName]重命名返回参数 totallist,支持 a.b.c 的嵌套写法{total:string;list:string}-
[process]数据预处理(data: STData[], rawData?: any) => STData[]-

STPage

成员说明类型默认值
[front]前端分页,当 dataany[]Observable<any[]> 有效booleantrue
[zeroIndexed]后端分页是否采用0基索引,只在data类型为string时有效booleanfalse
[position]指定分页显示的位置top,bottom,bothbottom
[placement]指定分页分页方向left,center,rightright
[show]是否显示分页器booleantrue
[showSize]是否显示分页器中改变页数booleanfalse
[pageSizes]分页器中每页显示条目数下拉框值number[][10, 20, 30, 40, 50]
[showQuickJumper]是否显示分页器中快速跳转booleanfalse
[total]是否显示总数据量,字符串表示自定义模板(支持三个变量名:total 表示数据总量、range[0]range[1] 表示当前数据范围;变量名统一使用双花括号包裹)boolean, stringfalse
[toTop]切换分页时返回顶部booleantrue
[toTopOffset]返回顶部偏移值number100

STError

成员说明类型默认值
[type]异常类型,req 表示HTTP请求req-
[error]异常内容any-

STChange

成员说明类型默认值
[type]变更类型,包括:loadedpipscheckboxradiosortfilterclickdblClickexpandSTChangeType-
[pi]当前页码number-
[ps]每页数量number-
[total]数据总量number-
[loaded]loaded 参数STData[]-
[checkbox]checkbox 参数STData[]-
[radio]radio 参数STData-
[sort]排序参数STChangeSort-
[filter]过滤参数STColumn-
[click]行点击参数STChangeRowClick-
[dblClick]行双击参数STChangeRowClick-
[expand]expand 参数STData-

STChangeSort

成员说明类型默认值
[value]当前列排序状态ascend,descend-
[map]所有列排序状态{ [key: string]: string }-
[column]行描述STColumn-

STChangeRowClick

成员说明类型默认值
[e]当前行事件Event-
[item]当前行数据STData-
[index]当前行索引number-

STExportOptions

成员说明类型默认值
[sheetname]工作薄名称stringSheet1
[filename]保存的文件名stringexport.xslx
[callback]保存前的回调(wb: WorkBook) => void-

STMultiSort

成员说明类型默认值
[key]请求参数名stringsort
[separator]不同属性间分隔符string-
[nameSeparator]列名与状态间分隔符string.
[keepEmptyKey]是否保持空值的键名
true 表示不管是否有排序都会发送 key 键名
false 表示无排序动作时不会发送 key 键名
booleantrue
[global]仅限全局配置项有效,是否全局多排序模式
true 表示所有 st 默认为多排序
false 表示需要为每个 st 添加 multiSort 才会视为多排序模式
booleantrue

STData

成员说明类型默认值
[checked]选择框或单选框状态值boolean-
[disabled]选择框或单选框 disabledboolean-
[expand]是否展开状态boolean-
[showExpand]是否显示展开按钮boolean-

STColumn

成员说明类型默认值
[title]列名string, STColumnTitle-
[i18n]列名i18nstring-
[type]no 行号
checkbox 多选
radio 单选
link 链接,可触发 click
img 图像且居中
number 数字且居右
currency 货币且居右
date 日期格式且居中
badge 徽标
tag 标签
ynboolean类型徽章化 document
widget 自定义小部件来渲染列
string-
[index]列数据在数据项中对应的 key,支持 a.b.c 的嵌套写法string, string[]-
[render]自定义渲染IDstring-
[renderTitle]标题自定义渲染IDstring-
[default]当不存在数据(值类型为 undefined)时以默认值替代string-
[buttons]按钮组STColumnButton[]-
[width]列宽(数字型表示 px 值,注意: 若固定列必须是数字),例如:10010%100pxstring,number-
[fixed]固定前后列,当指定时务必指定 width 否则视为无效left,right-
[format]格式化列值(item: STData, col: STColumn, index: number) => string-
[className]class 属性值,例如:;text-center 居中; text-right 居右; text-danger 异常色,更多参考样式工具类string-
[colSpan]合并列number-
[sort]排序配置项,远程数据配置优先规则:
true 表示允许排序,且若数据源为本地数据时会自动生成 compare: (a, b) => a[index] - b[index] 方法
string 表示远程数据排序相对应 key
true,string,STColumnSort-
[filter]过滤配置项STColumnFilter-
[selections]选择功能配置STColumnSelection[]-
[numberDigits]数字格式,type=number 有效string-
[dateFormat]日期格式,type=date 有效stringyyyy-MM-dd HH:mm
[yn]type=yn 有效STColumnYn-
[exported]是否允许导出booleantrue
[acl]ACL权限,等同 can() 参数值ACLCanType-
[click]链接回调(record: STData, instance?: STComponent) => void-
[badge]徽标配置项STColumnBadge-
[tag]徽标配置项STColumnTag-
[enum]枚举配置项{ [key: string]: string; [key: number]: string }-
[widget]小部件配置项STWidgetColumn-
[noIndex]行号索引开始值number,(item: STData, col: STColumn, idx: number) => number1
[iif]条件表达式
1、仅赋值 columns 时执行一次
2、可调用 resetColumns() 再一次触发
(item: STColumn) => boolean-
[statistical]统计信息STStatisticalType,STStatistical-
[children]多表头STColumn[]-

STColumnTitle

成员说明类型默认值
[text]列标题,texti18n 必选其一string-
[i18n]列标题i18n主键,texti18n 必选其一string-
[optional]标签可选信息string-
[optionalHelp]标签可选帮助string-

STColumnSort

成员说明类型默认值
[default]排序的受控属性ascend,descend-
[compare]本地数据的排序函数,使用一个函数(参考 Array.sort 的 compareFunction),null 忽略本地排序,但保持排序功能(a: any, b: any) => number, null-
[key]远程数据的排序时后端相对应的KEY,默认使用 index 属性
multiSort: false 时:key: ‘name’ => ?name=1&pi=1
multiSort: true 允许多个排序 key 存在,或使用 STMultiSort 指定多列排序key合并规则
string-
[reName]远程数据的排序时后端相对应的VALUE
{ ascend: ‘0’, descend: ‘1’ } 结果 ?name=1&pi=1
{ ascend: ‘asc’, descend: ‘desc’ } 结果 ?name=desc&pi=1
{ ascend?: string, descend?: string }-

STColumnFilter

成员说明类型默认值
[type]类型,keyword 文本框形式default,keyworddefault
[menus]表头的筛选菜单项,至少一项才会生效STColumnFilterMenu[]-
[fn]本地数据的筛选函数(filter: STColumnFilterMenu, record: STData) => boolean-
[default]标识数据是否经过过滤,筛选图标会高亮boolean-
[icon]自定义 fiter 图标
type=’default’ 默认 filter
type=’keyword’ 默认 search
string | STIconfilter
[multiple]是否多选booleantrue
[confirmText]filter 确认按钮文本string-
[clearText]filter 清除按钮文本string-
[key]远程数据的过滤时后端相对应的KEY,默认使用 index 属性string-
[reName]远程数据的过滤时后端相对应的VALUE(list: STColumnFilterMenu[], col: STColumn) => Object-

STColumnFilterMenu

成员说明类型默认值
[text]文本
type: ‘keyword’ 时表示 placeholder
string-
[value]any-
[checked]是否选中boolean-
[acl]权限,等同 can() 参数值ACLCanType-

STColumnButton

成员说明类型默认值
[text]文本与图标共存string | (record: STData, btn: STColumnButton) => string-
[icon]图标与文本共存string | STIcon-
[i18n]文本i18nstring-
(deprecated) [format]格式化文本(record: STData, btn: STColumnButton) => string-
[type]按钮类型none,del,modal,static,drawer,link-
[click]点击回调;函数: type=modal 只会在 确认 时触发且 modal 参数有效
reload: 重新刷新当前页
load: 重新加载数据,并重置页码为:1
(record: STData, modal?: any, instance?: STComponent) => void | reload-
[pop]是否需要气泡确认框boolean, string, STColumnButtonPopfalse
(deprecated) [popTitle]气泡确认框内容string确认删除吗?
[modal]模态框配置STColumnButtonModal-
[drawer]抽屉配置STColumnButtonDrawer-
[children]下拉菜单,当存在时以 dropdown 形式渲染;只支持一级STColumnButton[]-
[acl]ACL权限,等同 can() 参数值ACLCanType-
[iif]自定义条件表达式(item: STData, btn: STColumnButton, column: STColumn) => boolean() => true
[iifBehavior]表达式 false 值时渲染方式hide,disabledhide
[tooltip]按钮文字提示string-

STIcon

成员说明类型默认值
[type]图标类型string-
[theme]图标主题风格outline | twotone | filloutline
[spin]是否有旋转动画booleanfalse
[twoToneColor]仅适用双色图标,设置双色图标的主要颜色,仅对当前 icon 生效string-
[iconfont]指定来自 IconFont 的图标类型string-

STColumnButtonModal

成员说明类型默认值
[component]目标组件对象any-
[params]目标组件的接收参数对象(record: STData) => Object-
[paramsName]目标组件的接收参数名,若目标组件接收值为空时,检查 global-config.module.ts 全局设置stringrecord
[size]对话框大小,支持数字类型‘sm’,’md’,’lg’,’xl’‘lg’
[exact]是否精准(默认:true),若返回值非空值(nullundefined)视为成功,否则视为错误booleantrue
[includeTabs]是否包裹标签页,修复模态包含标签间距问题boolean-
[modalOptions]对话框 ModalOptions 参数any-

STColumnButtonDrawer

成员说明类型默认值
[title]标题any-
[component]目标组件对象any-
[params]目标组件的接收参数对象(record: STData) => Object-
[paramsName]目标组件的接收参数名,若目标组件接收值为空时,检查 global-config.module.ts 全局设置stringrecord
[size]抽屉大小,支持数字类型‘sm’,’md’,’lg’,’xl’‘md’
[drawerOptions]抽屉 NzDrawerOptions 参数any-

STColumnSelection

成员说明类型默认值
[text]文本string-
[select]选择项点击回调,允许对参数 data.checked 进行操作(data: STData[]) => void-
[acl]ACL权限,等同 can() 参数值ACLCanType-

STColumnYn

成员说明类型默认值
[truth]真值条件anytrue
[yes]徽章 true 时文本string
[no]徽章 false 时文本string
[mode]显示模式full,icon,texticon

STColumnBadge

成员说明类型默认值
[text]文本string-
[color]徽标颜色值success,processing,default,error,warning-

STColumnTag

成员说明类型默认值
[text]文本string-
[color]Tag颜色值string-

STWidgetColumn

成员说明类型默认值
[type]指定类型名,可通过定义 STWidgetRegistry 来定制,例如string-
[params]目标组件的参数(options: { record: STData; column: STColumn }) => {}-

STWidthMode

成员说明类型默认值
[type]类型strict,defaultdefault
[strictBehavior]strict 的行为类型wrap,truncatetruncate

STStatistical

成员说明类型默认值
[type]统计类型STStatisticalType | STStatisticalFn-
[digits]保留小数位数number2
[currency]是否需要货币格式化,默认当 typeSTStatisticalFnsumaveragemaxmin 时为 trueboolean-

STStatisticalFn

  1. (
  2. values: number[],
  3. col: STColumn,
  4. list: STData[],
  5. rawData?: any,
  6. ) => STStatisticalResult