diff --git a/WonderQ-Admin-UI-Vue/src/api/client-operations.test.ts b/WonderQ-Admin-UI-Vue/src/api/client-operations.test.ts index 91bd166..3bd184c 100644 --- a/WonderQ-Admin-UI-Vue/src/api/client-operations.test.ts +++ b/WonderQ-Admin-UI-Vue/src/api/client-operations.test.ts @@ -37,7 +37,7 @@ describe("operations client", () => { ]); }); - it("supports filtered leads, media listing and status contracts", async () => { + it("supports filtered leads, paginated media listing and status contracts", async () => { const fetchMock = vi.fn() .mockResolvedValueOnce(jsonResponse(200, { items: [] })) .mockResolvedValueOnce(jsonResponse(200, { id: "lead-1", status: "contacted" })) @@ -46,12 +46,12 @@ describe("operations client", () => { await getLeads({ leadType: "vehicle", status: "new", keyword: "贵州", take: 50 }); await updateLeadStatus("lead-1", "contacted"); - await getMediaAssets(); + await getMediaAssets({ pageNum: 2, pageSize: 20 }); expect(fetchMock.mock.calls.map(([url, options]) => [url, options?.method])).toEqual([ ["/api/admin/leads?leadType=vehicle&status=new&keyword=%E8%B4%B5%E5%B7%9E&take=50", undefined], ["/api/admin/leads/lead-1/status", "PATCH"], - ["/api/admin/media-assets", undefined], + ["/api/admin/media-assets?pageNum=2&pageSize=20", undefined], ]); }); }); diff --git a/WonderQ-Admin-UI-Vue/src/api/client.ts b/WonderQ-Admin-UI-Vue/src/api/client.ts index 6f8910f..5a7279b 100644 --- a/WonderQ-Admin-UI-Vue/src/api/client.ts +++ b/WonderQ-Admin-UI-Vue/src/api/client.ts @@ -24,6 +24,7 @@ import type { LeadStatus, LeadType, MediaAsset, + PaginatedResult, SiteConfig, SiteConfigItem, SiteItemPatch, @@ -242,7 +243,13 @@ export const updateLeadStatus = (leadId: string, status: LeadStatus) => method: "PATCH", body: JSON.stringify({ status }), }); -export const getMediaAssets = () => request<{ items: MediaAsset[] }>("/api/admin/media-assets"); +export const getMediaAssets = (params: { pageNum?: number; pageSize?: number } = {}) => { + const query = new URLSearchParams({ + pageNum: String(params.pageNum ?? 1), + pageSize: String(params.pageSize ?? 20), + }); + return request>(`/api/admin/media-assets?${query.toString()}`); +}; export const getSystemResource = (resource: string) => request<{ items: unknown[] }>(`/api/admin/system/${resource}`); export const getSystemUsers = () => request<{ items: SystemUserItem[] }>("/api/admin/system/users"); export const getSystemRoles = () => request<{ items: SystemRoleItem[] }>("/api/admin/system/roles"); diff --git a/WonderQ-Admin-UI-Vue/src/components/layout/SidebarItem.test.ts b/WonderQ-Admin-UI-Vue/src/components/layout/SidebarItem.test.ts new file mode 100644 index 0000000..b178878 --- /dev/null +++ b/WonderQ-Admin-UI-Vue/src/components/layout/SidebarItem.test.ts @@ -0,0 +1,17 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const source = readFileSync(new URL("./SidebarItem.vue", import.meta.url), "utf8"); + +describe("侧栏菜单图标容器", () => { + it("避免折叠菜单把 Tooltip 触发器误判为隐藏文本", () => { + expect(source).toContain('