From 18f24d5f4b91a1b887fb5ee4b5f2ee4a95d445f3 Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 24 Dec 2025 17:21:48 -0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E4=BF=AE=E5=A4=8DAPI=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E6=A0=BC=E5=BC=8F=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复userTagService.getTags返回分页响应{items, total}的解析 - 修复audienceSegmentService.getSegments返回分页响应的解析 - 更新组件正确提取items数组 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../admin-web/src/app/(dashboard)/notifications/page.tsx | 4 ++-- .../AudienceSegmentsTab/AudienceSegmentsTab.tsx | 6 +++--- .../features/notifications/UserTagsTab/UserTagsTab.tsx | 4 ++-- frontend/admin-web/src/services/audienceSegmentService.ts | 8 +++++++- frontend/admin-web/src/services/userTagService.ts | 8 +++++++- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/frontend/admin-web/src/app/(dashboard)/notifications/page.tsx b/frontend/admin-web/src/app/(dashboard)/notifications/page.tsx index a410a235..de524ff5 100644 --- a/frontend/admin-web/src/app/(dashboard)/notifications/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/notifications/page.tsx @@ -108,8 +108,8 @@ export default function NotificationsPage() { // 加载可用标签 const loadTags = useCallback(async () => { try { - const tags = await userTagService.getTags({ isAdvertisable: true, isEnabled: true }); - setAvailableTags(tags); + const response = await userTagService.getTags({ isAdvertisable: true, isEnabled: true }); + setAvailableTags(response.items); } catch (err) { console.error('Failed to load tags:', err); } diff --git a/frontend/admin-web/src/components/features/notifications/AudienceSegmentsTab/AudienceSegmentsTab.tsx b/frontend/admin-web/src/components/features/notifications/AudienceSegmentsTab/AudienceSegmentsTab.tsx index c4377a1f..ba492195 100644 --- a/frontend/admin-web/src/components/features/notifications/AudienceSegmentsTab/AudienceSegmentsTab.tsx +++ b/frontend/admin-web/src/components/features/notifications/AudienceSegmentsTab/AudienceSegmentsTab.tsx @@ -53,12 +53,12 @@ export const AudienceSegmentsTab = () => { const loadData = useCallback(async () => { try { setLoading(true); - const [segmentsData, tagsData] = await Promise.all([ + const [segmentsResponse, tagsResponse] = await Promise.all([ audienceSegmentService.getSegments(), userTagService.getTags({ isAdvertisable: true }), ]); - setSegments(segmentsData); - setTags(tagsData); + setSegments(segmentsResponse.items); + setTags(tagsResponse.items); } catch (err) { toast.error((err as Error).message || '加载失败'); } finally { diff --git a/frontend/admin-web/src/components/features/notifications/UserTagsTab/UserTagsTab.tsx b/frontend/admin-web/src/components/features/notifications/UserTagsTab/UserTagsTab.tsx index e7f43412..7a97751e 100644 --- a/frontend/admin-web/src/components/features/notifications/UserTagsTab/UserTagsTab.tsx +++ b/frontend/admin-web/src/components/features/notifications/UserTagsTab/UserTagsTab.tsx @@ -55,12 +55,12 @@ export const UserTagsTab = () => { const loadData = useCallback(async () => { try { setLoading(true); - const [categoriesData, tagsData] = await Promise.all([ + const [categoriesData, tagsResponse] = await Promise.all([ userTagService.getCategories(), userTagService.getTags({ categoryId: activeCategory ?? undefined }), ]); setCategories(categoriesData); - setTags(tagsData); + setTags(tagsResponse.items); } catch (err) { toast.error((err as Error).message || '加载失败'); } finally { diff --git a/frontend/admin-web/src/services/audienceSegmentService.ts b/frontend/admin-web/src/services/audienceSegmentService.ts index 04d2bf88..c8a0f7b7 100644 --- a/frontend/admin-web/src/services/audienceSegmentService.ts +++ b/frontend/admin-web/src/services/audienceSegmentService.ts @@ -87,6 +87,12 @@ export interface ListSegmentsParams { offset?: number; } +/** 分页响应 */ +export interface PaginatedResponse { + items: T[]; + total: number; +} + // ===================== // 选项常量 // ===================== @@ -140,7 +146,7 @@ export const SEGMENT_FIELD_OPTIONS = [ export const audienceSegmentService = { /** 获取人群包列表 */ - async getSegments(params: ListSegmentsParams = {}): Promise { + async getSegments(params: ListSegmentsParams = {}): Promise> { return apiClient.get(API_ENDPOINTS.AUDIENCE_SEGMENTS.LIST, { params }); }, diff --git a/frontend/admin-web/src/services/userTagService.ts b/frontend/admin-web/src/services/userTagService.ts index 23aabba5..ed37bf56 100644 --- a/frontend/admin-web/src/services/userTagService.ts +++ b/frontend/admin-web/src/services/userTagService.ts @@ -116,6 +116,12 @@ export interface ListTagsParams { offset?: number; } +/** 分页响应 */ +export interface PaginatedResponse { + items: T[]; + total: number; +} + /** 分配标签请求 */ export interface AssignTagRequest { accountSequence: string; @@ -198,7 +204,7 @@ export const userTagService = { // ===================== /** 获取标签列表 */ - async getTags(params: ListTagsParams = {}): Promise { + async getTags(params: ListTagsParams = {}): Promise> { return apiClient.get(API_ENDPOINTS.USER_TAGS.LIST, { params }); },