97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
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
|
|
}
|
|
});
|