refactor(admin): 增加AdminFlash::warning并让BatchDispatchWarning复用

This commit is contained in:
萝卜
2026-03-17 19:01:43 +08:00
parent 3f471aa8db
commit bfc04d8f36
3 changed files with 71 additions and 12 deletions

View File

@@ -24,4 +24,37 @@ class AdminFlash
return $payload;
}
/**
* @return array{warning:string, warning_link_href?:string, warning_link_label?:string, warning_copy_text?:string, warning_copy_label?:string}
*/
public static function warning(
string $message,
string $linkHref = '',
string $linkLabel = '查看',
string $copyText = '',
string $copyLabel = '复制',
): array {
$message = (string) $message;
$linkHref = trim((string) $linkHref);
$linkLabel = trim((string) $linkLabel);
$copyText = trim((string) $copyText);
$copyLabel = trim((string) $copyLabel);
$payload = [
'warning' => $message,
];
if ($linkHref !== '') {
$payload['warning_link_href'] = $linkHref;
$payload['warning_link_label'] = $linkLabel !== '' ? $linkLabel : '查看';
}
if ($copyText !== '') {
$payload['warning_copy_text'] = $copyText;
$payload['warning_copy_label'] = $copyLabel !== '' ? $copyLabel : '复制';
}
return $payload;
}
}

View File

@@ -18,22 +18,19 @@ class BatchDispatchWarning
$msg = '检测到刚刚已提交过同一批次的' . $actionLabel . '任务1 分钟内)。为避免重复投递,本次未再次提交。';
$payload = [
'warning' => $msg,
];
if ($runId === '') {
return $payload;
return AdminFlash::warning($msg);
}
$short = RunId::short($runId, $batchType === 'bmpa' ? 7 : 6, 4);
$payload['warning'] = '检测到刚刚已提交过同一批次的' . $actionLabel . '任务1 分钟内run_id=' . $short . ')。为避免重复投递,本次未再次提交。';
$msg = '检测到刚刚已提交过同一批次的' . $actionLabel . '任务1 分钟内run_id=' . $short . ')。为避免重复投递,本次未再次提交。';
$payload['warning_link_href'] = '/admin/platform-batches/show?type=' . $batchType . '&run_id=' . urlencode($runId);
$payload['warning_link_label'] = '进入上次批次复盘';
$payload['warning_copy_text'] = $runId;
$payload['warning_copy_label'] = '复制run_id';
return $payload;
return AdminFlash::warning(
$msg,
'/admin/platform-batches/show?type=' . $batchType . '&run_id=' . urlencode($runId),
'进入上次批次复盘',
$runId,
'复制run_id',
);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace Tests\Unit;
use App\Support\AdminFlash;
use PHPUnit\Framework\TestCase;
class AdminFlashWarningPayloadTest extends TestCase
{
public function test_warning_should_return_message_only_when_no_link_and_no_copy(): void
{
$p = AdminFlash::warning('warn');
$this->assertSame('warn', (string) ($p['warning'] ?? ''));
$this->assertArrayNotHasKey('warning_link_href', $p);
$this->assertArrayNotHasKey('warning_copy_text', $p);
}
public function test_warning_should_include_link_and_copy_when_provided(): void
{
$p = AdminFlash::warning('warn', '/admin/x', '查看', 'ABC', '复制run_id');
$this->assertSame('warn', (string) ($p['warning'] ?? ''));
$this->assertSame('/admin/x', (string) ($p['warning_link_href'] ?? ''));
$this->assertSame('查看', (string) ($p['warning_link_label'] ?? ''));
$this->assertSame('ABC', (string) ($p['warning_copy_text'] ?? ''));
$this->assertSame('复制run_id', (string) ($p['warning_copy_label'] ?? ''));
}
}