Fix: Сохранение и загрузка групп пользователя
✅ $user->load('groups') для eager loading ✅ Проверка !empty(trim()) для groups поля ✅ Не очищаем группы если поле пустое ✅ Загрузка существующих тегов при инициализации Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
df8172070a
commit
3dfe1e5a2c
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue