diff --git a/apps/admin-web/src/api/adminApiClient.ts b/apps/admin-web/src/api/adminApiClient.ts index 665a2aee4..ff5306b42 100644 --- a/apps/admin-web/src/api/adminApiClient.ts +++ b/apps/admin-web/src/api/adminApiClient.ts @@ -599,7 +599,6 @@ function buildEditorAssetListQuery(query: AdminEditorAssetListQuery) { const params = new URLSearchParams(); appendQueryParam(params, 'cursor', query.cursor); appendQueryParam(params, 'ownerUserId', query.ownerUserId); - appendQueryParam(params, 'assetKind', query.assetKind); appendQueryParam(params, 'keyword', query.keyword); appendQueryParam(params, 'createdAfter', query.createdAfter); appendQueryParam(params, 'createdBefore', query.createdBefore); @@ -614,7 +613,6 @@ function buildEditorShowcaseListQuery(query: AdminEditorShowcaseListQuery) { const params = new URLSearchParams(); appendQueryParam(params, 'cursor', query.cursor); appendQueryParam(params, 'ownerUserId', query.ownerUserId); - appendQueryParam(params, 'assetKind', query.assetKind); appendQueryParam(params, 'reviewStatus', query.reviewStatus); appendQueryParam(params, 'submittedAfter', query.submittedAfter); appendQueryParam(params, 'submittedBefore', query.submittedBefore); diff --git a/apps/admin-web/src/api/adminApiTypes.ts b/apps/admin-web/src/api/adminApiTypes.ts index 64068ff0e..f63ac4588 100644 --- a/apps/admin-web/src/api/adminApiTypes.ts +++ b/apps/admin-web/src/api/adminApiTypes.ts @@ -349,7 +349,6 @@ export interface AdminUpdateWorkVisibilityResponse { export interface AdminEditorAssetListQuery { cursor?: string | null; ownerUserId?: string | null; - assetKind?: string | null; keyword?: string | null; createdAfter?: string | null; createdBefore?: string | null; @@ -391,7 +390,6 @@ export interface AdminEditorAssetListResponse { export interface AdminEditorShowcaseListQuery { cursor?: string | null; ownerUserId?: string | null; - assetKind?: string | null; reviewStatus?: string | null; submittedAfter?: string | null; submittedBefore?: string | null; @@ -431,6 +429,7 @@ export interface AdminEditorShowcaseAssetPayload { approvedAt?: string | null; rejectedAt?: string | null; updatedAt: string; + showcaseCategory?: string | null; } export interface AdminEditorShowcaseListResponse { @@ -447,6 +446,7 @@ export interface AdminEditorShowcaseReviewRequest { export interface AdminEditorShowcaseDisplayRequest { showcaseId: string; displayEnabled: boolean; + showcaseCategory?: string | null; } export interface AdminEditorShowcaseAssetResponse { diff --git a/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx b/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx index 948251eb6..9c7612f3d 100644 --- a/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx +++ b/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx @@ -71,7 +71,7 @@ test('后台素材查询展示作者昵称和陶泥号', async () => { expect(screen.queryByText('user-1')).toBeNull(); }); -test('后台素材查询按用户、分类和时间调用查询接口', async () => { +test('后台素材查询按用户、搜索和时间调用查询接口', async () => { render( { expect(listAdminEditorAssets).toHaveBeenLastCalledWith('admin-token', { ownerUserId: 'user-1', - assetKind: 'character', keyword: '陶泥角色', createdAfter: '2026-07-01T00:00:00+08:00', createdBefore: '2026-07-04T23:59:59.999+08:00', @@ -109,6 +105,19 @@ test('后台素材查询按用户、分类和时间调用查询接口', async () }); }); +test('后台素材查询不展示分类筛选和分类列', async () => { + render( + , + ); + + expect(await screen.findByText('角色形象 1')).toBeTruthy(); + expect(screen.queryByLabelText('分类')).toBeNull(); + expect(screen.queryByRole('columnheader', {name: '分类'})).toBeNull(); +}); + test('后台素材查询缩略图使用 objectKey 换签后展示', async () => { render( }); }); +test('后台素材查询格式化微秒时间文本', async () => { + vi.mocked(listAdminEditorAssets).mockResolvedValueOnce({ + entries: [ + { + ...generatedAsset, + createdAt: '1783231493.573727Z', + updatedAt: '1783231493.573727Z', + }, + ], + nextCursor: null, + }); + + render( + , + ); + + expect(await screen.findByText('角色形象 1')).toBeTruthy(); + expect(screen.queryByText('1783231493.573727Z')).toBeNull(); +}); + test('后台素材查询可查看素材详情', async () => { render( ([]); const [keyword, setKeyword] = useState(''); const [ownerUserId, setOwnerUserId] = useState(''); - const [assetKind, setAssetKind] = useState(''); const [createdAfter, setCreatedAfter] = useState(''); const [createdBefore, setCreatedBefore] = useState(''); const [nextCursor, setNextCursor] = useState(null); @@ -54,7 +43,7 @@ export function AdminEditorAssetQueryPage({ useEffect(() => { void refreshPage(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [token, ownerUserId, assetKind, keyword, createdAfter, createdBefore]); + }, [token, ownerUserId, keyword, createdAfter, createdBefore]); async function refreshPage() { setIsLoading(true); @@ -93,7 +82,6 @@ export function AdminEditorAssetQueryPage({ function buildListQuery(): AdminEditorAssetListQuery { return { ownerUserId: ownerUserId || null, - assetKind: assetKind || null, keyword: keyword.trim() || null, createdAfter: dateInputToStartRfc3339(createdAfter), createdBefore: dateInputToEndRfc3339(createdBefore), @@ -149,19 +137,6 @@ export function AdminEditorAssetQueryPage({ onChange={(event) => setOwnerUserId(event.target.value)} /> -