document.addEventListener("DOMContentLoaded", () => { if (document.cookie.includes("_trpic_user")) { let infoBox = document.getElementById("info-box"); // 阻止默认行为 ["dragenter", "dragover", "dragleave", "drop"].forEach((eventName) => { infoBox.addEventListener(eventName, (e) => e.preventDefault()); }); // 拖入高亮 ["dragenter", "dragover"].forEach((eventName) => { infoBox.addEventListener(eventName, () => { infoBox.className = "drag"; }); }); // 拖出取消高亮 ["dragleave", "drop"].forEach((eventName) => { infoBox.addEventListener(eventName, () => { infoBox.className = ""; }); }); // 处理文件 infoBox.addEventListener("drop", (e) => { const files = e.dataTransfer.files; const link = e.dataTransfer.getData("text/plain"); let merge = false; if (files.length > 0) { if (files.length > 1) { merge = confirm("选择了多张图片,要组合为一个作品上传吗?") } uploadFiles(files, merge); } else if (link) { uploadLink(link); } }); async function uploadFiles(files, merge) { let artwork; let index = 0; for (const file of files) { if (!merge || index == 0) { try { const formData = new FormData(); formData.append("file", file); const res = await fetch("/api/artworks", { method: "POST", body: formData }); const data = await res.json(); switch (res.status) { case 201: artwork = data; break; case 401: alert("上传失败:需要验证"); break; default: alert(`上传失败:${data.msg}: ${data.error}`); return; } } catch (error) { alert(`请求失败: ${error}`); } } else if (artwork) { try { const formData = new FormData(); formData.append("artwork_id", artwork.id); formData.append("file", file); const res = await fetch(`/api/files`, { method: "POST", body: formData }) const data = await res.json(); switch (res.status) { case 201: break; case 401: alert("上传失败:需要验证"); break; default: alert(`上传失败:${data.msg}: ${data.error}`); return; } } catch (error) { alert(`请求失败: ${error}`); return; } } index++; } infoBox.className = "uploaded"; setTimeout(() => { infoBox.className = ""; resetGallery(); }, 1000); } async function uploadLink(link) { try { const formData = new FormData(); formData.append("link", link); const res = await fetch("/api/artworks", { method: "POST", body: formData }); const data = await res.json(); switch (res.status) { case 201: artwork = data; break; case 401: alert("上传失败:需要验证"); break; default: alert(`上传失败:${data.msg}: ${data.error}`); return; } } catch (error) { alert(`请求失败: ${error}`); } infoBox.className = "uploaded"; setTimeout(() => { infoBox.className = ""; resetGallery(); }, 1000); } } });