stat2025 commited on
Commit
241d6d3
·
verified ·
1 Parent(s): eeaff20

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +61 -2
app.js CHANGED
@@ -383,9 +383,10 @@ async function exportExcel(){
383
  if(!rows.length){ toast("لا يوجد بيانات لتصديرها."); return; }
384
 
385
  const TEMPLATE_HEADERS = [
386
- "التصنيف","نوع المشكلة","وصف المشكلة","المنطقة","اسم المسح","اسم المشغل",
387
  "رقم الجوال","رقم الهوية ID","رقم الجهاز","تاريخ اليوم بالميلادي","الحالة","اسم الدعم الفني"
388
  ];
 
389
  const mapRow = (r)=>{
390
  const today = new Date();
391
  const yyyy=today.getFullYear(), mm=String(today.getMonth()+1).padStart(2,"0"), dd=String(today.getDate()).padStart(2,"0");
@@ -393,7 +394,6 @@ async function exportExcel(){
393
  return {
394
  "التصنيف": r["التصنيف"]||"",
395
  "نوع المشكلة": r["نوع المشكلة"]||"",
396
- "وصف المشكلة": r["التصنيف"] || r["نوع المشكلة"] || "",
397
  "المنطقة": r["المنطقة"]||"",
398
  "اسم المسح": r["المسح"]||"",
399
  "اسم المشغل": r["اسم صاحب المشكلة"]||"",
@@ -406,6 +406,65 @@ async function exportExcel(){
406
  };
407
  };
408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  const wb = new ExcelJS.Workbook();
410
  const ws = wb.addWorksheet("التذاكر", { views: [{ rightToLeft: true }] });
411
 
 
383
  if(!rows.length){ toast("لا يوجد بيانات لتصديرها."); return; }
384
 
385
  const TEMPLATE_HEADERS = [
386
+ "التصنيف","نوع المشكلة","المنطقة","اسم المسح","اسم المشغل",
387
  "رقم الجوال","رقم الهوية ID","رقم الجهاز","تاريخ اليوم بالميلادي","الحالة","اسم الدعم الفني"
388
  ];
389
+
390
  const mapRow = (r)=>{
391
  const today = new Date();
392
  const yyyy=today.getFullYear(), mm=String(today.getMonth()+1).padStart(2,"0"), dd=String(today.getDate()).padStart(2,"0");
 
394
  return {
395
  "التصنيف": r["التصنيف"]||"",
396
  "نوع المشكلة": r["نوع المشكلة"]||"",
 
397
  "المنطقة": r["المنطقة"]||"",
398
  "اسم المسح": r["المسح"]||"",
399
  "اسم المشغل": r["اسم صاحب المشكلة"]||"",
 
406
  };
407
  };
408
 
409
+ const wb = new ExcelJS.Workbook();
410
+ const ws = wb.addWorksheet("التذاكر", { views: [{ rightToLeft: true }] });
411
+
412
+ const colWidths = [16,18,16,18,20,18,18,18,22,14,18];
413
+ TEMPLATE_HEADERS.forEach((h,i)=> ws.getColumn(i+1).width = colWidths[i]||18);
414
+
415
+ ws.addRow(TEMPLATE_HEADERS);
416
+ const headerRow = ws.getRow(1);
417
+ headerRow.height = 24;
418
+ headerRow.eachCell((cell)=>{
419
+ cell.font = { bold:true, color:{argb:"FFFFFFFF"} };
420
+ cell.alignment = { horizontal:"center", vertical:"middle" };
421
+ cell.fill = { type:"pattern", pattern:"solid", fgColor:{argb:"FF4137A8"} };
422
+ cell.border = {
423
+ top:{style:"thin",color:{argb:"FFCDD2E1"}},
424
+ bottom:{style:"thin",color:{argb:"FFCDD2E1"}},
425
+ left:{style:"thin",color:{argb:"FFE5E7EB"}},
426
+ right:{style:"thin",color:{argb:"FFE5E7EB"}}
427
+ };
428
+ });
429
+
430
+ const toTextCols = new Set(["رقم الجوال","رقم الهوية ID","رقم الجهاز"]);
431
+ const rawRows = readTable();
432
+ rawRows.forEach((r,idx)=>{
433
+ const m = mapRow(r);
434
+ const vals = TEMPLATE_HEADERS.map(h => (m[h] ?? ""));
435
+ const row = ws.addRow(vals);
436
+ row.alignment = { horizontal:"center", vertical:"middle" };
437
+ const even = (idx % 2) === 1;
438
+ row.eachCell((cell, colNumber)=>{
439
+ cell.border = {
440
+ top:{style:"thin",color:{argb:"FFE5E7EB"}},
441
+ bottom:{style:"thin",color:{argb:"FFE5E7EB"}},
442
+ left:{style:"thin",color:{argb:"FFE5E7EB"}},
443
+ right:{style:"thin",color:{argb:"FFE5E7EB"}}
444
+ };
445
+ if(even) cell.fill = { type:"pattern", pattern:"solid", fgColor:{argb:"FFF5F8FF"} };
446
+ const header = TEMPLATE_HEADERS[colNumber-1];
447
+ if(toTextCols.has(header)) cell.value = String(cell.value ?? "");
448
+ });
449
+ });
450
+
451
+ const ts = new Date().toISOString().replace(/\D/g,"").slice(0,14);
452
+ const filename = `Ticket_${ts}.xlsx`;
453
+ const buffer = await wb.xlsx.writeBuffer();
454
+ const blob = new Blob([buffer], { type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
455
+ const file = new File([blob], filename, { type: blob.type });
456
+
457
+ if (navigator.canShare && navigator.canShare({ files: [file] })) {
458
+ try { await navigator.share({ files:[file], title:"ملف التذاكر" }); toast("تمت المشاركة/الحفظ."); return; } catch(e){}
459
+ }
460
+ const url = URL.createObjectURL(blob);
461
+ const a = document.createElement("a"); a.href=url; a.download=filename;
462
+ document.body.appendChild(a); a.click(); a.remove();
463
+ setTimeout(()=>URL.revokeObjectURL(url),1000);
464
+ toast("تم تنزيل الملف بتنسيق القالب.");
465
+ }
466
+
467
+
468
  const wb = new ExcelJS.Workbook();
469
  const ws = wb.addWorksheet("التذاكر", { views: [{ rightToLeft: true }] });
470