import React from "react" import { PROGRESS_STEPS } from "../constants/cloneModal" import type { ProgressStep } from "../types/cloneModal" import type { ModalPhase } from "../types/cloneModal" interface ProgressViewProps { phase: ModalPhase } const getProgressIndex = (phase: ModalPhase): number => { switch (phase) { case "uploading": return 0 case "cloning": return 1 case "done": return 2 default: return -1 } } const ProgressView: React.FC = ({ phase }) => { const progressIndex = getProgressIndex(phase) const isDone = phase === "done" return (
{/* 步骤指示器 */}
{PROGRESS_STEPS.map((step: ProgressStep, idx: number) => { const isActive = idx === progressIndex && !isDone const stepDone = idx < progressIndex || isDone const stepClass = [ "xx-clonemodal-step-progress", isActive ? "xx-clonemodal-step-progress--active" : "", stepDone ? "xx-clonemodal-step-progress--done" : "", ] .filter(Boolean) .join(" ") return ( {idx > 0 && (
)}
{stepDone ? "✓" : step.icon}
{step.label}
) })}
{/* 完成阶段 */} {isDone && (
🎉

克隆已提交

音色正在生成中,完成后将出现在「我的克隆」列表中

)} {/* 进行中阶段 */} {!isDone && (
{phase === "uploading" && ( <>

正在上传音频文件…

请稍候,正在将音频上传至服务器

)} {phase === "cloning" && ( <>

AI 正在克隆你的声音…

正在分析声音特征,生成专属音色模型

)}
)}
) } export default ProgressView