Files
zhuzi-admin/src/apis/banners.ts
2025-09-15 23:55:27 +08:00

117 lines
2.4 KiB
TypeScript

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<BannerListResponse>('/admin/banners', {
params
});
};
/**
* 获取轮播图详情
*/
export const getBannerDetail = (id: string) => {
return request.Get<Banner>(`/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);
};