feat(cms): implement complete SysSiteCMS content management system
Initial implementation of the HomeSysPanel CMS built with Laravel 13.0. Includes complete admin panel, content management, user authentication, modular architecture for products/services/chatbot, and marketing tools. Key features: - User authentication with email verification and password reset - Role-based access control (Admin/User with granular permissions) - Content management (pages, news, FAQ, downloads, galleries, banners) - Contact management system with subjects and responses - Marketing tools (email campaigns, visitor analytics, social sharing) - Modular architecture (Products, Services, Chatbot modules) - AI Chatbot integration with OpenRouter.ai and LlamaCpp support - Visitor tracking with geolocation - SEO optimization with meta tags and Open Graph - Responsive design with Bootstrap 5 - Dark mode support - Maintenance mode - Feature request system
This commit is contained in:
+207
@@ -0,0 +1,207 @@
|
||||
@extends('layouts.admin')
|
||||
|
||||
@section('title', 'Configurações do Site')
|
||||
|
||||
@section('content')
|
||||
<div class="d-sm-flex align-items-center justify-content-between mb-4">
|
||||
<h1 class="h3 mb-0 text-gray-800">Configurações Gerais</h1>
|
||||
</div>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success border-0 shadow-sm mb-4">{{ session('success') }}</div>
|
||||
@endif
|
||||
|
||||
<form action="{{ route('admin.settings.update') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<!-- Nav Tabs -->
|
||||
<ul class="nav nav-tabs mb-4" id="settingsTabs" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active font-weight-bold" id="company-tab" data-toggle="tab" href="#company" role="tab"><i class="bi bi-building me-1"></i> Dados da Empresa</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link font-weight-bold" id="seo-tab" data-toggle="tab" href="#seo" role="tab"><i class="bi bi-globe me-1"></i> SEO Global</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link font-weight-bold" id="scripts-tab" data-toggle="tab" href="#scripts" role="tab"><i class="bi bi-code-slash me-1"></i> Scripts e Integrações</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link font-weight-bold" id="marketing-settings-tab" data-toggle="tab" href="#marketing-settings" role="tab"><i class="bi bi-megaphone me-1"></i> Marketing</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Tab Content -->
|
||||
<div class="tab-content" id="settingsTabsContent">
|
||||
<!-- Aba Dados da Empresa -->
|
||||
<div class="tab-pane fade show active" id="company" role="tabpanel">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Informações Institucionais</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Nome da Empresa</label>
|
||||
<input type="text" name="company_name" class="form-control" value="{{ \App\Models\Setting::get('company_name', 'Syspanel') }}">
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Slogan da Empresa</label>
|
||||
<input type="text" name="company_slogan" class="form-control" value="{{ \App\Models\Setting::get('company_slogan', 'Sua parceira em tecnologia e manutenção de informática.') }}">
|
||||
<small class="text-muted">Aparece no rodapé e em outros locais</small>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">CNPJ</label>
|
||||
<input type="text" name="company_cnpj" class="form-control" value="{{ \App\Models\Setting::get('company_cnpj') }}" placeholder="00.000.000/0000-00">
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">E-mail de Contato Principal</label>
|
||||
<input type="email" name="company_email" class="form-control" value="{{ \App\Models\Setting::get('company_email') }}">
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Telefone / WhatsApp</label>
|
||||
<input type="text" name="company_phone" class="form-control" value="{{ \App\Models\Setting::get('company_phone') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Endereço Completo</label>
|
||||
<textarea name="company_address" class="form-control" rows="2">{{ \App\Models\Setting::get('company_address') }}</textarea>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Horário de Atendimento</label>
|
||||
<input type="text" name="company_hours" class="form-control" value="{{ \App\Models\Setting::get('company_hours') }}" placeholder="Seg a Sex: 08h às 18h">
|
||||
</div>
|
||||
<hr>
|
||||
<h6 class="font-weight-bold text-dark mb-3">Redes Sociais (Links completos)</h6>
|
||||
<div class="form-group mb-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-instagram"></i></span></div>
|
||||
<input type="text" name="company_instagram" class="form-control" value="{{ \App\Models\Setting::get('company_instagram') }}" placeholder="https://instagram.com/perfil">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-facebook"></i></span></div>
|
||||
<input type="text" name="company_facebook" class="form-control" value="{{ \App\Models\Setting::get('company_facebook') }}" placeholder="https://facebook.com/perfil">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-linkedin"></i></span></div>
|
||||
<input type="text" name="company_linkedin" class="form-control" value="{{ \App\Models\Setting::get('company_linkedin') }}" placeholder="https://linkedin.com/company/perfil">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h6 class="font-weight-bold text-dark mb-3"><i class="bi bi-geo-alt me-1"></i> Mapa de Localização</h6>
|
||||
<div class="form-group mb-0">
|
||||
<label class="font-weight-bold">Iframe do Google Maps</label>
|
||||
<textarea name="company_map_iframe" class="form-control" rows="4" placeholder="Cole aqui o código iframe do Google Maps...">{{ \App\Models\Setting::get('company_map_iframe') }}</textarea>
|
||||
<small class="text-muted">Vá no Google Maps, compartilhe o local e selecione "Incorporar mapa" para obter o código iframe. Aparece na página de Contato.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Aba SEO Global -->
|
||||
<div class="tab-pane fade" id="seo" role="tabpanel">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Configurações de Buscadores</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Título do Site (Sufixo)</label>
|
||||
<input type="text" name="seo_title_suffix" class="form-control" value="{{ \App\Models\Setting::get('seo_title_suffix', ' - Syspanel') }}">
|
||||
<small class="text-muted">Ex: "Início - Syspanel"</small>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Descrição Meta Padrão</label>
|
||||
<textarea name="seo_description_default" class="form-control" rows="3">{{ \App\Models\Setting::get('seo_description_default') }}</textarea>
|
||||
</div>
|
||||
<div class="form-group mb-0">
|
||||
<label class="font-weight-bold">Imagem OG Padrão (URL)</label>
|
||||
<input type="text" name="seo_og_image_default" class="form-control" value="{{ \App\Models\Setting::get('seo_og_image_default') }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Aba Scripts -->
|
||||
<div class="tab-pane fade" id="scripts" role="tabpanel">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Integrações e Código</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group mb-3">
|
||||
<label class="font-weight-bold">Google Analytics (Tag ID)</label>
|
||||
<input type="text" name="scripts_google_analytics" class="form-control" value="{{ \App\Models\Setting::get('scripts_google_analytics') }}" placeholder="G-XXXXXXXXXX">
|
||||
</div>
|
||||
<div class="form-group mb-0">
|
||||
<label class="font-weight-bold">Scripts Adicionais no <head></label>
|
||||
<textarea name="scripts_head_custom" class="form-control" rows="6" placeholder="Ex: Meta-tags de verificação, CSS customizado">{{ \App\Models\Setting::get('scripts_head_custom') }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Aba Marketing -->
|
||||
<div class="tab-pane fade" id="marketing-settings" role="tabpanel">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow mb-4 border-left-warning">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-warning">Textos de Divulgação (WhatsApp / Redes Sociais)</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group mb-4">
|
||||
<label class="font-weight-bold text-success"><i class="bi bi-whatsapp me-1"></i> Texto para Produtos</label>
|
||||
<textarea name="marketing_product_text" class="form-control" rows="4">{{ \App\Models\Setting::get('marketing_product_text', 'Confira este produto incrível: {name} por apenas R$ {price}. Veja mais detalhes aqui: {link}') }}</textarea>
|
||||
<small class="text-muted">Use as tags: <strong>{name}</strong> para o nome, <strong>{price}</strong> para o preço e <strong>{link}</strong> para a URL do produto.</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group mb-4">
|
||||
<label class="font-weight-bold text-primary"><i class="bi bi-bell me-1"></i> Texto para Serviços</label>
|
||||
<textarea name="marketing_service_text" class="form-control" rows="4">{{ \App\Models\Setting::get('marketing_service_text', 'Precisa de {name}? Nós podemos te ajudar! Confira nossos serviços aqui: {link}') }}</textarea>
|
||||
<small class="text-muted">Use as tags: <strong>{name}</strong> para o nome e <strong>{link}</strong> para a URL da página de serviços.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-body text-right">
|
||||
<button type="submit" class="btn btn-primary px-5 py-2 fw-bold">
|
||||
<i class="bi bi-floppy me-1"></i> Salvar Todas as Configurações
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user