| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import '../../shared/models/approval_status.dart';
- import 'expense_model.dart';
- final expenseStatusFilterProvider = StateProvider<String>((ref) => '');
- final _mockExpenses = <ExpenseModel>[
- ExpenseModel(
- id: 'exp-001',
- reportNo: 'BX202605001',
- applicantId: 'u-001',
- applicantName: '张三',
- deptId: 'dept-001',
- deptName: '市场部',
- expenseType: '差旅费',
- totalAmount: 2580.00,
- invoiceCount: 3,
- status: 'pending',
- createTime: DateTime(2026, 5, 20),
- updateTime: DateTime(2026, 5, 20),
- details: [
- ExpenseDetailModel(
- id: 'det-001',
- expenseId: 'exp-001',
- expenseDate: DateTime(2026, 5, 19),
- expenseType: '交通费',
- expenseDesc: '北京-上海高铁',
- amount: 553.00,
- totalAmount: 553.00,
- ),
- ExpenseDetailModel(
- id: 'det-002',
- expenseId: 'exp-001',
- expenseDate: DateTime(2026, 5, 19),
- expenseType: '住宿费',
- expenseDesc: '上海酒店住宿',
- amount: 800.00,
- totalAmount: 800.00,
- ),
- ],
- approvalRecords: [
- ApprovalRecord(
- id: 'ar-001',
- bizId: 'exp-001',
- bizType: 'expense',
- approverId: 'u-mgr',
- approverName: '李四',
- approvalLevel: 1,
- action: 'pending',
- opinion: '',
- approvalTime: DateTime(2026, 5, 21),
- ),
- ],
- ),
- ExpenseModel(
- id: 'exp-002',
- reportNo: 'BX202605002',
- applicantId: 'u-002',
- applicantName: '王五',
- deptId: 'dept-002',
- deptName: '技术部',
- expenseType: '办公用品',
- totalAmount: 1280.50,
- invoiceCount: 2,
- status: 'approved',
- createTime: DateTime(2026, 5, 15),
- updateTime: DateTime(2026, 5, 18),
- details: [
- ExpenseDetailModel(
- id: 'det-003',
- expenseId: 'exp-002',
- expenseDate: DateTime(2026, 5, 14),
- expenseType: '办公用品',
- expenseDesc: '打印纸、墨盒',
- amount: 1280.50,
- totalAmount: 1280.50,
- ),
- ],
- approvalRecords: [
- ApprovalRecord(
- id: 'ar-002',
- bizId: 'exp-002',
- bizType: 'expense',
- approverId: 'u-mgr',
- approverName: '李四',
- approvalLevel: 1,
- action: 'approve',
- opinion: '同意',
- approvalTime: DateTime(2026, 5, 18),
- ),
- ],
- ),
- ExpenseModel(
- id: 'exp-003',
- reportNo: 'BX202605003',
- applicantId: 'u-003',
- applicantName: '赵六',
- deptId: 'dept-003',
- deptName: '财务部',
- expenseType: '业务招待费',
- totalAmount: 3600.00,
- invoiceCount: 1,
- status: 'rejected',
- createTime: DateTime(2026, 5, 10),
- updateTime: DateTime(2026, 5, 12),
- details: [
- ExpenseDetailModel(
- id: 'det-004',
- expenseId: 'exp-003',
- expenseDate: DateTime(2026, 5, 9),
- expenseType: '招待费',
- expenseDesc: '客户晚宴',
- amount: 3600.00,
- totalAmount: 3600.00,
- ),
- ],
- approvalRecords: [
- ApprovalRecord(
- id: 'ar-003',
- bizId: 'exp-003',
- bizType: 'expense',
- approverId: 'u-mgr',
- approverName: '李四',
- approvalLevel: 1,
- action: 'reject',
- opinion: '发票不符合规定',
- approvalTime: DateTime(2026, 5, 12),
- ),
- ],
- ),
- ExpenseModel(
- id: 'exp-004',
- reportNo: 'BX202605004',
- applicantId: 'u-001',
- applicantName: '张三',
- deptId: 'dept-001',
- deptName: '市场部',
- expenseType: '交通费',
- totalAmount: 890.00,
- invoiceCount: 1,
- status: 'pending',
- createTime: DateTime(2026, 5, 22),
- updateTime: DateTime(2026, 5, 22),
- details: [
- ExpenseDetailModel(
- id: 'det-005',
- expenseId: 'exp-004',
- expenseDate: DateTime(2026, 5, 21),
- expenseType: '交通费',
- expenseDesc: '市内打车',
- amount: 890.00,
- totalAmount: 890.00,
- ),
- ],
- ),
- ];
- final expenseListProvider =
- FutureProvider.autoDispose.family<List<ExpenseModel>, int>(
- (ref, page) async {
- await Future.delayed(const Duration(milliseconds: 300));
- final status = ref.watch(expenseStatusFilterProvider);
- if (status.isEmpty) {
- return _mockExpenses;
- }
- return _mockExpenses.where((e) => e.status == status).toList();
- });
|