Add project files.

This commit is contained in:
2025-05-01 15:18:30 +03:00
parent e058ab8015
commit 774d695414
3094 changed files with 1336814 additions and 0 deletions

View File

@@ -0,0 +1,9 @@

<footer class="main-footer">
<!-- To the right -->
@* <div class="float-right d-none d-sm-inline">
Anything you want
</div> *@
<!-- Default to the left -->
<strong>Copyright &copy; 2017-@DateTime.Now.Year <a href="https://www.polikarbilisi.com"></a>Polikar Bilişim Hizmetleri</strong> Tüm hakları korunmuştur.
</footer>

View File

@@ -0,0 +1,26 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AdminLTE 3 | Dashboard</title>
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="~/AdminTheme/plugins/fontawesome-free/css/all.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<!-- Tempusdominus Bootstrap 4 -->
<link rel="stylesheet" href="~/AdminTheme/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
<!-- iCheck -->
<link rel="stylesheet" href="~/AdminTheme/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
<!-- JQVMap -->
<link rel="stylesheet" href="~/AdminTheme/plugins/jqvmap/jqvmap.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="~/AdminTheme/dist/css/adminlte.min.css">
<!-- overlayScrollbars -->
<link rel="stylesheet" href="~/AdminTheme/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
<!-- Daterange picker -->
<link rel="stylesheet" href="~/AdminTheme/plugins/daterangepicker/daterangepicker.css">
<!-- summernote -->
<link rel="stylesheet" href="~/AdminTheme/plugins/summernote/summernote-bs4.min.css">
</head>

View File

@@ -0,0 +1,188 @@
@using ConstructorAppUI.ViewModels
@model UserProfileViewModel
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.min.js"></script>
<div class="wrapper">
<script>
$(document).ready(() => {
var signalRHubBaseUrl = '@ViewBag.SignalRHubBaseUrl';
if (!signalRHubBaseUrl) {
console.error("SignalRHubBaseUrl tanımlı değil!");
return;
}
var connection = new signalR.HubConnectionBuilder().withUrl(`${signalRHubBaseUrl}/SignalRHub`).build();
connection.start()
.then(() => {
$("#connstatus").text("Bağlı");
document.getElementById("connstatus").className = "badge bg-success text-white";
var iconElement = document.querySelector("#navbarDropdown1 i");
if (iconElement) {
iconElement.className = "fas fa-wifi text-success";
}
setInterval(() => {
connection.invoke("SendContactUs");
}, 1000);
})
.catch((err) => {
console.error("SignalR bağlantısı sırasında hata:", err);
});
connection.onclose(() => {
$("#connstatus").text("Bağlı Değil");
document.getElementById("connstatus").className = "badge bg-danger text-white";
var iconElement = document.querySelector("#navbarDropdown1 i");
if (iconElement) {
iconElement.className = "fas fa-wifi text-danger";
}
setTimeout(() => connection.start().catch(console.error), 5000);
});
connection.onreconnecting(() => {
$("#connstatus").text("Yeniden Bağlanıyor...");
document.getElementById("connstatus").className = "badge bg-warning text-white";
});
connection.onreconnected(() => {
$("#connstatus").text("Bağlı");
document.getElementById("connstatus").className = "badge bg-success text-white";
var iconElement = document.querySelector("#navbarDropdown1 i");
if (iconElement) {
iconElement.className = "fas fa-wifi text-success";
}
});
connection.on("ReceiveContactUsCountByStatusPending", (value) => {
console.log(value);
if (value > 0) {
$("#contactuscount").text(value);
} else {
$("#contactuscount").text('');
}
});
});
</script>
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
</li>
<li class="nav-item">
<a class="nav-link" data-widget="navbar-search" href="#" role="button">
<i class="fas fa-search"></i>
</a>
<div class="navbar-search-block">
<form class="form-inline">
<div class="input-group input-group-sm">
<input class="form-control form-control-navbar" id="searchInput" type="search" placeholder="Arama.." aria-label="Search">
<div class="input-group-append">
<button id="searchButton" class="btn btn-navbar" type="submit">
<i class="fas fa-search"></i>
</button>
<button class="btn btn-navbar" type="button" data-widget="navbar-search">
<i class="fas fa-times"></i>
</button>
</div>
</div>
</form>
</div>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown">
<a class="nav-link" data-toggle="dropdown" href="#" id="navbarDropdown1" role="button">
<i class="fas fa-wifi" title="Sistem Durumu"></i>
<span class="badge badge-warning navbar-badge" id="connstatus"></span>
</a>
</li>
<li class="nav-item dropdown hidden-caret">
<a class="nav-link" href="/ContactUs/Index" id="navbarDropdown1" role="button">
<i class="far fa-envelope" title="İletişim Formu"></i>
<span class="badge badge-danger navbar-badge" id="contactuscount"></span>
</a>
</li>
<li class="nav-item dropdown">
<a class="dropdown-toggle profile-pic" data-toggle="dropdown" href="#" aria-expanded="false">
<img src="~/SeedData/defaultuser.png" width="36" class="img-circle"><span style="color: black;">@Model.UserName</span>
</a>
<ul class="dropdown-menu dropdown-user">
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="javascript:void(0);" onclick="window.location.href='/UserProfile/Index/'">
<i class="la la-cog"></i> Ayarlar
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="javascript:void(0);" onclick="window.location.href='/Login/LogOut/'">
<i class="la la-close"></i> Çıkış
</a>
</ul>
</li>
</ul>
</nav>
</div>
<script>
// Vurguları temizlemek için fonksiyon
function clearHighlights() {
document.querySelectorAll("span[style='background-color: yellow;']").forEach(function (span) {
span.outerHTML = span.innerHTML; // Sadece span'ı kaldır ve içeriği olduğu gibi bırak
});
}
// Arama işlemini gerçekleştiren fonksiyon
function performSearch() {
var searchQuery = document.getElementById("searchInput").value.toLowerCase();
if (!searchQuery) return; // Arama kutusu boşsa bir şey yapma
// Vurguları temizle
clearHighlights();
// Sayfadaki hedef alanları belirle (örneğin yalnızca `.content` içindeki metinleri kontrol etmek isterseniz)
var elements = document.querySelectorAll("body *:not(script):not(style):not(input):not(button)");
elements.forEach(function (el) {
// Elementin içeriğini kontrol et
if (el.children.length === 0) { // Sadece metin düğümleri içeren elemanları işlemek
var text = el.textContent;
if (text.toLowerCase().includes(searchQuery)) {
// Aranan kelimeyi <span> ile sarmala ve vurgula
var highlightedText = text.replace(
new RegExp(`(${searchQuery})`, 'gi'),
`<span style="background-color: yellow;">$1</span>`
);
el.innerHTML = highlightedText;
}
}
});
}
// Arama kutusu her değiştiğinde (yazıldıkça) arama yap
document.getElementById("searchInput").addEventListener("input", function () {
performSearch(); // Her input değişikliğinde arama yap
});
// Arama kutusu temizlendiğinde (boşaltıldığında) vurguları temizle
document.getElementById("searchInput").addEventListener("input", function () {
if (this.value === "") {
clearHighlights(); // Arama kutusu boşsa vurguları temizle
}
});
</script>

