Browse Source

报销申请单、报销单提交处理优化

chengc 1 tuần trước cách đây
mục cha
commit
a265291bf0

+ 2 - 2
lib/features/expense/expense_create_page.dart

@@ -1142,8 +1142,6 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
           await ExpenseCreateController.deleteDraft();
           if (mounted) {
             LoadingDialog.hide(context);
-            TDToast.showSuccess(l10n.get('submitSuccess'), context: context);
-            // BillSave 成功后提交审核流,不阻塞不弹窗
             if (billNo != null) {
               final dd = data['HeadData']['BX_DD']?.toString() ?? '';
               await AuditFlowHelper.handle(
@@ -1151,8 +1149,10 @@ class _ExpenseCreatePageState extends ConsumerState<ExpenseCreatePage> {
                 l10n: l10n,
                 getConfig: () => api.getBillAuditConfig('BX'),
                 onShSubmit: () => api.shSubmit(bilNo: billNo, bilDd: dd),
+                skipOnAutoSubmit: true,
               );
             }
+            TDToast.showSuccess(l10n.get('billCreated'), context: context);
             GoRouter.of(context).go('/expense/list');
           }
         } catch (e) {

+ 2 - 2
lib/features/expense_apply/expense_apply_create_page.dart

@@ -1000,8 +1000,6 @@ class _ExpenseApplyCreatePageState
           await DraftStorage.delete(_draftKey);
           if (mounted) {
             LoadingDialog.hide(context);
-            TDToast.showSuccess(l10n.get('submitSuccess'), context: context);
-            // BillSave 成功后提交审核流,不阻塞不弹窗
             if (billNo != null) {
               final dd = data['HeadData']['AE_DD']?.toString() ?? '';
               await AuditFlowHelper.handle(
@@ -1009,8 +1007,10 @@ class _ExpenseApplyCreatePageState
                 l10n: l10n,
                 getConfig: () => api.getBillAuditConfig('AE'),
                 onShSubmit: () => api.shSubmit(bilNo: billNo, bilDd: dd),
+                skipOnAutoSubmit: true,
               );
             }
+            TDToast.showSuccess(l10n.get('billCreated'), context: context);
             GoRouter.of(context).go('/expense-apply/list');
           }
         } catch (e) {

+ 5 - 2
lib/shared/helpers/audit_flow_helper.dart

@@ -7,7 +7,8 @@ import '../../core/theme/app_colors_extension.dart';
 ///
 /// BillSave 成功后调用,根据 [getBillAuditConfig] 返回值决定:
 /// - 无审核流 → 直接 return
-/// - 有审核流 + 自动提交 → 直接调 [onShSubmit]
+/// - 有审核流 + 自动提交([skipOnAutoSubmit]=false)→ 直接调 [onShSubmit]
+/// - 有审核流 + 自动提交([skipOnAutoSubmit]=true)→ 直接 return(ERP 已处理)
 /// - 有审核流 + 不自动提交 → 弹窗询问,用户确认后调 [onShSubmit]
 /// - getBillAuditConfig 出错 → 直接 return
 class AuditFlowHelper {
@@ -15,11 +16,13 @@ class AuditFlowHelper {
 
   /// [getConfig] 调用 getBillAuditConfig,[onShSubmit] 调用 SHSubmit。
   /// 调用方需确保 [context] 来自当前 mounted 的 widget。
+  /// [skipOnAutoSubmit] 为 true 时,自动提交场景不调 shSubmit(AE/BX 等 ERP 侧已处理的单据)。
   static Future<void> handle({
     required BuildContext context,
     required AppLocalizations l10n,
     required Future<Map<String, dynamic>> Function() getConfig,
     required Future<void> Function() onShSubmit,
+    bool skipOnAutoSubmit = false,
   }) async {
     final colors = Theme.of(context).extension<AppColorsExtension>()!;
     try {
@@ -30,7 +33,7 @@ class AuditFlowHelper {
       if (!hasFlow) return;
 
       if (autoSubmit) {
-        await onShSubmit();
+        if (!skipOnAutoSubmit) await onShSubmit();
         return;
       }