dashboard.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <div class="admin--dashboard">
  3. <div class="admin--dashboard-stats">
  4. <div class="admin--stat-card">
  5. <div class="admin--stat-icon">📊</div>
  6. <div class="admin--stat-content">
  7. <h4>총 팝업</h4>
  8. <p class="admin--stat-number">{{ stats.popups }}</p>
  9. </div>
  10. </div>
  11. <div class="admin--stat-card">
  12. <div class="admin--stat-icon">🏢</div>
  13. <div class="admin--stat-content">
  14. <h4>총 지점</h4>
  15. <p class="admin--stat-number">{{ stats.branches }}</p>
  16. </div>
  17. </div>
  18. <div class="admin--stat-card">
  19. <div class="admin--stat-icon">👥</div>
  20. <div class="admin--stat-content">
  21. <h4>총 직원</h4>
  22. <p class="admin--stat-number">{{ stats.employees }}</p>
  23. </div>
  24. </div>
  25. <div class="admin--stat-card">
  26. <div class="admin--stat-icon">📝</div>
  27. <div class="admin--stat-content">
  28. <h4>브로셔 요청</h4>
  29. <p class="admin--stat-number">{{ stats.brochures }}</p>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="admin--dashboard-recent">
  34. <h4>최근 활동</h4>
  35. <div class="admin--recent-list">
  36. <p class="admin--no-data">최근 활동 내역이 없습니다.</p>
  37. </div>
  38. </div>
  39. </div>
  40. </template>
  41. <script setup>
  42. import { ref, onMounted } from 'vue'
  43. definePageMeta({
  44. layout: 'admin',
  45. middleware: ['auth']
  46. })
  47. const stats = ref({
  48. popups: 0,
  49. branches: 0,
  50. employees: 0,
  51. brochures: 0
  52. })
  53. const { get } = useApi()
  54. const loadDashboardStats = async () => {
  55. const { data, error } = await get('/dashboard/stats')
  56. console.log('[Dashboard] API 응답:', { data, error })
  57. if (error) {
  58. console.error('[Dashboard] 통계 로드 실패:', error)
  59. return
  60. }
  61. // API 응답: { success: true, data: { popups, branches, employees, brochures } }
  62. if (data?.success && data?.data) {
  63. stats.value = data.data
  64. console.log('[Dashboard] 통계 로드 성공:', stats.value)
  65. }
  66. }
  67. onMounted(() => {
  68. loadDashboardStats()
  69. })
  70. </script>