141 أسطر
4.3 KiB
JavaScript
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 = "إرسال طلب الانضمام";
|
|
}
|
|
});
|