script.js

12.36 KB
10/08/2025 03:53
JS
script.js
// ตัวแปรสำหรับระบบตะกร้า
let cart = [];
let filteredProducts = [];
let productsData = [];

// โหลดข้อมูลสินค้า
async function loadProducts() {
  productsData = await API.getProducts();
  filteredProducts = [...productsData];
  const loading = document.getElementById('loading');

  setTimeout(() => {
    loading.style.display = 'none';
    displayProducts(filteredProducts);
  }, 1000);
}

// แสดงสินค้า
function displayProducts(products) {
  const productsGrid = document.getElementById('productsGrid');

  if (products.length === 0) {
    productsGrid.innerHTML = '<p style="text-align: center; color: white; grid-column: 1/-1;">ไม่พบสินค้าที่ค้นหา</p>';
    return;
  }

  productsGrid.innerHTML = products.map(product => `
                <div class="product-card">
                    <img src="${product.image}" alt="${product.name}" class="product-image">
                    <div class="product-info">
                        <h3 class="product-name">${product.name}</h3>
                        <p class="product-description">${product.description}</p>
                        <div class="product-price">${product.price.toLocaleString()} บาท</div>
                        <div class="product-options">
                            <select id="size-${product.id}">
                                <option value="">เลือกไซส์</option>
                                ${product.sizes.map(size => `<option value="${size}">${size}</option>`).join('')}
                            </select>
                            <select id="color-${product.id}">
                                <option value="">เลือกสี</option>
                                ${product.colors.map(color => `<option value="${color}">${color}</option>`).join('')}
                            </select>
                        </div>
                        <button class="add-to-cart-btn" onclick="addToCart(${product.id})">
                            <i class="fas fa-shopping-cart"></i> เพิ่มไปยังตะกร้า
                        </button>
                    </div>
                </div>
            `).join('');
}

// เพิ่มสินค้าไปยังตะกร้า
function addToCart(productId) {
  const product = productsData.find(p => p.id === productId);
  const sizeSelect = document.getElementById(`size-${productId}`);
  const colorSelect = document.getElementById(`color-${productId}`);

  const selectedSize = sizeSelect.value;
  const selectedColor = colorSelect.value;

  if (!selectedSize || !selectedColor) {
    alert('กรุณาเลือกไซส์และสีก่อนเพิ่มไปยังตะกร้า');
    return;
  }

  const cartItemId = `${productId}-${selectedSize}-${selectedColor}`;
  const existingItem = cart.find(item => item.cartItemId === cartItemId);

  if (existingItem) {
    existingItem.quantity += 1;
  } else {
    cart.push({
      cartItemId,
      ...product,
      selectedSize,
      selectedColor,
      quantity: 1
    });
  }

  updateCartUI();

  // Animation effect
  const btn = event.target;
  btn.style.background = '#2ecc71';
  btn.innerHTML = '<i class="fas fa-check"></i> เพิ่มแล้ว';
  setTimeout(() => {
    btn.style.background = 'linear-gradient(45deg, #667eea, #764ba2)';
    btn.innerHTML = '<i class="fas fa-shopping-cart"></i> เพิ่มไปยังตะกร้า';
  }, 1500);
}

// อัพเดท UI ตะกร้า
function updateCartUI() {
  const cartCount = document.getElementById('cartCount');
  const cartItems = document.getElementById('cartItems');
  const cartTotal = document.getElementById('cartTotal');
  const checkoutSection = document.getElementById('checkoutSection');

  const totalItems = cart.reduce((sum, item) => sum + item.quantity, 0);
  const totalPrice = cart.reduce((sum, item) => sum + (item.price * item.quantity), 0);

  cartCount.textContent = totalItems;
  cartTotal.textContent = `รวม: ${totalPrice.toLocaleString()} บาท`;

  if (cart.length === 0) {
    cartItems.innerHTML = '<div class="empty-cart"><i class="fas fa-shopping-cart" style="font-size: 3rem; margin-bottom: 1rem; opacity: 0.3;"></i><p>ตะกร้าสินค้าว่าง</p></div>';
    checkoutSection.style.display = 'none';
  } else {
    cartItems.innerHTML = cart.map(item => `
                    <div class="cart-item">
                        <img src="${item.image}" alt="${item.name}">
                        <div class="cart-item-info">
                            <div class="cart-item-name">${item.name}</div>
                            <div class="cart-item-details">ไซส์: ${item.selectedSize} | สี: ${item.selectedColor}</div>
                            <div class="cart-item-price">${item.price.toLocaleString()} บาท</div>
                        </div>
                        <div class="quantity-controls">
                            <button class="quantity-btn" onclick="updateQuantity('${item.cartItemId}', -1)">-</button>
                            <span>${item.quantity}</span>
                            <button class="quantity-btn" onclick="updateQuantity('${item.cartItemId}', 1)">+</button>
                        </div>
                        <button class="remove-item" onclick="removeFromCart('${item.cartItemId}')">
                            <i class="fas fa-trash"></i>
                        </button>
                    </div>
                `).join('');
    checkoutSection.style.display = 'block';
  }
}

// อัพเดทจำนวนสินค้า
function updateQuantity(cartItemId, change) {
  const item = cart.find(item => item.cartItemId === cartItemId);
  if (item) {
    item.quantity += change;
    if (item.quantity <= 0) {
      removeFromCart(cartItemId);
    } else {
      updateCartUI();
    }
  }
}

// ลบสินค้าออกจากตะกร้า
function removeFromCart(cartItemId) {
  cart = cart.filter(item => item.cartItemId !== cartItemId);
  updateCartUI();
}

