From 298f10e6bc9324fc624f63a8847e9a308ab0c5ef Mon Sep 17 00:00:00 2001 From: zqlit Date: Sat, 3 Oct 2026 21:01:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E8=AE=BA=E9=94=99=E8=AF=AF=E5=8D=A1?= =?UTF-8?q?=E7=89=87=EF=BC=9A=E9=A2=9D=E5=BA=A6=E6=96=87=E6=A1=88=E5=8F=8C?= =?UTF-8?q?=E4=BF=9D=E9=99=A9(=E4=B8=AD=E6=96=87=E7=89=B9=E5=BE=81?= =?UTF-8?q?=E8=AF=8D=E5=85=9C=E5=BA=95+=E8=BF=9E=E6=8E=A5=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BC=98=E5=85=88=E5=88=A4)=E3=80=81=E5=BA=95?= =?UTF-8?q?=E9=83=A8=E8=BE=B9=E8=B7=9D=E5=8A=A0=E5=A4=A7=E4=B8=8Efooter?= =?UTF-8?q?=E5=88=86=E9=9A=94=E7=BA=BF=E9=9A=94=E5=BC=80(=E6=A1=8C?= =?UTF-8?q?=E9=9D=A230px/=E7=A7=BB=E5=8A=A824px)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/Ying/assets/js/modules/artalk.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/themes/Ying/assets/js/modules/artalk.js b/themes/Ying/assets/js/modules/artalk.js index 6415f4d2..b2dad17a 100644 --- a/themes/Ying/assets/js/modules/artalk.js +++ b/themes/Ying/assets/js/modules/artalk.js @@ -63,7 +63,7 @@ var st = document.createElement('style'); st.id = 'atk-err-css'; st.textContent = - '.atk-error-layer{padding:0!important;background:transparent!important}' + + '.atk-error-layer{padding:0!important;margin:14px 0 30px!important;background:transparent!important}' + '.atk-err-card{display:block;text-align:center;padding:30px 22px;box-sizing:border-box;' + 'animation:atkErrIn .35s cubic-bezier(.22,1,.36,1)}' + '@keyframes atkErrIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}' + @@ -77,7 +77,7 @@ 'font-size:13px;font-weight:600;cursor:pointer;transition:background .2s,color .2s,transform .2s;user-select:none}' + '.atk-err-retry:hover{background:var(--theme-main,#07c160);color:#fff}' + '.atk-err-retry:active{transform:scale(.96)}' + - '@media (max-width:640px){.atk-err-card{padding:24px 16px}.atk-err-ic{font-size:26px}' + + '@media (max-width:640px){.atk-error-layer{margin:10px 0 24px!important}.atk-err-card{padding:20px 14px}.atk-err-ic{font-size:26px}' + '.atk-err-t{font-size:14px}.atk-err-d{font-size:12.5px}}'; document.head.appendChild(st); } @@ -92,9 +92,16 @@ var prev = layer.querySelector('.atk-err-card'); if (prev && prev.getAttribute('data-raw') === raw) return; // 内容没变,不重复渲染 - // 优先用结构化错误码;没有就按「网络层失败」处理 + // 优先用结构化错误码;没有就从 Artalk 原始错误文本里认特征词 + // (D1 额度用尽 / 网络失败都有固定措辞)。结构化记录有时效且 Artalk + // 走某些路径时抓不到,只靠它会出现"有时显示通用文案"的不稳定 —— + // 双保险后,额度用尽这类固定故障任何时候都能显示出对应文案。 var fresh = last && (Date.now() - last.at < 30000) ? last : null; - var code = (fresh && fresh.code) || (/failed to fetch|network ?error|load failed/i.test(raw) ? 'network' : 'internal'); + var code = (fresh && fresh.code) + || (/数据库连接异常|d1_unavailable/i.test(raw) ? 'd1_unavailable' + : /D1_ERROR|exceeded D1|free tier|额度已用尽|暂时不可用|加载失败|无法获取|出了点小状况/i.test(raw) ? 'd1_quota' + : /failed to fetch|network ?error|load failed/i.test(raw) ? 'network' + : 'internal'); var info = INFO[code] || INFO.internal; // 服务端文案是给「直接调 API 的人」写的,自带一句"评论服务暂时不可用:", // 放到卡片里会和标题重复,这里去掉冗余前缀