Add project files.
This commit is contained in:
39
ConstructorAppUI/Views/AdminLayout/Index.cshtml
Normal file
39
ConstructorAppUI/Views/AdminLayout/Index.cshtml
Normal file
@@ -0,0 +1,39 @@
|
||||
@{
|
||||
Layout = null;
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
@await Component.InvokeAsync("_AdminLayoutHeaderPartialComponent")
|
||||
<body class="hold-transition sidebar-mini">
|
||||
<div class="wrapper">
|
||||
@await Component.InvokeAsync("_AdminLayoutNavbarPartialComponent")
|
||||
<aside class="main-sidebar sidebar-dark-primary elevation-4">
|
||||
@await Component.InvokeAsync("_AdminLayoutSidebarPartialComponent")
|
||||
</aside>
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<div class="content-header">
|
||||
<div class="container-fluid">
|
||||
@RenderBody()
|
||||
<div class="row mb-2">
|
||||
</div><!-- /.row -->
|
||||
</div><!-- /.container-fluid -->
|
||||
</div>
|
||||
<!-- /.content-header -->
|
||||
<!-- Main content -->
|
||||
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
<!-- Main Footer -->
|
||||
<footer class="main-footer">
|
||||
@await Component.InvokeAsync("_AdminLayoutFooterPartialComponent")
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
@await Component.InvokeAsync("_AdminLayoutScriptPartialComponent")
|
||||
@RenderSection("Scripts", required: false)
|
||||
</html>
|
||||
|
||||
67
ConstructorAppUI/Views/CompanyInfo/Index.cshtml
Normal file
67
ConstructorAppUI/Views/CompanyInfo/Index.cshtml
Normal file
@@ -0,0 +1,67 @@
|
||||
@model List<ResultCompanyInfoDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Başarılarımız İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Değer</th>
|
||||
<th scope="col">Başlık</th>
|
||||
<th scope="col">Alt Başlık</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Value</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.SubTitle</td>
|
||||
<td>
|
||||
<a href="/CompanyInfo/UpdateCompanyInfo/@item.CompanyInfoID" class="btn btn-outline-success">Güncelle</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
<a asp-controller="CompanyInfoVideo" asp-action="Index" class="btn btn-success">Tanıtım Videosu Ekle</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
53
ConstructorAppUI/Views/CompanyInfo/UpdateCompanyInfo.cshtml
Normal file
53
ConstructorAppUI/Views/CompanyInfo/UpdateCompanyInfo.cshtml
Normal file
@@ -0,0 +1,53 @@
|
||||
@model UpdateCompanyInfoDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateCompanyInfo";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Başarılarımız İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Hizmet Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="CompanyInfoID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Value" class="col-md-2 col-form-label">Değer</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Value" id="Value">
|
||||
<span asp-validation-for="Value" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="SubTitle" class="col-md-2 col-form-label">Alt Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="SubTitle" id="SubTitle">
|
||||
<span asp-validation-for="SubTitle" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/CompanyInfo/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
58
ConstructorAppUI/Views/CompanyInfoVideo/Index.cshtml
Normal file
58
ConstructorAppUI/Views/CompanyInfoVideo/Index.cshtml
Normal file
@@ -0,0 +1,58 @@
|
||||
@model List<ResultCompanyInfoVideoDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Başarılarımız Viedo İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">VideoUrl</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>@item.VideoUrl</td>
|
||||
<td>
|
||||
<a href="/CompanyInfoVideo/UpdateCompanyInfoVideo/@item.CompanyInfoVideoID" class="btn btn-outline-success">Güncelle</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
@model UpdateCompanyInfoVideoDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateCompanyInfoVideo";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Başarılarımız Viedo İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Hakkımızda Viedo Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="CompanyInfoVideoID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="VideoUrl" class="col-md-2 col-form-label">VideoUrl</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="VideoUrl" id="VideoUrl">
|
||||
<span asp-validation-for="VideoUrl" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/CompanyInfoVideo/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
60
ConstructorAppUI/Views/ContactUs/Index.cshtml
Normal file
60
ConstructorAppUI/Views/ContactUs/Index.cshtml
Normal file
@@ -0,0 +1,60 @@
|
||||
@model List<ResultContactUsDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">İletişim İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Tarih</th>
|
||||
<th scope="col">Gönderen</th>
|
||||
<th scope="col">E-Posta</th>
|
||||
<th scope="col">Telefon</th>
|
||||
<th scope="col">Mesaj</th>
|
||||
<th scope="col">Durum</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<th>@count</th>
|
||||
<td>@item.Date</td>
|
||||
<td>@item.NameSurname</td>
|
||||
<td>@item.Mail</td>
|
||||
<td>@item.Phone</td>
|
||||
<td>@item.MessageContent</td>
|
||||
<td>
|
||||
<span class="badge @(item.Status ? "bg-success text-white" : "bg-secondary text-white")">
|
||||
@(item.Status ? "Okundu" : "Okunmadı")
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/ContactUs/MarkAsRead/@item.ContactusID" class="btn btn-outline-info @(item.Status ? "disabled" : "")">Okundu</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
123
ConstructorAppUI/Views/Dashboard/Index.cshtml
Normal file
123
ConstructorAppUI/Views/Dashboard/Index.cshtml
Normal file
@@ -0,0 +1,123 @@
|
||||
@using ConstructorAppUI.ViewModels
|
||||
@model DashboardIndexViewModel
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
|
||||
@section Scripts {
|
||||
<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>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(() => {
|
||||
var signalRHubBaseUrl = '@ViewBag.SignalRHubBaseUrl';
|
||||
var connection = new signalR.HubConnectionBuilder().withUrl(`${signalRHubBaseUrl}/signalrhub`).build();
|
||||
|
||||
|
||||
connection.on("ReceiveContactUsCountAll", (value) => {
|
||||
$("#receivecontactuscountall").text(value);
|
||||
});
|
||||
|
||||
connection.on("ReceiveProjectCountAll", (value) => {
|
||||
$("#receiveprojectcountall").text(value);
|
||||
});
|
||||
|
||||
connection.on("ReceiveReferenceCountAll", (value) => {
|
||||
$("#receivereferencecountall").text(value);
|
||||
});
|
||||
|
||||
connection.on("ReceiveTestimonialCountAll", (value) => {
|
||||
$("#receivetestimonialcountall").text(value);
|
||||
});
|
||||
|
||||
|
||||
connection.start().then(() => {
|
||||
$("#connstatus").text("Bağlı"); // Bağlantı sağlandığında durumu "Connected" olarak ayarla
|
||||
|
||||
setInterval(() => {
|
||||
connection.invoke("SendContactUs").catch((err) => console.error(err));
|
||||
connection.invoke("SendProject").catch((err) => console.error(err));
|
||||
connection.invoke("SendReference").catch((err) => console.error(err));
|
||||
connection.invoke("SendTestimonial").catch((err) => console.error(err));
|
||||
}, 1000);
|
||||
|
||||
}).catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
|
||||
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
|
||||
<body class="hold-transition sidebar-mini layout-fixed">
|
||||
<div class="wrapper">
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-info">
|
||||
<div class="inner">
|
||||
<h3 id="receivecontactuscountall"><sup style="font-size: 20px"></sup></h3>
|
||||
<p>İletişim Talepleri</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="far fa-envelope"></i>
|
||||
</div>
|
||||
<a href="ContactUs/Index/" class="small-box-footer">Daha Fazla <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-warning">
|
||||
<div class="inner">
|
||||
<h3 id="receiveprojectcountall"><sup style="font-size: 20px"></sup></h3>
|
||||
<p>Gösterimdeki Projeler</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-add"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">Daha Fazla <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-gradient-indigo">
|
||||
<div class="inner">
|
||||
<h3 id="receivereferencecountall"><sup style="font-size: 20px"></sup></h3>
|
||||
<p>Referanslar</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-add"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">Daha Fazla <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-success">
|
||||
<div class="inner">
|
||||
<h3 id="receivetestimonialcountall"><sup style="font-size: 20px"></sup></h3>
|
||||
<p>Gelen Youmlar</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-add"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">Daha Fazla <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
72
ConstructorAppUI/Views/Footer/Index.cshtml
Normal file
72
ConstructorAppUI/Views/Footer/Index.cshtml
Normal file
@@ -0,0 +1,72 @@
|
||||
@model List<ResultFooterDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Footer İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Logo</th>
|
||||
<th scope="col">Telefon</th>
|
||||
<th scope="col">E-Posta</th>
|
||||
<th scope="col">Facebook</th>
|
||||
<th scope="col">Instagram</th>
|
||||
<th scope="col">Linkedin</th>
|
||||
<th scope="col">Youtube</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.LogoUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>@item.Phone</td>
|
||||
<td>@item.Mail</td>
|
||||
<td>@item.Facebook</td>
|
||||
<td>@item.Instagram</td>
|
||||
<td>@item.Linkedin</td>
|
||||
<td>@item.Youtube</td>
|
||||
<td>
|
||||
<a href="/Footer/UpdateFooter/@item.FooterID" class="btn btn-outline-success">Güncelle</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
90
ConstructorAppUI/Views/Footer/UpdateFooter.cshtml
Normal file
90
ConstructorAppUI/Views/Footer/UpdateFooter.cshtml
Normal file
@@ -0,0 +1,90 @@
|
||||
@model UpdateFooterDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateFooter";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Footer İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Banner Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="FooterID" />
|
||||
<div class="card-body">
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Logo</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.LogoUrl))
|
||||
{
|
||||
<img src="@Model.LogoUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Phone" class="col-md-2 col-form-label">Telefon</label>
|
||||
<div class="col-md-10">
|
||||
<input type="tel" class="form-control" asp-for="Phone" id="Phone">
|
||||
<span asp-validation-for="Phone" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Mail" class="col-md-2 col-form-label">E-Posta</label>
|
||||
<div class="col-md-10">
|
||||
<input type="email" class="form-control" asp-for="Mail" id="Mail">
|
||||
<span asp-validation-for="Mail" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Facebook" class="col-md-2 col-form-label">Facebook</label>
|
||||
<div class="col-md-10">
|
||||
<input type="url" class="form-control" asp-for="Facebook" id="Facebook">
|
||||
<span asp-validation-for="Facebook" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Instagram" class="col-md-2 col-form-label">Instagram</label>
|
||||
<div class="col-md-10">
|
||||
<input type="url" class="form-control" asp-for="Instagram" id="Instagram">
|
||||
<span asp-validation-for="Instagram" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Linkedin" class="col-md-2 col-form-label">Linkedin</label>
|
||||
<div class="col-md-10">
|
||||
<input type="url" class="form-control" asp-for="Linkedin" id="Linkedin">
|
||||
<span asp-validation-for="Linkedin" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Youtube" class="col-md-2 col-form-label">Youtube</label>
|
||||
<div class="col-md-10">
|
||||
<input type="url" class="form-control" asp-for="Youtube" id="Youtube">
|
||||
<span asp-validation-for="Youtube" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Footer/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
15
ConstructorAppUI/Views/Home/Index.cshtml
Normal file
15
ConstructorAppUI/Views/Home/Index.cshtml
Normal file
@@ -0,0 +1,15 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
Layout = "~/Views/HomeLayout/Index.cshtml";
|
||||
}
|
||||
<div class="page">
|
||||
@await Component.InvokeAsync("_HomeBannerAndSliderPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeAboutPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeWorkProcessPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeTeamPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeCompanyInfoPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeProjectPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeTestimonialPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeReferencePartialComponent")
|
||||
@await Component.InvokeAsync("_HomeContactUsPartialComponent")
|
||||
</div>
|
||||
54
ConstructorAppUI/Views/HomeBanner/Index.cshtml
Normal file
54
ConstructorAppUI/Views/HomeBanner/Index.cshtml
Normal file
@@ -0,0 +1,54 @@
|
||||
@model List<ResultHomeBannerDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Banner İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Başlık</th>
|
||||
<th scope="col">Alt Başlık</th>
|
||||
<th scope="col">Logo</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.SubTitle</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.LogoUrl" alt="Görsel1" />
|
||||
</td>
|
||||
<td><a href="/HomeBanner/UpdateHomeBanner/@item.HomeBannerID" class="btn btn-outline-success">Güncelle</a></td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
58
ConstructorAppUI/Views/HomeBanner/UpdateHomeBanner.cshtml
Normal file
58
ConstructorAppUI/Views/HomeBanner/UpdateHomeBanner.cshtml
Normal file
@@ -0,0 +1,58 @@
|
||||
@model UpdateHomeBannerDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateHomeBanner";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Banner İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Banner Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="HomeBannerID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="SubTitle" class="col-md-2 col-form-label">Alt Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="5" class="form-control" asp-for="SubTitle" id="SubTitle"></textarea>
|
||||
<span asp-validation-for="SubTitle" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Logo</label>
|
||||
<div class="col-md-10">
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu en fazla 440x84 olmaldır.</span>
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.LogoUrl))
|
||||
{
|
||||
<img src="@Model.LogoUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/HomeBanner/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
19
ConstructorAppUI/Views/HomeLayout/Index.cshtml
Normal file
19
ConstructorAppUI/Views/HomeLayout/Index.cshtml
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
@{
|
||||
Layout = null;
|
||||
// HomeLayout
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
@await Component.InvokeAsync("_HomeLayoutHeaderPartialComponent")
|
||||
<body>
|
||||
@await Component.InvokeAsync("_HomeLayoutNavbarPartialComponent")
|
||||
|
||||
@RenderBody()
|
||||
|
||||
@await Component.InvokeAsync("_HomeLayoutFooterPartialComponent")
|
||||
@await Component.InvokeAsync("_HomeLayoutScriptPartialComponent")
|
||||
@RenderSection("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
||||
113
ConstructorAppUI/Views/Login/Index.cshtml
Normal file
113
ConstructorAppUI/Views/Login/Index.cshtml
Normal file
@@ -0,0 +1,113 @@
|
||||
@using ConstructorAppUI.ViewModels
|
||||
@model LoginViewModel
|
||||
@{
|
||||
Layout = null;
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<!-- Head -->
|
||||
<head>
|
||||
|
||||
<title>Constructor Web-App Login</title>
|
||||
|
||||
<!-- Meta-Tags -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="keywords" content="">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script>
|
||||
|
||||
<!-- //Meta-Tags -->
|
||||
|
||||
<link href="~/register/css/popuo-box.css" rel="stylesheet" type="text/css" media="all" />
|
||||
|
||||
<!-- Style -->
|
||||
<link rel="stylesheet" href="~/register/css/style.css" type="text/css" media="all">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link href="//fonts.googleapis.com/css?family=Quicksand:300,400,500,700" rel="stylesheet">
|
||||
<!-- //Fonts -->
|
||||
|
||||
</head>
|
||||
<!-- //Head -->
|
||||
<!-- Body -->
|
||||
<body>
|
||||
<div class="w3layoutscontaineragileits">
|
||||
<div style="display: flex; align-items: center; justify-content: center;">
|
||||
<img src="~/SeedData/Logo.png" alt="Logo" style="width: 250px; height: 100px; margin-right: 10px;" />
|
||||
|
||||
</div>
|
||||
<h5 style="margin: 0;">Login</h5>
|
||||
<br /><br />
|
||||
<form method="post">
|
||||
<input type="text" asp-for="UserName" placeholder="Kullanıcı Adınız" value="admin" required="">
|
||||
<input type="password" asp-for="Password" placeholder="Şifreniz" value="Password123!" required="">
|
||||
<span asp-validation-for="Password" class="text-danger"></span>
|
||||
<br /><br />
|
||||
<ul class="agileinfotickwthree">
|
||||
<li>
|
||||
<input type="checkbox" id="brand1" value="">
|
||||
<label for="brand1"><span></span>Beni Hatırla</label>
|
||||
@* <a href="/Register/Index/">Bir hesabınız yok mu?</a> *@
|
||||
</li>
|
||||
</ul>
|
||||
@if (!ViewData.ModelState.IsValid)
|
||||
{
|
||||
<div class="alert alert-danger" style="color: red; text-align:center;">
|
||||
@foreach (var modelError in ViewData.ModelState.Values.SelectMany(v => v.Errors))
|
||||
{
|
||||
<p>@modelError.ErrorMessage</p>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
<input type="submit" value="Giriş">
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<div class="aitssendbuttonw3ls">
|
||||
<div class="copyright ml-5">
|
||||
© @DateTime.Now.Year
|
||||
<a href="https://polikarbilisim.com" target="_blank">
|
||||
<img src="~/SeedData/pb_logo_whitebg.png" alt="Polikar Bilişim Hizmetleri Logo" style="height: 70px; vertical-align: middle;" />
|
||||
</a>
|
||||
|
||||
<a href="https://polikarbilisim.com/"></a> | Tüm Hakları Saklıdır.
|
||||
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript" src="~/register/js/jquery-2.1.4.min.js"></script>
|
||||
|
||||
<!-- pop-up-box-js-file -->
|
||||
<script src="~/register/js/jquery.magnific-popup.js" type="text/javascript"></script>
|
||||
<!--//pop-up-box-js-file -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('.w3_play_icon,.w3_play_icon1,.w3_play_icon2').magnificPopup({
|
||||
type: 'inline',
|
||||
fixedContentPos: false,
|
||||
fixedBgPos: true,
|
||||
overflowY: 'auto',
|
||||
closeBtnInside: true,
|
||||
preloader: false,
|
||||
midClick: true,
|
||||
removalDelay: 300,
|
||||
mainClass: 'my-mfp-zoom-in'
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
<!-- //Body -->
|
||||
|
||||
</html>
|
||||
210
ConstructorAppUI/Views/Project/CreateProject.cshtml
Normal file
210
ConstructorAppUI/Views/Project/CreateProject.cshtml
Normal file
@@ -0,0 +1,210 @@
|
||||
@model CreateProjectDto
|
||||
@{
|
||||
ViewData["Title"] = "CreateProject";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Projelerimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form asp-action="CreateProject" method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yeni Proje Girişi</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<!-- Sol sütun -->
|
||||
<div class="col-md-6">
|
||||
<h5 class="mb-3 font-weight-bold text-primary">Anasayfa Projeler Kısmında Gösterilecek Alanlar:</h5>
|
||||
<div class="form-group">
|
||||
<label for="Date">Oturum Tarihi</label>
|
||||
<input type="date" class="form-control" asp-for="Date" id="Date">
|
||||
<span asp-validation-for="Date" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="Title">Başlık</label>
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="Location">Lokasyon</label>
|
||||
<input type="text" class="form-control" asp-for="Location" id="Location">
|
||||
<span asp-validation-for="Location" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="ShortDescription">Kısa Açıklama</label>
|
||||
<textarea rows="2" class="form-control" asp-for="ShortDescription" id="ShortDescription"></textarea>
|
||||
<span asp-validation-for="ShortDescription" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<!-- Görsel CoverFile-->
|
||||
<div class="form-group">
|
||||
<label for="ImageFile">Kapak Görseli</label><br />
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 775x524 olmalıdır.</span>
|
||||
<input type="file" class="form-control" name="CoverFile" id="CoverFile">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sağ sütun -->
|
||||
<div class="col-md-6">
|
||||
<h5 class="mb-3 font-weight-bold text-warning">Projeler Detay Sayfasında Gösterilecek Alanlar:</h5>
|
||||
<div class="form-group">
|
||||
<label for="Slug">Sayfa Adı</label>
|
||||
<input type="text" class="form-control" asp-for="Slug" id="Slug">
|
||||
<span asp-validation-for="Slug" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="GoogleMapIFrame">Google Map IFrame</label>
|
||||
<input type="text" class="form-control" asp-for="GoogleMapIFrame" id="GoogleMapIFrame">
|
||||
<span asp-validation-for="GoogleMapIFrame" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="LongDescription">Uzun Açıklama</label>
|
||||
<textarea rows="2" class="form-control" asp-for="LongDescription" id="LongDescription"></textarea>
|
||||
<span asp-validation-for="LongDescription" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="VideoUrl">Video Url</label>
|
||||
<input type="text" class="form-control" asp-for="VideoUrl" id="VideoUrl">
|
||||
<span asp-validation-for="VideoUrl" class="text-danger"></span>
|
||||
</div>
|
||||
<!-- Görsel FloorPlanFile-->
|
||||
<div class="form-group">
|
||||
<label for="FloorPlanUrl">Kat Planı</label>
|
||||
<input type="file" class="form-control" name="FloorPlanFile" id="FloorPlanFile">
|
||||
<span asp-validation-for="FloorPlanUrl" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Project/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "Location", name: "Lokasyon" },
|
||||
{ id: "Title", name: "Başlık" },
|
||||
{ id: "ShortDescription", name: "Kısa Açıklama" },
|
||||
{ id: "GoogleMapIFrame", name: "Google Map IFrame" },
|
||||
{ id: "CoverFile", name: "Kapak Görseli" },
|
||||
{ id: "LongDescription", name: "Uzun Açıklama" },
|
||||
{ id: "Slug", name: "Dinamik Sayfa Adı" }
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
|
||||
if (input.type === "file") {
|
||||
if (input.files.length === 0) {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} yüklenmelidir.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
} else {
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Slug dönüştürücü fonksiyon
|
||||
function generateSlug(text) {
|
||||
const map = {
|
||||
ç: 'c', Ç: 'c',
|
||||
ğ: 'g', Ğ: 'g',
|
||||
ü: 'u', Ü: 'u',
|
||||
ş: 's', Ş: 's',
|
||||
ı: 'i', İ: 'i',
|
||||
ö: 'o', Ö: 'o'
|
||||
};
|
||||
|
||||
return text
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/[çÇğĞüÜşŞıİöÖ]/g, letter => map[letter])
|
||||
.replace(/[^a-z0-9\s-]/g, '') // harf, sayı, boşluk ve tire dışındakileri sil
|
||||
.replace(/\s+/g, '-') // boşlukları tireye çevir
|
||||
.replace(/-+/g, '-') // birden fazla tire varsa teke indir
|
||||
.replace(/^-+|-+$/g, ''); // baştaki ve sondaki tireleri sil
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const titleInput = document.getElementById("Title");
|
||||
const slugInput = document.getElementById("Slug");
|
||||
|
||||
if (titleInput && slugInput) {
|
||||
titleInput.addEventListener("input", function () {
|
||||
const slug = generateSlug(titleInput.value);
|
||||
slugInput.value = slug;
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
177
ConstructorAppUI/Views/Project/Detail.cshtml
Normal file
177
ConstructorAppUI/Views/Project/Detail.cshtml
Normal file
@@ -0,0 +1,177 @@
|
||||
@model ResultProjectDto
|
||||
|
||||
@{
|
||||
ViewData["Title"] = Model.Title;
|
||||
Layout = null;
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
<title>@Model.Title</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="keywords" content="">
|
||||
|
||||
<!-- Favicons -->
|
||||
<link href="~/SeedData/favicon-16x16.png" rel="icon">
|
||||
<link href="~/SeedData/apple-touch-icon.png" rel="apple-touch-icon">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link href="https://fonts.googleapis.com" rel="preconnect">
|
||||
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Vendor CSS Files -->
|
||||
<link href="~/EstateAgency/assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="~/EstateAgency/assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="~/EstateAgency/assets/vendor/aos/aos.css" rel="stylesheet">
|
||||
<link href="~/EstateAgency/assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet">
|
||||
<link href="~/EstateAgency/assets/vendor/swiper/swiper-bundle.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Main CSS File -->
|
||||
<link href="~/EstateAgency/assets/css/main.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body class="property-single-page">
|
||||
<main class="main">
|
||||
<!-- Page Title -->
|
||||
<div class="page-title" data-aos="fade">
|
||||
<div class="heading">
|
||||
<div class="container">
|
||||
<div class="row d-flex justify-content-center text-center">
|
||||
<div class="col-lg-8">
|
||||
<h1>@Model.Title</h1>
|
||||
<p class="mb-0">@Model.ShortDescription</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- End Page Title -->
|
||||
<!-- Real Estate 2 Section -->
|
||||
<section id="real-estate-2" class="real-estate-2 section">
|
||||
|
||||
<div class="container" data-aos="fade-up">
|
||||
|
||||
<div class="portfolio-details-slider swiper init-swiper">
|
||||
<script type="application/json" class="swiper-config">
|
||||
{
|
||||
"loop": true,
|
||||
"speed": 600,
|
||||
"autoplay": {
|
||||
"delay": 5000
|
||||
},
|
||||
"slidesPerView": "auto",
|
||||
"navigation": {
|
||||
"nextEl": ".swiper-button-next",
|
||||
"prevEl": ".swiper-button-prev"
|
||||
},
|
||||
"pagination": {
|
||||
"el": ".swiper-pagination",
|
||||
"type": "bullets",
|
||||
"clickable": true
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<div class="swiper-wrapper align-items-center">
|
||||
@if (Model.ImageUrls != null && Model.ImageUrls.Any())
|
||||
{
|
||||
foreach (var img in Model.ImageUrls)
|
||||
{
|
||||
<div class="swiper-slide">
|
||||
<img src="@img" alt="">
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="swiper-slide">
|
||||
<img src="@Model.CoverUrl" alt="">
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="swiper-button-prev"></div>
|
||||
<div class="swiper-button-next"></div>
|
||||
<div class="swiper-pagination"></div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-between gy-4 mt-4">
|
||||
|
||||
<div class="col-lg-12" data-aos="fade-up">
|
||||
|
||||
<div class="portfolio-description">
|
||||
<h2>Proje Detayları</h2>
|
||||
<p>
|
||||
@Model.LongDescription
|
||||
</p>
|
||||
</div><!-- End Portfolio Description -->
|
||||
<!-- Tabs -->
|
||||
<ul class="nav nav-pills mb-3">
|
||||
<li><a class="nav-link active" data-bs-toggle="pill" href="#real-estate-2-tab1">Video</a></li>
|
||||
<li><a class="nav-link" data-bs-toggle="pill" href="#real-estate-2-tab2">Kat Planı</a></li>
|
||||
<li><a class="nav-link" data-bs-toggle="pill" href="#real-estate-2-tab3">Lokasyon</a></li>
|
||||
</ul><!-- End Tabs -->
|
||||
<!-- Tab Content -->
|
||||
<div class="tab-content">
|
||||
|
||||
<div class="tab-pane fade show active" id="real-estate-2-tab1">
|
||||
<div class="ratio ratio-16x9">
|
||||
@{
|
||||
var url = Model.VideoUrl;
|
||||
var vid = ConstructorAppUI.Helpers.YouTubeHelper.ExtractVideoId(url);
|
||||
var embedUrl = string.IsNullOrEmpty(vid) ? "" : $"https://www.youtube.com/embed/{vid}?autoplay=1";
|
||||
}
|
||||
<p>Embed URL: @embedUrl</p>
|
||||
@if (!string.IsNullOrEmpty(embedUrl))
|
||||
{
|
||||
<iframe src="@embedUrl" style="width: 100%; height: 400px;" frameborder="0" allowfullscreen></iframe>
|
||||
}
|
||||
|
||||
</div>
|
||||
</div><!-- End Tab 1 Content -->
|
||||
|
||||
<div class="tab-pane fade" id="real-estate-2-tab2">
|
||||
@* <img width="750" height="750" src="@Model.FloorPlanUrl alt="Görsel" /> *@
|
||||
<img src="@Model.FloorPlanUrl" alt="Görsel" width="750" height="750" />
|
||||
|
||||
</div><!-- End Tab 2 Content -->
|
||||
|
||||
<div class="tab-pane fade" id="real-estate-2-tab3">
|
||||
<iframe src="@Html.Raw(Model.GoogleMapIFrame)" style="border:0; width:100%; height:400px;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
|
||||
|
||||
</div><!-- End Tab 3 Content -->
|
||||
</div><!-- End Tab Content -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section><!-- /Real Estate 2 Section -->
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
<!-- Scroll Top -->
|
||||
<a href="#" id="scroll-top" class="scroll-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
|
||||
|
||||
<!-- Preloader -->
|
||||
<div id="preloader"></div>
|
||||
|
||||
<!-- Vendor JS Files -->
|
||||
<script src="~/EstateAgency/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="~/EstateAgency/assets/vendor/php-email-form/validate.js"></script>
|
||||
<script src="~/EstateAgency/assets/vendor/aos/aos.js"></script>
|
||||
<script src="~/EstateAgency/assets/vendor/swiper/swiper-bundle.min.js"></script>
|
||||
<script src="~/EstateAgency/assets/vendor/purecounter/purecounter_vanilla.js"></script>
|
||||
|
||||
<!-- Main JS File -->
|
||||
<script src="~/EstateAgency/assets/js/main.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
92
ConstructorAppUI/Views/Project/Index.cshtml
Normal file
92
ConstructorAppUI/Views/Project/Index.cshtml
Normal file
@@ -0,0 +1,92 @@
|
||||
@using static ConstructorApp.EntityLayer.Entities.Project
|
||||
@using static ConstructorAppUI.Helpers.EnumExtensions
|
||||
@model List<ResultProjectDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Projelerimiz İşlemleri</h4>
|
||||
<a href="/Project/CreateProject/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Oturum Tarihi</th>
|
||||
<th scope="col">Başlık</th>
|
||||
<th scope="col">Sayfa Adı</th>
|
||||
<th scope="col">Lokasyon</th>
|
||||
<th scope="col">GoogleMap IFrame</th>
|
||||
<th scope="col">Video Url</th>
|
||||
<th scope="col">Kapak Görseli</th>
|
||||
<th scope="col">Kat Planı</th>
|
||||
<th scope="col">Yayın Durumu</th>
|
||||
<th scope="col">Proje Durumu</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Date</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.Slug</td>
|
||||
<td>@(item.Location?.Length > 8 ? item.Location.Substring(0, 8) + "..." : item.Location)</td>
|
||||
<td>@(item.GoogleMapIFrame?.Length > 8 ? item.GoogleMapIFrame.Substring(0, 8) + "..." : item.GoogleMapIFrame)</td>
|
||||
<td>@(item.VideoUrl?.Length > 8 ? item.VideoUrl.Substring(0, 8) + "..." : item.VideoUrl)</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.CoverUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.FloorPlanUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge @(item.IsActive? "bg-success text-white" : "bg-secondary text-white")">
|
||||
@(item.IsActive ? "Aktif" : "Pasif")
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge
|
||||
@(item.Status == ProjectStatus.Planned ? "bg-warning text-dark" :
|
||||
item.Status == ProjectStatus.UnderConstruction ? "bg-info text-white" :
|
||||
"bg-success text-white")">
|
||||
@item.Status.GetDisplayName()
|
||||
</span>
|
||||
</td>
|
||||
|
||||
|
||||
<td>
|
||||
<a href="/Project/UpdateProject/@item.ProjectID" class="btn btn-outline-success">Güncelle</a>
|
||||
<a href="/Project/ProjectStatusActive/@item.ProjectID" class="btn btn-outline-info @(item.IsActive == true ? "disabled" : "")">Aktif</a>
|
||||
<a href="/Project/ProjectStatusPassive/@item.ProjectID" class="btn btn-outline-dark @(item.IsActive == false ? "disabled" : "")">Pasif</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
219
ConstructorAppUI/Views/Project/UpdateProject.cshtml
Normal file
219
ConstructorAppUI/Views/Project/UpdateProject.cshtml
Normal file
@@ -0,0 +1,219 @@
|
||||
@model UpdateProjectDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateProject";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Projelerimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Slider Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="ProjectID" />
|
||||
<input type="hidden" asp-for="IsActive" />
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<!-- Sol sütun -->
|
||||
<div class="col-md-6">
|
||||
<h5 class="mb-3 font-weight-bold text-primary">Anasayfa Projeler Kısmında Gösterilecek Alanlar:</h5>
|
||||
<div class="form-group">
|
||||
<label for="Date">Oturum Tarihi</label>
|
||||
<input type="date" class="form-control" asp-for="Date" id="Date">
|
||||
<span asp-validation-for="Date" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="Title">Başlık</label>
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="Location">Lokasyon</label>
|
||||
<input type="text" class="form-control" asp-for="Location" id="Location">
|
||||
<span asp-validation-for="Location" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="ShortDescription">Kısa Açıklama</label>
|
||||
<textarea rows="2" class="form-control" asp-for="ShortDescription" id="ShortDescription"></textarea>
|
||||
<span asp-validation-for="ShortDescription" class="text-danger"></span>
|
||||
</div>
|
||||
<!-- Görsel CoverUrl -->
|
||||
<div class="form-group">
|
||||
<label for="ImageFile">Kapak Görseli</label><br />
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 775x524 olmalıdır.</span>
|
||||
<input type="file" class="form-control" name="CoverFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.CoverUrl))
|
||||
{
|
||||
<img src="@Model.CoverUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sağ sütun -->
|
||||
<div class="col-md-6">
|
||||
<h5 class="mb-3 font-weight-bold text-warning">Projeler Detay Sayfasında Gösterilecek Alanlar:</h5>
|
||||
<div class="form-group">
|
||||
<label for="Slug">Sayfa Adı</label>
|
||||
<input type="text" class="form-control" asp-for="Slug" id="Slug">
|
||||
<span asp-validation-for="Slug" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="GoogleMapIFrame">Google Map IFrame</label>
|
||||
<input type="text" class="form-control" asp-for="GoogleMapIFrame" id="GoogleMapIFrame">
|
||||
<span asp-validation-for="GoogleMapIFrame" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="LongDescription">Uzun Açıklama</label>
|
||||
<textarea rows="2" class="form-control" asp-for="LongDescription" id="LongDescription"></textarea>
|
||||
<span asp-validation-for="LongDescription" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="VideoUrl">Video Url</label>
|
||||
<input type="text" class="form-control" asp-for="VideoUrl" id="VideoUrl">
|
||||
<span asp-validation-for="VideoUrl" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
<!-- Görsel FloorPlanFile -->
|
||||
<div class="form-group">
|
||||
<label for="ImageFile">Kat Planı</label><br />
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 775x524 olmalıdır.</span>
|
||||
<input type="file" class="form-control" name="FloorPlanFile" id="FloorPlanFile">
|
||||
@if (!string.IsNullOrEmpty(Model.FloorPlanUrl))
|
||||
{
|
||||
<img src="@Model.FloorPlanUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="Status">Proje Durumu</label>
|
||||
<select asp-for="Status" class="form-control" asp-items="@(ViewBag.StatusList as List<SelectListItem>)">
|
||||
<option value="">Durum Seçiniz</option>
|
||||
</select>
|
||||
<span asp-validation-for="Status" class="text-danger"></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Project/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "Location", name: "Lokasyon" },
|
||||
{ id: "Title", name: "Başlık" },
|
||||
{ id: "ShortDescription", name: "Kısa Açıklama" },
|
||||
{ id: "GoogleMapIFrame", name: "Google Map IFrame" },
|
||||
{ id: "LongDescription", name: "Uzun Açıklama" },
|
||||
{ id: "Slug", name: "Dinamik Sayfa Adı" }
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
|
||||
if (input.type === "file") {
|
||||
if (input.files.length === 0) {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} yüklenmelidir.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
} else {
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Slug dönüştürücü fonksiyon
|
||||
function generateSlug(text) {
|
||||
const map = {
|
||||
ç: 'c', Ç: 'c',
|
||||
ğ: 'g', Ğ: 'g',
|
||||
ü: 'u', Ü: 'u',
|
||||
ş: 's', Ş: 's',
|
||||
ı: 'i', İ: 'i',
|
||||
ö: 'o', Ö: 'o'
|
||||
};
|
||||
|
||||
return text
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/[çÇğĞüÜşŞıİöÖ]/g, letter => map[letter])
|
||||
.replace(/[^a-z0-9\s-]/g, '') // harf, sayı, boşluk ve tire dışındakileri sil
|
||||
.replace(/\s+/g, '-') // boşlukları tireye çevir
|
||||
.replace(/-+/g, '-') // birden fazla tire varsa teke indir
|
||||
.replace(/^-+|-+$/g, ''); // baştaki ve sondaki tireleri sil
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const titleInput = document.getElementById("Title");
|
||||
const slugInput = document.getElementById("Slug");
|
||||
|
||||
if (titleInput && slugInput) {
|
||||
titleInput.addEventListener("input", function () {
|
||||
const slug = generateSlug(titleInput.value);
|
||||
slugInput.value = slug;
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
@model int // ProjectID
|
||||
@{
|
||||
ViewData["Title"] = "CreateProjectGallery";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<form asp-action="CreateProjectGallery" asp-controller="ProjectGallery" method="post" enctype="multipart/form-data">
|
||||
|
||||
<div class="form-group">
|
||||
<label>Proje Seçiniz:</label>
|
||||
<select asp-items="ViewBag.ProjectList" class="form-control" name="projectId" required>
|
||||
<option value="">-- Proje Seçiniz --</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-3">
|
||||
<label>Galeri Görselleri:</label>
|
||||
<input type="file" name="GalleryFiles" multiple class="form-control" required />
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Görselleri Yükle</button>
|
||||
<a href="/ProjectGallery/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
|
||||
</form>
|
||||
|
||||
58
ConstructorAppUI/Views/ProjectGallery/Index.cshtml
Normal file
58
ConstructorAppUI/Views/ProjectGallery/Index.cshtml
Normal file
@@ -0,0 +1,58 @@
|
||||
@model List<ResultProjectGalleryDto>
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
var apiBaseUrl = ViewData["ApiBaseUrl"] as string;
|
||||
}
|
||||
|
||||
<h3>Projeye Ait Galeri Görselleri</h3>
|
||||
|
||||
<a href="/ProjectGallery/CreateProjectGallery/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
|
||||
<form asp-action="Index" method="get">
|
||||
<div class="form-group mb-3">
|
||||
<label>Proje Seçiniz:</label>
|
||||
<select id="projectSelect" class="form-control">
|
||||
<option value="">-- Proje Seçin --</option>
|
||||
@foreach (SelectListItem project in ViewBag.ProjectList)
|
||||
{
|
||||
<option value="@project.Value">@project.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Image List -->
|
||||
<div id="imageListContainer" style="display: flex; flex-wrap: wrap; gap: 20px; margin-top: 20px;">
|
||||
<!-- Görseller JavaScript ile burada yüklenecek -->
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.getElementById("projectSelect").addEventListener("change", function () {
|
||||
var projectId = this.value;
|
||||
if (projectId && '@apiBaseUrl') {
|
||||
fetch(`@apiBaseUrl/api/ProjectGallery/GetByProjectId/${projectId}`)
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
let container = document.getElementById("imageListContainer");
|
||||
container.innerHTML = ""; // Mevcut içeriği temizle
|
||||
|
||||
if (data.length === 0) {
|
||||
container.innerHTML = "<p>Bu projeye ait galeri bulunamadı.</p>";
|
||||
return;
|
||||
}
|
||||
|
||||
// Görselleri liste olarak ekle
|
||||
data.forEach(item => {
|
||||
let imageElement = document.createElement("img");
|
||||
imageElement.src = item.imageUrl;
|
||||
imageElement.alt = "Project Image";
|
||||
imageElement.style = "width: 100%; max-width: 300px; height: auto; object-fit: cover;";
|
||||
|
||||
container.appendChild(imageElement); // Görseli listeye ekle
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
48
ConstructorAppUI/Views/Reference/CreateReference.cshtml
Normal file
48
ConstructorAppUI/Views/Reference/CreateReference.cshtml
Normal file
@@ -0,0 +1,48 @@
|
||||
@model CreateReferenceDto
|
||||
@{
|
||||
ViewData["Title"] = "CreateReference";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Referanslarımız İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form asp-action="CreateReference" method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yeni Referans Girişi</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Logo</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" asp-for="ImageFile" id="ImageFile">
|
||||
<span asp-validation-for="ImageFile" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="WebUrl" class="col-md-2 col-form-label">Web Adresi</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="WebUrl" id="WebUrl">
|
||||
<span asp-validation-for="WebUrl" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Reference/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
103
ConstructorAppUI/Views/Reference/Index.cshtml
Normal file
103
ConstructorAppUI/Views/Reference/Index.cshtml
Normal file
@@ -0,0 +1,103 @@
|
||||
@model List<ResultReferenceDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Referanslarımız İşlemleri</h4>
|
||||
<a href="/Reference/CreateReference/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Logo</th>
|
||||
<th scope="col">Web Adresi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.LogoUrl" alt="Logo" />
|
||||
</td>
|
||||
<td>@item.WebUrl</td>
|
||||
<td>
|
||||
<a href="/Reference/UpdateReference/@item.ReferenceID" class="btn btn-outline-success">Güncelle</a>
|
||||
<button onclick="showDeleteConfirmation('@item.ReferenceID')" class="btn btn-outline-danger">Sil</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Delete Confirmation Modal -->
|
||||
<div class="modal fade" id="deleteConfirmationModal" tabindex="-1" aria-labelledby="deleteConfirmationModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteConfirmationModalLabel">Referans Sil</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Bu referansı silmek istediğinize emin misiniz?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
|
||||
<form id="deleteForm" method="post">
|
||||
@Html.AntiForgeryToken()
|
||||
<button type="submit" class="btn btn-danger">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var deleteModal = new bootstrap.Modal(document.getElementById('deleteConfirmationModal'));
|
||||
var deleteForm = document.getElementById('deleteForm');
|
||||
|
||||
// Delete modal açma işlevi
|
||||
window.showDeleteConfirmation = function (productId) {
|
||||
deleteForm.action = "/Reference/DeleteReference/" + productId;
|
||||
deleteModal.show();
|
||||
};
|
||||
|
||||
// Modal'ın kapanma işlevi için data-bs-dismiss kullanımını kontrol edin
|
||||
document.querySelectorAll('[data-bs-dismiss="modal"]').forEach(function (element) {
|
||||
element.addEventListener('click', function () {
|
||||
deleteModal.hide();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
49
ConstructorAppUI/Views/Reference/UpdateReference.cshtml
Normal file
49
ConstructorAppUI/Views/Reference/UpdateReference.cshtml
Normal file
@@ -0,0 +1,49 @@
|
||||
@model UpdateReferenceDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateReference";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Referanslarımız İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Referans Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="ReferenceID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Logo</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.LogoUrl))
|
||||
{
|
||||
<img src="@Model.LogoUrl" alt="Logo" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="WebUrl" class="col-md-2 col-form-label">Web Adresi</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="WebUrl" id="WebUrl">
|
||||
<span asp-validation-for="WebUrl" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Reference/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
70
ConstructorAppUI/Views/Service/Index.cshtml
Normal file
70
ConstructorAppUI/Views/Service/Index.cshtml
Normal file
@@ -0,0 +1,70 @@
|
||||
@model List<ResultServiceDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Hakkımızda İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Başlık</th>
|
||||
<th scope="col">Alt Başlık</th>
|
||||
<th scope="col">Durumu</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.SubTitle</td>
|
||||
<td>
|
||||
<span class="badge @(item.IsActive? "bg-success text-white" : "bg-secondary text-white")">
|
||||
@(item.IsActive ? "Aktif" : "Pasif")
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/Service/UpdateService/@item.ServiceID" class="btn btn-outline-success">Güncelle</a>
|
||||
<a href="/Service/ServiceStatusActive/@item.ServiceID" class="btn btn-outline-info @(item.IsActive == true ? "disabled" : "")">Aktif</a>
|
||||
<a href="/Service/ServiceStatusPassive/@item.ServiceID" class="btn btn-outline-dark @(item.IsActive == false ? "disabled" : "")">Pasif</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46
ConstructorAppUI/Views/Service/UpdateService.cshtml
Normal file
46
ConstructorAppUI/Views/Service/UpdateService.cshtml
Normal file
@@ -0,0 +1,46 @@
|
||||
@model UpdateServiceDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateService";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Hakkımızda İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Hizmet Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="ServiceID" />
|
||||
<input type="hidden" asp-for="IsActive" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="SubTitle" class="col-md-2 col-form-label">Alt Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="SubTitle" id="SubTitle">
|
||||
<span asp-validation-for="SubTitle" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Service/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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 © 2017-@DateTime.Now.Year <a href="https://www.polikarbilisi.com"></a>Polikar Bilişim Hizmetleri</strong> Tüm hakları korunmuştur.
|
||||
</footer>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>© </span><span class="copyright-year"></span><span> </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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
25
ConstructorAppUI/Views/Shared/Error.cshtml
Normal file
25
ConstructorAppUI/Views/Shared/Error.cshtml
Normal 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>
|
||||
49
ConstructorAppUI/Views/Shared/_Layout.cshtml
Normal file
49
ConstructorAppUI/Views/Shared/_Layout.cshtml
Normal 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">
|
||||
© 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>
|
||||
48
ConstructorAppUI/Views/Shared/_Layout.cshtml.css
Normal file
48
ConstructorAppUI/Views/Shared/_Layout.cshtml.css
Normal 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;
|
||||
}
|
||||
@@ -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>
|
||||
135
ConstructorAppUI/Views/Slider/CreateSlider.cshtml
Normal file
135
ConstructorAppUI/Views/Slider/CreateSlider.cshtml
Normal file
@@ -0,0 +1,135 @@
|
||||
@model CreateSliderDto
|
||||
@{
|
||||
ViewData["Title"] = "CreateSlider";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Önce Çıkanlar İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form asp-action="CreateSlider" method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yeni Slider Girişi</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- Lokasyon -->
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Lokasyon</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Location" id="Location">
|
||||
<span asp-validation-for="Location" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sqm -->
|
||||
<div class="form-group row">
|
||||
<label for="Sqm" class="col-md-2 col-form-label">Metrekare</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="1" class="form-control" asp-for="Sqm" id="Sqm"></textarea>
|
||||
<span asp-validation-for="Sqm" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Fiyat Açıklama -->
|
||||
<div class="form-group row">
|
||||
<label for="PriceInfo" class="col-md-2 col-form-label">Fiyat Açıklama</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="PriceInfo" id="PriceInfo" oninput="formatNumber(this)">
|
||||
<span asp-validation-for="PriceInfo" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" asp-for="ImageFile" id="ImageFile">
|
||||
<span asp-validation-for="ImageFile" class="text-danger"></span>
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 1339x729 olmaldır.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Slider/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@* Fiyat Alanı rakam formatlama *@
|
||||
<script>
|
||||
function formatNumber(input) {
|
||||
let value = input.value.replace(/\D/g, ''); // sadece rakamlar
|
||||
value = value.replace(/\B(?=(\d{3})+(?!\d))/g, "."); // binlik nokta ayırıcı
|
||||
input.value = value;
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "Location", name: "Lokasyon" },
|
||||
{ id: "Sqm", name: "Metrekare" },
|
||||
{ id: "PriceInfo", name: "Fiyat Açıklama" },
|
||||
{ id: "ImageFile", name: "Görsel" }
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle (isteğe bağlı)
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
108
ConstructorAppUI/Views/Slider/Index.cshtml
Normal file
108
ConstructorAppUI/Views/Slider/Index.cshtml
Normal file
@@ -0,0 +1,108 @@
|
||||
@model List<ResultSliderDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Önce Çıkanlar İşlemleri</h4>
|
||||
<a href="/Slider/CreateSlider/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Lokasyon</th>
|
||||
<th scope="col">Metrekare</th>
|
||||
<th scope="col">Fiyat Bilgisi</th>
|
||||
<th scope="col">Görsel</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Location</td>
|
||||
<td>@item.Sqm</td>
|
||||
<td>@item.PriceInfo</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.ImageUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td><a href="/Slider/UpdateSlider/@item.SliderID" class="btn btn-outline-success">Güncelle</a>
|
||||
<button onclick="showDeleteConfirmation('@item.SliderID')" class="btn btn-outline-danger">Sil</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Delete Confirmation Modal -->
|
||||
<div class="modal fade" id="deleteConfirmationModal" tabindex="-1" aria-labelledby="deleteConfirmationModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteConfirmationModalLabel">Slider Sil</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Bu sliderı silmek istediğinize emin misiniz?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
|
||||
<form id="deleteForm" method="post">
|
||||
@Html.AntiForgeryToken()
|
||||
<button type="submit" class="btn btn-danger">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var deleteModal = new bootstrap.Modal(document.getElementById('deleteConfirmationModal'));
|
||||
var deleteForm = document.getElementById('deleteForm');
|
||||
|
||||
// Delete modal açma işlevi
|
||||
window.showDeleteConfirmation = function (sliderId) {
|
||||
deleteForm.action = "/Slider/DeleteSlider/" + sliderId;
|
||||
deleteModal.show();
|
||||
};
|
||||
|
||||
// Modal'ın kapanma işlevi için data-bs-dismiss kullanımını kontrol edin
|
||||
document.querySelectorAll('[data-bs-dismiss="modal"]').forEach(function (element) {
|
||||
element.addEventListener('click', function () {
|
||||
deleteModal.hide();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
129
ConstructorAppUI/Views/Slider/UpdateSlider.cshtml
Normal file
129
ConstructorAppUI/Views/Slider/UpdateSlider.cshtml
Normal file
@@ -0,0 +1,129 @@
|
||||
@model UpdateSliderDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateSlider";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Önce Çıkanlar İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Slider Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="SliderID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Location" class="col-md-2 col-form-label">Lokasyon</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Location" id="Location">
|
||||
<span asp-validation-for="Location" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Sqm" class="col-md-2 col-form-label">Metrekare</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="1" class="form-control" asp-for="Sqm" id="Sqm"></textarea>
|
||||
<span asp-validation-for="Sqm" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="PriceInfo" class="col-md-2 col-form-label">Fiyat Açıklama</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="PriceInfo" id="PriceInfo" oninput="formatNumber(this)">
|
||||
<span asp-validation-for="PriceInfo" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 1339x729 olmaldır.</span>
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.ImageUrl))
|
||||
{
|
||||
<img src="@Model.ImageUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Slider/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Fiyat Alanı rakam formatlama *@
|
||||
<script>
|
||||
function formatNumber(input) {
|
||||
let value = input.value.replace(/\D/g, ''); // sadece rakamlar
|
||||
value = value.replace(/\B(?=(\d{3})+(?!\d))/g, "."); // binlik nokta ayırıcı
|
||||
input.value = value;
|
||||
}
|
||||
</script>
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "Location", name: "Lokasyon" },
|
||||
{ id: "Sqm", name: "Metrekare" },
|
||||
{ id: "PriceInfo", name: "Fiyat Açıklama" }
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle (isteğe bağlı)
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
135
ConstructorAppUI/Views/Team/CreateTeam.cshtml
Normal file
135
ConstructorAppUI/Views/Team/CreateTeam.cshtml
Normal file
@@ -0,0 +1,135 @@
|
||||
@model CreateTeamDto
|
||||
@{
|
||||
ViewData["Title"] = "CreateTeam";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Ekibimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form asp-action="CreateTeam" method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yeni Ekip Üye Girişi</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="NameSurname" class="col-md-2 col-form-label">Adı Soyadı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="NameSurname" id="NameSurname">
|
||||
<span asp-validation-for="NameSurname" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Ünvanı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Facebook" class="col-md-2 col-form-label">Facebook</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Facebook" id="Facebook">
|
||||
<span asp-validation-for="Facebook" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Instagram" class="col-md-2 col-form-label">Instagram</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Instagram" id="Instagram">
|
||||
<span asp-validation-for="Instagram" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Linkedin" class="col-md-2 col-form-label">Linkedin</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Linkedin" id="Linkedin">
|
||||
<span asp-validation-for="Linkedin" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" asp-for="ImageFile" id="ImageFile">
|
||||
<span asp-validation-for="ImageFile" class="text-danger"></span>
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 290x284 olmaldır.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Team/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "NameSurname", name: "Adı Soyadı" },
|
||||
{ id: "Title", name: "Ünvan" },
|
||||
{ id: "ImageFile", name: "Görsel" }
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle (isteğe bağlı)
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
115
ConstructorAppUI/Views/Team/Index.cshtml
Normal file
115
ConstructorAppUI/Views/Team/Index.cshtml
Normal file
@@ -0,0 +1,115 @@
|
||||
@model List<ResultTeamDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Ekibimiz İşlemleri</h4>
|
||||
<a href="/Team/CreateTeam/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Adı Soyadı</th>
|
||||
<th scope="col">Ünvanı</th>
|
||||
<th scope="col">Facebook</th>
|
||||
<th scope="col">Instagram</th>
|
||||
<th scope="col">Linkedin</th>
|
||||
<th scope="col">Görsel</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.NameSurname</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.Facebook</td>
|
||||
<td>@item.Instagram</td>
|
||||
<td>@item.Linkedin</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.ImageUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>
|
||||
<a href="/Team/UpdateTeam/@item.TeamID" class="btn btn-outline-success">Güncelle</a>
|
||||
<button onclick="showDeleteConfirmation('@item.TeamID')" class="btn btn-outline-danger">Sil</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Delete Confirmation Modal -->
|
||||
<div class="modal fade" id="deleteConfirmationModal" tabindex="-1" aria-labelledby="deleteConfirmationModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteConfirmationModalLabel">Ekip Üyesi Sil</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Bu ekip üyesini silmek istediğinize emin misiniz?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
|
||||
<form id="deleteForm" method="post">
|
||||
@Html.AntiForgeryToken()
|
||||
<button type="submit" class="btn btn-danger">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var deleteModal = new bootstrap.Modal(document.getElementById('deleteConfirmationModal'));
|
||||
var deleteForm = document.getElementById('deleteForm');
|
||||
|
||||
// Delete modal açma işlevi
|
||||
window.showDeleteConfirmation = function (teamId) {
|
||||
deleteForm.action = "/Team/DeleteTeam/" + teamId;
|
||||
deleteModal.show();
|
||||
};
|
||||
|
||||
// Modal'ın kapanma işlevi için data-bs-dismiss kullanımını kontrol edin
|
||||
document.querySelectorAll('[data-bs-dismiss="modal"]').forEach(function (element) {
|
||||
element.addEventListener('click', function () {
|
||||
deleteModal.hide();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
135
ConstructorAppUI/Views/Team/UpdateTeam.cshtml
Normal file
135
ConstructorAppUI/Views/Team/UpdateTeam.cshtml
Normal file
@@ -0,0 +1,135 @@
|
||||
@model UpdateTeamDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateTeam";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Ekibimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data" id="sliderForm">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Ekip Üyesi Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="TeamID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="NameSurname" class="col-md-2 col-form-label">Adı Soyadı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="NameSurname" id="NameSurname">
|
||||
<span asp-validation-for="NameSurname" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Ünvanı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Facebook" class="col-md-2 col-form-label">Facebook</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Facebook" id="Facebook">
|
||||
<span asp-validation-for="Facebook" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Instagram" class="col-md-2 col-form-label">Instagram</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Instagram" id="Instagram">
|
||||
<span asp-validation-for="Instagram" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Linkedin" class="col-md-2 col-form-label">Linkedin</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Linkedin" id="Linkedin">
|
||||
<span asp-validation-for="Linkedin" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 290x284 olmaldır.</span>
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.ImageUrl))
|
||||
{
|
||||
<img src="@Model.ImageUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Team/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@* Formdaki alanlar boş geçilemesin *@
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const form = document.getElementById("sliderForm");
|
||||
const errorDiv = document.getElementById("errorMessages");
|
||||
|
||||
const fields = [
|
||||
{ id: "NameSurname", name: "Adı Soyadı" },
|
||||
{ id: "Title", name: "Ünvan" },
|
||||
];
|
||||
|
||||
// Her input için focus olduğunda çerçeveyi temizle
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
input.addEventListener("focus", function () {
|
||||
input.style.border = "";
|
||||
errorDiv.innerHTML = ""; // Hataları da temizle (isteğe bağlı)
|
||||
});
|
||||
});
|
||||
|
||||
// Form submit kontrolü
|
||||
form.addEventListener("submit", function (e) {
|
||||
let isValid = true;
|
||||
let messages = [];
|
||||
|
||||
errorDiv.innerHTML = ""; // Önceki mesajları temizle
|
||||
|
||||
fields.forEach(field => {
|
||||
const input = document.getElementById(field.id);
|
||||
if (input.value.trim() === "") {
|
||||
isValid = false;
|
||||
messages.push(`<li>${field.name} alanı boş olamaz.</li>`);
|
||||
input.style.border = "2px solid red";
|
||||
}
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
e.preventDefault();
|
||||
errorDiv.innerHTML = `<ul>${messages.join("")}</ul>`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.input-error {
|
||||
border: 2px solid red !important;
|
||||
box-shadow: 0 0 4px rgba(255, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
63
ConstructorAppUI/Views/Testimonial/CreateTestimonial.cshtml
Normal file
63
ConstructorAppUI/Views/Testimonial/CreateTestimonial.cshtml
Normal file
@@ -0,0 +1,63 @@
|
||||
@model CreateTestimonialDto
|
||||
@{
|
||||
ViewData["Title"] = "CreateTestimonial";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Müşteri Yorumları İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form asp-action="CreateTestimonial" method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yeni Müşteri Yorumu Girişi</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Name" class="col-md-2 col-form-label">Adı/Soyadı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Name" id="Name">
|
||||
<span asp-validation-for="Name" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Ünvanı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Comment" class="col-md-2 col-form-label">Yorum</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="5" class="form-control" asp-for="Comment" id="Comment"></textarea>
|
||||
<span asp-validation-for="Comment" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" asp-for="ImageFile" id="ImageFile">
|
||||
<span asp-validation-for="ImageFile" class="text-danger"></span>
|
||||
<span class="badge badge-danger">Görsel Boyutu 80x80 olmaldır.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Testimonial/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
107
ConstructorAppUI/Views/Testimonial/Index.cshtml
Normal file
107
ConstructorAppUI/Views/Testimonial/Index.cshtml
Normal file
@@ -0,0 +1,107 @@
|
||||
@using ConstructorApp.EntityLayer.Entities
|
||||
@model List<ResultTestimonialDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Müşterilerden Gelenler İşlemleri</h4>
|
||||
<a href="/Testimonial/CreateTestimonial/" class="btn btn-outline-primary">Yeni Ekle</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Adı Soyadı</th>
|
||||
<th scope="col">Ünvanı</th>
|
||||
<th scope="col">Yorum</th>
|
||||
<th scope="col">Görsel</th>
|
||||
<th scope="col">Durumu</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Name</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.Comment</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.ImageUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge @(item.Status == TestimonialStatus.Confirmed ? "bg-success text-white" : item.Status == TestimonialStatus.Cancelled ? "bg-danger text-white" : "bg-secondary text-white")">
|
||||
@(item.Status == TestimonialStatus.Confirmed ? "Gösterimde" : item.Status == TestimonialStatus.Cancelled ? "Gösterimden Kaldırıldı" : "Onay Bekliyor")
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/Testimonial/UpdateTestimonial/@item.TestimonialID" class="btn btn-outline-success">Güncelle</a>
|
||||
<a href="/Testimonial/TestimonialStatusActive/@item.TestimonialID" class="btn btn-outline-info @(item.Status == TestimonialStatus.Confirmed ? "disabled" : "")">Onay</a>
|
||||
<a href="/Testimonial/TestimonialStatusPassive/@item.TestimonialID" class="btn btn-outline-dark @(item.Status == TestimonialStatus.Cancelled ? "disabled" : "")">Pasif</a>
|
||||
<button onclick="showDeleteConfirmation('@item.TestimonialID')" class="btn btn-outline-danger">Sil</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Delete Confirmation Modal -->
|
||||
<div class="modal fade" id="deleteConfirmationModal" tabindex="-1" aria-labelledby="deleteConfirmationModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteConfirmationModalLabel">Müşteri Yorumu Sil</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Bu müşteri yorumunu silmek istediğinize emin misiniz?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
|
||||
<form id="deleteForm" method="post">
|
||||
@Html.AntiForgeryToken()
|
||||
<button type="submit" class="btn btn-danger">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var deleteModal = new bootstrap.Modal(document.getElementById('deleteConfirmationModal'));
|
||||
var deleteForm = document.getElementById('deleteForm');
|
||||
|
||||
// Delete modal açma işlevi
|
||||
window.showDeleteConfirmation = function (productId) {
|
||||
deleteForm.action = "/Testimonial/DeleteTestimonial/" + productId;
|
||||
deleteModal.show();
|
||||
};
|
||||
|
||||
// Modal'ın kapanma işlevi için data-bs-dismiss kullanımını kontrol edin
|
||||
document.querySelectorAll('[data-bs-dismiss="modal"]').forEach(function (element) {
|
||||
element.addEventListener('click', function () {
|
||||
deleteModal.hide();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
64
ConstructorAppUI/Views/Testimonial/UpdateTestimonial.cshtml
Normal file
64
ConstructorAppUI/Views/Testimonial/UpdateTestimonial.cshtml
Normal file
@@ -0,0 +1,64 @@
|
||||
@model UpdateTestimonialDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateTestimonial";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Müşteri Yorumları İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Yorum Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="TestimonialID" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Name" class="col-md-2 col-form-label">Adı/Soyadı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Name" id="Name">
|
||||
<span asp-validation-for="Name" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Ünvanı</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Comment" class="col-md-2 col-form-label">Yorum</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="5" class="form-control" asp-for="Comment" id="Comment"></textarea>
|
||||
<span asp-validation-for="Comment" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.ImageUrl))
|
||||
{
|
||||
<img src="@Model.ImageUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
<span class="badge badge-danger">Görsel Boyutu 80x80 olmaldır.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/Testimonial/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
68
ConstructorAppUI/Views/UserProfile/Index.cshtml
Normal file
68
ConstructorAppUI/Views/UserProfile/Index.cshtml
Normal file
@@ -0,0 +1,68 @@
|
||||
@using ConstructorApp.DtoLayer.AppUserDto
|
||||
@model AppUserEditDto
|
||||
@{
|
||||
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Admin Profil Ayarları</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Şifre Güncelleme Sayfası</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<!-- Sol Taraf: UserName, Mevcut Şifre, Yeni Şifre ve Şifre Onayı -->
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="UserName">Kullanıcı Adınız</label>
|
||||
<input type="text" class="form-control" asp-for="UserName" id="UserName" readonly>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="CurrentPassword">Mevcut Şifreniz</label>
|
||||
<input type="password" class="form-control" asp-for="CurrentPassword" id="CurrentPassword" placeholder="Mevcut şifrenizi giriniz">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="Password">Yeni Şifreniz</label>
|
||||
<input type="password" class="form-control" asp-for="Password" id="Password" placeholder="Yeni şifrenizi giriniz">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="ConfirmPassword">Yeni Şifrenizi Onaylayınız</label>
|
||||
<input type="password" class="form-control" asp-for="ConfirmPassword" id="ConfirmPassword" placeholder="Yeni şifrenizi tekrar giriniz">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hata Mesajlarını Göster -->
|
||||
<div>
|
||||
@if (!ViewData.ModelState.IsValid)
|
||||
{
|
||||
<div class="alert alert-danger">
|
||||
@foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
|
||||
{
|
||||
<p>@error.ErrorMessage</p>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@section Scripts {
|
||||
}
|
||||
73
ConstructorAppUI/Views/WorkProcess/Index.cshtml
Normal file
73
ConstructorAppUI/Views/WorkProcess/Index.cshtml
Normal file
@@ -0,0 +1,73 @@
|
||||
@model List<ResultWorkProcessDto>
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
int count = 0;
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Çalışma Şeklimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table class="table table-head-bg-success table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Kısa Açıklama</th>
|
||||
<th scope="col">Başlık</th>
|
||||
<th scope="col">Uzun Açıklama</th>
|
||||
<th scope="col">Görsel</th>
|
||||
<th scope="col">İşlemler</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model == null || !Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">Kayıt bulunamadı.</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
count++;
|
||||
<tr>
|
||||
<td>@count</td>
|
||||
<td>@item.Info</td>
|
||||
<td>@item.Title</td>
|
||||
<td>@item.SubTitle</td>
|
||||
<td>
|
||||
<img width="75" height="75" src="@item.ImageUrl" alt="Görsel" />
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge @(item.IsActive? "bg-success text-white" : "bg-secondary text-white")">
|
||||
@(item.IsActive ? "Aktif" : "Pasif")
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/WorkProcess/UpdateWorkProcess/@item.WorkProcessID" class="btn btn-outline-success">Güncelle</a>
|
||||
<a href="/WorkProcess/ServiceStatusActive/@item.WorkProcessID" class="btn btn-outline-info @(item.IsActive == true ? "disabled" : "")">Aktif</a>
|
||||
<a href="/WorkProcess/ServiceStatusPassive/@item.WorkProcessID" class="btn btn-outline-dark @(item.IsActive == false ? "disabled" : "")">Pasif</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
64
ConstructorAppUI/Views/WorkProcess/UpdateWorkProcess.cshtml
Normal file
64
ConstructorAppUI/Views/WorkProcess/UpdateWorkProcess.cshtml
Normal file
@@ -0,0 +1,64 @@
|
||||
@model UpdateWorkProcessDto
|
||||
@{
|
||||
ViewData["Title"] = "UpdateWorkProcess";
|
||||
Layout = "~/Views/AdminLayout/Index.cshtml";
|
||||
}
|
||||
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<h4 class="page-title">Ana Sayfa Çalışma Şeklimiz İşlemleri</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Çalışma Şekli Güncelleme</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="WorkProcessID" />
|
||||
<input type="hidden" asp-for="IsActive" />
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<label for="Location" class="col-md-2 col-form-label">Lokasyon</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Info" id="Lokasyon">
|
||||
<span asp-validation-for="Info" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="Title" class="col-md-2 col-form-label">Başlık</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" asp-for="Title" id="Title">
|
||||
<span asp-validation-for="Title" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="SubTitle" class="col-md-2 col-form-label">Uzun Açıklama</label>
|
||||
<div class="col-md-10">
|
||||
<textarea rows="5" class="form-control" asp-for="SubTitle" id="SubTitle"></textarea>
|
||||
<span asp-validation-for="SubTitle" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Görsel -->
|
||||
<div class="form-group row">
|
||||
<label for="ImageFile" class="col-md-2 col-form-label">Görsel</label>
|
||||
<div class="col-md-10">
|
||||
<span class="badge badge-danger">Tema Bütünlüğü için Görsel Boyutu 531x327 olmaldır.</span>
|
||||
<input type="file" class="form-control" name="ImageFile" id="ImageFile">
|
||||
@if (!string.IsNullOrEmpty(Model.ImageUrl))
|
||||
{
|
||||
<img src="@Model.ImageUrl" alt="Görsel" class="img-fluid mt-2" style="width: 100px; height: 100px;">
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<div id="errorMessages" class="text-danger mb-3"></div>
|
||||
<button class="btn btn-success">Kaydet</button>
|
||||
<a href="/WorkProcess/Index/" class="btn btn-warning ml-2">Listeye Dön</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
16
ConstructorAppUI/Views/_ViewImports.cshtml
Normal file
16
ConstructorAppUI/Views/_ViewImports.cshtml
Normal file
@@ -0,0 +1,16 @@
|
||||
@using ConstructorAppUI
|
||||
@using ConstructorAppUI.Models
|
||||
@using ConstructorAppUI.Dtos.HomeBannerDtos
|
||||
@using ConstructorAppUI.Dtos.SliderDtos
|
||||
@using ConstructorAppUI.Dtos.ServiceDtos
|
||||
@using ConstructorAppUI.Dtos.WorkProcessDtos
|
||||
@using ConstructorAppUI.Dtos.TeamDtos
|
||||
@using ConstructorAppUI.Dtos.CompanyInfoDtos
|
||||
@using ConstructorAppUI.Dtos.CompanyInfoVideoDtos
|
||||
@using ConstructorAppUI.Dtos.ProjectDtos
|
||||
@using ConstructorAppUI.Dtos.ProjectGalleryDtos
|
||||
@using ConstructorAppUI.Dtos.TestimonialDtos
|
||||
@using ConstructorAppUI.Dtos.ReferenceDtos
|
||||
@using ConstructorAppUI.Dtos.ContactUsDtos
|
||||
@using ConstructorAppUI.Dtos.FooterDtos
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
3
ConstructorAppUI/Views/_ViewStart.cshtml
Normal file
3
ConstructorAppUI/Views/_ViewStart.cshtml
Normal file
@@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
||||
Reference in New Issue
Block a user