File manager - Edit - /home/webapp69.cm.in.th/u69319090034/Shop 034/admin.php
Back
<?php // หลังบ้าน - หน้าแดชบอร์ดสรุปภาพรวมระบบ (admin.php) require_once 'auth.php'; requireSellerLogin(); require_once 'config.php'; $user = getCurrentUser(); $sellerId = $user['id'] ?? 0; $isAdmin = isAdminLoggedIn(); try { if ($isAdmin) { // Admin sees all $stmtIncome = $conn->query("SELECT SUM(total_amount) FROM orders WHERE status != 'cancelled'"); $totalIncome = floatval($stmtIncome->fetchColumn()); $stmtOrdersCount = $conn->query("SELECT COUNT(*) FROM orders"); $totalOrders = intval($stmtOrdersCount->fetchColumn()); $stmtLowStock = $conn->query("SELECT COUNT(*) FROM product_variants WHERE stock_quantity <= 2"); $lowStockCount = intval($stmtLowStock->fetchColumn()); $recentOrders = $conn->query("SELECT * FROM orders ORDER BY id DESC LIMIT 5")->fetchAll(); $products = $conn->query(" SELECT p.*, c.name as category_name, (SELECT SUM(stock_quantity) FROM product_variants WHERE product_id = p.id) as total_stock, (SELECT image_url FROM product_images WHERE product_id = p.id AND is_main = 1 LIMIT 1) as main_image, (SELECT image_url FROM product_images WHERE product_id = p.id ORDER BY sort_order ASC LIMIT 1) as fallback_image FROM products p LEFT JOIN categories c ON p.category_id = c.id ORDER BY p.id DESC ")->fetchAll(); } else { // Seller sees only their own shop stats and products $stmtIncome = $conn->prepare(" SELECT SUM(oi.price * oi.quantity) FROM order_items oi JOIN orders o ON oi.order_id = o.id JOIN product_variants pv ON oi.product_variant_id = pv.id JOIN products p ON pv.product_id = p.id WHERE p.seller_id = :seller_id AND o.status != 'cancelled' "); $stmtIncome->execute([':seller_id' => $sellerId]); $totalIncome = floatval($stmtIncome->fetchColumn()); $stmtOrdersCount = $conn->prepare(" SELECT COUNT(DISTINCT o.id) FROM orders o JOIN order_items oi ON o.id = oi.order_id JOIN product_variants pv ON oi.product_variant_id = pv.id JOIN products p ON pv.product_id = p.id WHERE p.seller_id = :seller_id "); $stmtOrdersCount->execute([':seller_id' => $sellerId]); $totalOrders = intval($stmtOrdersCount->fetchColumn()); $stmtLowStock = $conn->prepare(" SELECT COUNT(*) FROM product_variants pv JOIN products p ON pv.product_id = p.id WHERE p.seller_id = :seller_id AND pv.stock_quantity <= 2 "); $stmtLowStock->execute([':seller_id' => $sellerId]); $lowStockCount = intval($stmtLowStock->fetchColumn()); $stmtRecent = $conn->prepare(" SELECT DISTINCT o.* FROM orders o JOIN order_items oi ON o.id = oi.order_id JOIN product_variants pv ON oi.product_variant_id = pv.id JOIN products p ON pv.product_id = p.id WHERE p.seller_id = :seller_id ORDER BY o.id DESC LIMIT 5 "); $stmtRecent->execute([':seller_id' => $sellerId]); $recentOrders = $stmtRecent->fetchAll(); $stmtProducts = $conn->prepare(" SELECT p.*, c.name as category_name, (SELECT SUM(stock_quantity) FROM product_variants WHERE product_id = p.id) as total_stock, (SELECT image_url FROM product_images WHERE product_id = p.id AND is_main = 1 LIMIT 1) as main_image, (SELECT image_url FROM product_images WHERE product_id = p.id ORDER BY sort_order ASC LIMIT 1) as fallback_image FROM products p LEFT JOIN categories c ON p.category_id = c.id WHERE p.seller_id = :seller_id ORDER BY p.id DESC "); $stmtProducts->execute([':seller_id' => $sellerId]); $products = $stmtProducts->fetchAll(); } } catch (PDOException $e) { die("เกิดข้อผิดพลาดในการโหลดข้อมูลหลังบ้าน: " . $e->getMessage()); } ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ระบบหลังบ้านผู้ขาย - AMARA STUDIO</title> <link rel="stylesheet" href="style.css"> </head> <body> <!-- Header Navigation --> <header> <div class="nav-container"> <a href="index.php" class="logo">AMARA<span>STUDIO</span></a> <span style="background: var(--dark); color: white; padding: 4px 10px; border-radius: 4px; font-size: 11px; font-weight: 700; letter-spacing: 1px;">PORTAL ADMIN</span> <ul class="nav-menu"> <li style="display:flex; align-items:center; gap:8px; color: var(--text-muted); font-size:14px;"> <span>👤 <?= htmlspecialchars(getAdminName()) ?></span> </li> <li><a href="manual.php" class="nav-link" target="_blank">📖 คู่มือการใช้งาน</a></li> <li><a href="index.php" class="nav-link">หน้าร้านค้า</a></li> <li> <a href="logout.php" class="nav-link" id="logout-btn" style="color: var(--danger); font-weight: 600;" onclick="return confirmLogout(event)"> 🚪 ออกจากระบบ </a> </li> </ul> </div> </header> <div class="container"> <div class="admin-layout"> <!-- แผง Sidebar นำทางหลังบ้าน --> <aside class="admin-menu-sidebar"> <ul class="admin-menu-list"> <li class="admin-menu-item active"><a href="admin.php">📊 แดชบอร์ดภาพรวม</a></li> <li class="admin-menu-item"><a href="admin_product.php">➕ เพิ่มสินค้าใหม่ (Matrix Generator)</a></li> <li class="admin-menu-item"><a href="admin_orders.php">📦 จัดการออเดอร์ & ใบแพ็กของ</a></li> </ul> </aside> <!-- พื้นที่แสดงข้อมูลแดชบอร์ดหลัก --> <main> <h1 style="margin-bottom: 25px; font-size: 24px; font-weight: 700;">ภาพรวมการจัดการร้านค้าแฟชั่น</h1> <!-- กล่องสถิติย่อ (Stats Card Grid) --> <div class="admin-stats-grid"> <div class="stat-box"> <span class="stat-title">ยอดขายร้านค้าสะสม</span> <span class="stat-value" style="color: var(--primary);">฿<?= number_format($totalIncome) ?></span> </div> <div class="stat-box"> <span class="stat-title">คำสั่งซื้อในระบบทั้งหมด</span> <span class="stat-value"><?= number_format($totalOrders) ?> ออเดอร์</span> </div> <div class="stat-box" style="border-left: 4px solid var(--warning);"> <span class="stat-title">สินค้าที่ต้องเติมสต็อก (≤ 2 ชิ้น)</span> <span class="stat-value" style="color: var(--warning);"><?= $lowStockCount ?> รายการ</span> </div> </div> <!-- 1. ส่วนคำสั่งซื้อล่าสุด (Recent Orders) --> <div class="admin-card"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"> <h2 style="font-size: 18px; font-weight: 700;">คำสั่งซื้อล่าสุด</h2> <a href="admin_orders.php" style="color: var(--primary); text-decoration: none; font-size: 14px; font-weight: 600;">จัดการคำสั่งซื้อทั้งหมด →</a> </div> <table class="admin-table"> <thead> <tr> <th>รหัสออเดอร์</th> <th>ชื่อลูกค้า</th> <th>ยอดชำระสุทธิ</th> <th>สถานะออเดอร์</th> <th>วันที่สั่งซื้อ</th> <th>การจัดการ</th> </tr> </thead> <tbody> <?php if (empty($recentOrders)): ?> <tr> <td colspan="6" style="text-align: center; color: var(--text-muted);">ไม่มีรายการคำสั่งซื้อเข้ามาในขณะนี้</td> </tr> <?php else: ?> <?php foreach ($recentOrders as $order): ?> <tr> <td><strong>#ORD-<?= $order['id'] ?></strong></td> <td><?= htmlspecialchars($order['customer_name']) ?></td> <td>฿<?= number_format($order['total_amount']) ?></td> <td> <span class="badge <?= $order['status'] ?>"> <?= $order['status'] === 'pending' ? 'รอเตรียมส่ง' : ($order['status'] === 'processing' ? 'กำลังแพ็กของ' : ($order['status'] === 'shipped' ? 'จัดส่งแล้ว' : 'ยกเลิกออเดอร์')) ?> </span> </td> <td><?= date('d/m/Y H:i', strtotime($order['created_at'])) ?></td> <td> <a href="admin_orders.php?order_id=<?= $order['id'] ?>" class="btn btn-outline" style="padding: 5px 12px; font-size: 12px;">พิมพ์ใบแพ็ก</a> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> <!-- 2. ส่วนแสดงรายการสินค้า (Products List) --> <div class="admin-card"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"> <h2 style="font-size: 18px; font-weight: 700;">รายการสินค้าที่มีจำหน่าย</h2> <a href="admin_product.php" class="btn btn-dark" style="padding: 8px 16px; font-size: 13px;">➕ เพิ่มสินค้าใหม่</a> </div> <table class="admin-table"> <thead> <tr> <th>รูปภาพ</th> <th>ชื่อสินค้า</th> <th>หมวดหมู่</th> <th>ราคาเริ่มต้น</th> <th>สต็อกรวมทุกไซซ์</th> <th>สถานะ</th> </tr> </thead> <tbody> <?php if (empty($products)): ?> <tr> <td colspan="6" style="text-align: center; color: var(--text-muted);">ไม่มีสินค้าในตารางระบบหลังบ้าน</td> </tr> <?php else: ?> <?php foreach ($products as $prod): ?> <?php $img = !empty($prod['main_image']) ? $prod['main_image'] : $prod['fallback_image']; if (empty($img)) { $img = 'https://images.unsplash.com/photo-1490481651871-ab68de25d43d?w=100'; } ?> <tr> <td> <img src="<?= htmlspecialchars($img) ?>" alt="Product" style="width: 40px; height: 50px; object-fit: cover; border-radius: 4px;"> </td> <td><strong><?= htmlspecialchars($prod['name']) ?></strong></td> <td><?= htmlspecialchars($prod['category_name']) ?></td> <td>฿<?= number_format($prod['base_price']) ?></td> <td> <?php if ($prod['total_stock'] === null): ?> <span style="color: var(--danger);">ยังไม่ได้สร้างตาราง SKU</span> <?php elseif ($prod['total_stock'] == 0): ?> <span style="color: var(--danger); font-weight: 700;">สินค้าหมดสต็อก</span> <?php else: ?> <?= $prod['total_stock'] ?> ชิ้น <?php endif; ?> </td> <td> <span style="color: <?= $prod['status'] === 'active' ? 'var(--success)' : 'var(--text-muted)' ?>; font-weight: 600;"> <?= $prod['status'] === 'active' ? 'เปิดขายปกติ' : 'ปิดการขาย' ?> </span> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </main> </div> </div> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script> function confirmLogout(e) { e.preventDefault(); Swal.fire({ title: 'ออกจากระบบ?', text: 'ต้องการออกจากระบบผู้ดูแลใช่หรือไม่?', icon: 'question', showCancelButton: true, confirmButtonColor: '#e53e3e', cancelButtonColor: '#718096', confirmButtonText: 'ออกจากระบบ', cancelButtonText: 'ยกเลิก' }).then((result) => { if (result.isConfirmed) window.location.href = 'logout.php'; }); } </script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings