神
THẦN
← Trang chủ
Đăng xuất
Xin chào! 👋
Quản lý tài khoản và theo dõi đơn hàng của bạn
📦 Đơn hàng gần đây
Xem tất cả →
📦
Chưa có đơn hàng nào
Bắt đầu mua sắm ngay nhé!
Mua sắm ngay
👤 Thông tin cá nhân
Họ và tên
Số điện thoại
Email
Địa chỉ giao hàng
💾 Lưu thay đổi
let currentUser; document.addEventListener('DOMContentLoaded', () => { currentUser = Auth.requireAuth(); if (!currentUser) return; renderSidebar(); renderStats(); renderRecentOrders(); fillProfileForm(); }); function renderSidebar() { const initials = currentUser.name.split(' ').map(w => w[0]).join('').substring(0, 2).toUpperCase(); const roleLabel = { buyer: '👤 Người mua', seller: '🏪 Người bán', admin: '🔐 Admin' }[currentUser.role] || 'Thành viên'; document.getElementById('sidebarUserCard').innerHTML = `
${initials}
${currentUser.name}
${roleLabel}
Số dư Thần Pay
${formatMoney(currentUser.walletBalance || 0)}
`; document.getElementById('navUserInfo').innerHTML = `
${initials}
${currentUser.name}
`; document.getElementById('welcomeTitle').textContent = `Xin chào, ${currentUser.name}! 👋`; // Seller link if (currentUser.role === 'seller' && currentUser.shopStatus === 'approved') { document.getElementById('sellerLink').href = 'seller-dashboard.html'; document.getElementById('sellerLink').innerHTML = '
🏪
Kênh người bán'; } // Pending orders count for badge const myOrders = DB.Orders.byBuyer(currentUser.id); const pending = myOrders.filter(o => o.status === 'pending' || o.status === 'processing').length; const countEl = document.getElementById('pendingOrderCount'); if (pending > 0) countEl.textContent = pending; else countEl.style.display = 'none'; } function renderStats() { const orders = DB.Orders.byBuyer(currentUser.id); const totalSpent = orders.filter(o => o.status === 'delivered').reduce((a, o) => a + o.total, 0); const delivered = orders.filter(o => o.status === 'delivered').length; const pending = orders.filter(o => ['pending', 'processing', 'shipping'].includes(o.status)).length; document.getElementById('statsGrid').innerHTML = `
🛍️
${orders.length}
Tổng đơn hàng
📦
${pending}
Đang giao hàng
✅
${delivered}
Đã nhận hàng
💳
${formatMoney(currentUser.walletBalance || 0)}
Số dư ví
`; } function renderRecentOrders() { const orders = DB.Orders.byBuyer(currentUser.id).reverse().slice(0, 3); const container = document.getElementById('recentOrdersList'); if (!orders.length) return; container.innerHTML = orders.map(o => renderOrderCard(o)).join(''); } function renderOrderCard(o) { const statusMap = { pending: ['Chờ xác nhận', 'status-pending'], processing: ['Đang đóng gói', 'status-processing'], shipping: ['Đang giao hàng', 'status-shipping'], delivered: ['Đã giao', 'status-delivered'], cancelled: ['Đã huỷ', 'status-cancelled'], }; const [label, cls] = statusMap[o.status] || ['Không xác định', '']; const items = o.items || []; return `
${o.shopName}
Đơn #${o.id} · ${formatDate(o.createdAt)}
${label}
${items.slice(0, 2).map(item => `
${item.emoji || '📦'}
${item.name}
x${item.qty}
${formatMoney(item.price * item.qty)}
`).join('')} ${items.length > 2 ? `
+${items.length - 2} sản phẩm nữa
` : ''}
`; } function fillProfileForm() { document.getElementById('profileName').value = currentUser.name || ''; document.getElementById('profilePhone').value = currentUser.phone || ''; document.getElementById('profileEmail').value = currentUser.email || ''; document.getElementById('profileAddress').value = currentUser.address || ''; } function saveProfile(e) { e.preventDefault(); const name = document.getElementById('profileName').value.trim(); const email = document.getElementById('profileEmail').value.trim(); const address = document.getElementById('profileAddress').value.trim(); Auth.updateProfile({ name, email, address }); showToast('✅ Đã lưu thông tin thành công!'); } function cancelOrder(orderId) { if (!confirm('Bạn có chắc muốn huỷ đơn hàng này?')) return; DB.Orders.update(orderId, { status: 'cancelled' }); renderRecentOrders(); renderStats(); showToast('Đã huỷ đơn hàng #' + orderId); } function formatMoney(n) { return '₫' + (n || 0).toLocaleString('vi-VN'); } function formatDate(d) { if (!d) return ''; const date = new Date(d); return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`; } function showToast(msg) { const t = document.createElement('div'); t.className = 'toast'; t.textContent = msg; document.body.appendChild(t); setTimeout(() => t.remove(), 3000); }