diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.html b/src/app/routes/datatable/components/customtable/customindex/customindex.component.html
new file mode 100644
index 00000000..56092666
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.html
@@ -0,0 +1,6 @@
+
+
+
+  
+  
+
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts b/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts
new file mode 100644
index 00000000..09bf44a2
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableCustomindexComponent } from './customindex.component';
+
+describe('DatatableCustomindexComponent', () => {
+  let component: DatatableCustomindexComponent;
+  let fixture: ComponentFixture;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatatableCustomindexComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatatableCustomindexComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts b/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts
new file mode 100644
index 00000000..7e720e39
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts
@@ -0,0 +1,45 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+  selector: 'app-datatable-customindex',
+  templateUrl: './customindex.component.html',
+})
+export class DatatableCustomindexComponent implements OnInit {
+  url = `/user`;
+  searchSchema: SFSchema = {
+    properties: {
+      no: {
+        type: 'string',
+        title: '编号'
+      }
+    }
+  };
+  @ViewChild('st') private readonly st!: STComponent;
+  columns: STColumn[] = [
+    { title: '编号', index: 'no' },
+    { title: '调用次数', type: 'number', index: 'callNo' },
+    { title: '头像', type: 'img', width: '50px', index: 'avatar' },
+    { title: '时间', type: 'date', index: 'updatedAt' },
+    {
+      title: '',
+      buttons: [
+        // { text: '查看', click: (item: any) => `/form/${item.id}` },
+        // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' },
+      ]
+    }
+  ];
+
+  constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+  ngOnInit(): void { }
+
+  add(): void {
+    // this.modal
+    //   .createStatic(FormEditComponent, { i: { id: 0 } })
+    //   .subscribe(() => this.st.reload());
+  }
+
+}
diff --git a/src/app/routes/datatable/components/customtable/customtable.component.html b/src/app/routes/datatable/components/customtable/customtable.component.html
new file mode 100644
index 00000000..56092666
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customtable.component.html
@@ -0,0 +1,6 @@
+
+
+
+  
+  
+
diff --git a/src/app/routes/datatable/components/customtable/customtable.component.spec.ts b/src/app/routes/datatable/components/customtable/customtable.component.spec.ts
new file mode 100644
index 00000000..980fc9d9
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customtable.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableCustomtableComponent } from './customtable.component';
+
+describe('DatatableCustomtableComponent', () => {
+  let component: DatatableCustomtableComponent;
+  let fixture: ComponentFixture;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatatableCustomtableComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatatableCustomtableComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/routes/datatable/components/customtable/customtable.component.ts b/src/app/routes/datatable/components/customtable/customtable.component.ts
new file mode 100644
index 00000000..292a9c25
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customtable.component.ts
@@ -0,0 +1,45 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+  selector: 'app-datatable-customtable',
+  templateUrl: './customtable.component.html',
+})
+export class DatatableCustomtableComponent implements OnInit {
+  url = `/user`;
+  searchSchema: SFSchema = {
+    properties: {
+      no: {
+        type: 'string',
+        title: '编号'
+      }
+    }
+  };
+  @ViewChild('st') private readonly st!: STComponent;
+  columns: STColumn[] = [
+    { title: '编号', index: 'no' },
+    { title: '调用次数', type: 'number', index: 'callNo' },
+    { title: '头像', type: 'img', width: '50px', index: 'avatar' },
+    { title: '时间', type: 'date', index: 'updatedAt' },
+    {
+      title: '',
+      buttons: [
+        // { text: '查看', click: (item: any) => `/form/${item.id}` },
+        // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' },
+      ]
+    }
+  ];
+
+  constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+  ngOnInit(): void { }
+
+  add(): void {
+    // this.modal
+    //   .createStatic(FormEditComponent, { i: { id: 0 } })
+    //   .subscribe(() => this.st.reload());
+  }
+
+}
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.html b/src/app/routes/datatable/components/customtable/driver/driver.component.html
new file mode 100644
index 00000000..56092666
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.html
@@ -0,0 +1,6 @@
+
+
+
+  
+  
+
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts b/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts
new file mode 100644
index 00000000..6a2084a2
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableDriverComponent } from './driver.component';
+
+describe('DatatableDriverComponent', () => {
+  let component: DatatableDriverComponent;
+  let fixture: ComponentFixture;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatatableDriverComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatatableDriverComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.ts b/src/app/routes/datatable/components/customtable/driver/driver.component.ts
new file mode 100644
index 00000000..f27f6788
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.ts
@@ -0,0 +1,45 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+  selector: 'app-datatable-driver',
+  templateUrl: './driver.component.html',
+})
+export class DatatableDriverComponent implements OnInit {
+  url = `/user`;
+  searchSchema: SFSchema = {
+    properties: {
+      no: {
+        type: 'string',
+        title: '编号'
+      }
+    }
+  };
+  @ViewChild('st') private readonly st!: STComponent;
+  columns: STColumn[] = [
+    { title: '编号', index: 'no' },
+    { title: '调用次数', type: 'number', index: 'callNo' },
+    { title: '头像', type: 'img', width: '50px', index: 'avatar' },
+    { title: '时间', type: 'date', index: 'updatedAt' },
+    {
+      title: '',
+      buttons: [
+        // { text: '查看', click: (item: any) => `/form/${item.id}` },
+        // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' },
+      ]
+    }
+  ];
+
+  constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+  ngOnInit(): void { }
+
+  add(): void {
+    // this.modal
+    //   .createStatic(FormEditComponent, { i: { id: 0 } })
+    //   .subscribe(() => this.st.reload());
+  }
+
+}
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.html b/src/app/routes/datatable/components/customtable/owner/owner.component.html
new file mode 100644
index 00000000..3a90b91b
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.html
@@ -0,0 +1,5 @@
+
+
+
+  
+
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts b/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts
new file mode 100644
index 00000000..8c518688
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableOwnerComponent } from './owner.component';
+
+describe('DatatableOwnerComponent', () => {
+  let component: DatatableOwnerComponent;
+  let fixture: ComponentFixture;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatatableOwnerComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatatableOwnerComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.ts b/src/app/routes/datatable/components/customtable/owner/owner.component.ts
new file mode 100644
index 00000000..af6bf032
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.ts
@@ -0,0 +1,45 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+  selector: 'app-datatable-owner',
+  templateUrl: './owner.component.html',
+})
+export class DatatableOwnerComponent implements OnInit {
+  url = `/user`;
+  searchSchema: SFSchema = {
+    properties: {
+      no: {
+        type: 'string',
+        title: '编号'
+      }
+    }
+  };
+  @ViewChild('st') private readonly st!: STComponent;
+  columns: STColumn[] = [
+    { title: '编号', index: 'no' },
+    { title: '调用次数', type: 'number', index: 'callNo' },
+    { title: '头像', type: 'img', width: '50px', index: 'avatar' },
+    { title: '时间', type: 'date', index: 'updatedAt' },
+    {
+      title: '',
+      buttons: [
+        // { text: '查看', click: (item: any) => `/form/${item.id}` },
+        // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' },
+      ]
+    }
+  ];
+
+  constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+  ngOnInit(): void { }
+
+  add(): void {
+    // this.modal
+    //   .createStatic(FormEditComponent, { i: { id: 0 } })
+    //   .subscribe(() => this.st.reload());
+  }
+
+}
diff --git a/src/app/routes/datatable/components/dataindex/dataindex.component.html b/src/app/routes/datatable/components/dataindex/dataindex.component.html
new file mode 100644
index 00000000..3f148bfd
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex.component.html
@@ -0,0 +1,69 @@
+
+
+
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+
+  
+    
+      
+      
+    
+  
+  
+    
+      
+
+    
+  
+
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+
+  
+    
+      
+      
+    
+  
+  
+    
+      
+
+    
+  
+
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+  
+    
+      
+        
+        
+      
+    
+  
+
+  
+    
+      
+      
+    
+  
+  
+    
+      
+
+    
+  
+
+      
+      
+        
+          
+          
+          
+          
+        
+        
+          
+          
+        
+
+      
+    
-    
-      
-        
-          
-        
-      
-    
-    
-      
-        
-          
-        
-      
-    
-    
-      
-        
-          
-        
-      
-      
-    
-      
-        
-          
-        
-      
-    
-