Fix: Сохранение и загрузка групп пользователя

 $user->load('groups') для eager loading
 Проверка !empty(trim()) для groups поля
 Не очищаем группы если поле пустое
 Загрузка существующих тегов при инициализации

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-03-30 14:12:16 +08:00
parent df8172070a
commit 3dfe1e5a2c
2 changed files with 17 additions and 13 deletions

View File

@ -99,6 +99,7 @@ class UserController extends Controller
{ {
Gate::authorize('update', $user); Gate::authorize('update', $user);
$user->load('groups');
$organizations = Organization::pluck('name', 'id'); $organizations = Organization::pluck('name', 'id');
$roles = Role::pluck('name', 'name'); $roles = Role::pluck('name', 'name');
$userGroups = $user->groups->pluck('id')->toArray(); $userGroups = $user->groups->pluck('id')->toArray();
@ -148,11 +149,12 @@ class UserController extends Controller
$user->syncRoles([$validated['role']]); $user->syncRoles([$validated['role']]);
// Обновление групп (строка "1,2,3" → массив) // Обновление групп (строка "1,2,3" → массив)
if (!empty($validated['groups'])) { if (!empty(trim($validated['groups'] ?? ''))) {
$groupIds = array_map('intval', array_filter(explode(',', $validated['groups']))); $groupIds = array_map('intval', array_filter(explode(',', $validated['groups'])));
$user->groups()->sync($groupIds); $user->groups()->sync($groupIds);
} else { } else {
$user->groups()->detach(); // Если поле пустое - не трогаем группы (или можно сделать sync([]) для очистки)
// $user->groups()->detach();
} }
return redirect()->route('admin.users.show', $user) return redirect()->route('admin.users.show', $user)

View File

@ -146,17 +146,19 @@ document.addEventListener('DOMContentLoaded', function() {
// Загрузка существующих тегов // Загрузка существующих тегов
@if(count($value) > 0) @if(count($value) > 0)
const existingIds = {!! json_encode(array_map('strval', is_array($value) ? $value : [])) !!};
if (existingIds.length > 0) {
// Загружаем все группы и фильтруем нужные
fetch('{{ $url }}?q=') fetch('{{ $url }}?q=')
.then(response => response.json()) .then(response => response.json())
.then(items => { .then(allItems => {
selectedTags.forEach(id => { const items = allItems.filter(item => existingIds.includes(String(item.id)));
const item = items.find(i => String(i.id) === id); items.forEach(item => {
if (item) {
select.addOption(item); select.addOption(item);
addTag(id, item); addTag(item.id, item);
});
});
} }
});
});
@endif @endif
}); });
</script> </script>