feat: Add banner management functionality

- Implemented a new Banner model to represent banner data.
- Created a BannerRepository for database interactions related to banners.
- Developed a BannerService to handle business logic for banners.
- Added admin views for listing and adding banners.
- Integrated banner hooks for frontend rendering and click tracking.
- Created frontend styles and scripts for banner display and interaction.
- Updated database migrations to include a new banners table.
- Enhanced AdminController to manage banner actions and pages.
This commit is contained in:
2026-05-05 01:03:05 +03:30
parent 5930c1ad6f
commit 32c065e4b6
15 changed files with 1350 additions and 4 deletions

View File

@@ -294,3 +294,94 @@
#sodino-app .sd-chart-card {
min-height: 300px;
}
#sodino-app {
min-height: 100vh;
background: radial-gradient(circle at top right, rgba(99, 102, 241, 0.14), transparent 22%),
radial-gradient(circle at bottom left, rgba(59, 130, 246, 0.08), transparent 15%),
#f8fafc;
padding: 30px 16px 50px;
color: #0f172a;
}
#sodino-app .bg-white.rounded-lg.shadow-sm.border,
#sodino-app .bg-white.rounded-2xl.border {
background: rgba(255, 255, 255, 0.98);
border-color: rgba(148, 163, 184, 0.70);
box-shadow: 0 18px 35px rgba(15, 23, 42, 0.10);
}
#sodino-app .bg-white.rounded-lg.shadow-sm.border,
#sodino-app .bg-white.rounded-2xl.border,
#sodino-app .bg-gray-50,
#sodino-app .sd-sidebar,
#sodino-app .sd-card,
#sodino-app .sd-chart-card {
border-width: 1px;
border-style: solid;
}
#sodino-app .bg-gray-50 {
background: #f7fbff !important;
border-color: rgba(148, 163, 184, 0.35);
}
#sodino-app .shadow-sm {
box-shadow: 0 14px 30px rgba(15, 23, 42, 0.09) !important;
}
#sodino-app .sd-sidebar,
#sodino-app .sd-card,
#sodino-app .sd-chart-card {
border-color: rgba(148, 163, 184, 0.65);
}
#sodino-app .rounded-lg,
#sodino-app .rounded-2xl,
#sodino-app .rounded-md {
border-radius: 1.3rem !important;
}
#sodino-app .space-y-2 > a {
display: block;
padding: 0.95rem 1rem;
border-radius: 1rem;
transition: all 0.18s ease-in-out;
border: 1px solid transparent;
}
#sodino-app .space-y-2 > a:hover {
background: rgba(99, 102, 241, 0.1);
}
#sodino-app .text-gray-500,
#sodino-app .text-gray-600,
#sodino-app .text-gray-700 {
color: #334155 !important;
}
#sodino-app h1,
#sodino-app h2,
#sodino-app h3,
#sodino-app h4 {
letter-spacing: -0.02em;
}
#sodino-app .bg-white.rounded-lg.shadow-sm.border p,
#sodino-app .bg-white.rounded-2xl.border p {
color: #475569;
}
#sodino-app .bg-white.rounded-lg.shadow-sm.border .inline-flex,
#sodino-app .bg-white.rounded-2xl.border .inline-flex {
box-shadow: 0 10px 22px rgba(15, 23, 42, 0.06);
}
#sodino-app table thead th {
color: #334155 !important;
}
#sodino-app .wp-list-table .column-name,
#sodino-app .wp-list-table .column-title {
font-weight: 600;
}