WuYongJie 9595267ee7
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
chore: 导入 Akaunting 初始源码与团队协作规则
2026-07-20 18:20:25 +08:00

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>