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.style.backgroundColor = "rgb(50, 50, 50)"; }); }); // 拖出取消高亮 ["dragleave", "drop"].forEach((eventName) => { infoBox.addEventListener(eventName, () => { infoBox.style.backgroundColor = ""; }); }); // 处理文件 infoBox.addEventListener("drop", (e) => { const files = e.dataTransfer.files; let merge = false; if (files.length === 0) return; if (files.length > 1) { merge = confirm("选择了多张图片,要组合为一个作品上传吗?") } let success = uploadFiles(files, merge); if (success == true) { infoBox.style.backgroundColor = "rgb(100, 130, 105)"; setTimeout(() => { infoBox.style.backgroundColor = "rgb(30, 30, 30)"; resetGallery(); }, 1000); } }); } 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/files", { 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 false } } catch (error) { alert(`请求失败: ${error}`); } } else if (artwork) { try { const formData = new FormData(); formData.append("file", file); const res = await fetch(`/api/artworks/${artwork.id}/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 false } } catch (error) { alert(`请求失败: ${error}`); return; } } index++; } return true } });