Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

tenant-list.component.html 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <div class="h-full flex flex-col p-4 min-w-0">
  2. <app-sticky-header
  3. [title]="'租户管理'"
  4. [buttonText]="'新增租户'"
  5. [buttonIcon]="'add'"
  6. [buttonColor]="'primary'"
  7. [autoDetect]="true"
  8. [scrollContainer]="'.content-area'"
  9. [scrollThreshold]="20"
  10. [compactThreshold]="80"
  11. [widthTarget]="'#tenantMatCard'"
  12. (buttonClick)="openAddDialog()">
  13. </app-sticky-header>
  14. <mat-card id="tenantMatCard" class="h-[400px]">
  15. <mat-card-content class="overflow-auto">
  16. <table mat-table [dataSource]="tenants" class="w-full">
  17. <!-- ID列 -->
  18. <ng-container matColumnDef="id">
  19. <th mat-header-cell *matHeaderCellDef>ID</th>
  20. <td mat-cell *matCellDef="let tenant">{{ tenant.id }}</td>
  21. </ng-container>
  22. <!-- 租户名称列 -->
  23. <ng-container matColumnDef="name">
  24. <th mat-header-cell *matHeaderCellDef>租户名称</th>
  25. <td mat-cell *matCellDef="let tenant">{{ tenant.name }}</td>
  26. </ng-container>
  27. <!-- 描述列 -->
  28. <ng-container matColumnDef="description">
  29. <th mat-header-cell *matHeaderCellDef>描述</th>
  30. <td mat-cell *matCellDef="let tenant">{{ tenant.description || '-' }}</td>
  31. </ng-container>
  32. <!-- 创建时间列 -->
  33. <ng-container matColumnDef="created_at">
  34. <th mat-header-cell *matHeaderCellDef>创建时间</th>
  35. <td mat-cell *matCellDef="let tenant">{{ tenant.created_at | date:'yyyy-MM-dd HH:mm' }}</td>
  36. </ng-container>
  37. <!-- 更新时间列 -->
  38. <ng-container matColumnDef="updated_at">
  39. <th mat-header-cell *matHeaderCellDef>更新时间</th>
  40. <td mat-cell *matCellDef="let tenant">{{ tenant.updated_at | date:'yyyy-MM-dd HH:mm' }}</td>
  41. </ng-container>
  42. <!-- 操作列 -->
  43. <ng-container matColumnDef="actions">
  44. <th mat-header-cell *matHeaderCellDef>操作</th>
  45. <td mat-cell *matCellDef="let tenant">
  46. <button mat-icon-button color="primary" (click)="openEditDialog(tenant)">
  47. <mat-icon>edit</mat-icon>
  48. </button>
  49. <button mat-icon-button color="warn" (click)="deleteTenant(tenant.id)">
  50. <mat-icon>delete</mat-icon>
  51. </button>
  52. </td>
  53. </ng-container>
  54. <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  55. <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
  56. </table>
  57. <div *ngIf="loading" class="text-center py-4">
  58. <mat-progress-spinner [diameter]="40" mode="indeterminate" class="mx-auto"></mat-progress-spinner>
  59. </div>
  60. <div *ngIf="!loading && tenants.length === 0" class="text-center py-8 text-gray-500">
  61. 暂无租户数据
  62. </div>
  63. </mat-card-content>
  64. </mat-card>
  65. <!-- 新增/编辑对话框 -->
  66. <div *ngIf="showDialog" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4">
  67. <div class="bg-white rounded-lg shadow-xl w-full max-w-md">
  68. <div class="px-6 py-4 border-b border-gray-200">
  69. <h2 class="text-xl font-semibold text-gray-800">{{ editMode ? '编辑租户' : '新增租户' }}</h2>
  70. </div>
  71. <form (ngSubmit)="saveTenant()" class="p-6">
  72. <!-- 租户名称 -->
  73. <mat-form-field class="w-full mb-4">
  74. <mat-label>租户名称</mat-label>
  75. <input matInput id="name" [(ngModel)]="tenantForm.name" name="name" required>
  76. </mat-form-field>
  77. <!-- 描述 -->
  78. <mat-form-field class="w-full mb-6">
  79. <mat-label>描述</mat-label>
  80. <textarea matInput id="description" [(ngModel)]="tenantForm.description" name="description" rows="3"></textarea>
  81. </mat-form-field>
  82. <div class="flex justify-end gap-2">
  83. <button mat-button type="button" (click)="showDialog = false">取消</button>
  84. <button mat-raised-button color="primary" type="submit">
  85. {{ editMode ? '更新' : '创建' }}
  86. </button>
  87. </div>
  88. </form>
  89. </div>
  90. </div>
  91. </div>