build: 引入tailwindcss并迁移原有样式到原子类
1. 新增postcss、autoprefixer、tailwindcss依赖并初始化配置 2. 移除全局及页面级CSS文件,将样式替换为tailwind原子类 3. 重构API调用逻辑,拆分接口请求函数 4. 统一项目样式规范,优化布局与组件样式
This commit is contained in:
@@ -18,8 +18,16 @@ import {
|
||||
Tag,
|
||||
} from "@arco-design/web-react";
|
||||
import { IconArrowLeft, IconPlus, IconRefresh } from "@arco-design/web-react/icon";
|
||||
import type { ApiResponse, Drama, Episode, UploadTask } from "../api/types";
|
||||
import { api } from "../api/client";
|
||||
import type { Drama, Episode } from "../api/types";
|
||||
import {
|
||||
configureDramaEpisodes,
|
||||
createDrama as createDramaApi,
|
||||
getDrama,
|
||||
getDramaEpisodes,
|
||||
updateDrama,
|
||||
updateEpisode,
|
||||
} from "../api/dramas";
|
||||
import { completeUploadTask, createUploadTask, syncReviewStatus } from "../api/media";
|
||||
import { usePageData } from "../hooks/usePageData";
|
||||
|
||||
const { Row, Col } = Grid;
|
||||
@@ -65,7 +73,7 @@ function DramaListPage() {
|
||||
const createDrama = async (values: Partial<Drama>) => {
|
||||
setCreating(true);
|
||||
try {
|
||||
await api.post("/api/admin/v1/dramas", values);
|
||||
await createDramaApi(values);
|
||||
Message.success("短剧创建成功");
|
||||
setVisible(false);
|
||||
await reload();
|
||||
@@ -218,13 +226,10 @@ function DramaDetailPage({ dramaId }: { dramaId: number }) {
|
||||
const loadDetail = async () => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const [dramaResponse, episodeResponse] = await Promise.all([
|
||||
api.get<ApiResponse<Drama>>(`/api/admin/v1/dramas/${dramaId}`),
|
||||
api.get<ApiResponse<{ list: Episode[] }>>(`/api/admin/v1/dramas/${dramaId}/episodes?pageSize=200`),
|
||||
]);
|
||||
setDrama(dramaResponse.data.data);
|
||||
setEpisodeCount(dramaResponse.data.data.totalEpisodes || 1);
|
||||
setEpisodes(episodeResponse.data.data.list);
|
||||
const [dramaData, episodeList] = await Promise.all([getDrama(dramaId), getDramaEpisodes(dramaId)]);
|
||||
setDrama(dramaData);
|
||||
setEpisodeCount(dramaData.totalEpisodes || 1);
|
||||
setEpisodes(episodeList);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -235,15 +240,13 @@ function DramaDetailPage({ dramaId }: { dramaId: number }) {
|
||||
}, [dramaId]);
|
||||
|
||||
const configureEpisodes = async () => {
|
||||
await api.post(`/api/admin/v1/dramas/${dramaId}/episodes/batch`, {
|
||||
episodeCount,
|
||||
});
|
||||
await configureDramaEpisodes(dramaId, episodeCount);
|
||||
Message.success("剧集数量已更新");
|
||||
await loadDetail();
|
||||
};
|
||||
|
||||
const updateDramaStatus = async (status: string) => {
|
||||
await api.patch(`/api/admin/v1/dramas/${dramaId}`, { status });
|
||||
await updateDrama(dramaId, { status });
|
||||
Message.success("短剧状态已更新");
|
||||
await loadDetail();
|
||||
};
|
||||
@@ -251,14 +254,14 @@ function DramaDetailPage({ dramaId }: { dramaId: number }) {
|
||||
const uploadEpisodeVideo = async (episode: Episode, file: File) => {
|
||||
setUploadingEpisodeId(episode.id);
|
||||
try {
|
||||
const task = await api.post<ApiResponse<UploadTask>>("/api/admin/v1/media/upload-tasks", {
|
||||
const task = await createUploadTask({
|
||||
episodeId: episode.id,
|
||||
fileName: file.name,
|
||||
contentType: file.type || "video/mp4",
|
||||
fileSize: file.size,
|
||||
});
|
||||
await api.patch(`/api/admin/v1/media/upload-tasks/${task.data.data.jobId}/complete`, {});
|
||||
await api.post("/api/admin/v1/media/review-status/sync", {});
|
||||
await completeUploadTask(task.jobId);
|
||||
await syncReviewStatus();
|
||||
Message.success("视频上传并审核通过");
|
||||
await loadDetail();
|
||||
} finally {
|
||||
@@ -267,7 +270,7 @@ function DramaDetailPage({ dramaId }: { dramaId: number }) {
|
||||
};
|
||||
|
||||
const publishEpisode = async (episode: Episode) => {
|
||||
await api.patch(`/api/admin/v1/episodes/${episode.id}`, {
|
||||
await updateEpisode(episode.id, {
|
||||
publishStatus: "published",
|
||||
status: "published",
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user