import { useEffect, useState, useCallback } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { api } from "../api/client"; import type { Creative, TemplateDetail } from "../types"; import AssetUploader from "../components/AssetUploader"; import ThemeEditor from "../components/ThemeEditor"; import PlatformSelector from "../components/PlatformSelector"; import BuildPanel from "../components/BuildPanel"; import BuildHistory from "../components/BuildHistory"; import PreviewPanel from "../components/PreviewPanel"; import styles from "./CreativeDetail.module.css"; export default function CreativeDetail() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const [creative, setCreative] = useState(null); const [template, setTemplate] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [selectedPlatforms, setSelectedPlatforms] = useState([ "google", "applovin", ]); const fetchCreative = useCallback(() => { if (!id) return; setError(""); api .getCreative(id) .then(async (res) => { setCreative(res.data); const tplRes = await api.getTemplate(res.data.templateId); setTemplate(tplRes.data); // 初始化平台选择 if (selectedPlatforms.length === 0 && tplRes.data.platforms?.available) { setSelectedPlatforms( tplRes.data.platforms?.defaults ?? tplRes.data.platforms.available.slice(0, 2) ); } }) .catch((e) => setError(e.message)) .finally(() => setLoading(false)); }, [id]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { fetchCreative(); }, [fetchCreative]); async function handleDelete() { if (!id || !confirm("确认删除此创意?所有素材和构建产物将被永久删除。")) return; try { await api.deleteCreative(id); navigate("/"); } catch (err: any) { setError(err.message); } } const statusLabel: Record = { draft: "草稿", assets_ready: "素材已就绪", building: "构建中", built: "已构建", failed: "失败", }; if (loading) return
加载中…
; if (error) return
加载失败:{error}
; if (!creative || !template) return
创意不存在
; return (
{/* 顶部栏 */}

{creative.name}

● {statusLabel[creative.status]}
{/* 工作区域 */}
{/* 左栏:素材上传 */}

素材

{/* 右栏:主题配置 */}

主题配置

{/* 预览 */} {/* 底部:构建 */}

构建

); }