git commit "style: improve tour flight details and auth pages"
This commit is contained in:
Binary file not shown.
@@ -8,6 +8,7 @@
|
||||
ویرایش پرواز
|
||||
</h4>
|
||||
|
||||
|
||||
@if($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
@@ -18,6 +19,7 @@
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<form action="{{ route('admin.flights.update',$flight->id) }}"
|
||||
method="POST"
|
||||
enctype="multipart/form-data">
|
||||
@@ -25,98 +27,76 @@
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label>
|
||||
ایرلاین
|
||||
</label>
|
||||
<label>ایرلاین</label>
|
||||
|
||||
<input type="text"
|
||||
name="airline"
|
||||
class="form-control"
|
||||
value="{{ old('airline') }}">
|
||||
|
||||
@error('airline')
|
||||
<small class="text-danger">
|
||||
{{ $message }}
|
||||
</small>
|
||||
@enderror
|
||||
value="{{ old('airline',$flight->airline) }}">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label>
|
||||
شماره پرواز
|
||||
</label>
|
||||
<label>شماره پرواز</label>
|
||||
|
||||
<input type="text"
|
||||
name="flight_number"
|
||||
class="form-control"
|
||||
value="{{ old('flight_number') }}">
|
||||
|
||||
@error('flight_number')
|
||||
<small class="text-danger">
|
||||
{{ $message }}
|
||||
</small>
|
||||
@enderror
|
||||
value="{{ old('flight_number',$flight->flight_number) }}">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label>
|
||||
مبدا
|
||||
</label>
|
||||
<label>مبدا</label>
|
||||
|
||||
<input type="text"
|
||||
name="origin"
|
||||
class="form-control"
|
||||
value="{{ old('origin') }}">
|
||||
|
||||
value="{{ old('origin',$flight->origin) }}">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label>
|
||||
مقصد
|
||||
</label>
|
||||
<label>مقصد</label>
|
||||
|
||||
<input type="text"
|
||||
name="destination"
|
||||
class="form-control"
|
||||
value="{{ old('destination') }}">
|
||||
|
||||
value="{{ old('destination',$flight->destination) }}">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
ساعت حرکت
|
||||
</label>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label>ساعت حرکت</label>
|
||||
|
||||
<input type="time"
|
||||
name="departure_time"
|
||||
class="form-control">
|
||||
|
||||
class="form-control"
|
||||
value="{{ old('departure_time',$flight->departure_time) }}">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
ساعت رسیدن
|
||||
</label>
|
||||
<label>ساعت رسیدن</label>
|
||||
|
||||
<input type="time"
|
||||
name="arrival_time"
|
||||
class="form-control">
|
||||
|
||||
class="form-control"
|
||||
value="{{ old('arrival_time',$flight->arrival_time) }}">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
@@ -124,21 +104,33 @@
|
||||
</label>
|
||||
|
||||
<select name="type" class="form-control">
|
||||
<option value="0">داخلی</option>
|
||||
<option value="2">خارجی</option>
|
||||
<option value="3">چارتر</option>
|
||||
|
||||
<option value="0" @selected($flight->type == 0)>
|
||||
داخلی
|
||||
</option>
|
||||
|
||||
<option value="2" @selected($flight->type == 2)>
|
||||
خارجی
|
||||
</option>
|
||||
|
||||
<option value="3" @selected($flight->type == 3)>
|
||||
چارتر
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
تاریخ حرکت
|
||||
</label>
|
||||
|
||||
|
||||
<input type="text"
|
||||
id="departure_date"
|
||||
name="departure_date"
|
||||
@@ -147,63 +139,85 @@
|
||||
autocomplete="off"
|
||||
value="{{ old('departure_date', $flight->departure_date ? verta($flight->departure_date)->format('Y/m/d') : '') }}">
|
||||
|
||||
@error('departure_date')
|
||||
<div class="text-danger mt-2">{{ $message }}</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
کلاس پرواز
|
||||
</label>
|
||||
|
||||
|
||||
<input type="text"
|
||||
name="flight_class"
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
value="{{ old('flight_class',$flight->flight_class) }}">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
ظرفیت
|
||||
</label>
|
||||
|
||||
|
||||
<input type="number"
|
||||
name="capacity"
|
||||
class="form-control">
|
||||
min="1"
|
||||
class="form-control"
|
||||
value="{{ old('capacity',$flight->capacity) }}">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
قیمت
|
||||
</label>
|
||||
|
||||
|
||||
<input type="number"
|
||||
name="price"
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
value="{{ old('price',$flight->price) }}">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
عکس
|
||||
عکس فعلی
|
||||
</label>
|
||||
|
||||
|
||||
@if($flight->image)
|
||||
|
||||
<div class="mb-2">
|
||||
<img src="{{ asset('storage/'.$flight->image) }}"
|
||||
width="120"
|
||||
class="rounded">
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
<input type="file"
|
||||
name="image"
|
||||
class="form-control">
|
||||
@@ -211,27 +225,57 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label>
|
||||
وضعیت
|
||||
</label>
|
||||
|
||||
|
||||
<select name="status" class="form-control">
|
||||
<option value="0">پیشنویس</option>
|
||||
<option value="1">فعال</option>
|
||||
<option value="2">غیرفعال</option>
|
||||
<option value="3">تمام شده</option>
|
||||
<option value="4">لغو شده</option>
|
||||
|
||||
|
||||
<option value="0" @selected($flight->status == 0)>
|
||||
پیشنویس
|
||||
</option>
|
||||
|
||||
|
||||
<option value="1" @selected($flight->status == 1)>
|
||||
فعال
|
||||
</option>
|
||||
|
||||
|
||||
<option value="2" @selected($flight->status == 2)>
|
||||
غیرفعال
|
||||
</option>
|
||||
|
||||
|
||||
<option value="3" @selected($flight->status == 3)>
|
||||
تمام شده
|
||||
</option>
|
||||
|
||||
|
||||
<option value="4" @selected($flight->status == 4)>
|
||||
لغو شده
|
||||
</option>
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button class="btn btn-primary">
|
||||
ذخیره
|
||||
ذخیره تغییرات
|
||||
</button>
|
||||
|
||||
|
||||
@@ -242,12 +286,19 @@
|
||||
<script>
|
||||
|
||||
window.addEventListener('load', function () {
|
||||
|
||||
$("#departure_date").persianDatepicker({
|
||||
|
||||
format: 'YYYY/MM/DD',
|
||||
autoClose: true,
|
||||
initialValue: false,
|
||||
minDate: new persianDate()
|
||||
|
||||
autoClose:true,
|
||||
|
||||
initialValue:false,
|
||||
|
||||
minDate:new persianDate()
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<div>
|
||||
<!-- Happiness is not something readymade. It comes from your own actions. - Dalai Lama -->
|
||||
</div>
|
||||
@@ -1,4 +1,4 @@
|
||||
@extends('layouts.app')
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
|
||||
<div class="theme-hero-area-bg-wrap">
|
||||
|
||||
@@ -1,3 +1,235 @@
|
||||
<style>
|
||||
.flight-image {
|
||||
height: 260px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
.flight-image img {
|
||||
transition: .6s ease;
|
||||
}
|
||||
|
||||
|
||||
.card:hover .flight-image img {
|
||||
transform: scale(1.08);
|
||||
}
|
||||
|
||||
|
||||
.card.border-0.shadow-sm.rounded-4.overflow-hidden {
|
||||
|
||||
border-radius: 24px !important;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background: #fff;
|
||||
transition: .4s ease;
|
||||
border: 1px solid #f1f1f1 !important;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card.border-0.shadow-sm.rounded-4.overflow-hidden:hover {
|
||||
|
||||
transform: translateY(-8px);
|
||||
|
||||
box-shadow:
|
||||
0 20px 45px rgba(0,0,0,.12)!important;
|
||||
|
||||
}
|
||||
|
||||
.card form {
|
||||
|
||||
position:absolute;
|
||||
top:18px;
|
||||
left:18px;
|
||||
z-index:5;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card form button {
|
||||
|
||||
border-radius:50px;
|
||||
|
||||
background:rgba(255,255,255,.9);
|
||||
|
||||
backdrop-filter:blur(8px);
|
||||
|
||||
border:none;
|
||||
|
||||
padding:10px 18px;
|
||||
|
||||
color:#e63946;
|
||||
|
||||
font-weight:600;
|
||||
|
||||
box-shadow:
|
||||
0 8px 20px rgba(0,0,0,.15);
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card form button:hover {
|
||||
|
||||
background:#e63946;
|
||||
|
||||
color:white;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-badge {
|
||||
|
||||
position:absolute;
|
||||
|
||||
right:20px;
|
||||
|
||||
bottom:20px;
|
||||
|
||||
background:white;
|
||||
|
||||
color:#0d6efd;
|
||||
|
||||
padding:8px 20px;
|
||||
|
||||
border-radius:50px;
|
||||
|
||||
font-size:14px;
|
||||
|
||||
font-weight:700;
|
||||
|
||||
box-shadow:
|
||||
0 8px 20px rgba(0,0,0,.15);
|
||||
|
||||
}
|
||||
|
||||
.flight-image:after {
|
||||
|
||||
content:"";
|
||||
|
||||
position:absolute;
|
||||
|
||||
inset:0;
|
||||
|
||||
background:
|
||||
linear-gradient(
|
||||
transparent,
|
||||
rgba(0,0,0,.45)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
.card-body {
|
||||
|
||||
padding:28px !important;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card-body h5 {
|
||||
|
||||
font-size:22px;
|
||||
|
||||
font-weight:800 !important;
|
||||
|
||||
color:#222;
|
||||
|
||||
}
|
||||
|
||||
.route {
|
||||
|
||||
display:flex;
|
||||
|
||||
justify-content:center;
|
||||
|
||||
align-items:center;
|
||||
|
||||
gap:15px;
|
||||
|
||||
margin:25px 0;
|
||||
|
||||
font-weight:700;
|
||||
|
||||
font-size:16px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.route .line {
|
||||
|
||||
width:55px;
|
||||
|
||||
height:2px;
|
||||
|
||||
background:#dbe7ff;
|
||||
|
||||
position:relative;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.route .line:after {
|
||||
|
||||
content:"✈";
|
||||
|
||||
position:absolute;
|
||||
|
||||
top:50%;
|
||||
left:50%;
|
||||
|
||||
transform:translate(-50%,-50%);
|
||||
|
||||
background:white;
|
||||
|
||||
padding:5px;
|
||||
|
||||
color:#0d6efd;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card-body strong {
|
||||
|
||||
font-size:20px;
|
||||
|
||||
color:#0d6efd;
|
||||
|
||||
}
|
||||
|
||||
.card-body .btn-primary {
|
||||
|
||||
background:linear-gradient(
|
||||
135deg,
|
||||
#0062ff,
|
||||
#00b7ff
|
||||
);
|
||||
|
||||
border:none;
|
||||
|
||||
padding:11px 30px;
|
||||
|
||||
font-weight:700;
|
||||
|
||||
box-shadow:
|
||||
0 10px 25px rgba(0,98,255,.3);
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.card-body .btn-primary:hover {
|
||||
|
||||
transform:translateY(-3px);
|
||||
|
||||
box-shadow:
|
||||
0 15px 30px rgba(0,98,255,.4);
|
||||
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card border-0 shadow-sm rounded-4 overflow-hidden h-100">
|
||||
<form action="{{ route('users.favorite.store') }}" method="POST">
|
||||
@@ -18,11 +250,10 @@
|
||||
</form>
|
||||
|
||||
<div class="flight-image">
|
||||
|
||||
<img src="{{ asset($flight->image) }}"
|
||||
<img src="{{ $flight->image ? asset('storage/'.$flight->image) : asset('assets/img/placeholder.jpg') }}"
|
||||
class="w-100 h-100 object-fit-cover"
|
||||
alt="{{ $flight->airline }}">
|
||||
|
||||
<span class="flight-badge">
|
||||
<span class="flight-badge">
|
||||
پرواز
|
||||
</span>
|
||||
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
|
||||
<div class="flight-image">
|
||||
|
||||
<img src="{{ asset($tour->image) }}"
|
||||
alt="{{ $tour->title }}">
|
||||
<img src="{{ $tour->image ? asset('storage/'.$tour->image) : asset('assets/img/placeholder.jpg') }}"
|
||||
class="w-100 h-100 object-fit-cover"
|
||||
alt="{{ $tour->airline }}">
|
||||
|
||||
|
||||
<span class="flight-badge">
|
||||
|
||||
@@ -1,432 +1,14 @@
|
||||
<style>
|
||||
|
||||
.flight-detail-page{
|
||||
padding:80px 0;
|
||||
background:
|
||||
linear-gradient(135deg,#eef5ff,#f9fbff);
|
||||
direction:rtl;
|
||||
}
|
||||
|
||||
|
||||
/* کارت اصلی */
|
||||
.flight-detail-card{
|
||||
|
||||
background:rgba(255,255,255,.85);
|
||||
backdrop-filter:blur(15px);
|
||||
|
||||
border-radius:35px;
|
||||
|
||||
overflow:hidden;
|
||||
|
||||
display:flex;
|
||||
|
||||
box-shadow:
|
||||
0 25px 70px rgba(0,0,0,.12);
|
||||
|
||||
transition:.4s;
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-card:hover{
|
||||
|
||||
transform:translateY(-8px);
|
||||
|
||||
box-shadow:
|
||||
0 35px 90px rgba(25,118,210,.25);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* تصویر */
|
||||
|
||||
.flight-detail-image{
|
||||
|
||||
width:42%;
|
||||
min-height:400px;
|
||||
|
||||
position:relative;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-image:after{
|
||||
|
||||
content:"";
|
||||
|
||||
position:absolute;
|
||||
|
||||
inset:0;
|
||||
|
||||
background:
|
||||
linear-gradient(
|
||||
180deg,
|
||||
transparent,
|
||||
rgba(0,0,0,.35)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-image img{
|
||||
|
||||
width:100%;
|
||||
height:100%;
|
||||
|
||||
object-fit:cover;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* محتوا */
|
||||
|
||||
.flight-detail-content{
|
||||
|
||||
width:58%;
|
||||
|
||||
padding:55px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-detail-content h1{
|
||||
|
||||
font-size:38px;
|
||||
|
||||
font-weight:900;
|
||||
|
||||
color:#102a43;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* badge */
|
||||
|
||||
.flight-badge-show{
|
||||
|
||||
background:
|
||||
linear-gradient(135deg,#1976d2,#42a5f5);
|
||||
|
||||
color:white;
|
||||
|
||||
padding:10px 30px;
|
||||
|
||||
border-radius:50px;
|
||||
|
||||
font-weight:bold;
|
||||
|
||||
box-shadow:
|
||||
0 10px 25px rgba(25,118,210,.35);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* مسیر */
|
||||
|
||||
|
||||
.route-box{
|
||||
|
||||
|
||||
margin:40px 0;
|
||||
|
||||
padding:35px;
|
||||
|
||||
border-radius:25px;
|
||||
|
||||
background:#fff;
|
||||
|
||||
display:flex;
|
||||
|
||||
justify-content:space-around;
|
||||
|
||||
align-items:center;
|
||||
|
||||
|
||||
box-shadow:
|
||||
inset 0 0 20px rgba(0,0,0,.04);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.route-box small{
|
||||
|
||||
color:#90a4ae;
|
||||
|
||||
font-size:14px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.route-box strong{
|
||||
|
||||
display:block;
|
||||
|
||||
margin-top:8px;
|
||||
|
||||
font-size:28px;
|
||||
|
||||
color:#102a43;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.route-line{
|
||||
|
||||
font-size:45px;
|
||||
|
||||
color:#f4b400;
|
||||
|
||||
animation:fly 2s infinite alternate;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@keyframes fly{
|
||||
|
||||
from{
|
||||
transform:translateX(-10px);
|
||||
}
|
||||
|
||||
to{
|
||||
transform:translateX(10px);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* اطلاعات */
|
||||
|
||||
.flight-info-grid{
|
||||
|
||||
|
||||
display:grid;
|
||||
|
||||
grid-template-columns:repeat(2,1fr);
|
||||
|
||||
gap:20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-info-grid div{
|
||||
|
||||
background:#fff;
|
||||
|
||||
padding:22px;
|
||||
|
||||
border-radius:20px;
|
||||
|
||||
border:1px solid #edf2f7;
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-info-grid div:hover{
|
||||
|
||||
transform:translateY(-5px);
|
||||
|
||||
box-shadow:
|
||||
0 15px 35px rgba(0,0,0,.08);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-info-grid span{
|
||||
|
||||
color:#78909c;
|
||||
|
||||
font-size:14px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-info-grid b,
|
||||
.flight-info-grid strong{
|
||||
|
||||
display:block;
|
||||
|
||||
margin-top:10px;
|
||||
|
||||
color:#102a43;
|
||||
|
||||
font-size:20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* فرم کامنت */
|
||||
|
||||
|
||||
.flight-comments{
|
||||
|
||||
|
||||
margin-top:45px;
|
||||
|
||||
background:#fff;
|
||||
|
||||
padding:35px;
|
||||
|
||||
border-radius:30px;
|
||||
|
||||
box-shadow:
|
||||
0 15px 40px rgba(0,0,0,.08);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-comments h3{
|
||||
|
||||
font-weight:900;
|
||||
|
||||
color:#102a43;
|
||||
|
||||
margin-bottom:25px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-comments textarea{
|
||||
|
||||
|
||||
border-radius:20px;
|
||||
|
||||
border:2px solid #edf2f7;
|
||||
|
||||
padding:20px;
|
||||
|
||||
resize:none;
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-comments textarea:focus{
|
||||
|
||||
border-color:#1976d2;
|
||||
|
||||
box-shadow:
|
||||
0 0 0 5px rgba(25,118,210,.12);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-comments button{
|
||||
|
||||
|
||||
width:100%;
|
||||
|
||||
padding:16px;
|
||||
|
||||
border-radius:20px;
|
||||
|
||||
border:none;
|
||||
|
||||
font-weight:800;
|
||||
|
||||
font-size:18px;
|
||||
|
||||
|
||||
background:
|
||||
linear-gradient(
|
||||
135deg,
|
||||
#1976d2,
|
||||
#42a5f5
|
||||
);
|
||||
|
||||
|
||||
box-shadow:
|
||||
0 15px 30px rgba(25,118,210,.35);
|
||||
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.flight-comments button:hover{
|
||||
|
||||
transform:translateY(-4px);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* موبایل */
|
||||
|
||||
@media(max-width:900px){
|
||||
|
||||
.flight-detail-card{
|
||||
|
||||
flex-direction:column;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-image,
|
||||
.flight-detail-content{
|
||||
|
||||
width:100%;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-image{
|
||||
|
||||
height:300px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-detail-content{
|
||||
|
||||
padding:30px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.flight-info-grid{
|
||||
|
||||
grid-template-columns:1fr;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.route-box{
|
||||
|
||||
flex-direction:column;
|
||||
|
||||
gap:25px;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/show.css') }}">
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<section class="flight-detail-page">
|
||||
<div class="container">
|
||||
|
||||
<div class="flight-detail-card">
|
||||
|
||||
<div class="flight-detail-image">
|
||||
<img src="{{ asset($flight->image) }}"
|
||||
<img src="{{ $flight->image ? asset('storage/'.$flight->image) : asset('assets/img/placeholder.jpg') }}"
|
||||
class="w-100 h-100 object-fit-cover"
|
||||
alt="{{ $flight->airline }}">
|
||||
</div>
|
||||
|
||||
@@ -500,7 +82,6 @@
|
||||
<button type="submit" class="btn btn-success">
|
||||
رزرو تور
|
||||
</button>
|
||||
|
||||
</form> @else
|
||||
|
||||
<a href="{{ route('auth.login.index') }}" class="btn btn-warning btn-lg px-5">
|
||||
@@ -537,23 +118,18 @@
|
||||
name="flight_id"
|
||||
value="{{ $flight->id }}"
|
||||
>
|
||||
|
||||
<div class="mb-3">
|
||||
|
||||
<label for="rating">
|
||||
<label>
|
||||
امتیاز
|
||||
</label>
|
||||
|
||||
<select name="rating" id="rating" class="form-control">
|
||||
|
||||
<select name="rating" class="form-control">
|
||||
<option value="5">★★★★★</option>
|
||||
<option value="4">★★★★</option>
|
||||
<option value="3">★★★</option>
|
||||
<option value="2">★★</option>
|
||||
<option value="1">★</option>
|
||||
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
@@ -622,3 +198,4 @@
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
<link rel="stylesheet" href="{{asset('assets/css/weather-icons.css')}}"/>
|
||||
<link rel="stylesheet" href="{{asset('assets/css/bootstrap.css')}}"/>
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/styles.css?v=2') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/flight_tour.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/header.css') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -1,230 +1,3 @@
|
||||
<style>
|
||||
|
||||
.main-header {
|
||||
|
||||
background: #09203f;
|
||||
|
||||
box-shadow: 0 8px 30px rgba(0,0,0,.2);
|
||||
|
||||
padding: 15px 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.header-inner {
|
||||
|
||||
display:flex;
|
||||
|
||||
align-items:center;
|
||||
|
||||
justify-content:space-between;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.logo {
|
||||
|
||||
color:white;
|
||||
|
||||
font-size:28px;
|
||||
|
||||
font-weight:800;
|
||||
|
||||
text-decoration:none;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.menu {
|
||||
|
||||
display:flex;
|
||||
|
||||
gap:30px;
|
||||
|
||||
list-style:none;
|
||||
|
||||
margin:0;
|
||||
|
||||
padding:0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.menu li a {
|
||||
|
||||
color:white;
|
||||
|
||||
text-decoration:none;
|
||||
|
||||
font-weight:600;
|
||||
|
||||
transition:.3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.menu li a:hover {
|
||||
|
||||
color:#ffc107;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.header-actions {
|
||||
|
||||
display:flex;
|
||||
|
||||
gap:10px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.login-btn {
|
||||
|
||||
color:white;
|
||||
|
||||
border:1px solid white;
|
||||
|
||||
padding:10px 20px;
|
||||
|
||||
border-radius:30px;
|
||||
|
||||
text-decoration:none;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.register-btn {
|
||||
|
||||
background:#ffc107;
|
||||
|
||||
color:#09203f;
|
||||
|
||||
padding:10px 20px;
|
||||
|
||||
border-radius:30px;
|
||||
|
||||
text-decoration:none;
|
||||
|
||||
font-weight:700;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.user-btn {
|
||||
|
||||
color:white;
|
||||
|
||||
text-decoration:none;
|
||||
|
||||
}
|
||||
.user-dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
.user-btn {
|
||||
|
||||
background: transparent;
|
||||
|
||||
border: none;
|
||||
|
||||
color: white;
|
||||
|
||||
font-size: 15px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
padding: 10px 15px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.user-menu {
|
||||
|
||||
position: absolute;
|
||||
|
||||
top: 45px;
|
||||
|
||||
right: 0;
|
||||
|
||||
width: 200px;
|
||||
|
||||
background: white;
|
||||
|
||||
border-radius: 15px;
|
||||
|
||||
padding: 10px 0;
|
||||
|
||||
box-shadow: 0 15px 40px rgba(0,0,0,.15);
|
||||
|
||||
opacity: 0;
|
||||
|
||||
visibility: hidden;
|
||||
|
||||
transform: translateY(10px);
|
||||
|
||||
transition: .3s;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.user-dropdown:hover .user-menu {
|
||||
|
||||
opacity: 1;
|
||||
|
||||
visibility: visible;
|
||||
|
||||
transform: translateY(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.user-menu a,
|
||||
.user-menu button {
|
||||
|
||||
display: flex;
|
||||
|
||||
align-items: center;
|
||||
|
||||
gap: 10px;
|
||||
|
||||
width: 100%;
|
||||
|
||||
padding: 12px 20px;
|
||||
|
||||
color: #263238;
|
||||
|
||||
background: none;
|
||||
|
||||
border: none;
|
||||
|
||||
text-decoration: none;
|
||||
|
||||
font-size: 14px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.user-menu a:hover,
|
||||
.user-menu button:hover {
|
||||
|
||||
background: #f1f5f9;
|
||||
|
||||
color: #1976d2;
|
||||
|
||||
}
|
||||
</style>
|
||||
<nav class="main-header">
|
||||
|
||||
<div class="container header-inner">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flight-hero-content">
|
||||
|
||||
<span class="flight-badge">
|
||||
<span>
|
||||
سفر بعدی شما از اینجا شروع میشود
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/show.css') }}">
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<section class="container mt-5">
|
||||
|
||||
<div class="card border-0 shadow rounded-4 overflow-hidden">
|
||||
|
||||
|
||||
<div class="position-relative">
|
||||
|
||||
<img src="{{ asset($tour->image) }}"
|
||||
alt="{{ $tour->title }}">
|
||||
<div class="card border-0 shadow rounded-4 overflow-hidden mb-5">
|
||||
|
||||
<div class="tour-detail-image">
|
||||
|
||||
<img src="{{ $tour->image ? asset('storage/'.$tour->image) : asset('assets/img/placeholder.jpg') }}"
|
||||
class="w-100 h-100 object-fit-cover"
|
||||
alt="{{ $tour->airline }}">
|
||||
<span class="badge bg-primary position-absolute top-0 end-0 m-4">
|
||||
تور
|
||||
</span>
|
||||
@@ -20,206 +18,220 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="card-body p-4">
|
||||
|
||||
|
||||
<h1 class="fw-bold mb-4">
|
||||
<h1 class="fw-bold mb-3">
|
||||
{{ $tour->title }}
|
||||
</h1>
|
||||
|
||||
|
||||
|
||||
<p class="text-muted">
|
||||
{{ $tour->summary }}
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
<div class="row g-4">
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
|
||||
<span class="text-secondary">
|
||||
نوع سفر
|
||||
</span>
|
||||
|
||||
<h5>
|
||||
{{ $tour->travelType?->name ?? '-' }}
|
||||
</h5>
|
||||
|
||||
<div class="tour-info-box">
|
||||
<span>نوع سفر</span>
|
||||
<h5>
|
||||
{{ $tour->travelType?->name ?? '-' }}
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
|
||||
<span class="text-secondary">
|
||||
تاریخ حرکت
|
||||
</span>
|
||||
|
||||
<h5>
|
||||
{{ \Carbon\Carbon::parse($tour->departure_date)->format('Y/m/d') }}
|
||||
</h5>
|
||||
|
||||
<div class="tour-info-box">
|
||||
<span>تاریخ حرکت</span>
|
||||
<h5>
|
||||
{{ \Carbon\Carbon::parse($tour->departure_date)->format('Y/m/d') }}
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
|
||||
<span class="text-secondary">
|
||||
قیمت
|
||||
</span>
|
||||
|
||||
<h5>
|
||||
{{ number_format($tour->price) }}
|
||||
تومان
|
||||
</h5>
|
||||
|
||||
<div class="tour-info-box">
|
||||
<span>قیمت</span>
|
||||
<h5 class="tour-price">
|
||||
{{ number_format($tour->price) }}
|
||||
تومان
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
<h4 class="fw-bold">
|
||||
توضیحات تور
|
||||
</h4>
|
||||
|
||||
|
||||
<p class="mt-3">
|
||||
<p>
|
||||
{{ $tour->description }}
|
||||
</p>
|
||||
<div class="mt-4">
|
||||
|
||||
|
||||
<div class="reserve-area mt-5">
|
||||
|
||||
@auth
|
||||
<form action="{{ route('users.reservations.store') }}" method="POST">
|
||||
|
||||
<form action="{{ route('users.reservations.store') }}"
|
||||
method="POST"
|
||||
class="reservation-form">
|
||||
|
||||
@csrf
|
||||
|
||||
<input type="hidden" name="reservable_id" value="{{ $tour->id }}">
|
||||
<input type="hidden"
|
||||
name="reservable_id"
|
||||
value="{{ $tour->id }}">
|
||||
|
||||
<input type="hidden" name="reservable_type" value="App\Models\Tour">
|
||||
<input type="hidden"
|
||||
name="reservable_type"
|
||||
value="App\Models\Tour">
|
||||
|
||||
<input type="hidden" name="price" value="{{ $tour->price }}">
|
||||
<input type="hidden"
|
||||
name="price"
|
||||
value="{{ $tour->price }}">
|
||||
|
||||
|
||||
<button type="submit" class="btn btn-success">
|
||||
رزرو تور
|
||||
<button type="submit"
|
||||
class="btn btn-success rounded-pill px-5 py-3">
|
||||
رزرو تور
|
||||
|
||||
</button>
|
||||
|
||||
</form> @else
|
||||
</form>
|
||||
|
||||
@else
|
||||
|
||||
<a href="{{ route('auth.login.index') }}"
|
||||
class="btn btn-warning rounded-pill px-5 py-3">
|
||||
|
||||
<a href="{{ route('auth.login.index') }}" class="btn btn-warning btn-lg px-5">
|
||||
برای رزرو وارد شوید
|
||||
|
||||
</a>
|
||||
|
||||
@endauth
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<span>تعداد مشاهده</span>
|
||||
|
||||
<strong>
|
||||
{{ $tour->views ?? 0 }}
|
||||
بازدید
|
||||
</strong>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<form action="{{ route('comments.store') }}" method="POST">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="comment-box mb-5">
|
||||
|
||||
<h3 class="fw-bold mb-4">
|
||||
ثبت نظر درباره تور
|
||||
</h3>
|
||||
|
||||
|
||||
<form action="{{ route('comments.store') }}"
|
||||
method="POST">
|
||||
|
||||
@csrf
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="tour_id"
|
||||
value="{{ $tour->id }}"
|
||||
>
|
||||
<input type="hidden"
|
||||
name="tour_id"
|
||||
value="{{ $tour->id }}">
|
||||
|
||||
|
||||
<div class="mb-3">
|
||||
|
||||
<label>
|
||||
امتیاز
|
||||
</label>
|
||||
|
||||
<select name="rating" class="form-control">
|
||||
<select name="rating"
|
||||
class="form-select">
|
||||
|
||||
<option value="5">★★★★★</option>
|
||||
<option value="4">★★★★</option>
|
||||
<option value="3">★★★</option>
|
||||
<option value="2">★★</option>
|
||||
<option value="1">★</option>
|
||||
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-3">
|
||||
<label>
|
||||
نظر شما
|
||||
</label>
|
||||
|
||||
<textarea
|
||||
name="comment"
|
||||
rows="5"
|
||||
class="form-control"
|
||||
></textarea>
|
||||
<textarea name="comment"
|
||||
rows="5"
|
||||
class="form-control rounded-4"
|
||||
placeholder="نظر خود را بنویسید..."></textarea>
|
||||
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary">
|
||||
|
||||
<button class="btn btn-primary rounded-pill px-5">
|
||||
ثبت نظر
|
||||
</button>
|
||||
|
||||
|
||||
</form>
|
||||
<div class="comments-list mt-5">
|
||||
|
||||
<h3 class="mb-4">
|
||||
نظرات کاربران
|
||||
</h3>
|
||||
|
||||
@forelse($comments as $comment)
|
||||
|
||||
<div class="card p-4 mb-3 shadow-sm">
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
|
||||
<strong>
|
||||
{{ $comment->user?->name ?? 'کاربر مهمان' }}
|
||||
</strong>
|
||||
|
||||
<small>
|
||||
{{ $comment->created_at->diffForHumans() }}
|
||||
</small>
|
||||
|
||||
</div>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
{{ $comment->comment }}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
@empty
|
||||
|
||||
<div class="alert alert-secondary">
|
||||
هنوز نظری ثبت نشده است.
|
||||
</div>
|
||||
|
||||
@endforelse
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="comment-box">
|
||||
|
||||
|
||||
<h3 class="fw-bold mb-4">
|
||||
نظرات کاربران
|
||||
</h3>
|
||||
|
||||
|
||||
@forelse($comments as $comment)
|
||||
|
||||
<div class="comment-item">
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
|
||||
<strong>
|
||||
{{ $comment->user?->name ?? 'کاربر مهمان' }}
|
||||
</strong>
|
||||
|
||||
|
||||
<small>
|
||||
{{ $comment->created_at->diffForHumans() }}
|
||||
</small>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
{{ $comment->comment }}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@empty
|
||||
|
||||
<div class="alert alert-secondary rounded-4">
|
||||
هنوز نظری ثبت نشده است.
|
||||
</div>
|
||||
|
||||
@endforelse
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user