From ca6d55231d6de31325d73b29ddf9ee290ee8d395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Tue, 17 Mar 2026 17:01:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(js):=20=E5=A4=8D=E5=88=B6=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E6=8C=89=E9=92=AE=E6=8F=90=E4=BE=9B=E7=9F=AD=E6=9A=82?= =?UTF-8?q?=E5=B7=B2=E5=A4=8D=E5=88=B6=E5=8F=8D=E9=A6=88(=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=81=A2=E5=A4=8D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/admin.js | 24 +++++++++++++++++++ ...nsShouldHaveTemporaryFeedbackLogicTest.php | 24 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tests/Feature/AdminJsCopyLinkButtonsShouldHaveTemporaryFeedbackLogicTest.php diff --git a/public/js/admin.js b/public/js/admin.js index 3228712..849c242 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -615,6 +615,27 @@ var btns = document.querySelectorAll('[data-action="copy-link"][data-href]'); if(!btns || btns.length === 0){return;} + function markCopied(btn, ok) { + try { + var orig = btn.getAttribute('data-orig-text'); + if (!orig) { + orig = String(btn.textContent || ''); + btn.setAttribute('data-orig-text', orig); + } + + var nextText = ok ? '已复制' : '复制失败'; + btn.textContent = nextText; + btn.disabled = true; + + setTimeout(function(){ + try { + btn.textContent = orig; + btn.disabled = false; + } catch (e) {} + }, 1200); + } catch (e) {} + } + btns.forEach(function(btn){ btn.addEventListener('click', function(){ var href = btn.getAttribute('data-href') || ''; @@ -622,11 +643,14 @@ var abs = absoluteUrl(href); copyToClipboard(abs).then(function(){ + markCopied(btn, true); + if (toastSuccess('已复制' + label + '链接')) { return; } try { window.alert('已复制' + label + '链接'); } catch (e) {} }).catch(function(){ + markCopied(btn, false); try { window.alert('复制失败,请手动复制' + label + '链接'); } catch (e) {} }); }); diff --git a/tests/Feature/AdminJsCopyLinkButtonsShouldHaveTemporaryFeedbackLogicTest.php b/tests/Feature/AdminJsCopyLinkButtonsShouldHaveTemporaryFeedbackLogicTest.php new file mode 100644 index 0000000..f1b32d7 --- /dev/null +++ b/tests/Feature/AdminJsCopyLinkButtonsShouldHaveTemporaryFeedbackLogicTest.php @@ -0,0 +1,24 @@ +assertIsString($js); + + // 关键口径:复制后按钮短暂变为“已复制/复制失败”,并 disable + $this->assertStringContainsString('markCopied', $js); + $this->assertStringContainsString("'已复制'", $js); + $this->assertStringContainsString("'复制失败'", $js); + $this->assertStringContainsString('btn.disabled = true', $js); + } +}