stat2025 commited on
Commit
f9ac708
·
verified ·
1 Parent(s): 4c98bae

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +25 -31
app.js CHANGED
@@ -64,7 +64,7 @@ const LABEL_FIXES = [
64
  [/(^|\n)\s*اسم\s*المنطقة/gi, "$1المنطقة"],
65
  [/(^|\n)\s*اسم\s*المسح/gi, "$1المسح"],
66
  [/(^|\n)\s*الهاتف/gi, "$1رقم الجوال"],
67
- [/(^|\n)\s*جوال/gi, "$1رقم الجوال"]
68
  ];
69
  function fixLabels(s){
70
  let t = s;
@@ -151,7 +151,7 @@ function findBlockAfterLabel(text, labels, allLabels = START_LABELS){
151
  const lblAlt = labels.map(esc).join("|");
152
  const allAlt = allLabels.map(esc).join("|");
153
  const re = new RegExp(
154
- `(?:^|\\n)\\s*(?:${lblAlt})\\s*(?::|:|\\s)\\s*([\\s\\S]*?)(?=\\n\\s*(?:${allAlt})\\s*(?::|:|\\s)|$)`,
155
  "i"
156
  );
157
  const m = hay.match(re);
@@ -327,10 +327,7 @@ function setButtonsEnabled(hasRows){
327
 
328
  function validateCells(){
329
  const tbody=document.getElementById("tbody");
330
- const idxPhone = EXPORT_COLUMNS.indexOf("رقم الجوال");
331
- const idxID = EXPORT_COLUMNS.indexOf("رقم الهوية");
332
  const required = new Set(["نوع المشكلة","اسم صاحب المشكلة","رقم الهوية","رقم الجهاز","رقم الجوال","المسح","المنطقة","وقت حدوث المشكلة"]);
333
-
334
  let missing=0;
335
  [...tbody.rows].forEach(tr=>{
336
  [...tr.children].forEach((td,idx)=>{
@@ -378,37 +375,34 @@ function toast(msg){
378
  setTimeout(()=>{ t.hidden = true; }, 2000);
379
  }
380
 
 
381
  async function exportExcel(){
382
  const rows = readTable();
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");
392
- const todayStr = `${yyyy}-${mm}-${dd}`;
393
- return {
394
- "التصنيف": r["التصنيف"]||"",
395
- "نوع المشكلة": r["نوع المشكلة"]||"",
396
- "المنطقة": r["المنطقة"]||"",
397
- "اسم المسح": r["المسح"]||"",
398
- "اسم المشغل": r["اسم صاحب المشكلة"]||"",
399
- "رقم الجوال": (r["رقم الجوال"]||"").toString(),
400
- "رقم الهوية ID":(r["رقم الهوية"]||"").toString(),
401
- "رقم الجهاز": (r["رقم الجهاز"]||"").toString(),
402
- "تاريخ اليوم بالميلادي": todayStr,
403
- "الحالة": r["الحالة"]||"تم الحل",
404
- "اسم الدعم الفني": r["اسم الدعم الفني"]||""
405
- };
406
- };
407
 
408
  const wb = new ExcelJS.Workbook();
409
  const ws = wb.addWorksheet("التذاكر", { views: [{ rightToLeft: true }] });
410
 
411
- const colWidths = [16,18,16,18,20,18,18,18,22,14,18];
412
  TEMPLATE_HEADERS.forEach((h,i)=> ws.getColumn(i+1).width = colWidths[i]||18);
413
 
414
  ws.addRow(TEMPLATE_HEADERS);
@@ -426,7 +420,7 @@ async function exportExcel(){
426
  };
427
  });
428
 
429
- const toTextCols = new Set(["رقم الجوال","رقم الهوية ID","رقم الجهاز"]);
430
  const rawRows = readTable();
431
  rawRows.forEach((r,idx)=>{
432
  const m = mapRow(r);
@@ -449,21 +443,21 @@ async function exportExcel(){
449
 
450
  const ts = new Date().toISOString().replace(/\D/g,"").slice(0,14);
451
  const filename = `Ticket_${ts}.xlsx`;
452
-
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; }
459
  catch(e){}
460
  }
461
  const url = URL.createObjectURL(blob);
462
- const a = document.createElement("a"); a.href = url; a.download = filename;
463
  document.body.appendChild(a); a.click(); a.remove();
464
- setTimeout(()=>URL.revokeObjectURL(url), 1000);
465
  toast("تم تنزيل الملف بتنسيق القالب.");
466
  }
 
467
 
468
  async function copyToClipboardTSV(){
469
  const rows = readTable();
 
64
  [/(^|\n)\s*اسم\s*المنطقة/gi, "$1المنطقة"],
65
  [/(^|\n)\s*اسم\s*المسح/gi, "$1المسح"],
66
  [/(^|\n)\s*الهاتف/gi, "$1رقم الجوال"],
67
+ [/(^|\n)\س*جوال/gi, "$1رقم الجوال"]
68
  ];
69
  function fixLabels(s){
70
  let t = s;
 
151
  const lblAlt = labels.map(esc).join("|");
152
  const allAlt = allLabels.map(esc).join("|");
153
  const re = new RegExp(
154
+ `(?:^|\\n)\\s*(?:${lblAlt})\\s*(?::|:|\\s)\\s*([\\س\\S]*?)(?=\\n\\s*(?:${allAlt})\\s*(?::|:|\\s)|$)`,
155
  "i"
156
  );
157
  const m = hay.match(re);
 
327
 
328
  function validateCells(){
329
  const tbody=document.getElementById("tbody");
 
 
330
  const required = new Set(["نوع المشكلة","اسم صاحب المشكلة","رقم الهوية","رقم الجهاز","رقم الجوال","المسح","المنطقة","وقت حدوث المشكلة"]);
 
331
  let missing=0;
332
  [...tbody.rows].forEach(tr=>{
333
  [...tr.children].forEach((td,idx)=>{
 
375
  setTimeout(()=>{ t.hidden = true; }, 2000);
376
  }
377
 
378
+ /* === التعديل المطلوب فقط: تصدير التاريخ من "وقت حدوث المشكلة" بدلاً من تاريخ اليوم === */
379
  async function exportExcel(){
380
  const rows = readTable();
381
  if(!rows.length){ toast("لا يوجد بيانات لتصديرها."); return; }
382
 
383
  const TEMPLATE_HEADERS = [
384
  "التصنيف","نوع المشكلة","المنطقة","اسم المسح","اسم المشغل",
385
+ "رقم الجوال","رقم الهوية ID","رقم الجهاز","وقت حدوث المشكلة","الحالة","اسم الدعم الفني"
386
  ];
387
+
388
+ const mapRow = (r)=>({
389
+ "التصنيف": r["التصنيف"]||"",
390
+ "نوع المشكلة": r["نوع المشكلة"]||"",
391
+ "المنطقة": r["المنطقة"]||"",
392
+ "اسم المسح": r["المسح"]||"",
393
+ "اسم المشغل": r["اسم صاحب المشكلة"]||"",
394
+ "رقم الجوال": (r["رقم الجوال"]||"").toString(),
395
+ "رقم الهوية ID":(r["رقم الهوية"]||"").toString(),
396
+ "رقم الجهاز": (r["رقم الجهاز"]||"").toString(),
397
+ "وقت حدوث المشكلة": r["وقت حدوث المشكلة"]||"",
398
+ "الحالة": r["الحالة"]||"تم الحل",
399
+ "اسم الدعم الفني": r["اسم الدعم الفني"]||""
400
+ });
 
 
 
 
401
 
402
  const wb = new ExcelJS.Workbook();
403
  const ws = wb.addWorksheet("التذاكر", { views: [{ rightToLeft: true }] });
404
 
405
+ const colWidths = [16,18,16,18,20,18,18,18,20,14,18];
406
  TEMPLATE_HEADERS.forEach((h,i)=> ws.getColumn(i+1).width = colWidths[i]||18);
407
 
408
  ws.addRow(TEMPLATE_HEADERS);
 
420
  };
421
  });
422
 
423
+ const toTextCols = new Set(["رقم الجوال","رقم الهوية ID","رقم الجهاز","وقت حدوث المشكلة"]);
424
  const rawRows = readTable();
425
  rawRows.forEach((r,idx)=>{
426
  const m = mapRow(r);
 
443
 
444
  const ts = new Date().toISOString().replace(/\D/g,"").slice(0,14);
445
  const filename = `Ticket_${ts}.xlsx`;
 
446
  const buffer = await wb.xlsx.writeBuffer();
447
+ const blob = new Blob([buffer], { type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
448
  const file = new File([blob], filename, { type: blob.type });
449
 
450
  if (navigator.canShare && navigator.canShare({ files: [file] })) {
451
+ try { await navigator.share({ files:[file], title:"ملف التذاكر" }); toast("تمت المشاركة/الحفظ."); return; }
452
  catch(e){}
453
  }
454
  const url = URL.createObjectURL(blob);
455
+ const a = document.createElement("a"); a.href=url; a.download=filename;
456
  document.body.appendChild(a); a.click(); a.remove();
457
+ setTimeout(()=>URL.revokeObjectURL(url),1000);
458
  toast("تم تنزيل الملف بتنسيق القالب.");
459
  }
460
+ /* === نهاية التعديل === */
461
 
462
  async function copyToClipboardTSV(){
463
  const rows = readTable();