fix: update user side

This commit is contained in:
2026-08-19 15:44:57 -07:00
parent fa99edbe7c
commit 2e270a8b8c
18 changed files with 561 additions and 339 deletions
+158 -9
View File
@@ -1,10 +1,159 @@
@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 p-3"><form method="GET"><div class="row g-2 align-items-center"><div class="col-md-5"><input class="form-control" name="search" value="{{ request('search') }}" placeholder="جستجو نام، نام خانوادگی یا ایمیل"></div><div class="col-md-3"><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-2"><a href="{{ route('admin.admins.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></tr></thead><tbody>
@forelse(($admins ?? []) as $admin)<tr><td><div class="fw-semibold">{{ $admin->first_name }} {{ $admin->last_name }}</div><small class="text-muted">#{{ $admin->id }}</small></td><td>{{ $admin->email }}</td><td>@if($admin->status)<span class="badge bg-success-transparent">فعال</span>@else<span class="badge bg-danger-transparent">غیرفعال</span>@endif</td><td>{{ isset($admin->last_login_at) && $admin->last_login_at ? $admin->last_login_at->toJalali()->format('Y/m/d H:i') : '-' }}</td><td>{{ isset($admin->created_at) ? $admin->created_at->toJalali()->format('Y/m/d H:i') : '-' }}</td><td><div class="hstack gap-2"><a href="{{ route('admin.admins.edit',$admin) }}" class="btn btn-secondary-light btn-icon btn-sm" title="ویرایش"><i class="ri-edit-line"></i></a><form method="POST" action="{{ route('admin.admins.destroy',$admin) }}" 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="6" class="text-center py-5 text-muted">مدیری ثبت نشده است.</td></tr>@endforelse</tbody></table></div></div>
{{ ($admins ?? collect())->links() }}
</div>@endsection
@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('success')
<span class="text-success">{{ $message }}</span>
@enderror
<!-- Filter + Search -->
<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">
<!-- Left: Add Admin + 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="name_asc" @selected(request()->missing('sort') || request()->input('sort') == 'name_asc')>
الفبا (الف - ی)
</option>
<option
value="name_desc" @selected(request()->input('sort') == 'name_desc')>
الفبا (ی - الف)
</option>
<option value="newest" @selected(request()->input('sort') == 'newest')>
جدیدترین
</option>
<option
value="name_desc" @selected(request()->input('sort') == 'email')>
ایمیل
</option>
</select>
</div>
<!-- Right: Search -->
@if(auth('admin')->user()->permission?->admin_create)
<a href="{{ route('admin.admins.create') }}"
class="btn btn-primary me-2">
<i class="ri-add-line me-1 fw-medium align-middle"></i>
ایجاد مدیر
</a>
@endif
</div>
</form>
</div>
</div>
</div>
</div>
<!-- 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>نام کاربری</th>
<th>ایمیل</th>
<th>وضعیت</th>
<th>آخرین ورود</th>
<th>تاریخ ایجاد</th>
<th>اقدامات</th>
</tr>
</thead>
<tbody>
@foreach($admins as $admin)
<tr>
<td>{{ $admin->first_name }}</td>
<td>{{ $admin->last_name }}</td>
<td>{{ $admin->username }}</td>
<td>{{ $admin->email }}</td>
<td>
@switch($admin->status)
@case(\App\Enums\AdminStatus::DISABLE)
<span class="badge bg-warning-transparent">غیرفعال</span>
@break
@case(\App\Enums\AdminStatus::ENABLE)
<span class="badge bg-primary-transparent">فعال</span>
@break
@endswitch
</td>
<td>
@if($admin->last_login_at)
{{ $admin->last_login_at->toJalali()->format('H:i d-F-Y') }}
@else
-
@endif
</td>
<td>{{ $admin->created_at->toJalali()->format('H:i d-F-Y') }}</td>
<td>
<div class="hstack gap-2 fs-15">
@if(auth('admin')->user()->permission?->admin_edit)
<a href="{{ route('admin.admins.edit', $admin->id) }}"
class="btn btn-secondary-light btn-icon btn-sm"
title="ویرایش">
<i class="ti ti-pencil"></i>
</a>
@endif
@if(auth('admin')->user()->permission?->admin_delete)
<form action="{{ route('admin.admins.destroy', $admin->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>
@endif
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Pagination -->
{{ $admins->links() }}
</div>
</div>
@endsection
+34 -28
View File
@@ -49,21 +49,24 @@
<!-- End::slide -->
<!-- Start::slide -->
<li class="slide ">
<a href=""
class="side-menu__item {{activeAdminSidebar(['admin.users.index', 'admin.users.edit', 'admin.users.show'])}}">
@if(auth('admin')->user()->permission?->admin_view)
<li class="slide ">
<a href="{{ route('admin.users.index') }}"
class="side-menu__item {{activeAdminSidebar(['admin.users.index', 'admin.users.edit'])}}">
<svg xmlns="http://www.w3.org/2000/svg" class="side-menu__icon" width="1em"
height="1em" viewBox="0 0 24 24">
<path fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="1.5"
d="M13 2h-2C7.229 2 5.343 2 4.172 3.172S3 6.229 3 10v4c0 3.771 0 5.657 1.172 6.828S7.229 22 11 22h2c3.771 0 5.657 0 6.828-1.172S21 17.771 21 14v-4c0-3.771 0-5.657-1.172-6.828S16.771 2 13 2m8 10H3m12-5H9m6 10H9"
color="currentColor"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" class="side-menu__icon"
width="1em"
height="1em" viewBox="0 0 24 24">
<path fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="1.5"
d="M13 2h-2C7.229 2 5.343 2 4.172 3.172S3 6.229 3 10v4c0 3.771 0 5.657 1.172 6.828S7.229 22 11 22h2c3.771 0 5.657 0 6.828-1.172S21 17.771 21 14v-4c0-3.771 0-5.657-1.172-6.828S16.771 2 13 2m8 10H3m12-5H9m6 10H9"
color="currentColor"></path>
</svg>
<span class="side-menu__label">مدیریت کاربران</span>
</a>
</li>
<span class="side-menu__label">مدیریت کاربران</span>
</a>
</li>
@endif
<!-- End::slide -->
<!-- Start::slide -->
@@ -120,23 +123,26 @@
<!-- End::slide -->
<!-- Start::slide -->
<li class="slide active">
<a href="{{route('admin.admins.index')}}"
class="side-menu__item {{activeAdminSidebar(['admin.admins.index','admin.admins.show', 'admin.admins.edit', 'admin.admins.create'])}}">
<svg xmlns="http://www.w3.org/2000/svg"
class="side-menu__icon"
width="1em"
height="1em"
viewBox="0 0 24 24">
<path fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="1.5"
d="M12 12a5 5 0 1 0-5-5a5 5 0 0 0 5 5Zm-7 9a7 7 0 0 1 14 0Z"/>
</svg>
<span class="side-menu__label">مدیریت مدیران</span>
</a>
</li>
@if(auth('admin')->user()->permission?->admin_view)
<li class="slide active">
<a href="{{route('admin.admins.index')}}"
class="side-menu__item {{activeAdminSidebar(['admin.admins.index','admin.admins.show', 'admin.admins.edit', 'admin.admins.create'])}}">
<svg xmlns="http://www.w3.org/2000/svg"
class="side-menu__icon"
width="1em"
height="1em"
viewBox="0 0 24 24">
<path fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="1.5"
d="M12 12a5 5 0 1 0-5-5a5 5 0 0 0 5 5Zm-7 9a7 7 0 0 1 14 0Z"/>
</svg>
<span class="side-menu__label">مدیریت مدیران</span>
</a>
</li>
@endif
<!-- End::slide -->
<li class="slide active">
<a href=""
class="side-menu__item {{activeAdminSidebar(['admin.setting.index', 'admin.settings.edit'])}}">
+253 -4
View File
@@ -1,5 +1,254 @@
@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-6"><input class="form-control" name="search" value="{{ request('search') }}" placeholder="نام، نام خانوادگی، ایمیل یا موبایل"></div><div class="col-md-3"><select name="sort" class="form-control"><option value="newest">جدیدترین ثبت‌نام</option><option value="oldest" @selected(request('sort')==='oldest')>قدیمی‌ترین</option><option value="name" @selected(request('sort')==='name')>نام</option></select></div><div class="col-md-2"><button class="btn btn-light w-100">جستجو</button></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></tr></thead><tbody>@forelse(($users ?? []) as $user)<tr><td>{{ trim(($user->first_name ?? '').' '.($user->last_name ?? '')) ?: '-' }}</td><td>{{ $user->email }}</td><td>{{ $user->mobile ?? '-' }}</td><td>{{ isset($user->created_at) ? $user->created_at->toJalali()->format('Y/m/d H:i') : '-' }}</td><td><div class="hstack gap-2"><a href="{{ route('admin.users.show',$user) }}" class="btn btn-primary-light btn-icon btn-sm" title="مشاهده"><i class="ri-eye-line"></i></a><a href="{{ route('admin.users.edit',$user) }}" class="btn btn-secondary-light btn-icon btn-sm" title="ویرایش/تغییر رمز"><i class="ri-edit-line"></i></a><form method="POST" action="{{ route('admin.users.destroy',$user) }}" onsubmit="return confirm('آیا از حذف کاربر مطمئن هستید؟')">@csrf @method('DELETE')<button class="btn btn-danger-light btn-icon btn-sm" title="حذف"><i class="ri-delete-bin-line"></i></button></form></div></td></tr>@empty<tr><td colspan="5" class="text-center py-5 text-muted">کاربری یافت نشد.</td></tr>@endforelse</tbody></table></div></div>{{ ($users ?? collect())->links() }}</div>@endsection
@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">
@error('general')
<span class="alert alert-danger">{{ $message }}</span>
@enderror
<div class="container-fluid pt-4">
<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">
<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="" selected>
مرتب‌سازی بر اساس
</option>
<option
value="newest"
@selected(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>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Users 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 scope="col">عکس</th>
<th scope="col">نام و نام خانوادگی</th>
<th scope="col">وضعیت تأهل</th>
<th scope="col">نام و نام خانوادگی همسر</th>
<th scope="col">ایمیل</th>
<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>
<span class="avatar avatar-md avatar-square bg-light">
@if($user->file?->id)
<img src="{{ getFileUrl($user->file?->id) }}"
class="w-100 h-100"
alt="{{ getUserFullName($user) }}">
@else
<img
src="{{ asset('assets/admin/images/faces/DefaultAvatar.jpg') }}"
class="w-100 h-100"
alt="{{ getUserFullName($user) }}"
>
@endif
</span>
</td>
<td>
<div class="d-flex align-items-center">
<div class="flex-fill">
<span class="fw-medium fs-14 d-block">
{{ getUserFullName($user) }}
</span>
</div>
</div>
</td>
<td>
@if($user->marital_status == \App\Enums\UserMaritalStatus::SINGLE)
<span class="badge bg-primary-transparent">
مجرد
</span>
@elseif($user->marital_status == \App\Enums\UserMaritalStatus::MARRIED)
<span class="badge bg-success-transparent">
متأهل
</span>
@elseif($user->marital_status == \App\Enums\UserMaritalStatus::SEPARATED)
<span class="badge bg-warning-transparent">
جداشده
</span>
@else
-
@endif
</td>
<td>
@if($user->spouse_name)
{{ $user->spouse_name }}
@else
-
@endif
</td>
<td>
{{ $user->email }}
</td>
<td>
{{$user->province}}
</td>
<td>
{{$user->city}}
</td>
<td>
{{ $user->mobile }}
</td>
<td>
{{ $user->created_at->toJalali()->format('H:i Y-m-d') }}
</td>
<td>
<div class="hstack gap-2 fs-15">
@if(auth('admin')->user()->permission?->user_edit)
<a href="{{ route('admin.users.edit', $user->id) }}"
class="btn btn-secondary-light btn-icon btn-sm"
title="ویرایش">
<i class="ti ti-pencil"></i>
</a>
@endif
@if(auth('admin')->user()->permission?->user_delete)
<form action="{{ route('admin.users.destroy', $user->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>
@endif
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
{{ $users->links() }}
</div>
</div>
</div>
</div>
@endsection