Some checks failed
Tests / PHP 8.1 (push) Has been cancelled
Tests / PHP 8.2 (push) Has been cancelled
Tests / PHP 8.3 (push) Has been cancelled
108 lines
6.6 KiB
PHP
108 lines
6.6 KiB
PHP
<x-layouts.admin>
|
|
<x-slot name="title">侧边栏管理</x-slot>
|
|
|
|
<x-slot name="content">
|
|
<div class="my-6">
|
|
@include('system_settings.partials.navigation')
|
|
|
|
<div class="mb-5 rounded-lg border-l-4 border-purple bg-lilac-100 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 shadow-sm">
|
|
<label class="block max-w-xl">
|
|
<span class="text-sm font-semibold text-gray-700">权限对象</span>
|
|
<select name="subject" onchange="this.form.submit()" class="mt-1 w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:border-purple focus:ring-purple">
|
|
@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 shadow-sm">
|
|
@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-lg font-semibold text-gray-800">{{ $subjects[$subject] }}</h2>
|
|
<p class="mt-1 text-sm text-gray-500">{{ $configured ? '当前正在使用自定义权限。' : '当前未单独配置,默认显示全部目录。保存后将启用自定义权限。' }}</p>
|
|
</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 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 text-purple">{{ $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 text-purple">
|
|
<input
|
|
type="checkbox"
|
|
name="permissions[]"
|
|
value="{{ $section['slug'] }}"
|
|
data-sidebar-permission
|
|
@checked(in_array($section['slug'], $selected, true))
|
|
class="rounded border-gray-300 text-purple focus:ring-purple"
|
|
>
|
|
允许整个一级目录
|
|
</label>
|
|
|
|
@if (! empty($section['pages']))
|
|
<div class="grid grid-cols-1 gap-2 sm:grid-cols-2">
|
|
@foreach ($section['pages'] 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 text-purple focus:ring-purple"
|
|
>
|
|
{{ $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">
|
|
<button type="submit" class="rounded-lg bg-green px-5 py-2.5 text-sm text-white hover:bg-green-700">保存权限</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>
|