Files
cunkebao_v3/Cunkebao/api/scenarios.ts

137 lines
2.9 KiB
TypeScript
Raw Normal View History

2025-04-07 10:17:19 +08:00
import { request } from "@/lib/api"
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
export interface ApiResponse<T = any> {
code: number;
msg: string;
data: T | null;
}
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
// 服务器返回的场景数据类型
export interface SceneItem {
id: number;
name: string;
image: string;
status: number;
createTime: number;
updateTime: number | null;
deleteTime: number | null;
}
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
// 服务器返回的场景列表响应类型
export interface ScenesResponse {
code: number;
msg: string;
data: {
list: SceneItem[];
total: number;
page: number;
limit: number;
};
}
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
// 前端使用的场景数据类型
export interface Channel {
id: string;
name: string;
icon: string;
stats: {
daily: number;
growth: number;
};
link?: string;
plans?: Plan[];
}
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
// 计划类型
export interface Plan {
id: string;
name: string;
isNew?: boolean;
status: "active" | "paused" | "completed";
acquisitionCount: number;
}
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
/**
*
*
* @param params
* @returns
*/
export const fetchScenes = async (params: {
page?: number;
limit?: number;
keyword?: string;
} = {}): Promise<ScenesResponse> => {
const { page = 1, limit = 10, keyword = "" } = params;
const queryParams = new URLSearchParams();
queryParams.append("page", String(page));
queryParams.append("limit", String(limit));
if (keyword) {
queryParams.append("keyword", keyword);
}
try {
return await request<ScenesResponse>(`/v1/plan/scenes?${queryParams.toString()}`);
} catch (error) {
console.error("Error fetching scenes:", error);
// 返回一个错误响应
return {
code: 500,
msg: "获取场景列表失败",
data: {
list: [],
total: 0,
page: 1,
limit: 10
}
};
}
};
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
/**
*
*
* @param item
* @returns
*/
export const transformSceneItem = (item: SceneItem): Channel => {
// 为每个场景生成随机的"今日"数据和"增长百分比"
const dailyCount = Math.floor(Math.random() * 100);
const growthPercent = Math.floor(Math.random() * 40) - 10; // -10% 到 30% 的随机值
// 默认图标(如果服务器没有返回)
const defaultIcon = "/assets/icons/poster-icon.svg";
return {
id: String(item.id),
name: item.name,
icon: item.image || defaultIcon,
stats: {
daily: dailyCount,
growth: growthPercent
}
};
};
2025-03-29 16:50:39 +08:00
2025-04-07 10:17:19 +08:00
/**
*
*
* @param id ID
* @returns
*/
export const fetchSceneDetail = async (id: string | number): Promise<ApiResponse<SceneItem>> => {
try {
return await request<ApiResponse<SceneItem>>(`/v1/plan/scenes/${id}`);
} catch (error) {
console.error("Error fetching scene detail:", error);
return {
code: 500,
msg: "获取场景详情失败",
data: null
};
}
};
2025-03-29 16:50:39 +08:00