136 lines
3.4 KiB
TypeScript
136 lines
3.4 KiB
TypeScript
|
|
import { http } from './index';
|
||
|
|
|
||
|
|
// ==================== 类型定义 ====================
|
||
|
|
|
||
|
|
export type LibraryType = 'PICTURE_BOOK' | 'MATERIAL' | 'TEMPLATE';
|
||
|
|
export type FileType = 'IMAGE' | 'PDF' | 'VIDEO' | 'AUDIO' | 'PPT' | 'OTHER';
|
||
|
|
|
||
|
|
export interface ResourceLibrary {
|
||
|
|
id: number;
|
||
|
|
name: string;
|
||
|
|
libraryType: LibraryType;
|
||
|
|
description?: string;
|
||
|
|
coverImage?: string;
|
||
|
|
createdBy: number;
|
||
|
|
status: string;
|
||
|
|
sortOrder: number;
|
||
|
|
itemCount: number;
|
||
|
|
createdAt: string;
|
||
|
|
updatedAt: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ResourceItem {
|
||
|
|
id: number;
|
||
|
|
libraryId: number;
|
||
|
|
title: string;
|
||
|
|
description?: string;
|
||
|
|
fileType: FileType;
|
||
|
|
filePath: string;
|
||
|
|
fileSize?: number;
|
||
|
|
tags: string[];
|
||
|
|
sortOrder: number;
|
||
|
|
createdAt: string;
|
||
|
|
library?: {
|
||
|
|
id: number;
|
||
|
|
name: string;
|
||
|
|
libraryType: LibraryType;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface CreateLibraryDto {
|
||
|
|
name: string;
|
||
|
|
libraryType: LibraryType;
|
||
|
|
description?: string;
|
||
|
|
coverImage?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UpdateLibraryDto {
|
||
|
|
name?: string;
|
||
|
|
description?: string;
|
||
|
|
coverImage?: string;
|
||
|
|
sortOrder?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface CreateResourceItemDto {
|
||
|
|
libraryId: number;
|
||
|
|
title: string;
|
||
|
|
description?: string;
|
||
|
|
fileType: FileType;
|
||
|
|
filePath: string;
|
||
|
|
fileSize?: number;
|
||
|
|
tags?: string[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UpdateResourceItemDto {
|
||
|
|
title?: string;
|
||
|
|
description?: string;
|
||
|
|
tags?: string[];
|
||
|
|
sortOrder?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ResourceStats {
|
||
|
|
totalLibraries: number;
|
||
|
|
totalItems: number;
|
||
|
|
itemsByType: Record<FileType, number>;
|
||
|
|
itemsByLibraryType: Record<LibraryType, number>;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================== 资源库管理 ====================
|
||
|
|
|
||
|
|
export const getLibraries = (params?: {
|
||
|
|
page?: number;
|
||
|
|
pageSize?: number;
|
||
|
|
libraryType?: LibraryType;
|
||
|
|
keyword?: string;
|
||
|
|
}) =>
|
||
|
|
http.get<{ items: ResourceLibrary[]; total: number; page: number; pageSize: number }>(
|
||
|
|
'/admin/resources/libraries',
|
||
|
|
{ params }
|
||
|
|
);
|
||
|
|
|
||
|
|
export const getLibrary = (id: number) =>
|
||
|
|
http.get<ResourceLibrary & { items: ResourceItem[] }>(`/admin/resources/libraries/${id}`);
|
||
|
|
|
||
|
|
export const createLibrary = (data: CreateLibraryDto) =>
|
||
|
|
http.post<ResourceLibrary>('/admin/resources/libraries', data);
|
||
|
|
|
||
|
|
export const updateLibrary = (id: number, data: UpdateLibraryDto) =>
|
||
|
|
http.put<ResourceLibrary>(`/admin/resources/libraries/${id}`, data);
|
||
|
|
|
||
|
|
export const deleteLibrary = (id: number) =>
|
||
|
|
http.delete(`/admin/resources/libraries/${id}`);
|
||
|
|
|
||
|
|
// ==================== 资源项目管理 ====================
|
||
|
|
|
||
|
|
export const getResourceItems = (params?: {
|
||
|
|
page?: number;
|
||
|
|
pageSize?: number;
|
||
|
|
libraryId?: number;
|
||
|
|
fileType?: FileType;
|
||
|
|
keyword?: string;
|
||
|
|
}) =>
|
||
|
|
http.get<{ items: ResourceItem[]; total: number; page: number; pageSize: number }>(
|
||
|
|
'/admin/resources/items',
|
||
|
|
{ params }
|
||
|
|
);
|
||
|
|
|
||
|
|
export const getResourceItem = (id: number) =>
|
||
|
|
http.get<ResourceItem>(`/admin/resources/items/${id}`);
|
||
|
|
|
||
|
|
export const createResourceItem = (data: CreateResourceItemDto) =>
|
||
|
|
http.post<ResourceItem>('/admin/resources/items', data);
|
||
|
|
|
||
|
|
export const updateResourceItem = (id: number, data: UpdateResourceItemDto) =>
|
||
|
|
http.put<ResourceItem>(`/admin/resources/items/${id}`, data);
|
||
|
|
|
||
|
|
export const deleteResourceItem = (id: number) =>
|
||
|
|
http.delete(`/admin/resources/items/${id}`);
|
||
|
|
|
||
|
|
export const batchDeleteResourceItems = (ids: number[]) =>
|
||
|
|
http.post<{ message: string }>('/admin/resources/items/batch-delete', { ids });
|
||
|
|
|
||
|
|
// ==================== 统计数据 ====================
|
||
|
|
|
||
|
|
export const getResourceStats = () =>
|
||
|
|
http.get<ResourceStats>('/admin/resources/stats');
|