View File

@@ -0,0 +1,27 @@
 <!-- jQuery -->
<script src="~/AdminTheme/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="~/AdminTheme/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Select2 -->
<script src="~/AdminTheme/plugins/select2/js/select2.full.min.js"></script>
<!-- Bootstrap4 Duallistbox -->
<script src="~/AdminTheme/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.min.js"></script>
<!-- InputMask -->
<script src="~/AdminTheme/plugins/moment/moment.min.js"></script>
<script src="~/AdminTheme/plugins/inputmask/jquery.inputmask.min.js"></script>
<!-- date-range-picker -->
<script src="~/AdminTheme/plugins/daterangepicker/daterangepicker.js"></script>
<!-- bootstrap color picker -->
<script src="~/AdminTheme/plugins/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js"></script>
<!-- Tempusdominus Bootstrap 4 -->
<script src="~/AdminTheme/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
<!-- Bootstrap Switch -->
<script src="~/AdminTheme/plugins/bootstrap-switch/js/bootstrap-switch.min.js"></script>
<!-- BS-Stepper -->
<script src="~/AdminTheme/plugins/bs-stepper/js/bs-stepper.min.js"></script>
<!-- dropzonejs -->
<script src="~/AdminTheme/plugins/dropzone/min/dropzone.min.js"></script>
<!-- AdminLTE App -->
<script src="~/AdminTheme/dist/js/adminlte.min.js"></script>

View File

