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,71 @@
@extends('admin.layouts.app')
@section('content')
<div class="main-content app-content">
<div class="container-fluid pt-4">
<div class="row">
<div class="col-xl-12">
@error('general')
<span class="text-danger">{{ $message }}</span>
@enderror
<!-- Create Category Form -->
<form action="{{ route('admin.categories.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="card custom-card mb-4">
<div class="card-header">
<div class="card-title">ایجاد دسته‌بندی</div>
</div>
<div class="card-body">
<div class="row gy-3">
<div class="col-xl-6">
<label class="form-label">نام دسته‌بندی</label>
<input type="text" class="form-control" name="name"
placeholder="نام دسته بندی را وارد کنید"
value={{ old('name') }} >
@error('name')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
<div class="col-xl-12">
<label class="form-label">توضیحات</label>
<textarea class="form-control" name="description" rows="3"
placeholder="توضیحات دسته‌بندی را وارد کنید">{{ old('description') }}</textarea>
@error('description')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
<div class="card-avatar mt-3" style="min-height: unset">
<div class="text-center">
<label class="form-label d-block mb-2 fw-semibold">تصویر دسته بندی</label>
<label class="avatar-picker" id="avatarPreview"
style="background-image: url({{ asset('assets/admin/images/faces/DefaultAvatar.jpg') }})">
<input type="file" name="image" accept="image/*"
onchange="previewAvatar(this)">
</label>
@error('image')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
</div>
<div class="card-footer text-end">
<button type="submit" class="btn btn-primary">ایجاد دسته‌بندی</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,75 @@
@extends('admin.layouts.app')
@section('content')
<div class="main-content app-content">
<div class="container-fluid pt-4">
<div class="row">
<div class="col-xl-12">
@error('general')
<span class="text-danger">{{ $message }}</span>
@enderror
<!-- Edit Category Form -->
<form action="{{ route('admin.categories.update', $category) }}" method="POST"
enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="card-header">
<div class="card-title">ویرایش دسته‌بندی</div>
</div>
<div class="card-body">
<div class="row gy-3">
<div class="col-xl-6">
<label class="form-label">نام دسته‌بندی</label>
<input type="text" class="form-control" name="name"
value="{{ old('name', $category->name) }}"
placeholder="نام دسته‌بندی را وارد کنید">
@error('name')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
<div class="col-xl-12">
<label class="form-label">توضیحات</label>
<textarea class="form-control" name="description" rows="3"
placeholder="توضیحات دسته‌بندی را وارد کنید">{{ old('description', $category->description) }}</textarea>
@error('description')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
<div class="card-avatar mt-3" style="min-height: unset">
<!-- Avatar Picker -->
<div class="text-center">
<label class="form-label d-block fw-semibold">تصویر دسته بندی</label>
<label class="avatar-picker" id="avatarPreview"
style="background-image: url({{ asset('storage/' .old('image', $category->image)) }})">
<input type="file" name="image" accept="image/*"
onchange="previewAvatar(this)">
</label>
@error('image')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
</div>
<div class="card-footer text-end">
<button type="submit" class="btn btn-primary">ذخیره تغییرات</button>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,181 @@
@extends('admin.layouts.app')
@section('breadcrumb')
<div>
<h1 class="page-title fw-medium fs-18 mb-2">لیست دسته بندی ها</h1>
<div>
<nav>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="javascript:void(0)">مدیریت دسته بندی ها</a></li>
<li class="breadcrumb-item active" aria-current="page">لیست دسته بندی ها</li>
</ol>
</nav>
</div>
</div>
@endsection
@section('content')
<div class="main-content app-content">
<div class="container-fluid pt-4">
@error('general')
<span class="text-danger ">{{ $message }}</span>
@enderror
@error('success')
<span class="text-success ">{{ $message }}</span>
@enderror
<!-- Filters -->
<div class="row">
<div class="col-xl-12">
<div class="card custom-card">
<div class="card-body p-3">
<form method="GET">
<div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
<!-- Sort Dropdown -->
<div class="d-flex flex-wrap gap-1 align-items-center">
<div class="d-flex me-2">
<input class="form-control me-2" type="search" name="search"
placeholder="جستجو دسته‌بندی"
value="{{ request()->input('search') }}">
<button class="btn btn-light" type="submit">جستجو</button>
</div>
<select id="choices-single-default" class="form-control" name="sort">
<option value="">مرتب‌سازی بر اساس</option>
<option
value="newest" @selected(request()->missing('sort') || request()->input('sort') == 'newest')>
جدیدترین
</option>
<option
value="oldest" @selected(request()->input('sort') == 'oldest')>
قدیمی ترین
</option>
<option value="name_asc" @selected(request()->input('sort') == 'name_asc')>
الفبا (الف - ی)
</option>
<option
value="name_desc" @selected(request()->input('sort') == 'name_desc')>
الفبا (ی - الف)
</option>
</select>
</div>
<!-- Search -->
<div class="d-flex" role="search">
<a href="{{ route('admin.categories.create') }}" class="btn btn-primary me-2">
<i class="ri-add-line me-1 fw-medium align-middle"></i>
ایجاد دسته بندی
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Categories Table -->
<div class="row">
<div class="col-xl-12">
<div class="card custom-card">
<div class="table-responsive">
<table class="table text-nowrap table-bordered">
<thead>
<tr>
<th>دسته‌بندی</th>
<th>تعداد محصولات</th>
<th scope="col">وضعیت</th>
<th>تاریخ ایجاد</th>
<th>اقدامات</th>
</tr>
</thead>
<tbody>
@foreach($categories as $category)
<tr>
<td>
<div class="d-flex">
<span class="avatar avatar-md avatar-square bg-light">
@if($category->image)
<img
src="{{ asset('storage/'. $category->image) }}"
class="w-100 h-100"
alt="{{ $category->name }}">
@else
<img
src="{{asset('assets/admin/images/product-default-image.png')}}"
class="w-100 h-100"
alt="{{ $category->name }}">
@endif
</span>
<div class="ms-2">
<p class="fw-semibold mb-0 name-limit">
<a href="{{ route('admin.categories.show', $category->id) }}">{{ $category->name }}</a>
</p>
<p class="fs-12 text-muted mb-0 ">#{{ $category->id }}</p>
</div>
</div>
</td>
<td>{{ $category->products->count() }}</td>
<td>
@if($category->is_active)
<span
class="badge bg-success-transparent">
فعال
</span>
@else
<span
class="badge bg-danger-transparent">
غیر فعال
</span>
@endif
</td>
<td>{{ $category->created_at->toJalali()->format('H:i Y-m-d') }}</td>
<td>
<div class="hstack gap-2 fs-15">
<a href="{{ route('admin.categories.show', $category->id) }}"
class="btn btn-primary-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="مشاهده">
<i class="ri-eye-line"></i>
</a>
<a href="{{route('admin.categories.edit', $category->id)}}"
class="btn btn-secondary-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="ویرایش">
<i class="ti ti-pencil"></i>
</a>
<form action="{{ route('admin.categories.destroy', $category->id) }}"
method="POST"
onsubmit="return confirm('آیا از حذف این دسته‌بندی مطمئن هستید؟')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-icon btn-sm btn-danger-light">
<i class="ri-delete-bin-line"></i>
</button>
</form>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Pagination -->
{{$categories->links()}}
</div>
</div>
@endsection
@@ -0,0 +1,159 @@
@extends('admin.layouts.app')
@section('content')
<div class="main-content app-content">
<div class="container-fluid pt-4">
<div class="row">
<div class="col-xl-12">
<div class="card custom-card mb-4">
<div class="card-header">
<div class="card-title">اطلاعات دسته‌بندی</div>
</div>
<div class="card-body">
<div class="row gx-4 gy-4 align-items-center">
<div class="col-md-8">
<h2 class="fw-bold mb-3">{{ $category->name }}</h2>
<dl class="row mb-4">
<dt class="col-sm-4 fw-semibold">توضیحات:</dt>
<dd class="col-sm-8">{{ $category->description }}</dd>
</dl>
<div class="row text-center text-md-start">
<div class="col-6 col-md-4 mb-3">
<div class="p-3 border rounded bg-light">
<div class="fs-4 fw-bold">{{ $category->products->count() }}</div>
<div class="text-muted">تعداد محصولات</div>
</div>
</div>
<div class="col-6 col-md-4 mb-3">
<div class="p-3 border rounded bg-light">
<div class="fs-4 fw-bold">
@if($category->is_active)
<span class="text-success pe-3 py-2 fs-6">
فعال
</span>
@else
<span class="text-danger pe-3 py-2 fs-6">
غیر فعال
</span>
@endif
</div>
<div class="text-muted">وضعیت دسته‌بندی</div>
</div>
</div>
<!-- اگر اطلاعات وضعیت دیگه‌ای داری می‌تونی اینجا اضافه کنی -->
</div>
</div>
</div>
</div>
</div>
<!-- Products List -->
<div class="card custom-card">
<div class="card-header">
<div class="card-title">محصولات دسته‌بندی</div>
</div>
<div class="table-responsive">
<table class="table text-nowrap table-bordered">
<thead>
<tr>
<th>محصول</th>
<th>دسته‌بندی فعلی</th>
<th>قیمت</th>
<th>قیمت تخفیف‌خورده</th>
<th>موجودی</th>
<th>وضعیت</th>
<th>منتشر شده</th>
<th>اقدامات</th>
</tr>
</thead>
<tbody>
@foreach($products as $product)
<tr>
<td>
<div class="d-flex align-items-center">
<span class="avatar avatar-md avatar-square bg-light">
@if($product->defaultImage )
<img
src="{{ asset('storage/'.$product->defaultImage->file->path) }}"
class="w-100 h-100"
alt="{{ $product->name }}"
>
@else
<img
src="{{ asset('images/no-image.png') }}"
class="w-100 h-100"
alt="{{ $product->name }}"
>
@endif
</span>
<div class="ms-2">
<p class="fw-semibold mb-0">{{ $product->name}}</p>
<p class="fs-12 text-muted mb-0 description-limit">{{ $product->description }}</p>
</div>
</div>
</td>
<td>{{ $product->productCategory->name }}</td>
<td>{{number_format($product->price)}} تومان</td>
<td>
<span class="text-success"> {{ number_format(discount($product->price , $product->discount)) }}تومان</span>
</td>
<td>{{ $product->qty }}</td>
<td>
@switch($product->status)
@case(\App\Enums\ProductStatus::DISABLE)
<span class="badge bg-danger-transparent">غیر فعال</span>
@break
@case(\App\Enums\ProductStatus::DRAFT)
<span class="badge bg-warning-transparent">پیش نویس</span>
@break
@case(\App\Enums\ProductStatus::PUBLISHED)
<span class="badge bg-primary-transparent"> منتشر شده</span>
@break
@case(\App\Enums\ProductStatus::ENABLE)
<span class="badge bg-success-transparent"> فعال</span>
@break
@endswitch
</td>
<td>{{ $category->created_at->toJalali()->format('H:i Y-F-d') }}</td>
<td>
<div class="hstack gap-2 fs-15">
<a href="{{ route('admin.product.show', $product->id) }}"
class="btn btn-primary-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="مشاهده">
<i class="ri-eye-line"></i>
</a>
<a href="{{ route('admin.product.edit', $product->id) }}"
class="btn btn-secondary-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="ویرایش">
<i class="ti ti-pencil"></i>
</a>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection