From 6599b8d5b64b33c07cc5cc83b56bcb5c97108fe4 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 30 Mar 2026 10:21:17 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=20CRUD=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF?= =?UTF-8?q?=20=D1=81=20=D1=82=D0=B8=D0=BF=D0=B0=D0=BC=D0=B8=20(=D0=BE?= =?UTF-8?q?=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F/?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ create.blade.php — форма создания с выбором типа группы ✅ store метод — сохранение группы ✅ index.blade.php — кнопка создать, фильтр по пользователю ✅ edit метод — фильтр пользователей по организации ✅ Ссылка Группы в сайдбаре для Admin/Manager ✅ Полные маршруты для groups Co-authored-by: Qwen-Coder --- .../Controllers/Admin/GroupUserController.php | 59 +++++++- resources/views/admin/groups/create.blade.php | 127 +++++++++--------- resources/views/admin/groups/index.blade.php | 18 ++- resources/views/partials/_sidebar.blade.php | 5 + routes/web.php | 2 +- 5 files changed, 142 insertions(+), 69 deletions(-) diff --git a/app/Http/Controllers/Admin/GroupUserController.php b/app/Http/Controllers/Admin/GroupUserController.php index 16f3afb..3ca8bbe 100755 --- a/app/Http/Controllers/Admin/GroupUserController.php +++ b/app/Http/Controllers/Admin/GroupUserController.php @@ -24,7 +24,17 @@ class GroupUserController extends Controller $query = Group::with(['organization', 'users']); if ($request->filled('organization_id')) { - $query->where('organization_id', $request->organization_id); + if ($request->organization_id === 'general') { + $query->whereNull('organization_id'); + } else { + $query->where('organization_id', $request->organization_id); + } + } + + if ($request->filled('user_id')) { + $query->whereHas('users', function($q) use ($request) { + $q->where('users.id', $request->user_id); + }); } $groups = $query->orderBy('name')->paginate(20); @@ -33,6 +43,43 @@ class GroupUserController extends Controller return view('admin.groups.index', compact('groups', 'organizations')); } + public function create() + { + Gate::authorize('create', Group::class); + + $organizations = Organization::pluck('name', 'id'); + + return view('admin.groups.create', compact('organizations')); + } + + public function store(Request $request) + { + Gate::authorize('create', Group::class); + + $validated = $request->validate([ + 'group_type' => 'required|in:organization,general', + 'organization_id' => 'nullable|exists:organizations,id', + 'name' => 'required|string|max:255', + 'description' => 'nullable|string', + 'is_active' => 'boolean', + ]); + + // Для группы организации organization_id обязательна + if ($validated['group_type'] === 'organization' && empty($validated['organization_id'])) { + return back()->withErrors(['organization_id' => 'Выберите организацию для группы'])->withInput(); + } + + Group::create([ + 'organization_id' => $validated['group_type'] === 'organization' ? $validated['organization_id'] : null, + 'name' => $validated['name'], + 'description' => $validated['description'] ?? null, + 'is_active' => $validated['is_active'] ?? true, + ]); + + return redirect()->route('admin.groups.index') + ->with('success', 'Группа успешно создана.'); + } + public function show(Group $group) { Gate::authorize('view', $group); @@ -48,7 +95,15 @@ class GroupUserController extends Controller Gate::authorize('update', $group); $group->load(['organization', 'users']); - $users = User::where('organization_id', $group->organization_id)->get(); + + // Получаем доступных пользователей для этой группы + if ($group->organization_id) { + // Группа организации — только пользователи этой организации + $users = User::where('organization_id', $group->organization_id)->get(); + } else { + // Общая группа — все пользователи + $users = User::all(); + } return view('admin.groups.edit', compact('group', 'users')); } diff --git a/resources/views/admin/groups/create.blade.php b/resources/views/admin/groups/create.blade.php index 349bec2..89ab528 100755 --- a/resources/views/admin/groups/create.blade.php +++ b/resources/views/admin/groups/create.blade.php @@ -1,91 +1,92 @@ @extends('layouts.app') - -@section('title', 'Добавить группу') - +@section('title', 'Создать группу') @section('content')
- - +
-
-

Добавить группу

- - Назад - +
+

Создать группу

+ Назад
- - @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
+ + @csrf
-
-
+
+
+
Основная информация
-
Основная информация
+
+ + + Группа организации — только пользователи этой организации. Общая — любые пользователи. + @error('group_type')
{{ $message }}
@enderror +
+ +
- - - @error('name') -
{{ $message }}
- @enderror + + + @error('name')
{{ $message }}
@enderror
- +
- - - @error('description') -
{{ $message }}
- @enderror + +
- -
- - + +
+ +
- -
-
+ +
+
+
Подсказка
-
Организация
-

{{ $organization->name }}

- @if($organization->inn) -

ИНН: {{ $organization->inn }}

- @endif +
Группа организации
+

Привязана к конкретной организации. Можно добавлять только пользователей этой организации.

+
+
Общая группа
+

Не привязана к организации. Можно добавлять любых пользователей системы.

- -
- - - Отмена - -
+ + + Отмена
+ + @endsection diff --git a/resources/views/admin/groups/index.blade.php b/resources/views/admin/groups/index.blade.php index 8be4417..ee02876 100755 --- a/resources/views/admin/groups/index.blade.php +++ b/resources/views/admin/groups/index.blade.php @@ -7,6 +7,9 @@

Группы пользователей

+ @can('create', App\Models\Group::class) + Создать группу + @endcan
@if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif @@ -14,15 +17,24 @@
-
+
-
+
+ +
+
diff --git a/resources/views/partials/_sidebar.blade.php b/resources/views/partials/_sidebar.blade.php index ff41de8..ae6594a 100644 --- a/resources/views/partials/_sidebar.blade.php +++ b/resources/views/partials/_sidebar.blade.php @@ -19,6 +19,11 @@ Пользователи +