@@ -0,0 +1,114 @@
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-dark-primary elevation-4">
<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex justify-content-center align-items-center">
<div class="image">
<a href="/Dashboard/Index">
<i class="fas fa-chart-line"></i> Dashboard
</a>
</div>
</div>
<!-- SidebarSearch Form -->
<div class="form-inline">
<div class="input-group" data-widget="sidebar-search">
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-sidebar">
<i class="fas fa-search fa-fw"></i>
</button>
</div>
</div>
</div>
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Web İşlemleri -->
<li class="nav-item">
<a href="#" class="nav-link">
<i class="fas fa-globe"></i>
<p style="margin-left: 8px;">
Web İşlemleri
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item">
<a href="/HomeBanner/Index" class="nav-link">
<i class="fas fa-window-maximize"></i>
<p style="margin-left: 8px;">Banner</p>
</a>
</li>
<li class="nav-item">
<a href="/Slider/Index" class="nav-link">
<i class="fas fa-sliders-h"></i>
<p style="margin-left: 8px;">Önce Çıkanlar</p>
</a>
</li>
<li class="nav-item">
<a href="/Service/Index" class="nav-link">
<i class="fas fa-quote-right"></i>
<p style="margin-left: 8px;">Hakkımızda</p>
</a>
</li>
<li class="nav-item">
<a href="/WorkProcess/Index" class="nav-link">
<i class="fas fa-paint-roller"></i>
<p style="margin-left: 8px;">Çalışma Şeklimiz</p>
</a>
</li>
<li class="nav-item">
<a href="/Team/Index" class="nav-link">
<i class="fas fa-users"></i>
<p style="margin-left: 12px;">Ekibimiz</p>
</a>
</li>
<li class="nav-item">
<a href="/CompanyInfo/Index" class="nav-link">
<i class="fas fa-award"></i>
<p style="margin-left: 12px;">Başarılar</p>
</a>
</li>
<li class="nav-item">
<a href="/Project/Index" class="nav-link">
<i class="fas fa-pencil-ruler"></i>
<p style="margin-left: 4px;">Projeler</p>
</a>
</li>
<li class="nav-item">
<a href="/ProjectGallery/Index" class="nav-link">
<i class="fas fa-images"></i>
<p style="margin-left: 4px;">Proje Galerisi</p>
</a>
</li>
<li class="nav-item">
<a href="/Testimonial/Index" class="nav-link">
<i class="fas fa-comments"></i>
<p style="margin-left: 4px;">Müşteri Yorumları</p>
</a>
</li>
<li class="nav-item">
<a href="/Reference/Index" class="nav-link">
<i class="fas fa-trophy"></i>
<p style="margin-left: 12px;">Referanslar</p>
</a>
</li>
<li class="nav-item">
<a href="/Footer/Index" class="nav-link">
<i class="fas fa-money-check"></i>
<p style="margin-left: 4px;">Footer</p>
</a>
</li>
</ul>
</li>
</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>

View File

@@ -0,0 +1,60 @@
@model List<ResultServiceDto>
<section class="section novi-background bg-cover section-xl bg-white parallax-scene-js" id="scene">
<div class="container">
<div class="row row-50 align-items-center justify-content-md-between">
<div class="col-md-4 col-lg-3">
<div class="row row-40 row-md-60">
@if (Model != null && Model.Any())
{
int delay = 0;
foreach (var item in Model.Where(x => x.IsActive))
{
<div class="col-sm-4 col-md-12 col-xl-11 wow fadeInLeft" data-wow-delay="@($"{(delay * 0.05).ToString("0.00")}s")">
<article class="box-icon-classic">
<div class="box-icon-classic-header">
<div class="box-icon-classic-icon novi-icon linearicons-apartment"></div>
<h6 class="box-icon-classic-title">
<a href="#">@item.Title</a>
</h6>
</div>
<div class="box-icon-classic-text">@item.SubTitle</div>
</article>
</div>
delay++;
}
}
</div>
</div>
<!-- Sağ taraf (Form alanı) sabit kalabilir -->
<div class="col-md-7 col-lg-6">
<div class="inset-xl-left-35">
<h3 class="wow fadeInRight">Sizin için en uygun evi<br>birlikte bulalım</h3>
<h6 class="title-style-1 wow fadeInRight" data-wow-delay=".05s">İletişim formumuzu doldurun, en kısa sürede sizlere ulaşalım</h6>
<div class="form-style-1 context-dark wow blurIn">
<h6 class="title-style-1 wow fadeInRight" data-wow-delay=".05s">
<a href="#contacts" style="text-decoration: none; color: inherit;">
İletişim Formu
</a>
</h6>
</div>
</div>
</div>
</div>
</div>
<div class="layer-wrap layer-1">
<div class="layer" data-depth="0.4">
<img src="~/SeedData/Service_bg.png" alt="" width="694" height="539" />
</div>
</div>
</section>
<script src="https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
var scene = document.getElementById('scene');
var parallaxInstance = new Parallax(scene);
});
</script>

View File

