Spaces:
Running
Running
Update app.js
Browse files
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)
|
| 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*([
|
| 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 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 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,
|
| 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:
|
| 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:
|
| 459 |
catch(e){}
|
| 460 |
}
|
| 461 |
const url = URL.createObjectURL(blob);
|
| 462 |
-
const a = document.createElement("a"); a.href
|
| 463 |
document.body.appendChild(a); a.click(); a.remove();
|
| 464 |
-
setTimeout(()=>URL.revokeObjectURL(url),
|
| 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();
|