fix(frontend): 修复API响应格式解析问题
- 修复userTagService.getTags返回分页响应{items, total}的解析
- 修复audienceSegmentService.getSegments返回分页响应的解析
- 更新组件正确提取items数组
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
e6415f9217
commit
18f24d5f4b
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -87,6 +87,12 @@ export interface ListSegmentsParams {
|
|||
offset?: number;
|
||||
}
|
||||
|
||||
/** 分页响应 */
|
||||
export interface PaginatedResponse<T> {
|
||||
items: T[];
|
||||
total: number;
|
||||
}
|
||||
|
||||
// =====================
|
||||
// 选项常量
|
||||
// =====================
|
||||
|
|
@ -140,7 +146,7 @@ export const SEGMENT_FIELD_OPTIONS = [
|
|||
|
||||
export const audienceSegmentService = {
|
||||
/** 获取人群包列表 */
|
||||
async getSegments(params: ListSegmentsParams = {}): Promise<AudienceSegment[]> {
|
||||
async getSegments(params: ListSegmentsParams = {}): Promise<PaginatedResponse<AudienceSegment>> {
|
||||
return apiClient.get(API_ENDPOINTS.AUDIENCE_SEGMENTS.LIST, { params });
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -116,6 +116,12 @@ export interface ListTagsParams {
|
|||
offset?: number;
|
||||
}
|
||||
|
||||
/** 分页响应 */
|
||||
export interface PaginatedResponse<T> {
|
||||
items: T[];
|
||||
total: number;
|
||||
}
|
||||
|
||||
/** 分配标签请求 */
|
||||
export interface AssignTagRequest {
|
||||
accountSequence: string;
|
||||
|
|
@ -198,7 +204,7 @@ export const userTagService = {
|
|||
// =====================
|
||||
|
||||
/** 获取标签列表 */
|
||||
async getTags(params: ListTagsParams = {}): Promise<UserTag[]> {
|
||||
async getTags(params: ListTagsParams = {}): Promise<PaginatedResponse<UserTag>> {
|
||||
return apiClient.get(API_ENDPOINTS.USER_TAGS.LIST, { params });
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue