refactor(js): tempButtonFeedback提升为通用并前置于run_id复制处理

This commit is contained in:
萝卜
2026-03-17 17:11:19 +08:00
parent 9cfe7a718c
commit 0d3096d075
2 changed files with 56 additions and 54 deletions

View File

@@ -576,38 +576,43 @@
}
}
// 通用:按钮短暂反馈(已复制/复制失败)并自动恢复
// 说明:用于复制 run_id / 复制治理链接,避免两套口径漂移。
function tempButtonFeedback(btn, ok, origAttr) {
try {
var key = String(origAttr || 'data-orig-text');
var orig = btn.getAttribute(key);
if (!orig) {
orig = String(btn.textContent || '');
btn.setAttribute(key, orig);
}
var nextText = ok ? '已复制' : '复制失败';
btn.textContent = nextText;
btn.disabled = true;
setTimeout(function(){
try {
btn.textContent = orig;
btn.disabled = false;
} catch (e) {}
}, 1200);
} catch (e) {}
}
function markCopied(btn, ok) {
// 兼容:保留函数名,供测试护栏与未来复用
tempButtonFeedback(btn, ok, 'data-orig-text');
}
// 批次页:一键复制 run_id渐进增强
(function(){
var btn = qs('[data-action="copy-run-id"][data-run-id]');
if(!btn){return;}
function markCopiedRunId(ok){
try {
// 复用通用按钮反馈逻辑
if (typeof tempButtonFeedback === 'function') {
tempButtonFeedback(btn, ok, 'data-orig-text-run-id');
return;
}
} catch (e) {}
// 降级:保留旧逻辑(极端情况下 tempButtonFeedback 不可用)
try {
var orig = btn.getAttribute('data-orig-text-run-id');
if (!orig) {
orig = String(btn.textContent || '');
btn.setAttribute('data-orig-text-run-id', orig);
}
btn.textContent = ok ? '已复制' : '复制失败';
btn.disabled = true;
setTimeout(function(){
try {
btn.textContent = orig;
btn.disabled = false;
} catch (e) {}
}, 1200);
} catch (e) {}
tempButtonFeedback(btn, ok, 'data-orig-text-run-id');
}
btn.addEventListener('click', function(){
@@ -646,34 +651,6 @@
var btns = document.querySelectorAll('[data-action="copy-link"][data-href]');
if(!btns || btns.length === 0){return;}
function tempButtonFeedback(btn, ok, origAttr) {
try {
var key = String(origAttr || 'data-orig-text');
var orig = btn.getAttribute(key);
if (!orig) {
orig = String(btn.textContent || '');
btn.setAttribute(key, orig);
}
var nextText = ok ? '已复制' : '复制失败';
btn.textContent = nextText;
btn.disabled = true;
setTimeout(function(){
try {
btn.textContent = orig;
btn.disabled = false;
} catch (e) {}
}, 1200);
} catch (e) {}
}
function markCopied(btn, ok) {
// 兼容:保留函数名,供测试护栏与未来复用
tempButtonFeedback(btn, ok, 'data-orig-text');
}
btns.forEach(function(btn){
btn.addEventListener('click', function(){
var href = btn.getAttribute('data-href') || '';

View File

@@ -0,0 +1,25 @@
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class AdminJsTempButtonFeedbackShouldBeDefinedBeforeCopyRunIdHandlerTest extends TestCase
{
use RefreshDatabase;
public function test_temp_button_feedback_should_be_defined_before_copy_run_id_handler(): void
{
$js = file_get_contents(public_path('js/admin.js'));
$this->assertIsString($js);
$posTemp = strpos($js, 'function tempButtonFeedback');
$posRunId = strpos($js, 'copy-run-id');
$this->assertNotFalse($posTemp);
$this->assertNotFalse($posRunId);
$this->assertTrue($posTemp < $posRunId, 'tempButtonFeedback should be defined before copy-run-id handler');
}
}