vehicle_list_controller.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'vehicle_model.dart';
  3. final vehicleStatusFilterProvider = StateProvider<String>((ref) => '');
  4. final vehiclePageProvider = StateProvider<int>((ref) => 1);
  5. final mockVehicles = <VehicleModel>[
  6. VehicleModel(
  7. id: 'veh-001',
  8. applicationNo: 'YC-20260520-001',
  9. applicantId: 'u-001',
  10. applicantName: '张三',
  11. deptId: 'dept-001',
  12. deptName: '市场部',
  13. vehicleId: '京A88888',
  14. purpose: 'reception',
  15. reason: '拜访重要客户,需前往深圳',
  16. origin: '公司总部',
  17. destination: '深圳分公司',
  18. passengerCount: 3,
  19. startTime: DateTime(2026, 5, 22, 8, 0),
  20. endTime: DateTime(2026, 5, 22, 18, 0),
  21. status: 'pending',
  22. approvalInstanceId: 'apr-v-001',
  23. createTime: DateTime(2026, 5, 20),
  24. updateTime: DateTime(2026, 5, 20),
  25. ),
  26. VehicleModel(
  27. id: 'veh-002',
  28. applicationNo: 'YC-20260525-002',
  29. applicantId: 'u-002',
  30. applicantName: '王五',
  31. deptId: 'dept-002',
  32. deptName: '技术部',
  33. vehicleId: '京B66666',
  34. purpose: 'business',
  35. reason: '运送服务器设备至数据中心',
  36. origin: '公司仓库',
  37. destination: '数据中心',
  38. passengerCount: 2,
  39. startTime: DateTime(2026, 5, 25, 9, 0),
  40. endTime: DateTime(2026, 5, 25, 17, 0),
  41. status: 'approved',
  42. approvalInstanceId: 'apr-v-002',
  43. createTime: DateTime(2026, 5, 23),
  44. updateTime: DateTime(2026, 5, 24),
  45. ),
  46. VehicleModel(
  47. id: 'veh-003',
  48. applicationNo: 'YC-20260601-003',
  49. applicantId: 'u-001',
  50. applicantName: '张三',
  51. deptId: 'dept-001',
  52. deptName: '市场部',
  53. vehicleId: '京C12345',
  54. purpose: 'official',
  55. reason: '前往税务局办理业务',
  56. origin: '公司总部',
  57. destination: '税务局',
  58. passengerCount: 1,
  59. startTime: DateTime(2026, 6, 1, 9, 0),
  60. endTime: DateTime(2026, 6, 1, 12, 0),
  61. status: 'draft',
  62. approvalInstanceId: '',
  63. createTime: DateTime(2026, 5, 31),
  64. updateTime: DateTime(2026, 5, 31),
  65. ),
  66. VehicleModel(
  67. id: 'veh-004',
  68. applicationNo: 'YC-20260528-004',
  69. applicantId: 'u-003',
  70. applicantName: '赵六',
  71. deptId: 'dept-003',
  72. deptName: '财务部',
  73. vehicleId: '京D99999',
  74. purpose: 'reception',
  75. reason: '接待审计团队',
  76. origin: '公司总部',
  77. destination: '机场',
  78. passengerCount: 4,
  79. startTime: DateTime(2026, 5, 28, 14, 0),
  80. endTime: DateTime(2026, 5, 28, 17, 0),
  81. status: 'returned',
  82. approvalInstanceId: 'apr-v-004',
  83. actualReturnTime: DateTime(2026, 5, 28, 16, 45),
  84. startOdometer: 12500.0,
  85. endOdometer: 12680.0,
  86. actualCost: 85.0,
  87. costRemark: '路桥费35元,停车费50元',
  88. createTime: DateTime(2026, 5, 27),
  89. updateTime: DateTime(2026, 5, 28),
  90. ),
  91. VehicleModel(
  92. id: 'veh-005',
  93. applicationNo: 'YC-20260515-005',
  94. applicantId: 'u-002',
  95. applicantName: '王五',
  96. deptId: 'dept-002',
  97. deptName: '技术部',
  98. vehicleId: '京E55555',
  99. purpose: 'business',
  100. reason: '参加技术交流会',
  101. origin: '公司总部',
  102. destination: '国际会展中心',
  103. passengerCount: 1,
  104. startTime: DateTime(2026, 5, 15, 8, 0),
  105. endTime: DateTime(2026, 5, 15, 18, 0),
  106. status: 'withdrawn',
  107. approvalInstanceId: '',
  108. createTime: DateTime(2026, 5, 14),
  109. updateTime: DateTime(2026, 5, 15),
  110. ),
  111. VehicleModel(
  112. id: 'veh-006',
  113. applicationNo: 'YC-20260510-006',
  114. applicantId: 'u-001',
  115. applicantName: '张三',
  116. deptId: 'dept-001',
  117. deptName: '市场部',
  118. vehicleId: '京A88888',
  119. purpose: 'reception',
  120. reason: '拜访客户',
  121. origin: '公司总部',
  122. destination: '客户公司',
  123. passengerCount: 2,
  124. startTime: DateTime(2026, 5, 10, 10, 0),
  125. endTime: DateTime(2026, 5, 10, 16, 0),
  126. status: 'rejected',
  127. approvalInstanceId: '',
  128. createTime: DateTime(2026, 5, 9),
  129. updateTime: DateTime(2026, 5, 10),
  130. ),
  131. ];
  132. final vehicleListProvider = FutureProvider<List<VehicleModel>>((ref) async {
  133. ref.watch(vehicleStatusFilterProvider);
  134. ref.watch(vehiclePageProvider);
  135. final status = ref.read(vehicleStatusFilterProvider);
  136. if (status.isEmpty) return mockVehicles;
  137. return mockVehicles.where((e) => e.status == status).toList();
  138. });