Files
MySMSAPio/app/views/layouts/admin.html.erb
2025-10-22 17:22:17 +08:00

125 lines
6.1 KiB
Plaintext

<!DOCTYPE html>
<html lang="en" class="h-full bg-gray-50">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Admin - MySMSAPio</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
</head>
<body class="h-full">
<% if logged_in? %>
<div class="min-h-full">
<!-- Sidebar -->
<div class="fixed inset-y-0 z-50 flex w-72 flex-col">
<div class="flex grow flex-col gap-y-5 overflow-y-auto bg-gradient-to-b from-gray-900 to-gray-800 px-6 pb-4">
<div class="flex h-16 shrink-0 items-center border-b border-gray-700">
<h1 class="text-2xl font-bold text-white flex items-center gap-2">
<i class="fas fa-sms text-blue-400"></i>
MySMSAPio
</h1>
</div>
<nav class="flex flex-1 flex-col">
<ul role="list" class="flex flex-1 flex-col gap-y-7">
<li>
<ul role="list" class="-mx-2 space-y-1">
<%= link_to admin_dashboard_path, class: "group flex gap-x-3 rounded-md p-3 text-sm leading-6 font-semibold transition-all duration-200 #{current_page?(admin_dashboard_path) ? 'bg-gray-700 text-white' : 'text-gray-300 hover:text-white hover:bg-gray-700'}" do %>
<i class="fas fa-home w-6 h-6 shrink-0 flex items-center justify-center"></i>
Dashboard
<% end %>
<%= link_to admin_api_keys_path, class: "group flex gap-x-3 rounded-md p-3 text-sm leading-6 font-semibold transition-all duration-200 #{current_page?(admin_api_keys_path) || current_page?(new_admin_api_key_path) ? 'bg-gray-700 text-white' : 'text-gray-300 hover:text-white hover:bg-gray-700'}" do %>
<i class="fas fa-key w-6 h-6 shrink-0 flex items-center justify-center"></i>
API Keys
<% end %>
<%= link_to admin_logs_path, class: "group flex gap-x-3 rounded-md p-3 text-sm leading-6 font-semibold transition-all duration-200 #{current_page?(admin_logs_path) ? 'bg-gray-700 text-white' : 'text-gray-300 hover:text-white hover:bg-gray-700'}" do %>
<i class="fas fa-list w-6 h-6 shrink-0 flex items-center justify-center"></i>
SMS Logs
<% end %>
<%= link_to admin_gateways_path, class: "group flex gap-x-3 rounded-md p-3 text-sm leading-6 font-semibold transition-all duration-200 #{current_page?(admin_gateways_path) ? 'bg-gray-700 text-white' : 'text-gray-300 hover:text-white hover:bg-gray-700'}" do %>
<i class="fas fa-mobile-alt w-6 h-6 shrink-0 flex items-center justify-center"></i>
Gateways
<% end %>
<%= link_to admin_api_tester_path, class: "group flex gap-x-3 rounded-md p-3 text-sm leading-6 font-semibold transition-all duration-200 #{current_page?(admin_api_tester_path) ? 'bg-gray-700 text-white' : 'text-gray-300 hover:text-white hover:bg-gray-700'}" do %>
<i class="fas fa-vial w-6 h-6 shrink-0 flex items-center justify-center"></i>
API Tester
<% end %>
</ul>
</li>
<li class="mt-auto">
<div class="rounded-lg bg-gray-700 p-4">
<div class="flex items-center gap-x-3">
<div class="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-blue-500 text-white font-semibold">
<%= current_admin.name.split.map(&:first).join.upcase[0..1] %>
</div>
<div class="flex-1 min-w-0">
<p class="text-sm font-semibold text-white truncate"><%= current_admin.name %></p>
<p class="text-xs text-gray-400 truncate"><%= current_admin.email %></p>
</div>
</div>
<%= button_to admin_logout_path, method: :delete, class: "mt-3 w-full inline-flex items-center justify-center gap-2 rounded-md bg-gray-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-gray-500 transition-all duration-200" do %>
<i class="fas fa-sign-out-alt"></i>
Logout
<% end %>
</div>
</li>
</ul>
</nav>
</div>
</div>
<!-- Main content -->
<div class="pl-72">
<main class="py-10">
<div class="px-4 sm:px-6 lg:px-8">
<!-- Flash messages -->
<% if flash[:notice] %>
<div class="mb-6 rounded-lg bg-green-50 p-4 border-l-4 border-green-400">
<div class="flex">
<div class="flex-shrink-0">
<i class="fas fa-check-circle text-green-400"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-green-800"><%= flash[:notice] %></p>
</div>
</div>
</div>
<% end %>
<% if flash[:alert] %>
<div class="mb-6 rounded-lg bg-red-50 p-4 border-l-4 border-red-400">
<div class="flex">
<div class="flex-shrink-0">
<i class="fas fa-exclamation-circle text-red-400"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-red-800"><%= flash[:alert] %></p>
</div>
</div>
</div>
<% end %>
<%= yield %>
</div>
</main>
</div>
</div>
<% else %>
<!-- Login page without sidebar -->
<div class="min-h-full flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
<%= yield %>
</div>
<% end %>
</body>
</html>