// เปิด/ปิดตะกร้า
function toggleCart() {
  const modal = document.getElementById('cartModal');
  modal.style.display = modal.style.display === 'block' ? 'none' : 'block';
}

// ดำเนินการชำระเงิน
function proceedToPayment() {
  const form = document.getElementById('customerForm');
  const name = document.getElementById('customerName').value;
  const phone = document.getElementById('customerPhone').value;
  const address = document.getElementById('customerAddress').value;

  if (!name || !phone || !address) {
    alert('กรุณากรอกข้อมูลให้ครบถ้วน');
    return;
  }

  // สร้าง QR Code PromptPay
  const totalAmount = cart.reduce((sum, item) => sum + (item.price * item.quantity), 0);
  generateQRCode(totalAmount);

  document.getElementById('proceedToPayment').style.display = 'none';
  document.getElementById('qrPayment').style.display = 'block';
  document.getElementById('paymentAmount').textContent = `${totalAmount.toLocaleString()} บาท`;
}

// สร้าง QR Code PromptPay
function generateQRCode(amount) {
  // ในการใช้งานจริง ควรใช้ API PromptPay QR Code Generator
  // ที่นี่จะใช้ placeholder QR code
  const phoneNumber = '660868142004'; // เปลี่ยนเป็นหมายเลขจริง
  const qrData = `https://promptpay.io/${phoneNumber}/${amount}`;

  // ใช้ QR Code API ฟรี
  const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(qrData)}`;
  document.getElementById('qrCode').src = qrCodeUrl;
}

// ยืนยันการชำระเงิน
function confirmPayment() {
  const orderData = {
    orderId: Date.now(),
    customer: {
      name: document.getElementById('customerName').value,
      phone: document.getElementById('customerPhone').value,
      email: document.getElementById('customerEmail').value,
      address: document.getElementById('customerAddress').value
    },
    items: cart,
    total: cart.reduce((sum, item) => sum + (item.price * item.quantity), 0),
    timestamp: new Date().toISOString(),
    status: 'pending'
  };

  // บันทึกคำสั่งซื้อ (ในการใช้งานจริงจะส่งไป API)
  console.log('Order Data:', orderData);

  // แสดงข้อความสำเร็จ
  document.getElementById('qrPayment').innerHTML = `
                <div class="success-message">
                    <h3><i class="fas fa-check-circle"></i> คำสั่งซื้อสำเร็จ!</h3>
                    <p>หมายเลขคำสั่งซื้อ: ${orderData.orderId}</p>
                    <p>เราจะติดต่อกลับภายใน 24 ชั่วโมง</p>
                </div>
            `;

  // เคลียร์ตะกร้า
  setTimeout(() => {
    cart = [];
    updateCartUI();
    toggleCart();
  }, 3000);
}

// ระบบค้นหาและกรอง
function filterProducts() {
  const category = document.getElementById('categoryFilter').value;
  const size = document.getElementById('sizeFilter').value;
  const priceRange = document.getElementById('priceFilter').value;
  const search = document.getElementById('searchInput').value.toLowerCase();

  filteredProducts = productsData.filter(product => {
    const matchCategory = !category || product.category === category;
    const matchSize = !size || product.sizes.includes(size);
    const matchSearch = !search || product.name.toLowerCase().includes(search) ||
      product.description.toLowerCase().includes(search);

    let matchPrice = true;
    if (priceRange) {
      const [min, max] = priceRange.split('-').map(p => p.replace('+', ''));
      const minPrice = parseInt(min);
      const maxPrice = max ? parseInt(max) : Infinity;
      matchPrice = product.price >= minPrice && product.price <= maxPrice;
    }

    return matchCategory && matchSize && matchSearch && matchPrice;
  });

  displayProducts(filteredProducts);
}

// Event Listeners
document.getElementById('categoryFilter').addEventListener('change', filterProducts);
document.getElementById('sizeFilter').addEventListener('change', filterProducts);
document.getElementById('priceFilter').addEventListener('change', filterProducts);
document.getElementById('searchInput').addEventListener('input', filterProducts);

// ปิด modal เมื่อคลิกนอกพื้นที่
window.onclick = function(event) {
  const modal = document.getElementById('cartModal');
  if (event.target === modal) {
    modal.style.display = 'none';
  }
}

// Smooth scrolling
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
  anchor.addEventListener('click', function(e) {
    e.preventDefault();
    const target = document.querySelector(this.getAttribute('href'));
    if (target) {
      target.scrollIntoView({
        behavior: 'smooth',
        block: 'start'
      });
    }
  });
});

// เริ่มต้นโหลดข้อมูล
window.addEventListener('DOMContentLoaded', () => {
  loadProducts();
});

// API Simulation Functions (สำหรับการพัฒนาต่อ)
const API = {
  // ดึงข้อมูลสินค้า
  async getProducts() {
    // โหลดข้อมูลจากไฟล์ products.json
    const response = await fetch('api/products.json');
    if (!response.ok) throw new Error('ไม่สามารถโหลดข้อมูลสินค้าได้');
    const data = await response.json();
    return data;
  },

  // บันทึกคำสั่งซื้อ
  async saveOrder(orderData) {
    // จำลองการส่งข้อมูลไป API
    return new Promise(resolve => {
      setTimeout(() => {
        console.log('Order saved to API:', orderData);
        resolve({success: true, orderId: orderData.orderId});
      }, 1000);
    });
  },

  // อัพเดทสถานะคำสั่งซื้อ
  async updateOrderStatus(orderId, status) {
    return new Promise(resolve => {
      setTimeout(() => {
        console.log(`Order ${orderId} status updated to: ${status}`);
        resolve({success: true});
      }, 500);
    });
  }
};