feat: Реализован полный CRUD для админ-панели и улучшена функциональность

- Portfolio CRUD: добавление, редактирование, удаление, переключение публикации
- Services CRUD: полное управление услугами с возможностью активации/деактивации
- Banner system: новая модель Banner с CRUD операциями и аналитикой кликов
- Telegram integration: расширенные настройки бота, обнаружение чатов, отправка сообщений
- Media management: улучшенная загрузка файлов с оптимизацией изображений и превью
- UI improvements: обновлённые админ-панели с rich-text редактором и drag&drop загрузкой
- Database: добавлена таблица banners с полями для баннеров и аналитики
This commit is contained in:
2025-10-22 20:32:16 +09:00
parent 150891b29d
commit 9477ff6de0
69 changed files with 11451 additions and 2321 deletions

View File

@@ -1,13 +1,13 @@
<!DOCTYPE html>
<html lang="ko">
<html lang="<%= locale || 'ko' %>" class="<%= theme === 'dark' ? 'dark' : '' %>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>서비스 - SmartSolTech</title>
<title><%- __('services.meta.title') %> - SmartSolTech</title>
<!-- SEO Meta Tags -->
<meta name="description" content="SmartSolTech의 전문 서비스를 확인하세요. 웹 개발, 모바일 앱, UI/UX 디자인, 디지털 마케팅 등 다양한 기술 솔루션을 제공합니다.">
<meta name="keywords" content="웹 개발, 모바일 앱, UI/UX 디자인, 디지털 마케팅, 기술 솔루션, SmartSolTech">
<meta name="description" content="<%- __('services.meta.description') %>">
<meta name="keywords" content="<%- __('services.meta.keywords') %>">
<!-- PWA -->
<meta name="theme-color" content="#3B82F6">
@@ -19,18 +19,20 @@
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<link href="/css/fixes.css" rel="stylesheet">
<link href="/css/dark-theme.css" rel="stylesheet">
</head>
<body>
<body class="font-sans dark:bg-gray-900 dark:text-gray-100">
<%- include('partials/navigation') %>
<!-- Services Hero Section -->
<section class="hero-section bg-gradient-to-br from-blue-600 via-purple-600 to-blue-800 pt-20">
<div class="container mx-auto px-4 py-20 text-center text-white">
<h1 class="text-5xl md:text-6xl font-bold mb-6" data-aos="fade-up">
우리의 <span class="text-yellow-300">서비스</span>
<!-- Services Hero Section - Компактный -->
<section class="hero-section-compact bg-gradient-to-br from-blue-600 via-purple-600 to-blue-800">
<div class="container mx-auto px-4 py-16 text-center text-white">
<h1 class="text-4xl md:text-5xl font-bold mb-4" data-aos="fade-up">
<%- __('services.hero.title') %> <span class="text-yellow-300"><%- __('services.hero.title_highlight') %></span>
</h1>
<p class="text-xl md:text-2xl mb-8 opacity-90" data-aos="fade-up" data-aos-delay="200">
혁신적인 기술로 비즈니스의 성장을 지원합니다
<%- __('services.hero.subtitle') %>
</p>
</div>
</section>
@@ -62,9 +64,9 @@
<!-- Pricing -->
<% if (service.pricing) { %>
<div class="mb-6">
<div class="text-sm text-gray-500 mb-1">시작가격</div>
<div class="text-sm text-gray-500 mb-1"><%- __('services.cards.starting_price') %></div>
<div class="text-2xl font-bold text-blue-600">
<%= service.pricing.basePrice ? service.pricing.basePrice.toLocaleString() : '상담' %>
<%= service.pricing.basePrice ? service.pricing.basePrice.toLocaleString() : __('services.cards.consultation') %>
<% if (service.pricing.basePrice) { %>
<span class="text-sm text-gray-500">원~</span>
<% } %>
@@ -82,11 +84,11 @@
<div class="flex flex-col gap-3">
<a href="/contact?service=<%= service._id %>"
class="block w-full bg-gradient-to-r from-blue-600 to-purple-600 text-white text-center py-3 rounded-lg font-semibold hover:from-blue-700 hover:to-purple-700 transition-all duration-300">
문의하기
<%- __('services.cards.contact') %>
</a>
<a href="/calculator?service=<%= service._id %>"
class="block w-full border-2 border-blue-600 text-blue-600 text-center py-3 rounded-lg font-semibold hover:bg-blue-600 hover:text-white transition-all duration-300">
비용 계산하기
<%- __('services.cards.calculate_cost') %>
</a>
</div>
@@ -94,7 +96,7 @@
<% if (service.featured) { %>
<div class="absolute top-4 right-4">
<span class="bg-yellow-500 text-white px-2 py-1 rounded-full text-xs font-bold">
<i class="fas fa-star"></i> 인기
<i class="fas fa-star"></i> <%- __('services.cards.popular') %>
</span>
</div>
<% } %>
@@ -103,8 +105,8 @@
<% } else { %>
<div class="col-span-full text-center py-12">
<i class="fas fa-cogs text-6xl text-gray-300 mb-4"></i>
<h3 class="text-2xl font-bold text-gray-500 mb-2">서비스 준비 중</h3>
<p class="text-gray-400">곧 다양한 서비스를 제공할 예정입니다!</p>
<h3 class="text-2xl font-bold text-gray-500 mb-2"><%- __('services.cards.coming_soon') %></h3>
<p class="text-gray-400"><%- __('services.cards.coming_soon_desc') %></p>
</div>
<% } %>
</div>
@@ -116,10 +118,10 @@
<div class="container mx-auto px-4">
<div class="text-center mb-16" data-aos="fade-up">
<h2 class="text-3xl md:text-4xl font-bold text-gray-900 mb-4">
프로젝트 진행 과정
<%- __('services.process.title') %>
</h2>
<p class="text-xl text-gray-600">
체계적이고 전문적인 프로세스로 프로젝트를 진행합니다
<p class="text-lg text-gray-600 mb-12 max-w-3xl mx-auto">
<%- __('services.process.subtitle') %>
</p>
</div>