@@ -0,0 +1,62 @@
@model ConstructorAppUI.ViewModels.HomeBannerAndSliderViewModel
@if (Model != null && Model.HomeBanners != null && Model.HomeBanners.Any())
{
var banner = Model.HomeBanners.First();
<!-- varsayılan olarak ilk banner'ı alıyoruz -->
<div class="preloader">
<div class="cssload-box-loading"></div>
</div>
<div class="position-relative">
<section class="section novi-background bg-cover section-horace">
<div class="section-horace-left bg-gray-800">
<div class="section-horace-left-content text-center">
<article class="project-classic project-classic-2">
<div class="project-classic-title">
@Html.Raw(banner.Title.Replace("&", "<br>&"))
</div>
<h6 class="project-classic-text">
@Html.Raw(banner.SubTitle.Replace(".", "<br>"))
</h6>
<a class="button button-jerry button-primary-outline" href="#contacts">
İletişim
<span class="button-jerry-line"></span>
<span class="button-jerry-line"></span>
<span class="button-jerry-line"></span>
<span class="button-jerry-line"></span>
</a>
</article>
</div>
<div class="section-horace-left-panel">
<div class="swiper-custom-nav">
<div class="swiper-button-prev mdi mdi-arrow-left" id="swiper-prev"></div>
<div class="swiper-button-next mdi mdi-arrow-right" id="swiper-next"></div>
</div>
</div>
</div>
<!-- SLIDER -->
@if (Model.Sliders != null && Model.Sliders.Any())
{
<div class="swiper-container swiper-slider swiper-slider-1" data-loop="true" data-autoplay="5000" data-simulate-touch="false" data-custom-prev="#swiper-prev" data-custom-next="#swiper-next" data-slide-effect="fade">
<div class="swiper-wrapper text-center">
@foreach (var slide in Model.Sliders)
{
<div class="swiper-slide context-dark" data-slide-bg="@slide.ImageUrl">
<div class="swiper-slide-caption project-modern">
<ul class="project-modern-info">
<li class="heading-6 project-modern-info-item project-modern-address" data-caption-animate="fadeInDown" data-caption-delay="200">@slide.Location</li>
<li class="heading-6 project-modern-info-item" data-caption-animate="fadeInDown" data-caption-delay="100">@slide.Sqm m2</li>
<li class="heading-6 project-modern-info-item" data-caption-animate="fadeInDown" data-caption-delay="0">$ @slide.PriceInfo</li>
</ul>
<div class="project-modern-decor" data-caption-animate="fadeInRight" data-caption-delay="0"></div>
</div>
</div>
}
</div>
<div class="project-modern-counter">@Model.Sliders.Count() + " works"</div>
</div>
}
</section>
</div>
}

View File

@@ -0,0 +1,68 @@
@model ConstructorAppUI.ViewModels.HomeCompanyInfoAndVideoViewModel
<section class="section novi-background bg-cover section-lg section-inset-3 bg-white parallax-scene-js" id="company-info-scene">
<div class="container">
<div class="row row-50 justify-content-md-between">
<!-- Sol taraf: Başlık + video -->
<div class="col-md-6">
<h3 class="wow fadeInRight">Ödüllü<br>Mimarlık şirketiniz</h3>
<h6 class="title-style-1 wow fadeInRight" data-wow-delay=".05s">En iyi çözümleri sunuyoruz</h6>
<article class="video-classic wow blurIn">
<div class="video-classic-figure">
<img src="~/SeedData/CompanyinfoVideo_bg.png" alt="" width="533" height="362" />
</div>
<a class="video-classic-link" data-lightgallery="item" href="@Model.CompanyInfoVideo.VideoUrl">
<span class="icon mdi mdi-play"></span>
</a>
</article>
</div>
<!-- Sağ taraf: Dinamik CompanyInfo kutucukları -->
<div class="col-md-4 col-xl-3 inset-xl-top-70">
<div class="row row-30 row-md-50 justify-content-center justify-content-md-start">
@if (Model.CompanyInfo != null && Model.CompanyInfo.Any())
{
double delay = 0;
foreach (var item in Model.CompanyInfo.OrderBy(x => x.CompanyInfoID))
{
<div class="col-6 col-sm-4 col-md-12 col-lg-11 wow fadeInRight" data-wow-delay="@($"{delay:0.##}s")">
<article class="counter-classic">
<div class="counter-classic-header">
<div class="heading-1 counter-classic-number"><span class="counter">@item.Value</span></div>
<h6 class="counter-classic-title">@item.Title</h6>
</div>
<div class="counter-classic-text">@item.SubTitle</div>
</article>
</div>
delay += 0.05;
}
}
<!-- İsteğe bağlı sabit buton -->
<div class="col-xl-12 wow fadeInUp">
<a class="button button-jerry button-primary" href="#contacts">
İletişim
<span class="button-jerry-line"></span><span class="button-jerry-line"></span><span class="button-jerry-line"></span><span class="button-jerry-line"></span>
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Parallax görsel -->
<div class="layer-wrap layer-2">
<div class="layer" data-depth="0.4">
<img src="@Url.Content("~/SeedData/Companyinfo_bg.jpg")" alt="Company Info Background" width="853" height="574" />
</div>
</div>
</section>
<!-- Parallax.js script -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
var scene = document.getElementById('company-info-scene');
var parallaxInstance = new Parallax(scene);
});
</script>

View File

