This commit is contained in:
2026-04-06 18:44:02 +05:00
commit d775fbb9ba
431 changed files with 31234 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
@extends('layouts.admin')
@section('content')
<div class="container-fluid">
<div class="card">
<div class="card-header">
<h5>Создание пользователя</h5>
</div>
<div class="card-body">
<form action="{{ route('admin.users.store') }}" method="POST">
@csrf
<div class="mb-3">
<label class="form-label">Имя <span class="text-danger">*</span></label>
<input type="text"
class="form-control @error('name') is-invalid @enderror"
name="name"
value="{{ old('name') }}">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Email <span class="text-danger">*</span></label>
<input type="email"
class="form-control @error('email') is-invalid @enderror"
name="email"
value="{{ old('email') }}">
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Телефон</label>
<input type="text"
class="form-control @error('phone') is-invalid @enderror"
name="phone" id="phone-mask" placeholder="+7(___)-___-__-__"
value="{{ old('phone') }}">
@error('phone')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Пароль <span class="text-danger">*</span></label>
<input type="password"
class="form-control @error('password') is-invalid @enderror"
name="password">
<small class="text-muted">Минимум 8 символов</small>
@error('password')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Подтверждение пароля <span class="text-danger">*</span></label>
<input type="password"
class="form-control @error('password_confirmation') is-invalid @enderror"
name="password_confirmation">
@error('password_confirmation')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Роль <span class="text-danger">*</span></label>
<select class="form-select @error('role_id') is-invalid @enderror" name="role_id">
<option value="">Выберите роль</option>
@foreach($roles as $role)
<option value="{{ $role->id }}" {{ old('role_id') == $role->id ? 'selected' : '' }}>
{{ $role->name }}
</option>
@endforeach
</select>
@error('role_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="d-flex gap-2 mb-4">
<button type="submit" class="btn btn-dark-green p-2 d-flex gap-1 align-items-center justify-content-center" title="Добавить пользователя">
<img src="{{ asset('assets/images/icons/add-folder-svgrepo-com.svg') }}" alt="Добавить" width="20" height="20">
Добавить
</button>
<a href="{{ route('admin.users') }}" class="btn btn-orange p-2 d-flex gap-1 align-items-center">
<img src="{{ asset('assets/images/icons/delete-svgrepo-com.svg') }}" alt="Отмена" width="20" height="20">
Отмена
</a>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('script')
<script src="{{ asset('assets/js/phone_mask.js') }}"></script>
@endsection

View File

@@ -0,0 +1,98 @@
@extends('layouts.admin')
@section('content')
<div class="container-fluid">
<div class="card">
<div class="card-header">
<h5>Редактирование пользователя: {{ $user->name }}</h5>
</div>
<div class="card-body">
<form action="{{ route('admin.users.update', $user->id) }}" method="POST">
@csrf
@method('PUT')
<div class="mb-3">
<label class="form-label">Имя <span class="text-danger">*</span></label>
<input type="text"
class="form-control @error('name') is-invalid @enderror"
name="name"
value="{{ old('name', $user->name) }}">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Email <span class="text-danger">*</span></label>
<input type="email"
class="form-control @error('email') is-invalid @enderror"
name="email"
value="{{ old('email', $user->email) }}">
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Телефон</label>
<input type="text"
class="form-control @error('phone') is-invalid @enderror"
name="phone" id="phone-mask" placeholder="+7(___)-___-__-__"
value="{{ old('phone', $user->phone) }}">
@error('phone')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Новый пароль</label>
<input type="password"
class="form-control @error('password') is-invalid @enderror"
name="password">
<small class="text-muted">Оставьте пустым, если не хотите менять пароль. Минимум 8 символов</small>
@error('password')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Подтверждение пароля</label>
<input type="password"
class="form-control @error('password_confirmation') is-invalid @enderror"
name="password_confirmation">
</div>
<div class="mb-3">
<label class="form-label">Роль <span class="text-danger">*</span></label>
<select class="form-select @error('role_id') is-invalid @enderror" name="role_id">
<option value="">Выберите роль</option>
@foreach($roles as $role)
<option value="{{ $role->id }}" {{ old('role_id', $user->role_id) == $role->id ? 'selected' : '' }}>
{{ $role->name }}
</option>
@endforeach
</select>
@error('role_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="d-flex gap-2 mb-4">
<button type="submit" class="btn btn-dark-green p-2 d-flex gap-1 align-items-center justify-content-center" title="Сохранить изменения">
<img src="{{ asset('assets/images/icons/edit-svgrepo-com.svg') }}" alt="Сохранить" width="20" height="20">
Сохранить
</button>
<a href="{{ route('admin.users') }}" class="btn btn-orange p-2 d-flex gap-1 align-items-center">
<img src="{{ asset('assets/images/icons/delete-svgrepo-com.svg') }}" alt="Отмена" width="20" height="20">
Отмена
</a>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('script')
<script src="{{ asset('assets/js/phone_mask.js') }}"></script>
@endsection

View File

@@ -0,0 +1,104 @@
@extends('layouts.admin')
@section('content')
<div class="container-fluid">
@if(session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="bi bi-check-circle-fill me-2"></i> {{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
@if(session('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="bi bi-exclamation-triangle-fill me-2"></i> {{ session('error') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
<div class="users-table col-12">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center flex-wrap gap-2">
<h5>Пользователи</h5>
<div class="d-flex gap-2">
<form method="GET" action="{{ route('admin.users') }}" class="d-flex gap-2">
<input type="text" id="search"
name="search"
class="form-control form-control-sm"
placeholder="Поиск по имени или email..."
value="{{ request('search') }}"
style="width: 250px;">
<button type="submit" class="btn btn-sm btn-dark-green">
<i class="bi bi-search"></i> Найти
</button>
@if(request('search'))
<a href="{{ route('admin.users') }}" class="btn btn-sm btn-orange">
<i class="bi bi-x-lg"></i> Сбросить
</a>
@endif
</form>
<a href="{{ route('admin.users.create') }}" class="btn btn-sm btn-dark-green">
<i class="bi bi-plus-lg"></i> Добавить пользователя
</a>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>Имя</th>
<th>Email</th>
<th>Телефон</th>
<th>Роль</th>
<th>Дата регистрации</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
@forelse ($users as $user)
<tr>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->phone ?? '—' }}</td>
<td>
<span class="badge bg-{{ $user->role?->slug === 'super_admin' ? 'danger' : ($user->role?->slug === 'shop_admin' ? 'warning' : 'secondary') }}">
{{ $user->role?->name ?? 'Нет роли' }}
</span>
</td>
<td>{{ $user->created_at->format('d.m.Y H:i') }}</td>
<td class="text-center">
<div class="d-flex gap-2 justify-content-center">
<a href="{{ route('admin.users.edit', $user->id) }}" class="btn btn-orange p-1" title="Редактировать">
<img src="{{ asset('assets/images/icons/edit-svgrepo-com.svg') }}" alt="Редактировать" width="20" height="20">
</a>
@if($user->id !== auth()->id())
<form action="{{ route('admin.users.destroy', $user->id) }}" method="POST"
onsubmit="return confirm('Удалить пользователя «{{ $user->name }}»?');">
@csrf
@method('DELETE')
<button class="btn btn-danger p-1" type="submit" title="Удалить">
<img src="{{ asset('assets/images/icons/delete-svgrepo-com.svg') }}" alt="Удалить" width="20" height="20">
</button>
</form>
@endif
</div>
</td>
</tr>
@empty
<tr>
<td colspan="7" class="text-center text-muted">Пользователи не найдены</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="ps-2 pe-2">
{{ $users->links() }}
</div>
@endsection