git commit "complete province and city management with ajax"
This commit is contained in:
@@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\Admin\CityStoreRequest;
|
||||||
|
use App\Models\City;
|
||||||
|
use App\Models\Province;
|
||||||
|
|
||||||
|
|
||||||
|
class CityController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
|
||||||
|
$cities = City::with('province')
|
||||||
|
->latest()
|
||||||
|
->paginate(10);
|
||||||
|
|
||||||
|
return view('admin.cities.index', compact('cities'));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
|
||||||
|
$provinces = Province::all();
|
||||||
|
|
||||||
|
|
||||||
|
return view('admin.cities.create', compact('provinces'));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(CityStoreRequest $request)
|
||||||
|
{
|
||||||
|
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
City::create($data);
|
||||||
|
|
||||||
|
return redirect()->route('admin.cities.index')->with('success','شهر ثبت شد');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit(City $city)
|
||||||
|
{
|
||||||
|
|
||||||
|
$provinces = Province::all();
|
||||||
|
|
||||||
|
|
||||||
|
return view('admin.cities.edite', compact('city','provinces'));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(CityStoreRequest $request, City $city)
|
||||||
|
{
|
||||||
|
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
$city->update($data);
|
||||||
|
|
||||||
|
|
||||||
|
return redirect()->route('admin.cities.index')->with('success','شهر ویرایش شد');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(City $city)
|
||||||
|
{
|
||||||
|
$city->delete();
|
||||||
|
|
||||||
|
return back()->with('success','شهر حذف شد');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Province;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ProvinceController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$provinces = Province::latest()->paginate(10);
|
||||||
|
|
||||||
|
return view('admin.provinces.index', compact('provinces'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('admin.provinces.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'name'=>'required'
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
Province::create([
|
||||||
|
'name'=>$request->name
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
return redirect()
|
||||||
|
->route('admin.provinces.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function edit(Province $province)
|
||||||
|
{
|
||||||
|
return view('admin.provinces.edit',compact('province'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function update(Request $request, Province $province)
|
||||||
|
{
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'name'=>'required'
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
$province->update([
|
||||||
|
'name'=>$request->name
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
return redirect()
|
||||||
|
->route('admin.provinces.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function destroy(Province $province)
|
||||||
|
{
|
||||||
|
|
||||||
|
$province->delete();
|
||||||
|
|
||||||
|
|
||||||
|
return back();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ class CityStoreRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,7 +23,15 @@ class CityStoreRequest extends FormRequest
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
//
|
'province_id'=>['required'],
|
||||||
|
|
||||||
|
'name'=>[
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'max:255'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+102
-14
File diff suppressed because one or more lines are too long
@@ -0,0 +1,114 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
@section('breadcrumb')
|
||||||
|
|
||||||
|
<span>
|
||||||
|
افزودن شهرستان
|
||||||
|
</span>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
|
||||||
|
<div class="col-md-7">
|
||||||
|
|
||||||
|
<div class="card shadow-sm border-0">
|
||||||
|
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
|
||||||
|
<h4 class="fw-bold mb-4">
|
||||||
|
افزودن شهرستان جدید
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<form method="POST" action="{{ route('admin.cities.store') }}">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="form-label">
|
||||||
|
استان
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<select name="province_id"
|
||||||
|
class="form-select form-select-lg">
|
||||||
|
|
||||||
|
<option value="">
|
||||||
|
انتخاب استان
|
||||||
|
</option>
|
||||||
|
|
||||||
|
@foreach($provinces as $province)
|
||||||
|
|
||||||
|
<option value="{{ $province->id }}"
|
||||||
|
{{ old('province_id') == $province->id ? 'selected' : '' }}>
|
||||||
|
|
||||||
|
{{ $province->name }}
|
||||||
|
|
||||||
|
</option>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
@error('province_id')
|
||||||
|
|
||||||
|
<div class="text-danger mt-2">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
|
||||||
|
<label class="form-label">
|
||||||
|
نام شهرستان
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
class="form-control form-control-lg"
|
||||||
|
placeholder="مثلا مشهد"
|
||||||
|
value="{{ old('name') }}">
|
||||||
|
|
||||||
|
@error('name')
|
||||||
|
|
||||||
|
<div class="text-danger mt-2">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
|
||||||
|
<button class="btn btn-success px-4">
|
||||||
|
|
||||||
|
ثبت شهرستان
|
||||||
|
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<a href="{{ route('admin.cities.index') }}"
|
||||||
|
class="btn btn-secondary px-4">
|
||||||
|
|
||||||
|
بازگشت
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
@section('breadcrumb')
|
||||||
|
|
||||||
|
<span>
|
||||||
|
ویرایش شهرستان
|
||||||
|
</span>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-md-7">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card shadow-sm border-0">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
<h4 class="fw-bold mb-4">
|
||||||
|
ویرایش شهرستان
|
||||||
|
</h4>
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ route('admin.cities.update',$city->id) }}">
|
||||||
|
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
|
||||||
|
<label class="form-label">
|
||||||
|
استان
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<select name="province_id"
|
||||||
|
class="form-select form-select-lg">
|
||||||
|
|
||||||
|
@foreach($provinces as $province)
|
||||||
|
|
||||||
|
|
||||||
|
<option value="{{ $province->id }}"
|
||||||
|
@if($city->province_id == $province->id)
|
||||||
|
selected
|
||||||
|
@endif
|
||||||
|
>
|
||||||
|
|
||||||
|
{{ $province->name }}
|
||||||
|
|
||||||
|
</option>
|
||||||
|
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
|
||||||
|
@error('province_id')
|
||||||
|
|
||||||
|
<div class="text-danger mt-2">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="form-label">
|
||||||
|
|
||||||
|
نام شهرستان
|
||||||
|
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
class="form-control form-control-lg"
|
||||||
|
value="{{ old('name',$city->name) }}">
|
||||||
|
|
||||||
|
@error('name')
|
||||||
|
|
||||||
|
<div class="text-danger mt-2">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
|
||||||
|
<button class="btn btn-warning px-4">
|
||||||
|
|
||||||
|
ویرایش
|
||||||
|
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<a href="{{ route('admin.cities.index') }}"
|
||||||
|
class="btn btn-secondary px-4">
|
||||||
|
|
||||||
|
بازگشت
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between mb-4">
|
||||||
|
|
||||||
|
|
||||||
|
<h3 class="fw-bold">
|
||||||
|
مدیریت شهرستانها
|
||||||
|
</h3>
|
||||||
|
<a href="{{ route('admin.cities.create') }}"
|
||||||
|
class="btn btn-primary">
|
||||||
|
|
||||||
|
افزودن شهرستان
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card shadow-sm border-0">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
|
||||||
|
<table class="table table-hover text-center">
|
||||||
|
|
||||||
|
|
||||||
|
<thead class="table-light">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th>شناسه</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
نام شهرستان
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
استان
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
تاریخ ثبت
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
عملیات
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
|
||||||
|
@forelse($cities as $city)
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $city->id }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
<td class="fw-bold">
|
||||||
|
|
||||||
|
{{ $city->name }}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
{{ $city->province->name ?? '-' }}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
{{ $city->created_at?->toJalali()->format('Y/m/d') ?? '-' }}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<a href="{{ route('admin.cities.edit',$city->id) }}"
|
||||||
|
class="btn btn-warning btn-sm">
|
||||||
|
|
||||||
|
ویرایش
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.cities.destroy',$city->id) }}"
|
||||||
|
method="POST"
|
||||||
|
class="d-inline">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
@method('DELETE')
|
||||||
|
<button class="btn btn-danger btn-sm">
|
||||||
|
|
||||||
|
حذف
|
||||||
|
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@empty
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="5">
|
||||||
|
|
||||||
|
شهرستانی ثبت نشده است
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
@endforelse
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{{ $cities->links() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -118,11 +118,8 @@
|
|||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
@forelse($logs as $log)
|
@forelse($logs as $log)
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
{{ $log->admin->first_name ?? '-' }}
|
{{ $log->admin->first_name ?? '-' }}
|
||||||
</td>
|
</td>
|
||||||
@@ -130,7 +127,6 @@
|
|||||||
<td>
|
<td>
|
||||||
{{ $log->action }}
|
{{ $log->action }}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
{{ $log->model }}
|
{{ $log->model }}
|
||||||
</td>
|
</td>
|
||||||
@@ -145,7 +141,6 @@
|
|||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
فعالیتی ثبت نشده است
|
فعالیتی ثبت نشده است
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -154,106 +149,71 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card shadow-sm border-0 mt-5">
|
<div class="card shadow-sm border-0 mt-5">
|
||||||
|
|
||||||
|
|
||||||
<div class="card-header bg-white fw-bold">
|
<div class="card-header bg-white fw-bold">
|
||||||
|
|
||||||
نمودار بازدید تورها در ۱۰ روز اخیر
|
نمودار بازدید تورها در ۱۰ روز اخیر
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<canvas id="tourViewsChart" height="100"></canvas>
|
<canvas id="tourViewsChart" height="100"></canvas>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-header bg-white fw-bold">
|
<div class="card-header bg-white fw-bold">
|
||||||
|
|
||||||
نمودار بازدید پروازها در ۱۰ روز اخیر
|
نمودار بازدید پروازها در ۱۰ روز اخیر
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<canvas id="flightViewsChart" height="100"></canvas>
|
<canvas id="flightViewsChart" height="100"></canvas>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="{{asset('assets/js/chart.js')}}"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const tourChart = document.getElementById('tourViewsChart');
|
const tourChart = document.getElementById('tourViewsChart');
|
||||||
|
|
||||||
new Chart(tourChart, {
|
new Chart(tourChart, {
|
||||||
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
|
|
||||||
data: {
|
data: {
|
||||||
|
|
||||||
labels: @json($tourViews->pluck('date')),
|
labels: @json($tourViews->pluck('date')),
|
||||||
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
|
|
||||||
label: 'بازدید تورها',
|
label: 'بازدید تورها',
|
||||||
|
|
||||||
data: @json($tourViews->pluck('total')),
|
data: @json($tourViews->pluck('total'))
|
||||||
|
|
||||||
}]
|
}]
|
||||||
},
|
|
||||||
|
|
||||||
options: {
|
|
||||||
responsive:true,
|
|
||||||
|
|
||||||
plugins:{
|
|
||||||
|
|
||||||
legend:{
|
|
||||||
|
|
||||||
position:'top'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
scales:{
|
|
||||||
|
|
||||||
y:{
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const flightChart = document.getElementById('flightViewsChart');
|
const flightChart = document.getElementById('flightViewsChart');
|
||||||
|
|
||||||
new Chart(flightChart, {
|
new Chart(flightChart, {
|
||||||
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
|
|
||||||
data: {
|
data: {
|
||||||
|
|
||||||
labels: @json($flightViews->pluck('date')),
|
labels: @json($flightViews->pluck('date')),
|
||||||
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
|
|
||||||
label: 'بازدید پرواز ها',
|
label: 'بازدید پروازها',
|
||||||
|
|
||||||
data: @json($flightViews->pluck('total')),
|
|
||||||
|
|
||||||
|
data: @json($flightViews->pluck('total'))
|
||||||
}]
|
}]
|
||||||
},
|
|
||||||
|
|
||||||
options: {
|
|
||||||
responsive:true,
|
|
||||||
|
|
||||||
plugins:{
|
|
||||||
|
|
||||||
legend:{
|
|
||||||
|
|
||||||
position:'top'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
scales:{
|
|
||||||
|
|
||||||
y:{
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,23 @@
|
|||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item mb-2">
|
||||||
|
|
||||||
|
<a href="{{ route('admin.provinces.index') }}"
|
||||||
|
class="nav-link text-white">
|
||||||
|
|
||||||
|
مدیریت استان ها </a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li class="nav-item mb-2">
|
||||||
|
|
||||||
|
<a href="{{ route('admin.cities.index') }}"
|
||||||
|
class="nav-link text-white">
|
||||||
|
|
||||||
|
مدیریت شهرستان ها </a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
|
||||||
|
|
||||||
|
@section('breadcrumb')
|
||||||
|
|
||||||
|
<span>
|
||||||
|
افزودن استان
|
||||||
|
</span>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card border-0 shadow-sm">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h4 class="fw-bold mb-4">
|
||||||
|
|
||||||
|
افزودن استان جدید
|
||||||
|
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ route('admin.provinces.store') }}">
|
||||||
|
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="form-label">
|
||||||
|
|
||||||
|
نام استان
|
||||||
|
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
class="form-control form-control-lg"
|
||||||
|
placeholder="مثلا تهران"
|
||||||
|
value="{{ old('name') }}">
|
||||||
|
|
||||||
|
@error('name')
|
||||||
|
|
||||||
|
<div class="text-danger mt-2">
|
||||||
|
|
||||||
|
{{ $message }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
|
||||||
|
|
||||||
|
<button class="btn btn-success px-4">
|
||||||
|
|
||||||
|
ثبت استان
|
||||||
|
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="{{ route('admin.provinces.index') }}"
|
||||||
|
class="btn btn-secondary px-4">
|
||||||
|
|
||||||
|
بازگشت
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
|
||||||
|
|
||||||
|
@section('breadcrumb')
|
||||||
|
|
||||||
|
<span>
|
||||||
|
ویرایش استان
|
||||||
|
</span>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-lg-6">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card border-0 shadow-sm">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-header bg-white border-0 pt-4">
|
||||||
|
|
||||||
|
|
||||||
|
<h4 class="fw-bold">
|
||||||
|
|
||||||
|
<i class="bi bi-pencil-square"></i>
|
||||||
|
|
||||||
|
ویرایش استان
|
||||||
|
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-muted mb-0">
|
||||||
|
|
||||||
|
اطلاعات استان را ویرایش کنید
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ route('admin.provinces.update',$province->id) }}">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
<div class="mb-4">
|
||||||
|
|
||||||
|
<label class="form-label fw-bold">
|
||||||
|
|
||||||
|
نام استان
|
||||||
|
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
class="form-control form-control-lg @error('name') is-invalid @enderror"
|
||||||
|
value="{{ old('name',$province->name) }}"
|
||||||
|
placeholder="مثلا تهران">
|
||||||
|
|
||||||
|
@error('name')
|
||||||
|
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
|
||||||
|
{{ $message }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@enderror
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
|
||||||
|
|
||||||
|
<a href="{{ route('admin.provinces.index') }}"
|
||||||
|
class="btn btn-light border px-4">
|
||||||
|
|
||||||
|
بازگشت
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<button type="submit"
|
||||||
|
class="btn btn-warning px-5">
|
||||||
|
|
||||||
|
ذخیره تغییرات
|
||||||
|
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
|
||||||
|
|
||||||
|
@section('breadcrumb')
|
||||||
|
<span>
|
||||||
|
مدیریت استانها
|
||||||
|
</span>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<h3 class="fw-bold mb-1">
|
||||||
|
مدیریت استانها
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<small class="text-muted">
|
||||||
|
لیست استانهای ثبت شده
|
||||||
|
</small>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="{{ route('admin.provinces.create') }}"
|
||||||
|
class="btn btn-primary px-4">
|
||||||
|
|
||||||
|
<i class="bi bi-plus-circle"></i>
|
||||||
|
|
||||||
|
افزودن استان
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card border-0 shadow-sm">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
|
||||||
|
|
||||||
|
<table class="table table-hover align-middle text-center">
|
||||||
|
|
||||||
|
|
||||||
|
<thead class="table-light">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
شناسه
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
نام استان
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
تاریخ ثبت
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
عملیات
|
||||||
|
</th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
|
||||||
|
|
||||||
|
@forelse($provinces as $province)
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<span class="badge bg-secondary">
|
||||||
|
|
||||||
|
{{ $province->id }}
|
||||||
|
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="fw-bold">
|
||||||
|
|
||||||
|
{{ $province->name }}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
{{ $province->created_at?->toJalali()->format('Y/m/d') ?? '-' }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a href="{{ route('admin.provinces.edit',$province->id) }}"
|
||||||
|
class="btn btn-sm btn-warning">
|
||||||
|
|
||||||
|
ویرایش
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.provinces.destroy',$province->id) }}"
|
||||||
|
method="POST"
|
||||||
|
class="d-inline">
|
||||||
|
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
@method('DELETE')
|
||||||
|
|
||||||
|
<button class="btn btn-sm btn-danger"
|
||||||
|
onclick="return confirm('آیا حذف شود؟')">
|
||||||
|
|
||||||
|
حذف
|
||||||
|
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
@empty
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="4"
|
||||||
|
class="text-muted py-4">
|
||||||
|
|
||||||
|
هنوز استانی ثبت نشده است
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
@endforelse
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-3">
|
||||||
|
|
||||||
|
{{ $provinces->links() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
+35
-2
@@ -6,9 +6,11 @@ use App\Http\Controllers\Admin\AdminController;
|
|||||||
use App\Http\Controllers\Admin\Auth\AuthController;
|
use App\Http\Controllers\Admin\Auth\AuthController;
|
||||||
use App\Http\Controllers\Admin\Auth\DashboardController;
|
use App\Http\Controllers\Admin\Auth\DashboardController;
|
||||||
use App\Http\Controllers\Admin\FlightController;
|
use App\Http\Controllers\Admin\FlightController;
|
||||||
|
use App\Http\Controllers\Admin\ProvinceController;
|
||||||
use App\Http\Controllers\Admin\RoleController;
|
use App\Http\Controllers\Admin\RoleController;
|
||||||
use App\Http\Controllers\Admin\UserController;
|
use App\Http\Controllers\Admin\UserController;
|
||||||
use App\Http\Controllers\Admin\TourController;
|
use App\Http\Controllers\Admin\TourController;
|
||||||
|
use App\Http\Controllers\Admin\CityController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
|
|
||||||
@@ -103,8 +105,39 @@ Route::prefix('admin')->name('admin.')->group(function (){
|
|||||||
Route::put('permissions', 'updatePermissions')->name('permissions.update');
|
Route::put('permissions', 'updatePermissions')->name('permissions.update');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
Route::get('/activity-logs', [ActivityLogController::class, 'index'])
|
Route::get('/activity-logs', [ActivityLogController::class, 'index'])->name('activity-logs.index');
|
||||||
->name('activity-logs.index');
|
|
||||||
|
|
||||||
|
Route::prefix('provinces')->name('provinces.')->controller(ProvinceController::class)->group(function () {
|
||||||
|
|
||||||
|
Route::get('/', 'index')->name('index');
|
||||||
|
|
||||||
|
Route::get('create','create')->name('create');
|
||||||
|
Route::post('store','store')->name('store');
|
||||||
|
|
||||||
|
Route::prefix('{province}')->group(function () {
|
||||||
|
|
||||||
|
Route::get('edit', 'edit')->name('edit');
|
||||||
|
|
||||||
|
Route::put('update', 'update')->name('update');
|
||||||
|
|
||||||
|
Route::delete('destroy', 'destroy')->name('destroy');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Route::prefix('cities')->name('cities.')->controller(CityController::class)->group(function () {
|
||||||
|
Route::get('/', 'index')->name('index');
|
||||||
|
|
||||||
|
Route::get('create', 'create')->name('create');
|
||||||
|
Route::post('store', 'store')->name('store');
|
||||||
|
|
||||||
|
Route::prefix('{city}')->group(function () {
|
||||||
|
|
||||||
|
Route::get('edit', 'edit')->name('edit');
|
||||||
|
Route::put('update', 'update')->name('update');
|
||||||
|
|
||||||
|
Route::delete('destroy', 'destroy')->name('destroy');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user