feat: support WPS report material workbooks
This commit is contained in:
@@ -141,18 +141,43 @@ describe('report workbench pages', () => {
|
||||
application: { id: 'app-1', name: '测试应用' },
|
||||
}));
|
||||
const target = (eligible: boolean, blockedReasons: string[] = []) => ({ eligible, blockedReasons });
|
||||
adminApi.listPendingReportMaterials.mockResolvedValue({ items: materials, total: materials.length, page: 1, pageSize: 20 });
|
||||
adminApi.listPendingReportMaterials.mockResolvedValue({
|
||||
items: materials,
|
||||
total: materials.length,
|
||||
page: 1,
|
||||
pageSize: 20,
|
||||
});
|
||||
adminApi.preflightReportMaterialBatch.mockResolvedValue({
|
||||
eligible: true,
|
||||
eligibleTargetCount: 2,
|
||||
skippedTargetCount: 5,
|
||||
items: [
|
||||
{ id: 'signature:pending', eligible: true, blockedReasons: [], targets: [target(true)] },
|
||||
{ id: 'signature:partial', eligible: true, blockedReasons: ['缺少必填字段:营业执照'], targets: [target(true), target(false, ['缺少必填字段:营业执照'])] },
|
||||
{ id: 'signature:incomplete', eligible: false, blockedReasons: ['缺少必填字段:营业执照'], targets: [target(false, ['缺少必填字段:营业执照'])] },
|
||||
{ id: 'signature:abandoned', eligible: false, blockedReasons: ['该通道报备明细已放弃报备'], targets: [target(false, ['该通道报备明细已放弃报备'])] },
|
||||
{
|
||||
id: 'signature:partial',
|
||||
eligible: true,
|
||||
blockedReasons: ['缺少必填字段:营业执照'],
|
||||
targets: [target(true), target(false, ['缺少必填字段:营业执照'])],
|
||||
},
|
||||
{
|
||||
id: 'signature:incomplete',
|
||||
eligible: false,
|
||||
blockedReasons: ['缺少必填字段:营业执照'],
|
||||
targets: [target(false, ['缺少必填字段:营业执照'])],
|
||||
},
|
||||
{
|
||||
id: 'signature:abandoned',
|
||||
eligible: false,
|
||||
blockedReasons: ['该通道报备明细已放弃报备'],
|
||||
targets: [target(false, ['该通道报备明细已放弃报备'])],
|
||||
},
|
||||
{ id: 'signature:no-route', eligible: false, blockedReasons: ['当前应用没有启用且可路由的通道'], targets: [] },
|
||||
{ id: 'signature:generated', eligible: false, blockedReasons: ['同一资料版本已在批次 RB-1 生成'], targets: [target(false, ['同一资料版本已在批次 RB-1 生成'])] },
|
||||
{
|
||||
id: 'signature:generated',
|
||||
eligible: false,
|
||||
blockedReasons: ['同一资料版本已在批次 RB-1 生成'],
|
||||
targets: [target(false, ['同一资料版本已在批次 RB-1 生成'])],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -168,27 +193,27 @@ describe('report workbench pages', () => {
|
||||
expect(screen.getByText('全部放弃')).toHaveClass('ui-tag--neutral');
|
||||
expect(screen.getByText('无有效通道')).toHaveClass('ui-tag--neutral');
|
||||
expect(screen.getByText('V2已生成')).toHaveClass('ui-tag--success');
|
||||
screen.getAllByText('缺少必填字段:营业执照').forEach((message) =>
|
||||
expect(message).toHaveClass('status-danger'),
|
||||
);
|
||||
screen.getAllByText('缺少必填字段:营业执照').forEach((message) => expect(message).toHaveClass('status-danger'));
|
||||
});
|
||||
|
||||
it('keeps the report record list compact while retaining full details in the dialog', async () => {
|
||||
adminApi.listReportRecordsPage.mockResolvedValue({
|
||||
items: [{
|
||||
id: 'record-1',
|
||||
taskId: 'report-task-with-a-long-identifier-1',
|
||||
channelId: 'channel-1',
|
||||
action: 'manual_status_change',
|
||||
statusBefore: 'pending',
|
||||
statusAfter: 'approved',
|
||||
reason: '通道已确认报备通过',
|
||||
sourceEntry: 'report_task',
|
||||
createdAt: '2026-09-03 15:30:00',
|
||||
channel: { id: 'channel-1', name: '测试通道' },
|
||||
operator: { id: 'operator-1', username: 'operator', displayName: '运营一' },
|
||||
task: task('record-1'),
|
||||
}],
|
||||
items: [
|
||||
{
|
||||
id: 'record-1',
|
||||
taskId: 'report-task-with-a-long-identifier-1',
|
||||
channelId: 'channel-1',
|
||||
action: 'manual_status_change',
|
||||
statusBefore: 'pending',
|
||||
statusAfter: 'approved',
|
||||
reason: '通道已确认报备通过',
|
||||
sourceEntry: 'report_task',
|
||||
createdAt: '2026-09-03 15:30:00',
|
||||
channel: { id: 'channel-1', name: '测试通道' },
|
||||
operator: { id: 'operator-1', username: 'operator', displayName: '运营一' },
|
||||
task: task('record-1'),
|
||||
},
|
||||
],
|
||||
total: 1,
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
@@ -258,6 +283,7 @@ describe('report workbench pages', () => {
|
||||
});
|
||||
await user.click(await screen.findByRole('button', { name: '报备文件导出' }));
|
||||
expect(await screen.findByText('测试通道')).toBeVisible();
|
||||
expect(screen.getByRole('button', { name: '导出格式' })).toHaveTextContent('系统 Excel 文件');
|
||||
expect(screen.getByText(/1\.短信签名:/)).toBeVisible();
|
||||
expect(screen.getByRole('button', { name: '全部下载' })).toBeEnabled();
|
||||
await user.click(screen.getByRole('button', { name: '复制简报' }));
|
||||
|
||||
Reference in New Issue
Block a user