104 lines
2.7 KiB
TypeScript
104 lines
2.7 KiB
TypeScript
// Author: fruit.com.cn
|
|
|
|
import request from '@/axios'
|
|
import type { PageResult } from './types'
|
|
|
|
export interface DramaClassificationItem {
|
|
id: string
|
|
name: string
|
|
code: string
|
|
nameEn: string
|
|
nameId: string
|
|
locales?: Record<string, string>
|
|
layoutType: 'GRID' | 'RANKING'
|
|
revision: string
|
|
sort: number
|
|
status: number
|
|
dramaCount: number
|
|
updatedAt?: string
|
|
}
|
|
|
|
export interface DramaClassificationSaveData {
|
|
name: string
|
|
locales: Record<string, string>
|
|
code?: string
|
|
layoutType?: 'GRID' | 'RANKING'
|
|
sort?: number
|
|
status?: number
|
|
}
|
|
|
|
export interface ClassificationDramaItem {
|
|
id: string
|
|
title: string
|
|
cover: string
|
|
status: string
|
|
totalEpisodes: number
|
|
sort: number
|
|
position?: number
|
|
updatedAt: string
|
|
}
|
|
|
|
export interface ClassificationDramaPageParams {
|
|
keyword?: string
|
|
pageIndex?: number
|
|
pageSize?: number
|
|
}
|
|
|
|
export const listClassificationsApi = () => {
|
|
return request.get<DramaClassificationItem[]>({ url: '/admin/drama-classifications' })
|
|
}
|
|
|
|
export const createClassificationApi = (data: DramaClassificationSaveData) => {
|
|
return request.post<string>({ url: '/admin/drama-classifications', data })
|
|
}
|
|
|
|
export const updateClassificationApi = (id: string, data: DramaClassificationSaveData) => {
|
|
return request.put<void>({ url: `/admin/drama-classifications/${id}`, data })
|
|
}
|
|
|
|
export const deleteClassificationApi = (id: string) => {
|
|
return request.delete<void>({ url: `/admin/drama-classifications/${id}` })
|
|
}
|
|
|
|
/** 分类下已关联的短剧 */
|
|
export const listClassificationDramasApi = (id: string, params: ClassificationDramaPageParams) => {
|
|
return request.get<PageResult<ClassificationDramaItem>>({
|
|
url: `/admin/drama-classifications/${id}/dramas`,
|
|
params
|
|
})
|
|
}
|
|
|
|
/** 尚未关联到该分类的短剧(添加弹窗用) */
|
|
export const listClassificationDramaCandidatesApi = (
|
|
id: string,
|
|
params: ClassificationDramaPageParams
|
|
) => {
|
|
return request.get<PageResult<ClassificationDramaItem>>({
|
|
url: `/admin/drama-classifications/${id}/dramas/candidates`,
|
|
params
|
|
})
|
|
}
|
|
|
|
/** 批量关联短剧,返回实际新增数量 */
|
|
export const bindClassificationDramasApi = (id: string, dramaIds: string[]) => {
|
|
return request.post<number>({
|
|
url: `/admin/drama-classifications/${id}/dramas`,
|
|
data: { dramaIds }
|
|
})
|
|
}
|
|
|
|
/** 从分类移除短剧 */
|
|
export const unbindClassificationDramaApi = (id: string, dramaId: string) => {
|
|
return request.delete<void>({
|
|
url: `/admin/drama-classifications/${id}/dramas/${dramaId}`
|
|
})
|
|
}
|
|
|
|
/** 原子保存推荐榜完整内容与顺序 */
|
|
export const saveRankingItemsApi = (id: string, dramaIds: string[]) => {
|
|
return request.put<void>({
|
|
url: `/admin/drama-classifications/${id}/ranking-items`,
|
|
data: { dramaIds }
|
|
})
|
|
}
|