50 lines
1.6 KiB
TypeScript
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 } })
|
|
}
|