@@ -0,0 +1,172 @@
@model CreateContactUsDto
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<section class="section novi-background bg-cover bg-white section-inset-1 parallax-scene-js" id="contacts">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6 d-none d-lg-block wow fadeInLeft">
<img src="~/SeedData/ContactForm_Image-1.png" alt="" width="538" height="694" />
</div>
<div class="col-md-8 col-lg-6">
<div class="inset-xl-left-35 section-sm">
<h3 class="wow fadeInRight">Bize<br>Ulaşın</h3>
<h6 class="title-style-1 wow fadeInRight" data-wow-delay=".05s"
style="background-color: #ffffff; display: inline-block; padding: 5px 10px; border-radius: 6px;">
Gelin Birlikte Çalışalım!
</h6>
<div class="form-style-1 context-dark wow blurIn">
<!-- RD Mailform-->
<form method="post" class="rd-mailform text-left" id="contactForm">
<div class="form-wrap">
<input class="form-input" placeholder="Adınız Soyadınız" asp-for="NameSurname" id="nameInput" required />
<span asp-validation-for="NameSurname" class="text-danger"></span>
</div>
<div class="form-wrap">
<input class="form-input" placeholder="e-posta Adresiniz" asp-for="Mail" id="emailInput" required />
<span asp-validation-for="Mail" class="text-danger"></span>
</div>
<div class="form-wrap">
<input class="form-input" placeholder="Telefonunuz" asp-for="Phone" id="phoneInput" required />
<span asp-validation-for="Phone" class="text-danger"></span>
</div>
<div class="form-wrap">
<textarea class="form-input" placeholder="Mesajınız" asp-for="MessageContent" id="messageInput" required></textarea>
<span asp-validation-for="MessageContent" class="text-danger"></span>
</div>
<div class="form-wrap">
<div class="g-recaptcha" data-sitekey="6LeH2M8qAAAAAHbDq0txKL7O48Wo9vgHvkXP7_-X"></div>
</div>
<div class="form-button">
<button class="button button-jerry button-primary" type="button" id="sendMessageButton">
Gönder<span class="button-jerry-line"></span><span class="button-jerry-line"></span><span class="button-jerry-line"></span><span class="button-jerry-line"></span>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="layer-wrap layer-3">
<div class="layer" data-depth="0.4">
<img src="~/SeedData/ContactForm_bg.png" alt="" width="1047" height="531" />
</div>
</div>
</section>
<script>
document.addEventListener("DOMContentLoaded", function () {
var contacts = document.getElementById('contacts');
var parallaxInstance = new Parallax(contacts);
});
</script>
<script>
$(document).on("click", "#sendMessageButton", function () {
var isValid = true;
// Form elemanlarını al
var name = $("#nameInput").val().trim();
var email = $("#emailInput").val().trim();
var phone = $("#phoneInput").val().trim();
var message = $("#messageInput").val().trim();
// Önce tüm hata stillerini temizle
$(".form-input").removeClass("input-error");
// Boş alan kontrolü
if (!name) {
$("#nameInput").addClass("input-error");
isValid = false;
}
if (!email) {
$("#emailInput").addClass("input-error");
isValid = false;
}
if (!phone) {
$("#phoneInput").addClass("input-error");
isValid = false;
}
if (!message) {
$("#messageInput").addClass("input-error");
isValid = false;
}
if (!isValid) {
alert("Lütfen tüm alanları doldurunuz.");
return;
}
// Email doğrulaması
if (isValid && !validateEmail(email)) {
isValid = false;
errorMessage = "Geçerli bir email adresi giriniz.";
}
// Telefon formatı kontrolü
if (!/^\d{3} \d{3} \d{2} \d{2}$/.test(phone)) {
$("#phoneInput").addClass("input-error");
alert("Telefon numarası sadece şu formatta olmalıdır: 555 111 22 33");
return;
}
// reCAPTCHA doğrulaması
var recaptchaResponse = grecaptcha.getResponse();
if (isValid && recaptchaResponse.length == 0) {
isValid = false;
errorMessage = "Lütfen reCAPTCHA doğrulamasını yapın.";
}
// Hata mesajını gösterme
if (!isValid) {
alert(errorMessage);
return;
}
// Form verisi
var contactData = {
NameSurname: name,
Mail: email,
Phone: phone,
MessageContent: message,
RecaptchaResponse: recaptchaResponse
};
// AJAX ile gönderim
$.ajax({
url: '@ViewBag.ApiBaseUrl/api/ContactUs',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(contactData),
success: function () {
alert("Mesajınız başarıyla gönderildi. En kısa sürede sizinle iletişime geçeceğiz!");
$("#contactForm")[0].reset();
grecaptcha.reset(); // reCAPTCHA sıfırlanır
},
error: function () {
alert("Mesaj gönderilirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.");
}
});
});
// Email doğrulama fonksiyonu
function validateEmail(email) {
var regex = /^[a-zA-Z0-9._-]+@@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return regex.test(email);
}
</script>
<style>
.input-error {
border: 2px solid #c4956a !important;
}
</style>

View File

