/** * ระบบจัดการการชำระเงิน * รับผิดชอบการแสดงหน้าชำระเงิน และการประมวลผลการชำระเงิน */ const PaymentManager = { /** * เริ่มต้นระบบชำระเงิน * - ลงทะเบียนเทมเพลต * - ตั้งค่าตัวรับฟังเหตุการณ์ */ init() { this.setupTemplates(); this.setupEventListeners(); }, /** * ลงทะเบียนเทมเพลตที่ใช้ในระบบชำระเงิน */ setupTemplates() { TemplateManager.registerTemplate('payment-modal-template', `` ); }, /** * ตั้งค่าตัวรับฟังเหตุการณ์สำหรับการทำงานต่างๆ */ setupEventListeners() { document.addEventListener('click', async (e) => { const target = e.target; // จัดการการเลือกวิธีชำระเงิน if (target.closest('.payment-method')) { const method = target.closest('.payment-method').dataset.method; await this.handlePaymentMethodSelection(method); } // จัดการการปิดหน้าต่าง if (target.matches('.modal-close')) { const modal = target.closest('.modal'); if (modal) { modal.remove(); } } }); }, /** * แสดงหน้าต่างชำระเงิน * @param {Object} orderSummary - ข้อมูลสรุปการสั่งซื้อ */ showPaymentModal(orderSummary) { // เก็บ orderId ไว้ใช้ตอนส่งผลการชำระเงิน this.currentOrderId = orderSummary.orderId; // แสดงหน้าต่างชำระเงิน const modal = TemplateManager.showModal('payment-modal-template', { total: `฿${orderSummary.total.total.toLocaleString()}` }); if (!modal) return; // แสดงช่องทางการชำระเงินที่เปิดใช้งาน const methodsContainer = modal.querySelector('.payment-methods'); methodsContainer.innerHTML = Object.entries(CONFIG.PAYMENT.METHODS) .filter(([_, method]) => method.enabled) .map(([key, method]) => ( `` )).join(''); }, /** * จัดการการเลือกวิธีชำระเงิน * @param {string} method - รหัสวิธีการชำระเงินที่เลือก */ async handlePaymentMethodSelection(method) { const modal = document.querySelector('#paymentModal'); const methodsContainer = modal.querySelector('.payment-methods'); const statusDiv = modal.querySelector('#paymentStatus'); const statusMessage = statusDiv.querySelector('.status-message'); try { // ซ่อนตัวเลือกวิธีชำระเงิน methodsContainer.style.display = 'none'; // แสดงสถานะกำลังดำเนินการ statusDiv.classList.remove('hidden'); statusMessage.textContent = 'กำลังดำเนินการชำระเงิน...'; // ดำเนินการชำระเงิน const result = await this.processPayment(method); if (!result.success) { // กรณีชำระเงินไม่สำเร็จ methodsContainer.style.display = 'block'; statusDiv.classList.add('hidden'); NotificationManager.error('การชำระเงินไม่สำเร็จ กรุณาลองใหม่อีกครั้ง'); return; } // แสดงผลสำเร็จ statusMessage.textContent = 'การชำระเงินสำเร็จ'; statusMessage.classList.add('success'); // ส่งผลการชำระเงิน EventBus.emit('payment:completed', { orderId: this.currentOrderId, paymentResult: { ...result, completedAt: new Date().toISOString() } }); // ปิดหน้าต่างและแสดงข้อความขอบคุณ setTimeout(() => { modal.remove(); NotificationManager.success('ขอบคุณสำหรับการสั่งซื้อ!'); }, 1500); } catch (error) { console.error('เกิดข้อผิดพลาดในการชำระเงิน:', error); // กรณีเกิดข้อผิดพลาด methodsContainer.style.display = 'block'; statusMessage.textContent = 'เกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้ง หรือเปลี่ยนช่องทางการชำระเงินอื่น'; statusMessage.classList.add('error'); } }, /** * จำลองการประมวลผลการชำระเงิน * @param {string} method - วิธีการชำระเงินที่เลือก * @returns {Promise} ผลลัพธ์การชำระเงิน */ async processPayment(method) { // จำลองการชำระเงินสำเร็จเสมอ return new Promise((resolve) => { setTimeout(() => { resolve({ success: true, transactionId: `TXN${Date.now()}`, method, date: new Date().toISOString() }); }, 2000); }); } };