继续扩展共享异步状态壳

将 PlatformAsyncStatePanel 扩展到公共素材选择网格

将 PlatformAsyncStatePanel 扩展到视觉小说存档面板与账号安全子区块

将兑换码弹窗提交动作改为使用标准 profile modal footer

补充对应测试并更新 PlatformUiKit 收口计划与共享决策记录
This commit is contained in:
2026-06-11 04:11:32 +08:00
parent 7431b1b9a4
commit 7f8400fd3a
10 changed files with 220 additions and 115 deletions

View File

@@ -32,6 +32,9 @@ function renderAccountModal(overrides?: {
riskBlocks?: AuthRiskBlockSummary[];
sessions?: AuthSessionSummary[];
auditLogs?: AuthAuditLogEntry[];
loadingRiskBlocks?: boolean;
loadingSessions?: boolean;
loadingAuditLogs?: boolean;
onRevokeSession?: (session: AuthSessionSummary) => Promise<void>;
revokingSessionIds?: string[];
initialSection?:
@@ -52,9 +55,9 @@ function renderAccountModal(overrides?: {
riskBlocks={overrides?.riskBlocks ?? []}
sessions={overrides?.sessions ?? []}
auditLogs={overrides?.auditLogs ?? []}
loadingRiskBlocks={false}
loadingSessions={false}
loadingAuditLogs={false}
loadingRiskBlocks={overrides?.loadingRiskBlocks ?? false}
loadingSessions={overrides?.loadingSessions ?? false}
loadingAuditLogs={overrides?.loadingAuditLogs ?? false}
isHydratingSettings={false}
isPersistingSettings={false}
settingsError={null}
@@ -461,6 +464,37 @@ test('account panel empty shells reuse PlatformEmptyState subpanel chrome', asyn
}
});
test('account panel loading shells reuse PlatformEmptyState subpanel chrome', async () => {
const user = userEvent.setup();
renderAccountModal({
loadingRiskBlocks: true,
loadingSessions: true,
loadingAuditLogs: true,
});
await user.click(screen.getByRole('button', { name: /账号与安全/ }));
const accountDialog = screen.getByRole('dialog', { name: '账号信息' });
const loadingMessages = [
'正在读取安全状态...',
'正在读取当前登录设备...',
'正在读取账号操作记录...',
];
for (const message of loadingMessages) {
const shell = findNearestClassName(
within(accountDialog).getByText(message),
'platform-empty-state',
);
expect(shell?.className).toContain('rounded-[1rem]');
expect(shell?.className).toContain('bg-white/74');
expect(shell?.className).toContain('px-4');
expect(shell?.className).toContain('py-3');
}
});
test('current merged session group hides kick action and shows count', async () => {
const user = userEvent.setup();