@@ -0,0 +1,26 @@
@model ConstructorAppUI.Dtos.FooterDtos.ResultFooterDto
<footer class="section novi-background bg-cover section-sm footer-classic context-dark" id="contacts">
<div class="container">
<a class="brand wow blurIn" href="#">
<img src="@Url.Content(Model.LogoUrl)" alt="Logo" width="350" height="350" />
</a>
<ul class="contacts-modern footer-classic-list">
<li class="wow fadeInLeft">
<a class="heading-3" href="tel:@Model.Phone">@Model.Phone</a>
</li>
<li class="wow fadeInRight">
<a class="heading-3" href="mailto:@Model.Mail">@Model.Mail</a>
</li>
</ul>
<ul class="list-inline list-inline-xxl list-social footer-classic-list">
<li><a class="icon novi-icon mdi mdi-facebook" href="@Model.Facebook"></a></li>
<li><a class="icon novi-icon mdi mdi-instagram" href="@Model.Instagram"></a></li>
<li><a class="icon novi-icon mdi mdi-linkedin" href="@Model.Linkedin"></a></li>
<li><a class="icon novi-icon mdi mdi-youtube-play" href="@Model.Youtube"></a></li>
</ul>
<p class="rights"><span>&copy;&nbsp; </span><span class="copyright-year"></span><span>&nbsp;</span><span>Tüm hakları yasalarla korunmuştur</span>
<a href="https://polikarbilisim.com" class="text-secondary"> . Polikar Bilişim Teknolojileri tarafından geliştirilmiştir.</a>
</p>
</div>
</footer>

View File

@@ -0,0 +1,26 @@
<head>
<title>Home</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="icon" href="images/favicon.ico" type="image/x-icon">
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Montserrat:300,400,500,700,800">
<link rel="stylesheet" href="~/WebTheme/css/bootstrap.css">
<link rel="stylesheet" href="~/WebTheme/css/fonts.css">
<link rel="stylesheet" href="~/WebTheme/css/style.css">
<style>
.ie-panel {
display: none;
background: #212121;
padding: 10px 0;
box-shadow: 3px 3px 5px 0 rgba(0,0,0,.3);
clear: both;
text-align: center;
position: relative;
z-index: 1;
}
html.ie-10 .ie-panel, html.lt-ie-10 .ie-panel {
display: block;
}</style>
</head>

View File

@@ -0,0 +1,52 @@
@model List<ResultHomeBannerDto>
@if (Model != null && Model.Any())
{
var banner = Model.First(); // İlk kaydı al
<!-- Page Header-->
<header class="section novi-background bg-cover page-header" id="home">
<!-- RD Navbar-->
<div class="rd-navbar-wrap">
<nav class="rd-navbar" data-layout="rd-navbar-fixed" data-sm-layout="rd-navbar-fixed" data-md-layout="rd-navbar-fixed" data-lg-layout="rd-navbar-fixed" data-lg-device-layout="rd-navbar-fixed" data-xl-layout="rd-navbar-sidebar" data-xl-device-layout="rd-navbar-sidebar" data-xxl-layout="rd-navbar-sidebar" data-xxl-device-layout="rd-navbar-sidebar" data-xl-stick-up-offset="400" data-xxl-stick-up-offset="400">
<div class="rd-navbar-main-outer">
<div class="rd-navbar-main">
<!-- RD Navbar Panel-->
<div class="rd-navbar-panel">
<!-- RD Navbar Brand-->
<div class="rd-navbar-brand">
<a class="brand" href="#">
<img src="@banner.LogoUrl" alt="Logo" width="479" height="111" />
</a>
</div>
<!-- RD Navbar Toggle-->
<button class="rd-navbar-toggle" data-rd-navbar-toggle=".rd-navbar-nav-wrap"><span></span></button>
</div>
<div class="rd-navbar-main-element">
<div class="rd-navbar-nav-wrap">
<!-- RD Navbar Nav-->
<ul class="rd-navbar-nav">
<li class="rd-nav-item"><a class="rd-nav-link" href="#project">Projelerimiz</a></li>
<li class="rd-nav-item"><a class="rd-nav-link" href="#company-info-scene">Hakkımızda</a></li>
<li class="rd-nav-item"><a class="rd-nav-link" href="#scene">Hizmetlerimiz</a></li>
<li class="rd-nav-item"><a class="rd-nav-link" href="#work-process">Ev Sahibi Olun</a></li>
<li class="rd-nav-item"><a class="rd-nav-link" href="#contacts">İletişim</a></li>
</ul>
<div class="contacts-classic">
<div class="unit align-items-center">
<div class="unit-left"><span class="icon novi-icon mdi mdi-cellphone"></span></div>
<div class="unit-body"><a class="contacts-classic-text" href="tel:#">@ViewBag.FooterPhone</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</div>
</header>
}
else
{
<p>Header içeriği bulunamadı.</p>
}

View File

@@ -0,0 +1,3 @@
<div class="snackbars" id="form-output-global"></div>
<script src="~/WebTheme/js/core.min.js"></script>
<script src="~/WebTheme/js/script.js"></script>

View File

