Procházet zdrojové kódy

fix #19407 草稿恢复功能优化

chengc před 1 týdnem
rodič
revize
9f0d4b4fb3

+ 23 - 2
lib/features/expense/expense_create_controller.dart

@@ -79,7 +79,14 @@ class ExpenseCreateController extends StateNotifier<ExpenseCreateState> {
   }
 
   void restoreFromDraft(ExpenseModel draft, ExpenseApi api) {
-    state = ExpenseCreateState(expense: draft);
+    state = ExpenseCreateState(
+      expense: draft.copyWith(
+        deptId: '',
+        deptName: '',
+        applicantId: '',
+        applicantName: '',
+      ),
+    );
   }
 
   void reset() {
@@ -125,6 +132,15 @@ class ExpenseCreateController extends StateNotifier<ExpenseCreateState> {
     );
   }
 
+  void updateEmployee(String applicantId, String applicantName) {
+    state = state.copyWith(
+      expense: state.expense.copyWith(
+        applicantId: applicantId,
+        applicantName: applicantName,
+      ),
+    );
+  }
+
   void addDetail(ExpenseDetailModel detail) {
     final details = [...state.expense.details, detail];
     state = state.copyWith(expense: state.expense.copyWith(details: details));
@@ -177,7 +193,12 @@ class ExpenseCreateController extends StateNotifier<ExpenseCreateState> {
   Future<bool> saveDraft() async {
     state = state.copyWith(isSubmitting: true);
     try {
-      await DraftStorage.save(expenseDraftKey, state.expense.toJson());
+      final data = state.expense.toJson();
+      data.remove('deptId');
+      data.remove('deptName');
+      data.remove('applicantId');
+      data.remove('applicantName');
+      await DraftStorage.save(expenseDraftKey, data);
       return true;
     } catch (_) {
       return false;

+ 11 - 3
lib/features/expense/expense_create_page.dart

@@ -294,7 +294,7 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
           title: l10n.get('restore'),
           titleColor: colors.primary,
           action: () async {
-            Navigator.pop(ctx);
+            final navigator = Navigator.of(ctx);
             final draft = await ExpenseCreateController.loadDraft();
             if (draft != null && mounted) {
               final api = ref.read(expenseApiProvider);
@@ -307,6 +307,7 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
                 await _attachmentController.restoreFromPaths(draft.attachments);
               }
             }
+            navigator.pop();
           },
         ),
       ),
@@ -319,8 +320,9 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
   }
 
   List<Map<String, dynamic>> _convertAcctTree(dynamic tree) {
-    if (tree is! List) return [];
-    return (tree as List).map<Map<String, dynamic>>((item) {
+    final list = tree is List ? tree : <dynamic>[];
+    if (list.isEmpty) return [];
+    return list.map<Map<String, dynamic>>((item) {
       final map = Map<String, dynamic>.from(item is Map ? item : {});
       if (map.containsKey('children') && map['children'] != null) {
         map['children'] = _convertAcctTree(map['children']);
@@ -347,6 +349,9 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
     final match = _employees.where((e) => e.salNo == usr);
     if (match.isNotEmpty) {
       setState(() => _selEmployee = match.first);
+      ref
+          .read(expenseCreateProvider(widget.editId).notifier)
+          .updateEmployee(match.first.salNo, match.first.name);
     }
   }
 
@@ -365,6 +370,9 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
     );
     if (result != null && mounted) {
       setState(() => _selEmployee = result);
+      ref
+          .read(expenseCreateProvider(widget.editId).notifier)
+          .updateEmployee(_selEmployee!.salNo, _selEmployee!.name);
     }
   }
 

+ 0 - 4
lib/features/expense_apply/expense_apply_create_page.dart

@@ -271,8 +271,6 @@ class _ExpenseApplyCreatePageState
       _validUntil = data['validUntil'] as String? ?? '';
       _referenceNoController.text = data['referenceNo'] as String? ?? '';
       _remarkController.text = data['remark'] as String? ?? '';
-      _selectedDeptId = data['deptId'] as String? ?? '';
-      _selectedDeptName = data['deptName'] as String? ?? '';
       _details.clear();
       final detailList = data['details'] as List<dynamic>?;
       if (detailList != null) {
@@ -332,8 +330,6 @@ class _ExpenseApplyCreatePageState
     await DraftStorage.save(_draftKey, {
       'urgency': _urgency,
       'purpose': _purposeController.text,
-      'deptId': _selectedDeptId,
-      'deptName': _selectedDeptName,
       'validUntil': _validUntil,
       'referenceNo': _referenceNoController.text,
       'remark': _remarkController.text,