import { request } from "@/utils/request"; /** * 轮播图链接类型 */ export type BannerLinkType = 'url' | 'article'; /** * 轮播图数据 */ export interface Banner { id: string; title: string; image: string; linkType: BannerLinkType; linkUrl?: string; articleContent?: string; sort: number; status: 'enabled' | 'disabled'; createTime: string; updateTime: string; } /** * 轮播图列表查询参数 */ export interface BannerQueryParams { page?: number; pageSize?: number; status?: 'enabled' | 'disabled'; keyword?: string; } /** * 轮播图列表响应 */ export interface BannerListResponse { list: Banner[]; total: number; page: number; pageSize: number; } /** * 创建轮播图参数 */ export interface CreateBannerParams { title: string; image: string; linkType: BannerLinkType; linkUrl?: string; articleContent?: string; sort: number; status: 'enabled' | 'disabled'; } /** * 获取轮播图列表 */ export const getBannerList = (params?: BannerQueryParams) => { return request.Get('/admin/banners', { params }); }; /** * 获取轮播图详情 */ export const getBannerDetail = (id: string) => { return request.Get(`/admin/banners/${id}`); }; /** * 创建轮播图 */ export const createBanner = (params: CreateBannerParams) => { return request.Post<{ message: string; id: string }>('/admin/banners', params); }; /** * 更新轮播图 */ export const updateBanner = (id: string, params: CreateBannerParams) => { return request.Put<{ message: string }>(`/admin/banners/${id}`, params); }; /** * 删除轮播图 */ export const deleteBanner = (id: string) => { return request.Delete<{ message: string }>(`/admin/banners/${id}`); }; /** * 更新轮播图状态 */ export const updateBannerStatus = (id: string, status: 'enabled' | 'disabled') => { return request.Put<{ message: string }>(`/admin/banners/${id}/status`, { status }); }; /** * 更新轮播图排序 */ export const updateBannerSort = (id: string, sort: number) => { return request.Put<{ message: string }>(`/admin/banners/${id}/sort`, { sort }); }; /** * 上传轮播图图片 */ export const uploadBannerImage = (file: File) => { const formData = new FormData(); formData.append('image', file); return request.Post<{ url: string }>('/admin/upload/banner', formData); };