الملفات
talabatuk_plus_1/join.js
Muhammad Kadi 66de18b11c compressImage
2026-03-30 19:08:22 +04:00

141 أسطر
4.3 KiB
JavaScript

/* ============================================
join.js - طلباتك بلس - صفحة تسجيل السائق
============================================ */
const API_URL = `/api/join`;
const form = document.getElementById("driverForm");
const btn = document.getElementById("submitBtn");
const photoInput = document.getElementById("photoInput");
function compressImage(file, maxWidth = 1280, quality = 0.7) {
return new Promise((resolve) => {
if (file.size <= 1024 * 1024) {
return resolve(file);
}
const img = new Image();
const url = URL.createObjectURL(file);
img.onload = () => {
URL.revokeObjectURL(url);
let width = img.width;
let height = img.height;
if (width > maxWidth) {
height = Math.round((height * maxWidth) / width);
width = maxWidth;
}
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
canvas.toBlob(
(blob) => {
const compressed = new File([blob], file.name, {
type: "image/jpeg",
lastModified: Date.now(),
});
resolve(compressed);
},
"image/jpeg",
quality,
);
};
img.onerror = () => {
URL.revokeObjectURL(url);
resolve(file);
};
img.src = url;
});
}
// --- عرض معاينة الصورة الشخصية عند اختيارها ---
photoInput.addEventListener("change", () => {
const preview = document.getElementById("fileNamePreview");
const previewContainer = document.getElementById("imagePreviewContainer");
const imagePreview = document.getElementById("imagePreview");
const file = photoInput.files[0];
if (file) {
preview.innerText = file.name;
const reader = new FileReader();
reader.onload = (e) => {
imagePreview.src = e.target.result;
previewContainer.classList.remove("hidden");
};
reader.readAsDataURL(file);
} else {
preview.innerText = "";
previewContainer.classList.add("hidden");
}
});
// --- إرسال النموذج ---
form.addEventListener("submit", async (e) => {
e.preventDefault();
btn.disabled = true;
btn.innerText = "جاري إرسال طلبك...";
const formData = new FormData(form);
const photoFile = photoInput.files[0];
const idFrontFile = document.getElementById("idFrontInput").files[0];
const idBackFile = document.getElementById("idBackInput").files[0];
const message =
`🚀 *طلب انضمام جديد (طلباتك بلس)* \n\n` +
`👤 *الاسم:* ${formData.get("name")}\n` +
`📱 *الجوال:* ${formData.get("phone")}\n` +
`🎂 *العمر:* ${formData.get("age")}\n` +
`🆔 *الرقم الوطني:* ${formData.get("nationalId")}\n` +
`📍 *العنوان:* ${formData.get("address")}\n` +
`🛵 *نوع المركبة:* ${formData.get("vehicleType")}\n` +
`🔢 *هل منمرة:* ${formData.get("isNumbered")}\n` +
`📄 *رقم اللوحة:* ${formData.get("plateNumber") || "لا يوجد"}\n` +
`💡 *عمل سابقاً في التوصيل:* ${formData.get("previousExperience")}\n` +
`🗺️ *خبرة بمناطق حلب:* ${formData.get("aleppKnowledge")}\n\n` +
`✅ *موافق على الشروط والتأمين*`;
try {
const [compressedPhoto, compressedFront, compressedBack] =
await Promise.all([
compressImage(photoFile),
compressImage(idFrontFile),
compressImage(idBackFile),
]);
const backendFormData = new FormData();
backendFormData.append("photo", compressedPhoto);
backendFormData.append("idFront", compressedFront);
backendFormData.append("idBack", compressedBack);
backendFormData.append("message", message);
const response = await fetch(API_URL, {
method: "POST",
body: backendFormData,
});
const result = await response.json();
if (result.ok) {
window.location.href = "success.html";
} else {
alert(
"حدث خطأ في الإرسال: " + (result.description || "فشل إرسال الطلب."),
);
}
} catch (error) {
alert("فشل الاتصال بالخادم.");
} finally {
btn.disabled = false;
btn.innerText = "إرسال طلب الانضمام";
}
});