expense_list_controller.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import '../../shared/models/approval_status.dart';
  3. import 'expense_model.dart';
  4. final expenseStatusFilterProvider = StateProvider<String>((ref) => '');
  5. final _mockExpenses = <ExpenseModel>[
  6. ExpenseModel(
  7. id: 'exp-001',
  8. reportNo: 'BX202605001',
  9. applicantId: 'u-001',
  10. applicantName: '张三',
  11. deptId: 'dept-001',
  12. deptName: '市场部',
  13. expenseType: '差旅费',
  14. totalAmount: 2580.00,
  15. invoiceCount: 3,
  16. status: 'pending',
  17. createTime: DateTime(2026, 5, 20),
  18. updateTime: DateTime(2026, 5, 20),
  19. details: [
  20. ExpenseDetailModel(
  21. id: 'det-001',
  22. expenseId: 'exp-001',
  23. expenseDate: DateTime(2026, 5, 19),
  24. expenseType: '交通费',
  25. expenseDesc: '北京-上海高铁',
  26. amount: 553.00,
  27. totalAmount: 553.00,
  28. ),
  29. ExpenseDetailModel(
  30. id: 'det-002',
  31. expenseId: 'exp-001',
  32. expenseDate: DateTime(2026, 5, 19),
  33. expenseType: '住宿费',
  34. expenseDesc: '上海酒店住宿',
  35. amount: 800.00,
  36. totalAmount: 800.00,
  37. ),
  38. ],
  39. approvalRecords: [
  40. ApprovalRecord(
  41. id: 'ar-001',
  42. bizId: 'exp-001',
  43. bizType: 'expense',
  44. approverId: 'u-mgr',
  45. approverName: '李四',
  46. approvalLevel: 1,
  47. action: 'pending',
  48. opinion: '',
  49. approvalTime: DateTime(2026, 5, 21),
  50. ),
  51. ],
  52. ),
  53. ExpenseModel(
  54. id: 'exp-002',
  55. reportNo: 'BX202605002',
  56. applicantId: 'u-002',
  57. applicantName: '王五',
  58. deptId: 'dept-002',
  59. deptName: '技术部',
  60. expenseType: '办公用品',
  61. totalAmount: 1280.50,
  62. invoiceCount: 2,
  63. status: 'approved',
  64. createTime: DateTime(2026, 5, 15),
  65. updateTime: DateTime(2026, 5, 18),
  66. details: [
  67. ExpenseDetailModel(
  68. id: 'det-003',
  69. expenseId: 'exp-002',
  70. expenseDate: DateTime(2026, 5, 14),
  71. expenseType: '办公用品',
  72. expenseDesc: '打印纸、墨盒',
  73. amount: 1280.50,
  74. totalAmount: 1280.50,
  75. ),
  76. ],
  77. approvalRecords: [
  78. ApprovalRecord(
  79. id: 'ar-002',
  80. bizId: 'exp-002',
  81. bizType: 'expense',
  82. approverId: 'u-mgr',
  83. approverName: '李四',
  84. approvalLevel: 1,
  85. action: 'approve',
  86. opinion: '同意',
  87. approvalTime: DateTime(2026, 5, 18),
  88. ),
  89. ],
  90. ),
  91. ExpenseModel(
  92. id: 'exp-003',
  93. reportNo: 'BX202605003',
  94. applicantId: 'u-003',
  95. applicantName: '赵六',
  96. deptId: 'dept-003',
  97. deptName: '财务部',
  98. expenseType: '业务招待费',
  99. totalAmount: 3600.00,
  100. invoiceCount: 1,
  101. status: 'rejected',
  102. createTime: DateTime(2026, 5, 10),
  103. updateTime: DateTime(2026, 5, 12),
  104. details: [
  105. ExpenseDetailModel(
  106. id: 'det-004',
  107. expenseId: 'exp-003',
  108. expenseDate: DateTime(2026, 5, 9),
  109. expenseType: '招待费',
  110. expenseDesc: '客户晚宴',
  111. amount: 3600.00,
  112. totalAmount: 3600.00,
  113. ),
  114. ],
  115. approvalRecords: [
  116. ApprovalRecord(
  117. id: 'ar-003',
  118. bizId: 'exp-003',
  119. bizType: 'expense',
  120. approverId: 'u-mgr',
  121. approverName: '李四',
  122. approvalLevel: 1,
  123. action: 'reject',
  124. opinion: '发票不符合规定',
  125. approvalTime: DateTime(2026, 5, 12),
  126. ),
  127. ],
  128. ),
  129. ExpenseModel(
  130. id: 'exp-004',
  131. reportNo: 'BX202605004',
  132. applicantId: 'u-001',
  133. applicantName: '张三',
  134. deptId: 'dept-001',
  135. deptName: '市场部',
  136. expenseType: '交通费',
  137. totalAmount: 890.00,
  138. invoiceCount: 1,
  139. status: 'pending',
  140. createTime: DateTime(2026, 5, 22),
  141. updateTime: DateTime(2026, 5, 22),
  142. details: [
  143. ExpenseDetailModel(
  144. id: 'det-005',
  145. expenseId: 'exp-004',
  146. expenseDate: DateTime(2026, 5, 21),
  147. expenseType: '交通费',
  148. expenseDesc: '市内打车',
  149. amount: 890.00,
  150. totalAmount: 890.00,
  151. ),
  152. ],
  153. ),
  154. ];
  155. final expenseListProvider =
  156. FutureProvider.autoDispose.family<List<ExpenseModel>, int>(
  157. (ref, page) async {
  158. final status = ref.watch(expenseStatusFilterProvider);
  159. if (status.isEmpty) {
  160. return _mockExpenses;
  161. }
  162. return _mockExpenses.where((e) => e.status == status).toList();
  163. });