import { FormEvent, useState } from "react"; import { useNavigate } from "react-router-dom"; import { createBuild } from "../api"; export default function Upload() { const navigate = useNavigate(); const [appNameZh, setAppNameZh] = useState(""); const [appNameEn, setAppNameEn] = useState(""); const [identifier, setIdentifier] = useState(""); const [file, setFile] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function onSubmit(event: FormEvent) { event.preventDefault(); if (!file) { setError("请选择 zip 文件"); return; } setLoading(true); setError(null); try { const formData = new FormData(); formData.append("file", file); formData.append("appNameZh", appNameZh); formData.append("appNameEn", appNameEn); if (identifier.trim()) { formData.append("identifier", identifier.trim()); } const result = await createBuild(formData); navigate(`/jobs/${result.id}`); } catch (err) { setError(err instanceof Error ? err.message : "上传失败"); } finally { setLoading(false); } } return (

上传静态站点

压缩包需包含 index.html,大小默认不超过 50MB。可选在 zip 根目录放置 logo.png 或 favicon.ico 作为应用图标(优先 logo.png)。中文名用于界面展示,英文名用于安装包与 Bundle ID 生成。

{error ?

{error}

: null}
); }