Files
ReelShortWeb/src/api/admin/episode.ts
T

50 lines
1.6 KiB
TypeScript

// Author: fruit.com.cn
import request from '@/axios'
import type { EpisodeItem, EpisodeSaveData, PageResult } from './types'
export interface EpisodePageParams {
dramaId: number | string
status?: string
pageIndex?: number
pageSize?: number
}
/**
* 解包剧集列表分页。
* 契约(OpenAPI PageResultEpisodeRespVO):data = { total, list }。
* 兼容误把 data 当数组的旧调用,避免列表空白。
*/
export function parseEpisodePage(payload: unknown): PageResult<EpisodeItem> {
if (Array.isArray(payload)) {
return { total: payload.length, list: payload as EpisodeItem[] }
}
if (payload && typeof payload === 'object') {
const page = payload as { total?: unknown; list?: unknown }
const list = Array.isArray(page.list) ? (page.list as EpisodeItem[]) : []
const total = Number(page.total)
return { total: Number.isFinite(total) ? total : list.length, list }
}
return { total: 0, list: [] }
}
export const listEpisodesApi = (params: EpisodePageParams) => {
return request.get<PageResult<EpisodeItem>>({ url: '/admin/episodes', params })
}
export const createEpisodeApi = (data: EpisodeSaveData) => {
return request.post<number>({ url: '/admin/episodes', data })
}
export const updateEpisodeApi = (id: number, data: EpisodeSaveData) => {
return request.put<void>({ url: `/admin/episodes/${id}`, data })
}
export const deleteEpisodeApi = (id: number) => {
return request.delete<void>({ url: `/admin/episodes/${id}` })
}
export const sortEpisodesApi = (ids: number[]) => {
return request.put<void>({ url: '/admin/episodes/sort', data: { ids } })
}