diff --git a/src/api/admin/dramaClassification.ts b/src/api/admin/dramaClassification.ts new file mode 100644 index 0000000..50f6b9d --- /dev/null +++ b/src/api/admin/dramaClassification.ts @@ -0,0 +1,88 @@ +// Author: fruit.com.cn + +import request from '@/axios' +import type { PageResult } from './types' + +export interface DramaClassificationItem { + id: number + name: string + sort: number + status: number + dramaCount: number + updatedAt?: string +} + +export interface DramaClassificationSaveData { + name: string + sort?: number + status?: number +} + +export interface ClassificationDramaItem { + id: number + title: string + cover: string + status: string + totalEpisodes: number + sort: number + updatedAt: string +} + +export interface ClassificationDramaPageParams { + keyword?: string + pageIndex?: number + pageSize?: number +} + +export const listClassificationsApi = () => { + return request.get({ url: '/admin/drama-classifications' }) +} + +export const createClassificationApi = (data: DramaClassificationSaveData) => { + return request.post({ url: '/admin/drama-classifications', data }) +} + +export const updateClassificationApi = (id: number, data: DramaClassificationSaveData) => { + return request.put({ url: `/admin/drama-classifications/${id}`, data }) +} + +export const deleteClassificationApi = (id: number) => { + return request.delete({ url: `/admin/drama-classifications/${id}` }) +} + +/** 分类下已关联的短剧 */ +export const listClassificationDramasApi = ( + id: number, + params: ClassificationDramaPageParams +) => { + return request.get>({ + url: `/admin/drama-classifications/${id}/dramas`, + params + }) +} + +/** 尚未关联到该分类的短剧(添加弹窗用) */ +export const listClassificationDramaCandidatesApi = ( + id: number, + params: ClassificationDramaPageParams +) => { + return request.get>({ + url: `/admin/drama-classifications/${id}/dramas/candidates`, + params + }) +} + +/** 批量关联短剧,返回实际新增数量 */ +export const bindClassificationDramasApi = (id: number, dramaIds: number[]) => { + return request.post({ + url: `/admin/drama-classifications/${id}/dramas`, + data: { dramaIds } + }) +} + +/** 从分类移除短剧 */ +export const unbindClassificationDramaApi = (id: number, dramaId: number) => { + return request.delete({ + url: `/admin/drama-classifications/${id}/dramas/${dramaId}` + }) +} diff --git a/src/api/admin/dramaPlaylistCategory.ts b/src/api/admin/dramaPlaylistCategory.ts new file mode 100644 index 0000000..45c87de --- /dev/null +++ b/src/api/admin/dramaPlaylistCategory.ts @@ -0,0 +1,80 @@ +// Author: fruit.com.cn + +import request from '@/axios' +import type { PageResult } from './types' +import type { ClassificationDramaItem } from './dramaClassification' + +export interface DramaPlaylistCategoryItem { + id: number + name: string + description: string + sort: number + status: number + dramaCount: number +} + +export interface DramaPlaylistCategorySaveData { + name: string + description?: string + sort?: number + status?: number +} + +export interface PlaylistCategoryDramaPageParams { + keyword?: string + pageIndex?: number + pageSize?: number +} + +export const listPlaylistCategoriesApi = () => { + return request.get({ url: '/admin/drama-playlist-categories' }) +} + +export const createPlaylistCategoryApi = (data: DramaPlaylistCategorySaveData) => { + return request.post({ url: '/admin/drama-playlist-categories', data }) +} + +export const updatePlaylistCategoryApi = (id: number, data: DramaPlaylistCategorySaveData) => { + return request.put({ url: `/admin/drama-playlist-categories/${id}`, data }) +} + +export const deletePlaylistCategoryApi = (id: number) => { + return request.delete({ url: `/admin/drama-playlist-categories/${id}` }) +} + +/** 分类下已关联的短剧 */ +export const listPlaylistCategoryDramasApi = ( + id: number, + params: PlaylistCategoryDramaPageParams +) => { + return request.get>({ + url: `/admin/drama-playlist-categories/${id}/dramas`, + params + }) +} + +/** 尚未关联到该分类的短剧(选择弹窗用) */ +export const listPlaylistCategoryDramaCandidatesApi = ( + id: number, + params: PlaylistCategoryDramaPageParams +) => { + return request.get>({ + url: `/admin/drama-playlist-categories/${id}/dramas/candidates`, + params + }) +} + +/** 批量关联短剧,返回实际新增数量 */ +export const bindPlaylistCategoryDramasApi = (id: number, dramaIds: number[]) => { + return request.post({ + url: `/admin/drama-playlist-categories/${id}/dramas`, + data: { dramaIds } + }) +} + +/** 从分类移除短剧 */ +export const unbindPlaylistCategoryDramaApi = (id: number, dramaId: number) => { + return request.delete({ + url: `/admin/drama-playlist-categories/${id}/dramas/${dramaId}` + }) +} diff --git a/src/views/contentManagement/CategoryDramaView.vue b/src/views/contentManagement/CategoryDramaView.vue new file mode 100644 index 0000000..05d7968 --- /dev/null +++ b/src/views/contentManagement/CategoryDramaView.vue @@ -0,0 +1,601 @@ + + + + + + + + diff --git a/src/views/contentManagement/DramaPlaylistView.vue b/src/views/contentManagement/DramaPlaylistView.vue new file mode 100644 index 0000000..2bf1fb7 --- /dev/null +++ b/src/views/contentManagement/DramaPlaylistView.vue @@ -0,0 +1,618 @@ + + + + + + + +