113 lines
7.1 KiB
PHP

<x-layouts.admin>
<x-slot name="title">用户可访问页面</x-slot>
<x-slot name="content">
<div class="my-6" data-settings-workspace>
@include('system_settings.partials.navigation')
<nav class="mb-4 text-sm" aria-label="页面位置"><a class="settings-accent" href="{{ route('system-settings.permissions.index') }}">权限管理</a><span class="mx-2" aria-hidden="true">/</span><span aria-current="page">用户可访问页面</span></nav>
<div class="mb-5 rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-gray-700">
优先按分组设置页面。同一用户的多个分组权限合并,用户单独配置覆盖分组;主管理员始终拥有全部页面权限。
</div>
<form method="GET" action="{{ route('system-settings.sidebar.edit') }}" class="mb-5 rounded-xl border border-gray-200 bg-white p-5">
<label class="block max-w-xl">
<span class="text-sm font-semibold text-gray-700">权限对象</span>
<select name="subject" data-settings-subject class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm settings-field-focus">
@foreach ($subjects as $key => $label)
<option value="{{ $key }}" @selected($subject === $key)>{{ $label }}</option>
@endforeach
</select>
</label>
</form>
<form method="POST" action="{{ route('system-settings.sidebar.update') }}" class="rounded-xl border border-gray-200 bg-white p-5">
@csrf
@method('PATCH')
<input type="hidden" name="subject" value="{{ $subject }}">
@if ($errors->any())
<div class="mb-5 rounded-lg bg-red-50 px-4 py-3 text-sm text-red-700">
@foreach ($errors->all() as $error)<p>{{ $error }}</p>@endforeach
</div>
@endif
<div class="mb-5 flex flex-wrap items-center justify-between gap-3 border-b border-gray-100 pb-4">
<div>
<h2 class="text-sm font-semibold text-gray-800">{{ $subjects[$subject] }}</h2>
<p class="mt-1 text-sm text-gray-600">{{ $source }}</p>
@if ($canInherit && $configured)<p class="mt-1 text-sm text-gray-600">当前为用户自定义权限,分组变化不会覆盖此配置。</p>@endif
</div>
<div class="flex gap-2">
<button type="button" onclick="document.querySelectorAll('[data-sidebar-permission]').forEach(el => el.checked = true)" class="rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-600 hover:bg-gray-50">全选</button>
<button type="button" onclick="document.querySelectorAll('[data-sidebar-permission]').forEach(el => el.checked = false)" class="rounded-lg border border-gray-300 px-3 py-2 text-sm text-gray-600 hover:bg-gray-50">清空</button>
</div>
</div>
<div class="grid grid-cols-1 items-start gap-4 lg:grid-cols-2">
@foreach ($navigation as $section)
<details class="group rounded-xl border border-gray-200 bg-white">
<summary class="flex cursor-pointer list-none items-center gap-3 p-4 font-semibold text-gray-800">
<span class="material-icons-outlined text-xl settings-accent">{{ $section['icon'] }}</span>
<span>{{ $section['title'] }}</span>
<span class="ml-auto text-xs font-normal text-gray-400">点击展开二级目录</span>
<span class="material-icons-outlined text-gray-400 transition-transform group-open:rotate-180">expand_more</span>
</summary>
<div class="border-t border-gray-100 p-4">
<label class="mb-3 flex items-center gap-2 rounded-lg bg-lilac-100 px-3 py-2 text-sm font-semibold settings-accent">
<input
type="checkbox"
name="permissions[]"
value="{{ $section['slug'] }}"
data-sidebar-permission
@checked(in_array($section['slug'], $selected, true))
class="rounded border-gray-300 settings-accent settings-field-focus"
>
允许整个一级目录
</label>
@if (! empty($section['pages']))
<div class="grid grid-cols-1 gap-2 sm:grid-cols-2">
@foreach (collect($section['pages'])->flatMap(fn ($entry) => empty($entry['children']) ? [$entry] : $entry['children']) as $page)
@php $pageKey = $section['slug'] . '/' . $page['slug']; @endphp
<label class="flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm text-gray-600 hover:bg-gray-50">
<input
type="checkbox"
name="permissions[]"
value="{{ $pageKey }}"
data-sidebar-permission
@checked(in_array($pageKey, $selected, true))
class="rounded border-gray-300 settings-accent settings-field-focus"
>
{{ $page['title'] }}
</label>
@endforeach
</div>
@else
<p class="text-sm text-gray-400">此一级目录没有二级目录。</p>
@endif
</div>
</details>
@endforeach
</div>
<div class="mt-6 flex justify-end border-t border-gray-100 pt-5">
@if ($canInherit && $configured)
<button type="submit" name="mode" value="inherit" class="mr-4 settings-accent">恢复继承分组权限</button>
@endif
<button type="submit" class="rounded-lg settings-primary">保存权限</button>
</div>
</form>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('#sidenav-main details').forEach(function (item) {
item.removeAttribute('open');
});
});
</script>
</x-slot>
</x-layouts.admin>