Files
yingqing/core/frontend/src/routes/quick-create.tsx
T

79 lines
4.3 KiB
TypeScript

import { useEffect, useState } from "react";
import { ArrowLeft, Sparkles, Trash2, Upload, WandSparkles } from "lucide-react";
import type { Page } from "./route-config";
export function QuickCreatePage({ onBack }: { onBack: () => void; navigate?: (page: Page) => void }) {
const [name, setName] = useState("");
const [images, setImages] = useState<File[]>([]);
const [preview, setPreview] = useState("");
useEffect(() => {
if (!images[0]) {
setPreview("");
return;
}
const url = URL.createObjectURL(images[0]);
setPreview(url);
return () => URL.revokeObjectURL(url);
}, [images]);
function selectImages(files: FileList | null) {
setImages(Array.from(files || []).slice(0, 9));
}
return (
<div className="quick-create-page">
<header className="project-builder-header quick-create-header">
<div className="project-builder-title">
<button type="button" className="image-back-button" onClick={onBack} aria-label="返回工作台"><ArrowLeft /></button>
<div><h1>极速成片</h1><p>输入商品名称并上传图片,系统将自动完成从商品理解到视频生成的全部流程</p></div>
</div>
<div className="project-builder-status"><strong>AI 自动编排</strong><span>· 无需逐步配置</span></div>
</header>
<div className="quick-create-shell" id="quickCreateShell">
<section className="quick-create-panel quick-form-panel">
<div className="quick-form-copy">
<h2>告诉我们这是什么商品</h2>
<p>系统会识别商品信息,自动选择带货结构、表现形式、模特和场景,并完成15秒竖屏视频。</p>
</div>
<label className="quick-field">
<span className="quick-field-label"><span>商品名称</span><small>必填</small></span>
<input className="quick-name-input" autoComplete="off" value={name} onChange={(event) => setName(event.target.value)} placeholder="例如:净颜精华、轻醒咖啡" />
</label>
<div className="quick-field">
<span className="quick-field-label"><span>商品图片</span><small>必填 · 最多9</small></span>
<label className={`quick-upload${preview ? " has-image" : ""}`}>
<input type="file" accept="image/jpeg,image/png,image/webp" multiple onChange={(event) => selectImages(event.target.files)} />
<span className="quick-upload-copy"><span className="quick-upload-icon"><Upload /></span><strong>上传商品图片</strong><small>建议包含清晰主图、包装和使用细节</small></span>
<span className="quick-upload-preview">
<img src={preview} alt="极速成片商品预览" />
<span className="quick-image-count">{images.length}张图片</span>
<button type="button" className="quick-image-clear" onClick={(event) => { event.preventDefault(); setImages([]); }} aria-label="删除已上传图片"><Trash2 /></button>
</span>
</label>
</div>
<div className="quick-auto-note" aria-label="系统自动完成内容"><span>识别商品与卖点</span><span>推荐脚本方向</span><span>匹配模特与场景</span><span>生成故事板与视频</span></div>
<div className="quick-form-footer">
<div className="quick-cost"><span>仅在视频生成成功后扣费</span><strong>预计 240 积分</strong></div>
<button type="button" className="quick-generate-button" disabled><WandSparkles /><span>立即生成视频</span></button>
</div>
</section>
<section className="quick-create-panel quick-status-panel" aria-live="polite">
<div className="quick-state quick-state-ready">
<div className="quick-ready-orbit"><span className="quick-ready-icon"><Sparkles /></span></div>
<h2>系统会替你完成所有选择</h2>
<p>上传商品后,AI 将根据品类、图片信息和适用场景自动编排完整视频,不需要理解复杂的制作参数。</p>
<div className="quick-ready-tags"><span>自动推荐结构</span><span>自动选择表现形式</span><span>自动匹配资产</span><span>自动质量检查</span></div>
</div>
</section>
</div>
</div>
);
}