113 lines
7.1 KiB
PHP
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>
|