diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index 25c61ac..0cca2e4 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -10,18 +10,24 @@ class DashboardController extends Controller { public function index() { - // 模擬數據或從資料庫獲取 - // 由於目前沒有數據,我們先傳遞一些預設值或空集合 - $totalMachines = Machine::count(); - $onlineMachines = Machine::where('status', 'online')->count(); - $offlineMachines = Machine::where('status', 'offline')->count(); - $errorMachines = Machine::where('status', 'error')->count(); + // 從資料庫獲取真實統計數據 + $totalRevenue = \App\Models\Member\MemberWallet::sum('balance'); + $activeMachines = Machine::where('status', 'online')->count(); + $alertsPending = Machine::where('status', 'error')->count(); + $memberCount = \App\Models\Member\Member::count(); + + // 獲取最新動態 (最近 3 筆機台日誌) + $latestActivities = \App\Models\Machine\MachineLog::with('machine') + ->latest() + ->limit(3) + ->get(); return view('admin.dashboard', compact( - 'totalMachines', - 'onlineMachines', - 'offlineMachines', - 'errorMachines' + 'totalRevenue', + 'activeMachines', + 'alertsPending', + 'memberCount', + 'latestActivities' )); } } diff --git a/database/factories/Machine/MachineLogFactory.php b/database/factories/Machine/MachineLogFactory.php index bd3b8d6..dacfe26 100644 --- a/database/factories/Machine/MachineLogFactory.php +++ b/database/factories/Machine/MachineLogFactory.php @@ -12,15 +12,40 @@ class MachineLogFactory extends Factory public function definition(): array { + $messages = [ + 'info' => [ + '機台啟動完成', + '系統心跳上報', + '交易成功 (訂單 #'.fake()->numberBetween(1000, 9999).')', + '補貨作業完成', + '環境溫度穩定 (24C)', + ], + 'warning' => [ + '貨道 A3 庫存偏低', + '通訊品質不穩定', + '感測器回報數值異常', + '機門開啟次數過多', + ], + 'error' => [ + '馬達轉動失效 (貨道 B2)', + '硬幣器卡幣', + '散熱風扇停止運作', + '電源供應模組故障', + '網路連線中斷', + ] + ]; + + $level = fake()->randomElement(['info', 'warning', 'error']); + return [ 'machine_id' => Machine::factory(), - 'level' => fake()->randomElement(['info', 'warning', 'error']), - 'message' => fake()->sentence(), + 'level' => $level, + 'message' => fake()->randomElement($messages[$level]), 'context' => [ 'ip' => fake()->ipv4(), 'uptime' => fake()->numberBetween(1000, 100000), ], - 'created_at' => now(), + 'created_at' => fake()->dateTimeBetween('-1 day', 'now'), ]; } } diff --git a/database/factories/Member/MemberFactory.php b/database/factories/Member/MemberFactory.php new file mode 100644 index 0000000..06f867f --- /dev/null +++ b/database/factories/Member/MemberFactory.php @@ -0,0 +1,27 @@ + (string) Str::uuid(), + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'phone' => '09' . fake()->numberBetween(10000000, 99999999), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'birthday' => fake()->date(), + 'gender' => fake()->randomElement(['male', 'female', 'other']), + 'is_active' => true, + 'email_verified_at' => now(), + ]; + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index ec1df6d..591f74b 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -18,6 +18,7 @@ class DatabaseSeeder extends Seeder $this->call([ AdminUserSeeder::class, MachineSeeder::class, + MemberSeeder::class, ]); } } diff --git a/database/seeders/MemberSeeder.php b/database/seeders/MemberSeeder.php new file mode 100644 index 0000000..37eb310 --- /dev/null +++ b/database/seeders/MemberSeeder.php @@ -0,0 +1,22 @@ +count(20)->create()->each(function ($member) { + MemberWallet::create([ + 'member_id' => $member->id, + 'balance' => fake()->randomFloat(2, 100, 5000), + 'bonus_balance' => fake()->randomFloat(2, 0, 500), + ]); + }); + } +} diff --git a/resources/css/app.css b/resources/css/app.css index a3b8434..8ca85a6 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -95,4 +95,30 @@ [x-cloak] { display: none !important; } +} + +@layer components { + .luxury-nav-item { + @apply flex items-center gap-x-3.5 py-2.5 px-4 text-sm font-medium rounded-xl transition-all duration-200; + @apply text-slate-500 hover:text-slate-900 hover:bg-slate-100; + @apply dark:text-slate-400 dark:hover:text-white dark:hover:bg-white/5; + } + + .luxury-nav-item.active { + @apply bg-slate-100 text-slate-900; + @apply dark:bg-white/10 dark:text-white; + position: relative; + } + + .luxury-nav-item.active::before { + content: ""; + @apply absolute left-0 w-1 h-5 bg-cyan-500 rounded-full shadow-[0_0_8px_rgba(6,182,212,0.5)]; + left: 0; + } + + /* Submenu styling */ + .luxury-submenu { + @apply mt-2 space-y-1 ps-4 border-l border-slate-200 ms-4; + @apply dark:border-white/10; + } } \ No newline at end of file diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 590db62..279d7f1 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -8,46 +8,46 @@

- Total Revenue + 總營收 (餘額)

-

$72,540.00

- +2.5% +

${{ number_format($totalRevenue, 2) }}

+ 實時

- Active Machines + 運作中機台

-

124 Units

+

{{ $activeMachines }} 台

- Alerts Pending + 待處理告警

-

12 Signals

+

{{ $alertsPending }} 則訊號

- Member Growth + 會員總數

-

2,840

- ↑ 12% +

{{ number_format($memberCount) }}

+
@@ -57,40 +57,63 @@
-

Revenue Performance

-

Daily revenue insights across all regions

+

營收績效分析

+

各地區每日營收洞察

+
+ +
+ + +
+ + + +
-
-
- Chart Visualization Placeholder + +
+
+ +
+
+ +
+

營收圖表數據載入中

+

即時數據串流將在此顯示

+
- +
-

Live Activity

+

即時動態

-
-
-

#MAC-402 Transaction Successful

-

Just now • Taipei Sector

-
-
-
-

#MAC-882 Motor Error Detail

-

2 mins ago • Taichung Sector

-
-
-
-

Maintenance Schedule Updated

-

15 mins ago • System System

-
+ @forelse($latestActivities as $activity) +
+
+

#{{ $activity->machine->code ?? 'N/A' }} {{ $activity->content }}

+

{{ $activity->created_at->diffForHumans() }} • {{ $activity->machine->location ?? '未知區域' }}

+
+ @empty +
+

目前尚無動態資料

+
+ @endforelse
- +
diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php index 6c67445..39770c2 100644 --- a/resources/views/layouts/admin.blade.php +++ b/resources/views/layouts/admin.blade.php @@ -39,7 +39,7 @@ x-cloak> -
+