overtime_list_controller.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import '../../shared/models/approval_status.dart';
  3. import 'overtime_model.dart';
  4. final overtimeStatusFilterProvider = StateProvider<String>((ref) => '');
  5. final _mockOvertimes = <OvertimeModel>[
  6. OvertimeModel(
  7. id: 'ot-001',
  8. applicationNo: 'OT202605001',
  9. applicantId: 'u-001',
  10. applicantName: '张三',
  11. deptId: 'dept-001',
  12. deptName: '市场部',
  13. otDate: DateTime(2026, 5, 20),
  14. startTime: DateTime(2026, 5, 20, 18, 0),
  15. endTime: DateTime(2026, 5, 20, 21, 0),
  16. otHours: 3.0,
  17. otType: '工作日加班',
  18. compensationType: '加班费',
  19. reason: '项目上线前紧急测试',
  20. status: 'pending',
  21. createTime: DateTime(2026, 5, 20),
  22. updateTime: DateTime(2026, 5, 20),
  23. approvalRecords: [
  24. ApprovalRecord(
  25. id: 'ar-ot-001',
  26. bizId: 'ot-001',
  27. bizType: 'overtime',
  28. approverId: 'u-mgr',
  29. approverName: '李四',
  30. approvalLevel: 1,
  31. action: 'pending',
  32. opinion: '',
  33. approvalTime: DateTime(2026, 5, 20),
  34. ),
  35. ],
  36. ),
  37. OvertimeModel(
  38. id: 'ot-002',
  39. applicationNo: 'OT202605002',
  40. applicantId: 'u-002',
  41. applicantName: '王五',
  42. deptId: 'dept-002',
  43. deptName: '技术部',
  44. otDate: DateTime(2026, 5, 18),
  45. startTime: DateTime(2026, 5, 18, 9, 0),
  46. endTime: DateTime(2026, 5, 18, 18, 0),
  47. otHours: 8.0,
  48. otType: '休息日加班',
  49. compensationType: '调休',
  50. reason: '系统架构升级',
  51. status: 'approved',
  52. createTime: DateTime(2026, 5, 17),
  53. updateTime: DateTime(2026, 5, 19),
  54. approvalRecords: [
  55. ApprovalRecord(
  56. id: 'ar-ot-002',
  57. bizId: 'ot-002',
  58. bizType: 'overtime',
  59. approverId: 'u-mgr',
  60. approverName: '李四',
  61. approvalLevel: 1,
  62. action: 'approve',
  63. opinion: '同意',
  64. approvalTime: DateTime(2026, 5, 19),
  65. ),
  66. ],
  67. ),
  68. OvertimeModel(
  69. id: 'ot-003',
  70. applicationNo: 'OT202605003',
  71. applicantId: 'u-003',
  72. applicantName: '赵六',
  73. deptId: 'dept-003',
  74. deptName: '财务部',
  75. otDate: DateTime(2026, 5, 25),
  76. startTime: DateTime(2026, 5, 25, 19, 0),
  77. endTime: DateTime(2026, 5, 25, 22, 0),
  78. otHours: 3.0,
  79. otType: '工作日加班',
  80. compensationType: '加班费',
  81. reason: '季度财务报表汇总',
  82. status: 'pending',
  83. createTime: DateTime(2026, 5, 25),
  84. updateTime: DateTime(2026, 5, 25),
  85. approvalRecords: [
  86. ApprovalRecord(
  87. id: 'ar-ot-003',
  88. bizId: 'ot-003',
  89. bizType: 'overtime',
  90. approverId: 'u-mgr',
  91. approverName: '李四',
  92. approvalLevel: 1,
  93. action: 'pending',
  94. opinion: '',
  95. approvalTime: DateTime(2026, 5, 25),
  96. ),
  97. ],
  98. ),
  99. ];
  100. final overtimeListProvider =
  101. FutureProvider.autoDispose.family<List<OvertimeModel>, int>(
  102. (ref, page) async {
  103. final status = ref.watch(overtimeStatusFilterProvider);
  104. if (status.isEmpty) {
  105. return _mockOvertimes;
  106. }
  107. return _mockOvertimes.where((e) => e.status == status).toList();
  108. });