From 936a306c755aa4853f857460d15a980026bccde6 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Mon, 9 Feb 2026 16:48:05 +0700 Subject: [PATCH] fix --- src/plugins/genreport.ts | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/plugins/genreport.ts b/src/plugins/genreport.ts index d26eb62..d4b4a18 100644 --- a/src/plugins/genreport.ts +++ b/src/plugins/genreport.ts @@ -20,32 +20,36 @@ async function genReport(data: any, fileName: string, type: string = "docx") { responseType: "arraybuffer", }) .then((res) => { - const data = res.data; - if (data) { - // สร้าง Blob จาก array buffer - const blob = new Blob([data], { - type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - }); + const responseData = res.data; + if (responseData) { + // --- ส่วนที่ปรับปรุง 1: กำหนด MIME Type ให้ตรงกับไฟล์ที่รับมาจริง --- + const mimeType = + type === "docx" + ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + : "application/pdf"; - // สร้าง URL สำหรับไฟล์ Blob + const blob = new Blob([responseData], { type: mimeType }); const url = URL.createObjectURL(blob); - // 1. ตัดนามสกุลเดิมที่ติดมากับ fileName ออก (ถ้ามี) - const baseName = fileName.replace(/\.[^/.]+$/, ""); - - // 2. กำหนดนามสกุลใหม่ตามเงื่อนไข + // --- ส่วนที่ปรับปรุง 2: จัดการชื่อไฟล์ (ป้องกันนามสกุลซ้อน) --- + // ตัดช่องว่างหัวท้าย และตัดนามสกุลไฟล์เดิมที่อาจติดมาออก (.pdf, .docx ฯลฯ) + const baseName = fileName.trim().replace(/\.[^/.]+$/, ""); const extension = type === "docx" ? "docx" : "pdf"; - // สร้างลิงก์เพื่อดาวน์โหลดไฟล์ const link = document.createElement("a"); link.href = url; link.download = `${baseName}.${extension}`; - // link.download = `${fileName}.${type === "docx" ? "docx" : "pdf"}`; // กำหนดชื่อไฟล์ที่จะดาวน์โหลด + + // --- ส่วนที่ปรับปรุง 3: สำหรับ Android/Mobile --- + // บางครั้งการ click() ทันทีอาจถูก block หรือมีปัญหา ต้อง append เข้าไปจริงๆ document.body.appendChild(link); link.click(); - // ลบ URL ที่สร้างขึ้นหลังจากใช้งาน - URL.revokeObjectURL(url); + // หน่วงเวลาเล็กน้อยก่อนลบ element และ revoke URL เพื่อให้ Browser ทำงานเสร็จ + setTimeout(() => { + document.body.removeChild(link); + URL.revokeObjectURL(url); + }, 100); } }) .catch((err) => {