overtime_list_controller.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'overtime_model.dart';
  3. final overtimeStatusFilterProvider = StateProvider<String>((ref) => '');
  4. final mockOvertimes = <OvertimeModel>[
  5. OvertimeModel(
  6. id: 'ot-001',
  7. applicationNo: 'JB-20260520-001',
  8. applicantId: 'u-001',
  9. applicantName: '张三',
  10. deptId: 'dept-001',
  11. deptName: '市场部',
  12. otType: 'workday',
  13. compensationType: 'overtime_pay',
  14. startTime: DateTime(2026, 5, 20, 18, 0),
  15. endTime: DateTime(2026, 5, 20, 21, 0),
  16. netOtHours: 2.5,
  17. reason: '项目上线前紧急测试',
  18. status: 'pending',
  19. approvalInstanceId: 'apr-001',
  20. createTime: DateTime(2026, 5, 20),
  21. updateTime: DateTime(2026, 5, 20),
  22. ),
  23. OvertimeModel(
  24. id: 'ot-002',
  25. applicationNo: 'JB-20260518-002',
  26. applicantId: 'u-002',
  27. applicantName: '王五',
  28. deptId: 'dept-002',
  29. deptName: '技术部',
  30. otType: 'rest_day',
  31. compensationType: 'comp_leave',
  32. startTime: DateTime(2026, 5, 18, 9, 0),
  33. endTime: DateTime(2026, 5, 18, 18, 0),
  34. netOtHours: 7.5,
  35. reason: '系统架构升级',
  36. status: 'approved',
  37. approvalInstanceId: 'apr-002',
  38. createTime: DateTime(2026, 5, 17),
  39. updateTime: DateTime(2026, 5, 19),
  40. ),
  41. OvertimeModel(
  42. id: 'ot-003',
  43. applicationNo: 'JB-20260525-003',
  44. applicantId: 'u-003',
  45. applicantName: '赵六',
  46. deptId: 'dept-003',
  47. deptName: '财务部',
  48. otType: 'workday',
  49. compensationType: 'mixed',
  50. compLeaveRatio: 0.3,
  51. startTime: DateTime(2026, 5, 25, 19, 0),
  52. endTime: DateTime(2026, 5, 25, 22, 0),
  53. netOtHours: 2.5,
  54. reason: '季度财务报表汇总',
  55. status: 'pending',
  56. approvalInstanceId: 'apr-003',
  57. createTime: DateTime(2026, 5, 25),
  58. updateTime: DateTime(2026, 5, 25),
  59. ),
  60. OvertimeModel(
  61. id: 'ot-004',
  62. applicationNo: 'JB-20260601-004',
  63. applicantId: 'u-001',
  64. applicantName: '张三',
  65. deptId: 'dept-001',
  66. deptName: '市场部',
  67. otType: 'legal_holiday',
  68. compensationType: 'overtime_pay',
  69. startTime: DateTime(2026, 6, 1, 10, 0),
  70. endTime: DateTime(2026, 6, 1, 15, 0),
  71. netOtHours: 4.0,
  72. reason: '节假日活动筹备',
  73. status: 'rejected',
  74. approvalInstanceId: '',
  75. createTime: DateTime(2026, 5, 30),
  76. updateTime: DateTime(2026, 6, 1),
  77. ),
  78. OvertimeModel(
  79. id: 'ot-005',
  80. applicationNo: 'JB-20260602-005',
  81. applicantId: 'u-002',
  82. applicantName: '王五',
  83. deptId: 'dept-002',
  84. deptName: '技术部',
  85. otType: 'workday',
  86. compensationType: 'comp_leave',
  87. startTime: DateTime(2026, 6, 2, 18, 30),
  88. endTime: DateTime(2026, 6, 2, 21, 0),
  89. netOtHours: 2.0,
  90. reason: '夜间服务器维护',
  91. status: 'draft',
  92. approvalInstanceId: '',
  93. createTime: DateTime(2026, 6, 2),
  94. updateTime: DateTime(2026, 6, 2),
  95. ),
  96. OvertimeModel(
  97. id: 'ot-006',
  98. applicationNo: 'JB-20260515-006',
  99. applicantId: 'u-001',
  100. applicantName: '张三',
  101. deptId: 'dept-001',
  102. deptName: '市场部',
  103. otType: 'rest_day',
  104. compensationType: 'overtime_pay',
  105. startTime: DateTime(2026, 5, 15, 9, 0),
  106. endTime: DateTime(2026, 5, 15, 17, 0),
  107. netOtHours: 7.0,
  108. reason: '周末展会布展',
  109. status: 'withdrawn',
  110. approvalInstanceId: '',
  111. createTime: DateTime(2026, 5, 14),
  112. updateTime: DateTime(2026, 5, 15),
  113. ),
  114. ];
  115. final overtimePageProvider = StateProvider<int>((ref) => 1);
  116. final overtimeListProvider = FutureProvider<List<OvertimeModel>>((ref) async {
  117. ref.watch(overtimeStatusFilterProvider);
  118. ref.watch(overtimePageProvider);
  119. final status = ref.read(overtimeStatusFilterProvider);
  120. if (status.isEmpty) return mockOvertimes;
  121. return mockOvertimes.where((e) => e.status == status).toList();
  122. });