diff --git a/AGENTS.md b/AGENTS.md index ef12345..3a74d2c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -576,3 +576,10 @@ - 截图本月 `¥97.07` 是多个历史价格版本混合回放;若按当前最新模型价格强行重算本月全部 Shop token,则为 `¥84.446874500`。 - 如果后续需要“按当前最新价模拟重算历史区间”,应新增模拟分析口径,不能覆盖 Admin 收银金额、真实扣费、余额和流水。 - 核账记录见 `docs/ai/context/20260614-130541-admin-revenue-ranking-pricing-audit_CN.md`。 + +## 2026-06-16 Account 欠费上限展示移除 + +- 当前 API key 放行逻辑是余额必须大于 0;余额等于 0 或负数都会返回 `insufficient_balance`。 +- `account_balances.credit_limit_*` 的 10 元字段不参与 API 调用放行,只保留为历史兼容字段。 +- `/shop/account/` 不应展示「欠费上限」,避免用户误解为可以欠费 10 元后才停用。 +- 设计与计划见 `docs/ai/context/20260616-101833-account-remove-credit-limit-display-design-plan_CN.md`。 diff --git a/shop/account/index.html b/shop/account/index.html index 4691d06..da92f45 100644 --- a/shop/account/index.html +++ b/shop/account/index.html @@ -53,7 +53,7 @@

模型总览<

正在读取模型...

-
+

充值

diff --git a/shop/js/account.js b/shop/js/account.js index 348de70..9968802 100644 --- a/shop/js/account.js +++ b/shop/js/account.js @@ -180,8 +180,7 @@ function renderBalanceCards(balance = {}) { const cards = [ ['当前余额', balance.balanceNanos === undefined ? formatCents(balance.balanceCents) : formatNanos(balance.balanceNanos), billingStatusText(balance.status)], ['欠费金额', balance.debtNanos === undefined ? formatCents(balance.debtCents) : formatNanos(balance.debtNanos), balance.debtCents > 0 ? '需补缴' : '无欠费'], - ['待确认充值', balance.pendingTopupNanos === undefined ? formatCents(balance.pendingTopupCents) : formatNanos(balance.pendingTopupNanos), '确认后入账'], - ['欠费上限', balance.creditLimitNanos === undefined ? formatCents(balance.creditLimitCents) : formatNanos(balance.creditLimitNanos), balance.creditExceeded ? '已超过' : '默认上限'] + ['待确认充值', balance.pendingTopupNanos === undefined ? formatCents(balance.pendingTopupCents) : formatNanos(balance.pendingTopupNanos), '确认后入账'] ]; return cards.map(([label, value, hint]) => `
diff --git a/shop/shop.js b/shop/shop.js index 1da4164..0a05028 100644 --- a/shop/shop.js +++ b/shop/shop.js @@ -4,7 +4,7 @@ '/shop/js/core.js', '/shop/js/charts.js', '/shop/js/auth.js', - '/shop/js/account.js?v=20260614-account-price-display', + '/shop/js/account.js?v=20260616-account-credit-limit-display', '/shop/js/admin.js', '/shop/js/legacy-redirects.js' ]; diff --git a/test/shop-frontend.test.js b/test/shop-frontend.test.js index 82b116f..4a44d4e 100644 --- a/test/shop-frontend.test.js +++ b/test/shop-frontend.test.js @@ -8,7 +8,7 @@ const shopModuleScripts = [ '/shop/js/core.js', '/shop/js/charts.js', '/shop/js/auth.js', - '/shop/js/account.js?v=20260614-account-price-display', + '/shop/js/account.js?v=20260616-account-credit-limit-display', '/shop/js/admin.js', '/shop/js/legacy-redirects.js' ]; @@ -126,6 +126,44 @@ test('Admin 余额和充值表渲染复用账户状态文案函数', () => { assert.match(topupHtml, /待确认/); }); +test('Account 余额卡片不展示未参与放行逻辑的欠费上限', () => { + const sandbox = { + window: {}, + document: { + cookie: '', + readyState: 'loading', + addEventListener() {} + }, + Intl, + URL + }; + sandbox.window.document = sandbox.document; + + for (const file of [ + 'shop/js/core.js', + 'shop/js/charts.js', + 'shop/js/account.js' + ]) { + vm.runInNewContext(readScript(file), sandbox, { filename: file }); + } + + const html = sandbox.window.YuiShopAccount.renderBalanceCards({ + balanceNanos: 1000000000, + debtNanos: 0, + pendingTopupNanos: 0, + creditLimitNanos: 10000000000, + creditExceeded: false, + status: 'available' + }); + + assert.match(html, /当前余额/); + assert.match(html, /欠费金额/); + assert.match(html, /待确认充值/); + assert.doesNotMatch(html, /欠费上限/); + assert.doesNotMatch(html, /默认上限/); + assert.doesNotMatch(html, /10\.00/); +}); + test('Shop 入口加载页面模块后仍暴露兼容的 YuiShop 初始化函数', async () => { const elements = new Map(); const sandbox = {