From 9ce014e7b33bb8d412ee87249f4046993100f533 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 2 Nov 2026 14:47:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(classification):=20=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A6=9C=E5=8D=95=E5=B8=83=E5=B1=80=E4=B8=8E?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin/dramaClassification.ts | 32 ++- .../contentManagement/CategoryDramaView.vue | 185 ++++++++++++++++-- .../ClassificationDramaDialogs.vue | 17 ++ .../ClassificationSideList.vue | 3 + 4 files changed, 217 insertions(+), 20 deletions(-) diff --git a/src/api/admin/dramaClassification.ts b/src/api/admin/dramaClassification.ts index 15769a1..e66e789 100644 --- a/src/api/admin/dramaClassification.ts +++ b/src/api/admin/dramaClassification.ts @@ -4,11 +4,14 @@ import request from '@/axios' import type { PageResult } from './types' export interface DramaClassificationItem { - id: number + id: string name: string + code: string nameEn: string nameId: string locales?: Record + layoutType: 'GRID' | 'RANKING' + revision: string sort: number status: number dramaCount: number @@ -18,17 +21,20 @@ export interface DramaClassificationItem { export interface DramaClassificationSaveData { name: string locales: Record + code?: string + layoutType?: 'GRID' | 'RANKING' sort?: number status?: number } export interface ClassificationDramaItem { - id: number + id: string title: string cover: string status: string totalEpisodes: number sort: number + position?: number updatedAt: string } @@ -43,19 +49,19 @@ export const listClassificationsApi = () => { } export const createClassificationApi = (data: DramaClassificationSaveData) => { - return request.post({ url: '/admin/drama-classifications', data }) + return request.post({ url: '/admin/drama-classifications', data }) } -export const updateClassificationApi = (id: number, data: DramaClassificationSaveData) => { +export const updateClassificationApi = (id: string, data: DramaClassificationSaveData) => { return request.put({ url: `/admin/drama-classifications/${id}`, data }) } -export const deleteClassificationApi = (id: number) => { +export const deleteClassificationApi = (id: string) => { return request.delete({ url: `/admin/drama-classifications/${id}` }) } /** 分类下已关联的短剧 */ -export const listClassificationDramasApi = (id: number, params: ClassificationDramaPageParams) => { +export const listClassificationDramasApi = (id: string, params: ClassificationDramaPageParams) => { return request.get>({ url: `/admin/drama-classifications/${id}/dramas`, params @@ -64,7 +70,7 @@ export const listClassificationDramasApi = (id: number, params: ClassificationDr /** 尚未关联到该分类的短剧(添加弹窗用) */ export const listClassificationDramaCandidatesApi = ( - id: number, + id: string, params: ClassificationDramaPageParams ) => { return request.get>({ @@ -74,7 +80,7 @@ export const listClassificationDramaCandidatesApi = ( } /** 批量关联短剧,返回实际新增数量 */ -export const bindClassificationDramasApi = (id: number, dramaIds: number[]) => { +export const bindClassificationDramasApi = (id: string, dramaIds: string[]) => { return request.post({ url: `/admin/drama-classifications/${id}/dramas`, data: { dramaIds } @@ -82,8 +88,16 @@ export const bindClassificationDramasApi = (id: number, dramaIds: number[]) => { } /** 从分类移除短剧 */ -export const unbindClassificationDramaApi = (id: number, dramaId: number) => { +export const unbindClassificationDramaApi = (id: string, dramaId: string) => { return request.delete({ url: `/admin/drama-classifications/${id}/dramas/${dramaId}` }) } + +/** 原子保存推荐榜完整内容与顺序 */ +export const saveRankingItemsApi = (id: string, dramaIds: string[]) => { + return request.put({ + url: `/admin/drama-classifications/${id}/ranking-items`, + data: { dramaIds } + }) +} diff --git a/src/views/contentManagement/CategoryDramaView.vue b/src/views/contentManagement/CategoryDramaView.vue index 343c8af..ae5c65b 100644 --- a/src/views/contentManagement/CategoryDramaView.vue +++ b/src/views/contentManagement/CategoryDramaView.vue @@ -4,6 +4,7 @@