@@ -0,0 +1,118 @@
@using static ConstructorApp.EntityLayer.Entities.Project
@model List<ResultProjectDto>
<section class="section novi-background bg-cover section-lg section-inset-2 bg-gray-100" id="project">
<div class="container">
<div class="caption-classic">
<div class="caption-classic-group">
<h1 class="caption-classic-title wow fadeInLeft">Proje<span class="font-weight-light">ler</span></h1>
<p class="caption-classic-text wow fadeInRight">
Aşağıda, benzersiz mimari yaklaşımımızla çok sayıda ödüle layık görülen son projelerimize göz atabilirsiniz.
</p>
</div>
<div class="caption-classic-decor wow blurIn"></div>
</div>
<!-- Owl Carousel-->
<div class="owl-carousel owl-style-1" data-autoplay="true" data-autoplay-timeout="10000" data-autoplay-hover-pause="true" data-items="1" data-margin="30" data-xl-margin="90" data-nav="true" data-dots="true" data-mouse-drag="false" data-smart-speed="600">
@foreach (var project in Model.Where(x => x.IsActive))
{
<article class="project-mary">
<div class="project-mary-figure">
<a href="/projeler/@project.Slug">
<img src="@project.CoverUrl" alt="@project.Title" width="775" height="524" />
</a>
<!-- Ribbon Start -->
<div class="ribbon-wrapper">
<div class="ribbon
@(project.Status == ProjectStatus.Completed ? "bg-success text-white" :
project.Status == ProjectStatus.Planned ? "bg-warning text-white" :
project.Status == ProjectStatus.UnderConstruction ? "bg-secondary text-dark" :
"bg-secondary text-white")">
@(project.Status == ProjectStatus.Completed ? "Teslimatta" :
project.Status == ProjectStatus.Planned ? "Tanıtımda" :
project.Status == ProjectStatus.UnderConstruction ? "İnşaatta" :
"Durum Belirsiz")
</div>
</div>
<!-- Ribbon End -->
<div class="project-mary-link-wrap">
<a class="project-mary-link mdi mdi-magnify" data-lightgallery="item" href="@project.CoverUrl">
<img src="@project.CoverUrl" alt="@project.Title" width="775" height="524" />
</a>
</div>
</div>
<div class="project-mary-content">
<ul class="project-mary-panel">
<li class="project-mary-panel-item">
<time class="project-mary-time" datetime="@project.Date.ToString("yyyy-MM-dd")">
@project.Date.ToString("MMMM dd, yyyy")
</time>
</li>
<li class="project-mary-panel-item">
<div class="project-mary-tag">@project.Title</div>
</li>
</ul>
<h3 class="project-mary-title">
<a href="/projeler/@project.Slug">@project.Location</a>
</h3>
<p class="project-mary-text">@project.ShortDescription</p>
</div>
</article>
}
</div>
</div>
</section>
<style>
.ribbon-wrapper {
position: absolute;
top: 0px; /* Görselin içine doğru yukarıdan mesafe */
right: 0px; /* Görselin içine doğru sağdan mesafe */
overflow: hidden;
width: 100px;
height: 100px;
z-index: 10;
}
.ribbon {
position: absolute;
display: block;
width: 140px; /* Ribbon genişliği */
padding: 10px 0; /* Ribbon yüksekliği */
font-size: 16px; /* Yazı boyutu */
text-align: center;
color: #fff;
transform: rotate(45deg); /* Sağ üst köşeden çapraz */
top: 20px; /* Ribbon'un görselin içine kayması için ayar */
right: -30px; /* Görselin içine konumlandırma */
z-index: 11;
}
.ribbon.bg-success {
background-color: #28a745 !important;
}
.ribbon.bg-warning {
background-color: #ffc107 !important;
}
.ribbon.bg-info {
background-color: #17a2b8 !important;
}
.ribbon.bg-secondary {
background-color: #6c757d !important;
}
.text-secondary {
color: white !important; /* Tüm text-secondary sınıfları beyaz yapılır */
}
</style>

View File

@@ -0,0 +1,42 @@
@model List<ResultReferenceDto>
<h5 class="title-style-2 mb-3" style="color: #c4956a;">Referanslarımız</h5>
<div class="swiper mySwiper">
<div class="swiper-wrapper">
@foreach (var reference in Model)
{
<div class="swiper-slide">
<a class="clients-classic" href="@(string.IsNullOrEmpty(reference.WebUrl) ? "#" : reference.WebUrl)" target="_blank">
<img src="@reference.LogoUrl" alt="reference-logo" style="max-width: 150px;" />
</a>
</div>
}
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
var swiper = new Swiper(".mySwiper", {
loop: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
slidesPerView: 3,
spaceBetween: 30,
breakpoints: {
640: {
slidesPerView: 2,
},
768: {
slidesPerView: 3,
},
1024: {
slidesPerView: 5,
}
}
});
</script>

View File

