feat: add admin panel layout, dashboard, and user management

This commit is contained in:
2026-08-19 13:49:32 +03:30
parent 368fda6375
commit eebededa4d
188 changed files with 70341 additions and 7 deletions
+110
View File
@@ -0,0 +1,110 @@
@extends('admin.layouts.app')
@section('breadcrumb')
<div>
<div>
<h1 class="page-title fw-medium fs-18 mb-2">
ویرایش کاربر
{{getUserFullName($user)}}
</h1>
<div class="">
<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>
</div>
@endsection
@section('content')
<div class="container-fluid pt-4">
@if(session('success'))
<span style="color: green">
{{session('success')}}
</span>
@endif
<div class="row">
<div class="col-xl-12">
<form
action="{{route('admin.users.update', $user)}}"
method="POST"
enctype="multipart/form-data"
>
@csrf
@method('PUT')
<div class="card custom-card">
<div class="card-header">
<div class="card-title">ویرایش کاربر</div>
</div>
<div class="card-body">
<!-- User Fields -->
<div class="row gy-3">
<div class="col-xl-6">
<label class="form-label">نام</label>
<input
type="text"
class="form-control"
name="first_name"
value="{{old('first_name' , $user->first_name)}}"
placeholder="نام را وارد کنید"
>
@error('first_name')
<span style="color: red">{{$message}}</span>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">نام خانوادگی</label>
<input type="text" class="form-control" name="last_name"
value="{{old('last_name' , $user->last_name)}}"
placeholder="نام خانوادگی را وارد کنید">
@error('last_name')
<span style="color: red">{{$message}}</span>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">ایمیل</label>
<input type="email" class="form-control" name="email"
value="{{old('email' , $user->email)}}"
placeholder="ایمیل را وارد کنید">
@error('email')
<span style="color: red">{{$message}}</span>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">شماره موبایل</label>
<input type="text" class="form-control" name="mobile"
value="{{old('mobile' , $user->mobile)}}"
placeholder="شماره موبایل را وارد کنید">
@error('mobile')
<span style="color: red">{{$message}}</span>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">رمز عبور (در صورت تغییر)</label>
<input type="text" class="form-control" name="password"
placeholder="رمز عبور را وارد کنید">
@error('password')
<span style="color: red">{{$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>
@endsection
+152
View File
@@ -0,0 +1,152 @@
@extends('admin.layouts.app')
@section('breadcrumb')
<div>
<h1 class="page-title fw-medium fs-18 mb-2">لیست کاربران</h1>
<div class="">
<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="container-fluid pt-4">
<!-- Page Header Close -->
<div class="row">
<div class="col-xl-12">
<div class="card custom-card">
<div class="card-body p-3">
<form>
<div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
<!-- Left: Search + Sort -->
<div class="d-flex flex-wrap gap-1 project-list-main align-items-center">
<div class="d-flex me-2">
<input
class="form-control me-2"
type="search"
name="search"
placeholder="جستجوی کاربر"
value="{{request()->input('search')}}"
aria-label="جستجوی کاربر"
/>
<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="name_asc" @selected(request()->input('sort') == 'name_asc')>
الفبا (الف - ی)
</option>
<option value="name_desc" @selected(request()->input('sort') == 'name_desc')>
الفبا (ی - الف)
</option>
</select>
</div>
<!-- Right: Trash Button -->
<div class="d-flex align-items-center gap-2">
<a href="{{ route('admin.users.trash') }}" class="btn btn-danger-light d-flex align-items-center">
<i class="ri-delete-bin-3-line me-1 fw-medium align-middle"></i>
سطل زباله
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Start::row-2 -->
<div class="row">
@error('user_delete')
<span style="color: red">{{$message}}</span>
@enderror
<div class="col-xl-12">
<div class="card custom-card ">
<div class="table-responsive">
<!-- Removed .table-responsive -->
<table class="table text-nowrap">
<thead>
<tr>
<th scope="col">نام و نام خانوادگی</th>
<th scope="col">ایمیل</th>
<th scope="col">شماره موبایل</th>
<th scope="col">تاریخ ثبت نام</th>
<th scope="col">عملیات</th>
</tr>
</thead>
<tbody>
@foreach($users as $user)
<tr>
<td>
<div class="d-flex align-items-center">
<div class="flex-fill">
<a
href="javascript:void(0);"
class="fw-medium fs-14 d-block text-truncate"
>
{{getUserFullName($user)}}
</a>
</div>
</div>
</td>
<td>{{$user->email}}</td>
<td>{{$user->mobile}}</td>
<td>{{$user->created_at->toJalali()->format('H:i Y-m-d')}}</td>
<td>
<div class="btn-list">
<a href="{{route('admin.users.show', $user->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.users.edit' , $user->id)}}"
class="btn btn-secondary-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="ویرایش">
<i class="ri-edit-line"></i>
</a>
<a href="javascript:void(0);"
onclick="if(confirm('آیا از حذف این کاربر مطمئن هستید؟')) { document.getElementById('delete-form-{{$user->id}}').submit(); }"
class="btn btn-pink-light btn-icon btn-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="حذف">
<i class="ri-delete-bin-line"></i>
</a>
<form
id="delete-form-{{$user->id}}"
action="{{route('admin.users.destroy' , $user->id)}}"
method="POST"
style="display:none;"
>
@csrf
@method('DELETE')
</form>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- End::row-2 -->
</div>
@endsection
@@ -0,0 +1,53 @@
@extends('admin.layouts.app')
@section('breadcrumb')
<div>
<div>
<h1 class="page-title fw-medium fs-18 mb-2">
جزئیات کاربر
{{getUserFullName($user)}}
</h1>
<div class="">
<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>
</div>
@endsection
@section('content')
<div class="container-fluid pt-4">
<!-- User Info Card -->
<div class="card custom-card mb-4">
<div class="card-header">
<div class="card-title">اطلاعات کاربر</div>
</div>
<div class="d-flex align-items-center p-3 pt-0">
<div class="card-body flex-grow-1">
<dl class="row mb-0">
<dt class="col-sm-3 my-2 fw-semibold">نام کامل:</dt>
<dd class="col-sm-9 my-2">{{getUserFullName($user)}}</dd>
<dt class="col-sm-3 my-2 fw-semibold">ایمیل:</dt>
<dd class="col-sm-9 my-2">{{$user->email}}</dd>
<dt class="col-sm-3 my-2 fw-semibold">شماره تلفن:</dt>
<dd class="col-sm-9 my-2">{{$user->mobile}}</dd>
<dt class="col-sm-3 my-2 fw-semibold">تاریخ ثبت‌نام:</dt>
<dd class="col-sm-9 my-2">{{$user->created_at->toJalali()->format('H:i Y-m-d')}}</dd>
</dl>
</div>
</div>
</div>
</div>
@endsection