customers.html 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <div class="customers-page">
  2. <div class="page-header">
  3. <div class="header-left">
  4. <h2 class="page-title">客户管理</h2>
  5. <p class="page-description">管理客户档案</p>
  6. </div>
  7. <div class="header-actions">
  8. <button class="btn" (click)="exportCustomers()">导出</button>
  9. </div>
  10. </div>
  11. <div class="stats-cards">
  12. <div class="stat-card">
  13. <div class="stat-label">客户总数</div>
  14. <div class="stat-value">{{ total() }}</div>
  15. </div>
  16. </div>
  17. <div class="toolbar">
  18. <div class="search">
  19. <input placeholder="搜索客户名称/手机号" (input)="keyword.set($any($event.target).value)" [value]="keyword()"/>
  20. </div>
  21. <div class="filters">
  22. <button class="btn" (click)="resetFilters()">重置</button>
  23. </div>
  24. </div>
  25. <div class="table-card">
  26. <div class="table header">
  27. <div>客户名称</div>
  28. <div>手机号</div>
  29. <div>企微ID</div>
  30. <div>来源</div>
  31. <div>创建时间</div>
  32. </div>
  33. <div class="table row clickable" *ngFor="let c of filtered" (click)="openCustomerDetail(c)">
  34. <div class="name">
  35. <div class="title">{{ c.name }}</div>
  36. </div>
  37. <div>{{ c.mobile }}</div>
  38. <div>{{ c.external_userid || '-' }}</div>
  39. <div>{{ c.source || '-' }}</div>
  40. <div>{{ c.createdAt ? (c.createdAt | date:'yyyy-MM-dd') : '-' }}</div>
  41. </div>
  42. <div class="empty" *ngIf="filtered.length === 0">
  43. @if (loading()) {
  44. <span>加载中...</span>
  45. } @else {
  46. <span>暂无数据</span>
  47. }
  48. </div>
  49. </div>
  50. <!-- 客户详情面板 -->
  51. <div class="customer-panel-overlay" *ngIf="showCustomerPanel" (click)="closeCustomerPanel()">
  52. <div class="customer-panel" (click)="$event.stopPropagation()">
  53. <div class="panel-header">
  54. <h2>客户详情</h2>
  55. <button class="close-btn" (click)="closeCustomerPanel()">×</button>
  56. </div>
  57. <div class="panel-body">
  58. <app-contact *ngIf="selectedCustomer" [customer]="selectedCustomer"></app-contact>
  59. </div>
  60. </div>
  61. </div>
  62. </div>