File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/views/admin/dashboard/index.php
Back
<?php /** * Admin Dashboard View * Operational overview for CARGOO Multi-Vendor E-Commerce Platform */ $us = $user_stats ?? []; $ss = $store_stats ?? []; $ps = $product_stats ?? []; $os = $order_stats ?? []; $rc = $report_counts ?? []; $pendingReviewCount = (int)($ps['pending_review'] ?? 0); $submittedReportsCount = (int)($rc['submitted'] ?? 0); ?> <!-- ── Page Header ─────────────────────────────────────── --> <div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 mb-4"> <div> <h4 class="fw-bold mb-1 text-dark">ภาพรวมระบบ (Operations Dashboard)</h4> <p class="text-muted small mb-0">ศูนย์ติดตามสถานะ กิจกรรม และความเคลื่อนไหวในแพลตฟอร์มแบบเรียลไทม์</p> </div> <div class="d-flex align-items-center gap-2"> <span class="badge bg-white text-muted border px-3 py-2 fw-normal" style="font-size: 0.78rem;"> <i class="bi bi-clock-history me-1 text-primary"></i> อัปเดตล่าสุด: <?= date('d M Y • H:i:s') ?> </span> </div> </div> <!-- ── Actionable Alerts Banner (If any pending items) ─── --> <?php if ($pendingReviewCount > 0 || $submittedReportsCount > 0): ?> <div class="alert alert-warning border-warning d-flex align-items-center justify-content-between flex-wrap gap-2 py-2 px-3 mb-4 rounded-3 shadow-xs"> <div class="d-flex align-items-center gap-2 small"> <i class="bi bi-exclamation-triangle-fill text-warning fs-6"></i> <span> <strong>สิ่งที่ต้องดำเนินการเร่งด่วน:</strong> <?php if ($pendingReviewCount > 0): ?> มีสินค้าใหม่รอตรวจสอบ <strong class="text-dark"><?= $pendingReviewCount ?> รายการ</strong> • <?php endif; ?> <?php if ($submittedReportsCount > 0): ?> มีรายงานปัญหาใหม่ <strong class="text-danger"><?= $submittedReportsCount ?> รายการ</strong> <?php endif; ?> </span> </div> <div class="d-flex gap-2"> <?php if ($pendingReviewCount > 0 && AdminMiddleware::can('product.approve')): ?> <a href="<?= url('/admin/products?status=pending') ?>" class="btn btn-warning btn-sm py-0 px-2 fw-semibold" style="font-size: 0.75rem;"> ตรวจสินค้า → </a> <?php endif; ?> <?php if ($submittedReportsCount > 0 && AdminMiddleware::can('report.manage')): ?> <a href="<?= url('/admin/reports?status=submitted') ?>" class="btn btn-danger btn-sm py-0 px-2 fw-semibold" style="font-size: 0.75rem;"> ตรวจรายงาน → </a> <?php endif; ?> </div> </div> <?php endif; ?> <!-- ── Core Metric Cards: Row 1 ────────────────────────── --> <div class="row g-3 mb-4"> <!-- Users Metric --> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">ผู้ใช้งานในระบบ</span> <div class="admin-metric-icon-box bg-primary bg-opacity-10 text-primary"> <i class="bi bi-people-fill"></i> </div> </div> <div class="admin-metric-value"><?= number_format((int)($us['total_users'] ?? 0)) ?></div> <div class="admin-metric-sub d-flex align-items-center justify-content-between"> <span class="text-success"><i class="bi bi-person-plus-fill me-1"></i>+<?= (int)($us['new_today'] ?? 0) ?> วันนี้</span> <span>ระงับ <?= (int)($us['suspended_users'] ?? 0) ?></span> </div> </div> </div> <!-- Stores Metric --> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">ร้านค้าทั้งหมด</span> <div class="admin-metric-icon-box bg-success bg-opacity-10 text-success"> <i class="bi bi-shop"></i> </div> </div> <div class="admin-metric-value"><?= number_format((int)($ss['total_stores'] ?? 0)) ?></div> <div class="admin-metric-sub d-flex align-items-center justify-content-between"> <span class="text-primary"><i class="bi bi-patch-check-fill me-1"></i><?= (int)($ss['official_stores'] ?? 0) ?> Official</span> <span>ระงับ <?= (int)($ss['suspended_stores'] ?? 0) ?></span> </div> </div> </div> <!-- Products Metric --> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">สินค้าทั้งหมด</span> <div class="admin-metric-icon-box bg-warning bg-opacity-10 text-warning"> <i class="bi bi-box-seam-fill"></i> </div> </div> <div class="admin-metric-value"><?= number_format((int)($ps['total_products'] ?? 0)) ?></div> <div class="admin-metric-sub d-flex align-items-center justify-content-between"> <span class="text-warning fw-semibold"><i class="bi bi-hourglass-split me-1"></i>รอตรวจ <?= $pendingReviewCount ?></span> <span>ซ่อน <?= (int)($ps['hidden_products'] ?? 0) ?></span> </div> </div> </div> <!-- Reports Metric --> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">รายงานปัญหา</span> <div class="admin-metric-icon-box bg-danger bg-opacity-10 text-danger"> <i class="bi bi-flag-fill"></i> </div> </div> <div class="admin-metric-value"><?= (int)($rc['submitted'] ?? 0) + (int)($rc['reviewing'] ?? 0) ?></div> <div class="admin-metric-sub d-flex align-items-center justify-content-between"> <span class="text-danger fw-semibold">ส่งใหม่ <?= (int)($rc['submitted'] ?? 0) ?></span> <span>กำลังตรวจ <?= (int)($rc['reviewing'] ?? 0) ?></span> </div> </div> </div> </div> <!-- ── Financial Summary Row (if permitted) ───────────── --> <?php if (AdminMiddleware::can('finance.view')): ?> <div class="row g-3 mb-4"> <div class="col-6 col-lg-3"> <div class="admin-metric-card bg-light border-0"> <div class="small text-muted fw-semibold mb-1"><i class="bi bi-calendar-event me-1 text-primary"></i>GMV วันนี้</div> <div class="fs-5 fw-bold text-primary">฿<?= number_format((float)($os['today_gmv'] ?? 0), 2) ?></div> <div class="admin-metric-sub"><?= (int)($os['today_orders'] ?? 0) ?> รายการสำเร็จ</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card bg-light border-0"> <div class="small text-muted fw-semibold mb-1"><i class="bi bi-currency-exchange me-1 text-dark"></i>GMV รวมทั้งหมด</div> <div class="fs-5 fw-bold text-dark">฿<?= number_format((float)($os['total_gmv'] ?? 0), 2) ?></div> <div class="admin-metric-sub"><?= number_format((int)($os['completed'] ?? 0)) ?> ออเดอร์เสร็จสิ้น</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card bg-light border-0"> <div class="small text-muted fw-semibold mb-1"><i class="bi bi-percent me-1 text-success"></i>รายได้ค่าคอมมิชชัน</div> <div class="fs-5 fw-bold text-success">฿<?= number_format((float)($os['total_commission'] ?? 0), 2) ?></div> <div class="admin-metric-sub">Platform Fee Collected</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card bg-light border-0"> <div class="small text-muted fw-semibold mb-1"><i class="bi bi-truck me-1 text-warning"></i>ออเดอร์ระหว่างดำเนินการ</div> <div class="fs-5 fw-bold text-warning"><?= number_format((int)($os['preparing'] ?? 0) + (int)($os['shipping'] ?? 0)) ?></div> <div class="admin-metric-sub">กำลังแพ็ค <?= (int)($os['preparing'] ?? 0) ?> • ขนส่ง <?= (int)($os['shipping'] ?? 0) ?></div> </div> </div> </div> <?php endif; ?> <!-- ── Main Dashboard Workspace: Orders & Audit Feed ──── --> <div class="row g-4"> <!-- Recent Orders Table --> <div class="col-lg-8"> <div class="admin-table-container mb-4"> <div class="admin-table-header"> <div class="d-flex align-items-center gap-2"> <i class="bi bi-receipt text-primary"></i> <span class="fw-bold text-dark" style="font-size: 0.9rem;">คำสั่งซื้อล่าสุดข้ามร้านค้า</span> </div> <?php if (AdminMiddleware::can('order.view')): ?> <a href="<?= url('/admin/orders') ?>" class="btn btn-outline-primary btn-sm py-1 px-3" style="font-size: 0.78rem;"> ดูคำสั่งซื้อทั้งหมด → </a> <?php endif; ?> </div> <div class="table-responsive"> <table class="admin-table"> <thead> <tr> <th>เลขออเดอร์</th> <th>ร้านค้า</th> <th>ยอดชำระ</th> <th>สถานะออเดอร์</th> <th>วันที่สั่งซื้อ</th> </tr> </thead> <tbody> <?php if (empty($recent_orders)): ?> <tr> <td colspan="5" class="text-center text-muted py-4">ยังไม่มีคำสั่งซื้อในระบบ</td> </tr> <?php else: foreach ($recent_orders as $order): ?> <tr> <td> <a href="<?= url('/admin/orders/' . e($order['order_no'])) ?>" class="fw-semibold text-primary font-monospace"> <?= e($order['order_no']) ?> </a> </td> <td> <span class="text-dark small fw-medium"><?= e($order['store_name']) ?></span> </td> <td> <span class="fw-semibold">฿<?= number_format((float)$order['total_amount'], 2) ?></span> </td> <td> <?php $statusMap = [ 'pending_payment' => 'status-pending', 'payment_confirmed' => 'status-approved', 'preparing' => 'status-preparing', 'shipping' => 'status-shipping', 'completed' => 'status-completed', 'cancelled' => 'status-cancelled', ]; $pillClass = $statusMap[$order['order_status']] ?? 'status-secondary'; ?> <span class="status-pill <?= $pillClass ?>"> <?= e($order['order_status']) ?> </span> </td> <td class="text-muted" style="font-size: 0.78rem;"> <?= date('d/m/Y H:i', strtotime($order['created_at'])) ?> </td> </tr> <?php endforeach; endif; ?> </tbody> </table> </div> </div> </div> <!-- Operational Side Column --> <div class="col-lg-4"> <!-- Quick Management Hub --> <div class="admin-detail-card mb-4"> <div class="admin-detail-card-header"> <span><i class="bi bi-lightning-charge text-primary me-2"></i>เมนูดำเนินการด่วน</span> </div> <div class="admin-detail-card-body p-3"> <div class="d-grid gap-2"> <?php if (AdminMiddleware::can('product.approve')): ?> <a href="<?= url('/admin/products?status=pending') ?>" class="btn btn-outline-warning btn-sm text-start d-flex justify-content-between align-items-center py-2"> <span><i class="bi bi-box-seam me-2"></i>ตรวจสินค้ารอ Review</span> <?php if ($pendingReviewCount > 0): ?> <span class="badge bg-warning text-dark"><?= $pendingReviewCount ?></span> <?php endif; ?> </a> <?php endif; ?> <?php if (AdminMiddleware::can('report.manage')): ?> <a href="<?= url('/admin/reports?status=submitted') ?>" class="btn btn-outline-danger btn-sm text-start d-flex justify-content-between align-items-center py-2"> <span><i class="bi bi-flag me-2"></i>จัดการรายงานใหม่</span> <?php if ($submittedReportsCount > 0): ?> <span class="badge bg-danger"><?= $submittedReportsCount ?></span> <?php endif; ?> </a> <?php endif; ?> <?php if (AdminMiddleware::can('user.view')): ?> <a href="<?= url('/admin/users') ?>" class="btn btn-outline-secondary btn-sm text-start py-2"> <i class="bi bi-people me-2"></i>ค้นหาและจัดการผู้ใช้ </a> <?php endif; ?> <?php if (AdminMiddleware::can('seller.view')): ?> <a href="<?= url('/admin/sellers') ?>" class="btn btn-outline-secondary btn-sm text-start py-2"> <i class="bi bi-shop-window me-2"></i>ตรวจสอบร้านค้า Seller </a> <?php endif; ?> </div> </div> </div> <!-- Recent Audit Activity Feed --> <?php if (AdminMiddleware::can('admin.manage')): ?> <div class="admin-detail-card"> <div class="admin-detail-card-header"> <span><i class="bi bi-journal-text text-primary me-2"></i>บันทึกการดำเนินการล่าสุด</span> <a href="<?= url('/admin/audit-log') ?>" class="btn btn-link btn-sm p-0 text-primary small">ทั้งหมด →</a> </div> <div class="admin-detail-card-body p-3"> <?php if (empty($recent_logs)): ?> <p class="text-muted small text-center my-2">ยังไม่มีบันทึกกิจกรรม</p> <?php else: ?> <div class="admin-timeline"> <?php foreach ($recent_logs as $log): ?> <div class="admin-timeline-item"> <div class="admin-timeline-point"></div> <div class="small fw-semibold text-dark"> @<?= e($log['admin_username'] ?? 'System') ?> <span class="badge bg-light text-primary border ms-1 font-monospace" style="font-size: 0.65rem;"> <?= e($log['action']) ?> </span> </div> <div class="text-muted" style="font-size: 0.75rem;"> <?= e(mb_substr($log['detail'] ?? '', 0, 45)) ?> </div> <div class="text-muted" style="font-size: 0.68rem;"> <?= date('d/m H:i', strtotime($log['created_at'])) ?> </div> </div> <?php endforeach; ?> </div> <?php endif; ?> </div> </div> <?php endif; ?> </div> </div>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.45 |
proxy
|
phpinfo
|
Settings