Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`。
2 changes: 1 addition & 1 deletion shop/account/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ <h3 class="font-display text-2xl text-primary dark:text-dark-text">模型总览<
<p class="text-sm text-text-muted dark:text-dark-text-muted">正在读取模型...</p>
</div>
</section>
<div id="accountBalanceCards" class="mt-6 grid gap-3 md:grid-cols-4"></div>
<div id="accountBalanceCards" class="mt-6 grid gap-3 md:grid-cols-3"></div>
<div class="mt-6 grid gap-5 lg:grid-cols-[1fr_1.2fr]">
<section class="rounded-lg border border-border-subtle dark:border-dark-border bg-white dark:bg-dark-card p-5">
<h3 class="font-display text-2xl text-primary dark:text-dark-text">充值</h3>
Expand Down
3 changes: 1 addition & 2 deletions shop/js/account.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]) => `
<article class="rounded-lg border border-border-subtle dark:border-dark-border bg-white dark:bg-dark-card p-4">
Expand Down
2 changes: 1 addition & 1 deletion shop/shop.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
];
Expand Down
40 changes: 39 additions & 1 deletion test/shop-frontend.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
];
Expand Down Expand Up @@ -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 = {
Expand Down
Loading