finance.html 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <div class="finance-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 primary" (click)="exportReport()">导出报表</button>
  9. </div>
  10. </div>
  11. <div class="stats-cards">
  12. <div class="stat-card income">
  13. <div class="stat-label">本月收入</div>
  14. <div class="stat-value">{{ formatAmount(income()) }}</div>
  15. </div>
  16. <div class="stat-card expense">
  17. <div class="stat-label">本月支出</div>
  18. <div class="stat-value">{{ formatAmount(expense()) }}</div>
  19. </div>
  20. <div class="stat-card profit">
  21. <div class="stat-label">本月利润</div>
  22. <div class="stat-value">{{ formatAmount(profit()) }}</div>
  23. </div>
  24. </div>
  25. <div class="toolbar">
  26. <div class="search"><input placeholder="搜索项目/客户" (input)="keyword.set($any($event.target).value)" [value]="keyword()"/></div>
  27. <div class="filters">
  28. <select (change)="type.set($any($event.target).value)">
  29. <option value="all">全部类型</option>
  30. <option value="income">收入</option>
  31. <option value="expense">支出</option>
  32. </select>
  33. <select (change)="status.set($any($event.target).value)">
  34. <option value="all">全部状态</option>
  35. <option value="done">已入账</option>
  36. <option value="pending">待入账</option>
  37. </select>
  38. <button class="btn" (click)="resetFilters()">重置</button>
  39. </div>
  40. </div>
  41. <div class="table-card">
  42. <div class="table header">
  43. <div>日期</div>
  44. <div>类型</div>
  45. <div>项目</div>
  46. <div>客户</div>
  47. <div>金额</div>
  48. <div>状态</div>
  49. </div>
  50. <div class="table row" *ngFor="let i of filtered">
  51. <div>{{ i.date }}</div>
  52. <div>
  53. <span class="chip" [class.green]="i.type==='income'" [class.red]="i.type==='expense'">{{ i.type==='income' ? '收入' : '支出' }}</span>
  54. </div>
  55. <div>{{ i.project }}</div>
  56. <div>{{ i.customer }}</div>
  57. <div>{{ formatAmount(i.amount) }}</div>
  58. <div>
  59. <span class="dot" [class.green]="i.status==='done'" [class.orange]="i.status==='pending'"></span>
  60. {{ i.status==='done' ? '已入账' : '待入账' }}
  61. </div>
  62. </div>
  63. <div class="empty" *ngIf="filtered.length===0">暂无数据</div>
  64. </div>
  65. </div>