feat: edit routes

This commit is contained in:
2026-08-18 16:25:12 -07:00
parent c0c2d093e8
commit 4794d7f732
42 changed files with 2760 additions and 0 deletions
@@ -0,0 +1,17 @@
@extends('admin.layouts.app')
@section('breadcrumb')<div><h1 class="page-title fw-medium fs-18 mb-1">درج تور</h1><span class="text-muted fs-12">فیلدهای مورد نیاز سفر</span></div>@endsection
@section('content')<div class="container-fluid pt-4">@include('admin.partials.errors')<form action="{{ isset($tour) ? route('admin.tours.update',$tour) : route('admin.tours.store') }}" method="POST" enctype="multipart/form-data">@csrf @if(false) @method('PUT') @endif
<div class="row g-3"><div class="col-xl-8"><div class="card custom-card"><div class="card-header"><div class="card-title">اطلاعات تور</div></div><div class="card-body"><div class="row gy-3">
<div class="col-md-6"><label class="form-label">عنوان سفر *</label><input class="form-control" name="title" value="{{ old('title',$tour->title ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مدت تور (روز) *</label><input type="number" min="1" class="form-control" name="duration" value="{{ old('duration',$tour->duration ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مبدأ *</label><input class="form-control" name="origin" value="{{ old('origin',$tour->origin ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مقصد *</label><input class="form-control" name="destination" value="{{ old('destination',$tour->destination ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">قیمت پایه</label><input type="number" min="0" class="form-control" name="price" value="{{ old('price',$tour->price ?? '') }}"></div>
<div class="col-md-6"><label class="form-label">وضعیت</label><select class="form-control" name="status"><option value="1" @selected((string)old('status',$tour->status ?? 1)==='1')>فعال</option><option value="0" @selected((string)old('status',$tour->status ?? 1)==='0')>غیرفعال</option></select></div>
<div class="col-12"><label class="form-label">خلاصه تور *</label><textarea class="form-control" name="summary" rows="3" required>{{ old('summary',$tour->summary ?? '') }}</textarea></div>
<div class="col-12"><label class="form-label">توضیحات *</label><textarea class="form-control" name="descriptions" rows="7" required>{{ old('descriptions',$tour->descriptions ?? '') }}</textarea></div>
</div></div></div></div><div class="col-xl-4"><div class="card custom-card"><div class="card-header"><div class="card-title">تصویر تور</div></div><div class="card-body"><input type="file" class="form-control" name="image" accept="image/*"><small class="text-muted d-block mt-2">تصویر اختیاری است.</small></div></div></div></div>
<div class="card custom-card mt-3"><div class="card-footer d-flex justify-content-end gap-2"><a href="{{ route('admin.tours.index') }}" class="btn btn-light">انصراف</a><button class="btn btn-primary">{{ isset($tour) ? 'ذخیره تغییرات' : 'ثبت تور' }}</button></div></div></form>
@if(false)<div class="card custom-card mt-3"><div class="card-header d-flex justify-content-between align-items-center"><div class="card-title mb-0">تاریخ‌های تور</div></div><div class="card-body"><form method="POST" action="{{ route('admin.tour-dates.store',$tour) }}">@csrf<div class="row g-2"><div class="col-md-3"><input class="form-control jalali-date" name="start_date_jalali" placeholder="شروع شمسی" required></div><div class="col-md-3"><input class="form-control jalali-date" name="end_date_jalali" placeholder="پایان شمسی" required></div><div class="col-md-2"><input type="number" min="0" class="form-control" name="price" placeholder="قیمت" required></div><div class="col-md-2"><input type="number" min="1" class="form-control" name="capacity" placeholder="ظرفیت" required></div><div class="col-md-2"><button class="btn btn-primary w-100">افزودن تاریخ</button></div></div></form><hr><div class="table-responsive"><table class="table text-nowrap"><thead><tr><th>شروع</th><th>پایان</th><th>قیمت</th><th>ظرفیت</th><th>وضعیت</th><th></th></tr></thead><tbody>@forelse(($tour->tourDates ?? []) as $date)<tr><td>{{ $date->start_date->toJalali()->format('Y/m/d') }}</td><td>{{ $date->end_date->toJalali()->format('Y/m/d') }}</td><td>{{ number_format($date->price) }}</td><td>{{ $date->capacity }}</td><td>{{ $date->status ? 'فعال':'غیرفعال' }}</td><td><form method="POST" action="{{ route('admin.tour-dates.destroy',$date) }}" onsubmit="return confirm('حذف تاریخ تور؟')">@csrf @method('DELETE')<button class="btn btn-danger-light btn-sm">حذف</button></form></td></tr>@empty<tr><td colspan="6" class="text-center text-muted">تاریخی برای این تور ثبت نشده است.</td></tr>@endforelse</tbody></table></div></div></div>@endif
</div>@endsection
@push('scripts')<script>$(function(){ if($.fn.persianDatepicker){ $('.jalali-date').persianDatepicker({format:'YYYY/MM/DD',autoClose:true}); }});</script>@endpush
@@ -0,0 +1,17 @@
@extends('admin.layouts.app')
@section('breadcrumb')<div><h1 class="page-title fw-medium fs-18 mb-1">{{ isset($tour) ? 'ویرایش تور' : 'درج تور' }}</h1><span class="text-muted fs-12">فیلدهای مورد نیاز سفر</span></div>@endsection
@section('content')<div class="container-fluid pt-4">@include('admin.partials.errors')<form action="{{ isset($tour) ? route('admin.tours.update',$tour) : route('admin.tours.store') }}" method="POST" enctype="multipart/form-data">@csrf @if(isset($tour)) @method('PUT') @endif
<div class="row g-3"><div class="col-xl-8"><div class="card custom-card"><div class="card-header"><div class="card-title">اطلاعات تور</div></div><div class="card-body"><div class="row gy-3">
<div class="col-md-6"><label class="form-label">عنوان سفر *</label><input class="form-control" name="title" value="{{ old('title',$tour->title ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مدت تور (روز) *</label><input type="number" min="1" class="form-control" name="duration" value="{{ old('duration',$tour->duration ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مبدأ *</label><input class="form-control" name="origin" value="{{ old('origin',$tour->origin ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">مقصد *</label><input class="form-control" name="destination" value="{{ old('destination',$tour->destination ?? '') }}" required></div>
<div class="col-md-6"><label class="form-label">قیمت پایه</label><input type="number" min="0" class="form-control" name="price" value="{{ old('price',$tour->price ?? '') }}"></div>
<div class="col-md-6"><label class="form-label">وضعیت</label><select class="form-control" name="status"><option value="1" @selected((string)old('status',$tour->status ?? 1)==='1')>فعال</option><option value="0" @selected((string)old('status',$tour->status ?? 1)==='0')>غیرفعال</option></select></div>
<div class="col-12"><label class="form-label">خلاصه تور *</label><textarea class="form-control" name="summary" rows="3" required>{{ old('summary',$tour->summary ?? '') }}</textarea></div>
<div class="col-12"><label class="form-label">توضیحات *</label><textarea class="form-control" name="descriptions" rows="7" required>{{ old('descriptions',$tour->descriptions ?? '') }}</textarea></div>
</div></div></div></div><div class="col-xl-4"><div class="card custom-card"><div class="card-header"><div class="card-title">تصویر تور</div></div><div class="card-body"><input type="file" class="form-control" name="image" accept="image/*"><small class="text-muted d-block mt-2">تصویر اختیاری است.</small></div></div></div></div>
<div class="card custom-card mt-3"><div class="card-footer d-flex justify-content-end gap-2"><a href="{{ route('admin.tours.index') }}" class="btn btn-light">انصراف</a><button class="btn btn-primary">{{ isset($tour) ? 'ذخیره تغییرات' : 'ثبت تور' }}</button></div></div></form>
@if(isset($tour))<div class="card custom-card mt-3"><div class="card-header d-flex justify-content-between align-items-center"><div class="card-title mb-0">تاریخ‌های تور</div></div><div class="card-body"><form method="POST" action="{{ route('admin.tour-dates.store',$tour) }}">@csrf<div class="row g-2"><div class="col-md-3"><input class="form-control jalali-date" name="start_date_jalali" placeholder="شروع شمسی" required></div><div class="col-md-3"><input class="form-control jalali-date" name="end_date_jalali" placeholder="پایان شمسی" required></div><div class="col-md-2"><input type="number" min="0" class="form-control" name="price" placeholder="قیمت" required></div><div class="col-md-2"><input type="number" min="1" class="form-control" name="capacity" placeholder="ظرفیت" required></div><div class="col-md-2"><button class="btn btn-primary w-100">افزودن تاریخ</button></div></div></form><hr><div class="table-responsive"><table class="table text-nowrap"><thead><tr><th>شروع</th><th>پایان</th><th>قیمت</th><th>ظرفیت</th><th>وضعیت</th><th></th></tr></thead><tbody>@forelse(($tour->tourDates ?? []) as $date)<tr><td>{{ $date->start_date->toJalali()->format('Y/m/d') }}</td><td>{{ $date->end_date->toJalali()->format('Y/m/d') }}</td><td>{{ number_format($date->price) }}</td><td>{{ $date->capacity }}</td><td>{{ $date->status ? 'فعال':'غیرفعال' }}</td><td><form method="POST" action="{{ route('admin.tour-dates.destroy',$date) }}" onsubmit="return confirm('حذف تاریخ تور؟')">@csrf @method('DELETE')<button class="btn btn-danger-light btn-sm">حذف</button></form></td></tr>@empty<tr><td colspan="6" class="text-center text-muted">تاریخی برای این تور ثبت نشده است.</td></tr>@endforelse</tbody></table></div></div></div>@endif
</div>@endsection
@push('scripts')<script>$(function(){ if($.fn.persianDatepicker){ $('.jalali-date').persianDatepicker({format:'YYYY/MM/DD',autoClose:true}); }});</script>@endpush
@@ -0,0 +1,3 @@
@extends('admin.layouts.app')
@section('breadcrumb')<div><h1 class="page-title fw-medium fs-18 mb-1">مدیریت تورها</h1><span class="text-muted fs-12">درج، ویرایش، حذف و مدیریت تورهای داخلی و خارجی</span></div>@endsection
@section('content')<div class="container-fluid pt-4">@include('admin.partials.errors')<div class="card custom-card"><div class="card-body"><form method="GET"><div class="row g-2"><div class="col-md-5"><input class="form-control" name="search" value="{{ request('search') }}" placeholder="عنوان، مبدأ یا مقصد"></div><div class="col-md-2"><select class="form-control" name="status"><option value="">همه وضعیت‌ها</option><option value="1" @selected(request('status')==='1')>فعال</option><option value="0" @selected(request('status')==='0')>غیرفعال</option></select></div><div class="col-md-2"><button class="btn btn-light w-100">جستجو</button></div><div class="col-md-3"><a href="{{ route('admin.tours.create') }}" class="btn btn-primary w-100"><i class="ri-add-line"></i> تور جدید</a></div></div></form></div></div><div class="card custom-card mt-3"><div class="table-responsive"><table class="table text-nowrap table-hover mb-0"><thead><tr><th>عنوان تور</th><th>مسیر</th><th>مدت</th><th>قیمت</th><th>بازدید</th><th>وضعیت</th><th>عملیات</th></tr></thead><tbody>@forelse(($tours ?? []) as $tour)<tr><td><div class="fw-semibold">{{ $tour->title }}</div><small class="text-muted">#{{ $tour->id }}</small></td><td>{{ $tour->origin }} ← {{ $tour->destination }}</td><td>{{ $tour->duration }} روز</td><td>{{ number_format($tour->price ?? 0) }} تومان</td><td>{{ number_format($tour->views ?? 0) }}</td><td>@if($tour->status)<span class="badge bg-success-transparent">فعال</span>@else<span class="badge bg-danger-transparent">غیرفعال</span>@endif</td><td><div class="hstack gap-2"><a href="{{ route('admin.tours.show',$tour) }}" class="btn btn-primary-light btn-icon btn-sm"><i class="ri-eye-line"></i></a><a href="{{ route('admin.tours.edit',$tour) }}" class="btn btn-secondary-light btn-icon btn-sm"><i class="ri-edit-line"></i></a><form method="POST" action="{{ route('admin.tours.destroy',$tour) }}" onsubmit="return confirm('حذف این تور؟')">@csrf @method('DELETE')<button class="btn btn-danger-light btn-icon btn-sm"><i class="ri-delete-bin-line"></i></button></form></div></td></tr>@empty<tr><td colspan="7" class="text-center py-5 text-muted">توری ثبت نشده است.</td></tr>@endforelse</tbody></table></div></div>{{ ($tours ?? collect())->links() }}</div>@endsection
@@ -0,0 +1,3 @@
@extends('admin.layouts.app')
@section('breadcrumb')<div><h1 class="page-title fw-medium fs-18 mb-1">جزئیات تور</h1><span class="text-muted fs-12">مشاهده اطلاعات تور و تاریخ‌های قابل رزرو</span></div>@endsection
@section('content')<div class="container-fluid pt-4"><div class="card custom-card"><div class="card-body"><h4>{{ $tour->title }}</h4><p class="text-muted">{{ $tour->summary }}</p><div class="row gy-3"><div class="col-md-4"><strong>مسیر:</strong> {{ $tour->origin }} ← {{ $tour->destination }}</div><div class="col-md-4"><strong>مدت:</strong> {{ $tour->duration }} روز</div><div class="col-md-4"><strong>قیمت:</strong> {{ number_format($tour->price ?? 0) }} تومان</div><div class="col-12"><strong>توضیحات:</strong><div class="mt-2">{!! nl2br(e($tour->descriptions)) !!}</div></div></div></div><div class="card-footer"><a href="{{ route('admin.tours.edit',$tour) }}" class="btn btn-primary">ویرایش</a><a href="{{ route('admin.tours.index') }}" class="btn btn-light ms-2">بازگشت</a></div></div></div>@endsection