@@ -0,0 +1,39 @@
@model List<ResultTeamDto>
<section class="section novi-background bg-cover section-lg bg-gray-100 text-center" id="team">
<div class="container">
<h3 class="wow fadeInLeft">Ekibimiz</h3>
<h6 class="title-style-1 wow fadeInRight">Başarımızın arkasındaki insanlar</h6>
<div class="owl-carousel" data-items="1" data-sm-items="2" data-md-items="3" data-xl-items="4" data-margin="5" data-dots="true" data-mouse-drag="false">
@foreach (var item in Model)
{
<article class="team-classic wow fadeInUp" data-wow-delay=".1s">
<div class="team-classic-figure">
<img src="@item.ImageUrl" alt="" width="290" height="284" />
</div>
<div class="team-classic-body">
<h5 class="team-classic-name"><a href="#">@item.NameSurname</a></h5>
</div>
<div class="team-classic-footer">
<div class="team-classic-status">@item.Title</div>
<div class="team-classic-list-panel">
<ul class="team-classic-list-social list-inline">
<li>
<a class="icon novi-icon mdi mdi-facebook" href="@item.Facebook" target="_blank"></a>
</li>
<li>
<a class="icon novi-icon mdi mdi-instagram" href="@item.Instagram" target="_blank"></a>
</li>
<li>
<a class="icon novi-icon mdi mdi-linkedin-box" href="@item.Linkedin" target="_blank"></a>
</li>
</ul>
<div class="heading-1 team-classic-placeholder">@item.NameSurname.Split(' ')[0]</div>
</div>
</div>
</article>
}
</div>
</div>
</section>

View File

@@ -0,0 +1,33 @@
@model List<ResultTestimonialDto>
@using ConstructorApp.EntityLayer.Entities
<section class="section novi-background bg-cover section-xl section-inset-2 bg-gray-800 bg-image" style="background-image: url(SeedData/bg-image-1.jpg)">
<div class="container">
<!-- Owl Carousel-->
<div class="owl-carousel owl-style-2" data-loop="true" data-autoplay="true" data-items="1" data-margin="30" data-dots="true" data-mouse-drag="false" data-animation-in="fadeIn" data-animation-out="fadeOut">
@foreach (var item in Model.Where(x => x.Status == TestimonialStatus.Confirmed))
{
<article class="quote-classic">
<div class="quote-classic-text">
<div class="q">@item.Comment</div>
</div>
<div class="unit unit-spacing-md align-items-center text-left d-inline-flex">
<div class="unit-left">
<div class="quote-classic-figure">
<img src="@item.ImageUrl" alt="@item.Name" width="80" height="80" />
</div>
</div>
<div class="unit-body">
<div class="quote-classic-author">@item.Name</div>
<div class="quote-classic-status">@item.Title</div>
</div>
</div>
<div class="quote-classic-decor-wrap">
<div class="quote-classic-decor"></div>
<div class="quote-classic-decor"></div>
</div>
</article>
}
</div>
</div>
</section>

View File

@@ -0,0 +1,51 @@
@model List<ResultWorkProcessDto>
<section class="section novi-background bg-cover section-xl bg-gray-800 decoration-1" id="work-process">
<div class="tabs-custom container" id="tabs-1" data-view-triggerable="true">
<div class="row row-30 row-md-40 justify-content-lg-between">
<div class="col-lg-5">
<h6 class="title-style-1 wow fadeInLeft">Yeni bir eve giden 4 adım</h6>
<h1 class="wow fadeInLeft" data-wow-delay=".05s">Bunu Nasıl<br class="d-none d-lg-block">Yapıyoruz <span class="font-weight-light">?</span></h1>
<!-- Tab Panes -->
<div class="tab-content wow fadeInLeft" data-wow-delay=".1s">
@for (int i = 0; i < Model.Count; i++)
{
var item = Model[i];
<div class="tab-pane fade @(i == 0 ? "show active" : "")" id="tabs-1-@(i+1)">
<h3 class="title-style-1">@item.Title</h3>
@* <p>@item.Info</p> *@
<p>@item.SubTitle</p>
</div>
}
</div>
</div>
<div class="col-lg-7 col-xl-6">
<div class="inset-xl-left-35">
<!-- Tab Navigation -->
<ul class="nav nav-style-1">
@for (int i = 0; i < Model.Count; i++)
{
var item = Model[i];
<li class="nav-item wow blurIn" role="presentation" data-wow-delay=".0@(i * 5)s">
<a class="nav-link @(i == 0 ? "active" : "")" href="#tabs-1-@(i+1)" data-toggle="tab">@item.Info</a>
</li>
}
</ul>
<!-- Images -->
<div class="project-creative wow blurIn">
@for (int i = 0; i < Model.Count; i++)
{
var item = Model[i];
<div class="project-creative-figure @(i == 0 ? "active" : "")" data-view-trigger="#tabs-1-@(i + 1)">
<img src="@item.ImageUrl" alt="" width="531" height="327" />
</div>
}
</div>
</div>
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - ConstructorAppUI</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/ConstructorAppUI.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ConstructorAppUI</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2025 - ConstructorAppUI - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@@ -0,0 +1,48 @@
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
a {
color: #0077cc;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}

View File

@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>