compressImage
هذا الالتزام موجود في:
184
join.js
184
join.js
@@ -4,79 +4,137 @@
|
||||
|
||||
const API_URL = `/api/join`;
|
||||
|
||||
const form = document.getElementById('driverForm');
|
||||
const btn = document.getElementById('submitBtn');
|
||||
const photoInput = document.getElementById('photoInput');
|
||||
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');
|
||||
}
|
||||
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 = 'جاري إرسال طلبك...';
|
||||
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 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` +
|
||||
`✅ *موافق على الشروط والتأمين*`;
|
||||
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 backendFormData = new FormData();
|
||||
backendFormData.append('photo', photoFile);
|
||||
backendFormData.append('idFront', idFrontFile);
|
||||
backendFormData.append('idBack', idBackFile);
|
||||
backendFormData.append('message', message);
|
||||
try {
|
||||
const [compressedPhoto, compressedFront, compressedBack] =
|
||||
await Promise.all([
|
||||
compressImage(photoFile),
|
||||
compressImage(idFrontFile),
|
||||
compressImage(idBackFile),
|
||||
]);
|
||||
|
||||
const response = await fetch(API_URL, {
|
||||
method: 'POST',
|
||||
body: backendFormData
|
||||
});
|
||||
const backendFormData = new FormData();
|
||||
backendFormData.append("photo", compressedPhoto);
|
||||
backendFormData.append("idFront", compressedFront);
|
||||
backendFormData.append("idBack", compressedBack);
|
||||
backendFormData.append("message", message);
|
||||
|
||||
const result = await response.json();
|
||||
const response = await fetch(API_URL, {
|
||||
method: "POST",
|
||||
body: backendFormData,
|
||||
});
|
||||
|
||||
if (result.ok) {
|
||||
window.location.href = 'success.html';
|
||||
} else {
|
||||
alert('حدث خطأ في الإرسال: ' + (result.description || 'فشل إرسال الطلب.'));
|
||||
}
|
||||
} catch (error) {
|
||||
alert('فشل الاتصال بالخادم.');
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
btn.innerText = 'إرسال طلب الانضمام';
|
||||
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 = "إرسال طلب الانضمام";
|
||||
}
|
||||
});
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم