From e72d0710e63b85fdf9d8d79de2b34025112b9df5 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Sep 2026 12:31:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E8=B4=AD=E4=B9=B0=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E5=BC=B9=E7=AA=97=E5=A3=B3=E9=9D=99=E6=AD=A2=E6=80=81?= =?UTF-8?q?=E9=9A=90=E8=97=8F=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=95=B4=E9=A1=B5?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E7=82=B9=E5=87=BB=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因与 2026-09-17 充值弹窗故障同构:新增的购买积分弹窗壳同为服务端 静态输出(.modal.flex.jc.fade),credits.css 仅对充值壳做了静止态 display:none 压制,积分壳被 main.css 的 .flex{display:flex} 拉起永久 铺满全屏,叠加 .fade 的 opacity:0 形成隐形遮罩拦截整页点击。 修复:credits.css 追加 .modal[data-aksrt-points-pay-modal]{display:none} 与 .in{display:flex};打开态由 initPointsPay 的内联 display:flex 驱动, 关闭撤除内联样式后即回到隐藏规则。balance-charge-modal 契约测试同步 纳入积分壳护栏,防同类回归。 --- assets/css/routes/user-center/credits.css | 11 +++++++++++ tests/widget-system/balance-charge-modal.test.cjs | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/assets/css/routes/user-center/credits.css b/assets/css/routes/user-center/credits.css index 5a233fc5..60ac09cd 100644 --- a/assets/css/routes/user-center/credits.css +++ b/assets/css/routes/user-center/credits.css @@ -179,6 +179,17 @@ display: flex; } +/* 购买积分弹窗壳与充值弹窗同构(服务端静态输出 .modal.flex.jc.fade), + 静止态同样必须显式隐藏,否则 .flex 工具类会使其铺满全屏形成隐形遮罩, + 拦截整页点击(2026-09-18 实测回归)。打开态由 initPointsPay 的内联 + display:flex 驱动,关闭撤除内联样式后即回到隐藏规则。 */ +.modal[data-aksrt-points-pay-modal] { + display: none; +} +.modal[data-aksrt-points-pay-modal].in { + display: flex; +} + .balance-charge-form .zib-widget { clear: both; background-color: var(--main-bg-color); diff --git a/tests/widget-system/balance-charge-modal.test.cjs b/tests/widget-system/balance-charge-modal.test.cjs index 0896f389..3b94b7c8 100644 --- a/tests/widget-system/balance-charge-modal.test.cjs +++ b/tests/widget-system/balance-charge-modal.test.cjs @@ -43,6 +43,12 @@ test('弹窗壳静止态必须被 credits.css 显式隐藏(.flex 覆盖回归 // .flex.jc 双轴居中(Zibll 生产环境即此形态)。 assert.match(creditsCss, /\.modal\[data-aksrt-charge-modal\]\.in\s*\{\s*display:\s*flex;/); assert.doesNotMatch(creditsCss, /\.modal\[data-aksrt-charge-modal\]\.in\s*\{\s*display:\s*block;/); + // 购买积分弹窗壳同构(服务端静态输出 .modal.flex.jc.fade),静止态同样 + // 必须显式隐藏,否则隐形遮罩拦截整页点击(2026-09-18 实测回归)。 + const balance = read('inc', 'helpers', 'user-center-renderers', 'credits-balance.php'); + assert.match(balance, /class="modal flex jc fade"[^>]*data-aksrt-points-pay-modal/); + assert.match(creditsCss, /\.modal\[data-aksrt-points-pay-modal\]\s*\{\s*display:\s*none;/); + assert.match(creditsCss, /\.modal\[data-aksrt-points-pay-modal\]\.in\s*\{\s*display:\s*flex;/); }); test('开关自包含:不依赖 jQuery/Bootstrap modal 运行时', () => {