diff --git a/app/Http/Controllers/Admin/PlatformBatchController.php b/app/Http/Controllers/Admin/PlatformBatchController.php
index aa9d47b..5b11242 100644
--- a/app/Http/Controllers/Admin/PlatformBatchController.php
+++ b/app/Http/Controllers/Admin/PlatformBatchController.php
@@ -134,6 +134,14 @@ class PlatformBatchController extends Controller
'bmpa_failed_only' => '1',
]), $safeBackForLinks, 'filters');
+ // 本批次可同步重试:用于处理“批量 BMPA 后仍未同步订阅”的订单(例如同步暂时失败/后续补救)。
+ // 口径:batch_bmpa_run_id + syncable_only=1 + sync_status=unsynced
+ $governanceLinks['retry_syncable'] = BackUrl::withBackAndFragment('/admin/platform-orders?' . \Illuminate\Support\Arr::query([
+ 'batch_bmpa_run_id' => $runId,
+ 'syncable_only' => '1',
+ 'sync_status' => 'unsynced',
+ ]), $safeBackForLinks, 'filters');
+
// 本批次可再次尝试:对齐仪表盘/列表的“真正可BMPA处理集合”口径。
$governanceLinks['retry_processable'] = BackUrl::withBackAndFragment('/admin/platform-orders?' . \Illuminate\Support\Arr::query([
'batch_bmpa_run_id' => $runId,
diff --git a/resources/views/admin/platform_batches/show.blade.php b/resources/views/admin/platform_batches/show.blade.php
index affc3d4..b07155c 100644
--- a/resources/views/admin/platform_batches/show.blade.php
+++ b/resources/views/admin/platform_batches/show.blade.php
@@ -135,6 +135,10 @@
|
本批次可同步重试
@endif
+ @if(($governanceLinks['retry_syncable'] ?? '') !== '')
+ |
+ 本批次可同步重试
+ @endif
@if(($governanceLinks['retry_processable'] ?? '') !== '')
|
本批次可再次尝试(可BMPA处理)
diff --git a/tests/Feature/AdminPlatformBatchShowPageShouldRenderForBmpaTest.php b/tests/Feature/AdminPlatformBatchShowPageShouldRenderForBmpaTest.php
index f2f1a00..c265c73 100644
--- a/tests/Feature/AdminPlatformBatchShowPageShouldRenderForBmpaTest.php
+++ b/tests/Feature/AdminPlatformBatchShowPageShouldRenderForBmpaTest.php
@@ -91,6 +91,10 @@ class AdminPlatformBatchShowPageShouldRenderForBmpaTest extends TestCase
$this->assertStringContainsString('bmpa_error_keyword=', $html);
$this->assertStringContainsString(urlencode('模拟失败:订单不是待处理+未支付'), $html);
+ // 治理入口:本批次可同步重试(batch_bmpa_run_id + syncable_only=1 + sync_status=unsynced)
+ $this->assertStringContainsString('syncable_only=1', $html);
+ $this->assertStringContainsString('sync_status=unsynced', $html);
+
// 治理入口:本批次可再次尝试(可BMPA处理)
$this->assertStringContainsString('bmpa_processable_only=1', $html);
}