Initial commit
This commit is contained in:
44
resources/views/admin/settings/_sidebar.blade.php
Normal file
44
resources/views/admin/settings/_sidebar.blade.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<nav class="space-y-1 p-4">
|
||||
<a href="{{ route('admin.settings.general') }}"
|
||||
class="flex items-center px-3 py-2 text-sm font-medium rounded-md {{ request()->routeIs('admin.settings.general') ? 'bg-indigo-50 text-indigo-700' : 'text-gray-700 hover:bg-gray-50' }}">
|
||||
<svg class="mr-3 h-5 w-5 {{ request()->routeIs('admin.settings.general') ? 'text-indigo-500' : 'text-gray-400' }}" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
一般設定
|
||||
</a>
|
||||
|
||||
<a href="{{ route('admin.settings.features') }}"
|
||||
class="flex items-center px-3 py-2 text-sm font-medium rounded-md {{ request()->routeIs('admin.settings.features') ? 'bg-indigo-50 text-indigo-700' : 'text-gray-700 hover:bg-gray-50' }}">
|
||||
<svg class="mr-3 h-5 w-5 {{ request()->routeIs('admin.settings.features') ? 'text-indigo-500' : 'text-gray-400' }}" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
||||
</svg>
|
||||
文件功能
|
||||
</a>
|
||||
|
||||
<a href="{{ route('admin.settings.security') }}"
|
||||
class="flex items-center px-3 py-2 text-sm font-medium rounded-md {{ request()->routeIs('admin.settings.security') ? 'bg-indigo-50 text-indigo-700' : 'text-gray-700 hover:bg-gray-50' }}">
|
||||
<svg class="mr-3 h-5 w-5 {{ request()->routeIs('admin.settings.security') ? 'text-indigo-500' : 'text-gray-400' }}" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
|
||||
</svg>
|
||||
安全性與限制
|
||||
</a>
|
||||
|
||||
<a href="{{ route('admin.settings.notifications') }}"
|
||||
class="flex items-center px-3 py-2 text-sm font-medium rounded-md {{ request()->routeIs('admin.settings.notifications') ? 'bg-indigo-50 text-indigo-700' : 'text-gray-700 hover:bg-gray-50' }}">
|
||||
<svg class="mr-3 h-5 w-5 {{ request()->routeIs('admin.settings.notifications') ? 'text-indigo-500' : 'text-gray-400' }}" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
|
||||
</svg>
|
||||
通知設定
|
||||
</a>
|
||||
|
||||
<a href="{{ route('admin.settings.advanced') }}"
|
||||
class="flex items-center px-3 py-2 text-sm font-medium rounded-md {{ request()->routeIs('admin.settings.advanced') ? 'bg-indigo-50 text-indigo-700' : 'text-gray-700 hover:bg-gray-50' }}">
|
||||
<svg class="mr-3 h-5 w-5 {{ request()->routeIs('admin.settings.advanced') ? 'text-indigo-500' : 'text-gray-400' }}" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" />
|
||||
</svg>
|
||||
進階設定
|
||||
</a>
|
||||
</nav>
|
||||
</div>
|
||||
239
resources/views/admin/settings/advanced.blade.php
Normal file
239
resources/views/admin/settings/advanced.blade.php
Normal file
@@ -0,0 +1,239 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header">
|
||||
<h2 class="text-xl font-semibold leading-tight text-gray-800">
|
||||
系統設定 - 進階設定
|
||||
</h2>
|
||||
</x-slot>
|
||||
|
||||
<div class="py-12">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-4">
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
@include('admin.settings._sidebar')
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="lg:col-span-3">
|
||||
@if (session('status'))
|
||||
<div class="mb-6 rounded-md bg-green-50 p-4">
|
||||
<p class="text-sm font-medium text-green-800">{{ session('status') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<div class="px-6 py-5 border-b border-gray-200">
|
||||
<h3 class="text-lg font-medium text-gray-900">進階設定</h3>
|
||||
<p class="mt-1 text-sm text-gray-600">配置 QR Code、統計、版本控制和其他進階功能</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.settings.advanced.update') }}" method="POST" class="px-6 py-6 space-y-8">
|
||||
@csrf
|
||||
|
||||
<!-- QR Code Settings Section -->
|
||||
<div class="border-b border-gray-200 pb-6">
|
||||
<h4 class="text-base font-medium text-gray-900 mb-4">QR Code 設定</h4>
|
||||
|
||||
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
|
||||
<div>
|
||||
<label for="qr_code_size" class="block text-sm font-medium text-gray-700">
|
||||
QR Code 尺寸(像素)
|
||||
</label>
|
||||
<input type="number" name="qr_code_size" id="qr_code_size"
|
||||
value="{{ old('qr_code_size', $settings['qr_code_size']) }}"
|
||||
min="100" max="1000"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
@error('qr_code_size')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="qr_code_format" class="block text-sm font-medium text-gray-700">
|
||||
QR Code 格式
|
||||
</label>
|
||||
<select name="qr_code_format" id="qr_code_format"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<option value="png" {{ $settings['qr_code_format'] === 'png' ? 'selected' : '' }}>PNG</option>
|
||||
<option value="svg" {{ $settings['qr_code_format'] === 'svg' ? 'selected' : '' }}>SVG</option>
|
||||
</select>
|
||||
@error('qr_code_format')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Statistics Settings Section -->
|
||||
<div class="border-b border-gray-200 pb-6">
|
||||
<h4 class="text-base font-medium text-gray-900 mb-4">統計報表設定</h4>
|
||||
|
||||
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
|
||||
<div>
|
||||
<label for="statistics_time_range" class="block text-sm font-medium text-gray-700">
|
||||
統計時間範圍(天)
|
||||
</label>
|
||||
<input type="number" name="statistics_time_range" id="statistics_time_range"
|
||||
value="{{ old('statistics_time_range', $settings['statistics_time_range']) }}"
|
||||
min="7" max="365"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">預設顯示的統計天數</p>
|
||||
@error('statistics_time_range')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="statistics_top_n" class="block text-sm font-medium text-gray-700">
|
||||
熱門項目顯示數量
|
||||
</label>
|
||||
<input type="number" name="statistics_top_n" id="statistics_top_n"
|
||||
value="{{ old('statistics_top_n', $settings['statistics_top_n']) }}"
|
||||
min="5" max="100"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">顯示前 N 個熱門文件</p>
|
||||
@error('statistics_top_n')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Document Settings Section -->
|
||||
<div class="border-b border-gray-200 pb-6">
|
||||
<h4 class="text-base font-medium text-gray-900 mb-4">文件設定</h4>
|
||||
|
||||
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
|
||||
<div>
|
||||
<label for="default_expiration_days" class="block text-sm font-medium text-gray-700">
|
||||
預設到期天數
|
||||
</label>
|
||||
<input type="number" name="default_expiration_days" id="default_expiration_days"
|
||||
value="{{ old('default_expiration_days', $settings['default_expiration_days']) }}"
|
||||
min="0" max="3650"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">新文件的預設到期天數(0 表示永不過期)</p>
|
||||
@error('default_expiration_days')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="expiration_warning_days" class="block text-sm font-medium text-gray-700">
|
||||
到期前提醒天數
|
||||
</label>
|
||||
<input type="number" name="expiration_warning_days" id="expiration_warning_days"
|
||||
value="{{ old('expiration_warning_days', $settings['expiration_warning_days']) }}"
|
||||
min="1" max="365"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">到期前幾天發送提醒通知</p>
|
||||
@error('expiration_warning_days')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="max_tags_per_document" class="block text-sm font-medium text-gray-700">
|
||||
每個文件的標籤上限
|
||||
</label>
|
||||
<input type="number" name="max_tags_per_document" id="max_tags_per_document"
|
||||
value="{{ old('max_tags_per_document', $settings['max_tags_per_document']) }}"
|
||||
min="1" max="50"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
@error('max_tags_per_document')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="default_access_level" class="block text-sm font-medium text-gray-700">
|
||||
預設存取權限
|
||||
</label>
|
||||
<select name="default_access_level" id="default_access_level"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<option value="public" {{ $settings['default_access_level'] === 'public' ? 'selected' : '' }}>公開</option>
|
||||
<option value="members" {{ $settings['default_access_level'] === 'members' ? 'selected' : '' }}>會員</option>
|
||||
<option value="admin" {{ $settings['default_access_level'] === 'admin' ? 'selected' : '' }}>管理員</option>
|
||||
<option value="board" {{ $settings['default_access_level'] === 'board' ? 'selected' : '' }}>理事會</option>
|
||||
</select>
|
||||
<p class="mt-1 text-sm text-gray-500">新文件的預設存取權限</p>
|
||||
@error('default_access_level')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="auto_archive_enabled" id="auto_archive_enabled"
|
||||
{{ $settings['auto_archive_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="auto_archive_enabled" class="font-medium text-gray-700">自動封存過期文件</label>
|
||||
<p class="text-gray-500">當文件到期時自動將其封存</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- System Settings Section -->
|
||||
<div>
|
||||
<h4 class="text-base font-medium text-gray-900 mb-4">系統設定</h4>
|
||||
|
||||
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
|
||||
<div>
|
||||
<label for="audit_log_retention_days" class="block text-sm font-medium text-gray-700">
|
||||
稽核記錄保留天數
|
||||
</label>
|
||||
<input type="number" name="audit_log_retention_days" id="audit_log_retention_days"
|
||||
value="{{ old('audit_log_retention_days', $settings['audit_log_retention_days']) }}"
|
||||
min="30" max="3650"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">稽核記錄保留的天數</p>
|
||||
@error('audit_log_retention_days')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="max_versions_retain" class="block text-sm font-medium text-gray-700">
|
||||
版本保留數量
|
||||
</label>
|
||||
<input type="number" name="max_versions_retain" id="max_versions_retain"
|
||||
value="{{ old('max_versions_retain', $settings['max_versions_retain']) }}"
|
||||
min="0" max="100"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">每個文件保留的最大版本數(0 表示無限制)</p>
|
||||
@error('max_versions_retain')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex items-center justify-end pt-4 border-t">
|
||||
<button type="submit"
|
||||
class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
|
||||
儲存變更
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
124
resources/views/admin/settings/features.blade.php
Normal file
124
resources/views/admin/settings/features.blade.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header">
|
||||
<h2 class="text-xl font-semibold leading-tight text-gray-800">
|
||||
系統設定 - 文件功能
|
||||
</h2>
|
||||
</x-slot>
|
||||
|
||||
<div class="py-12">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-4">
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
@include('admin.settings._sidebar')
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="lg:col-span-3">
|
||||
@if (session('status'))
|
||||
<div class="mb-6 rounded-md bg-green-50 p-4">
|
||||
<p class="text-sm font-medium text-green-800">{{ session('status') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<div class="px-6 py-5 border-b border-gray-200">
|
||||
<h3 class="text-lg font-medium text-gray-900">文件功能開關</h3>
|
||||
<p class="mt-1 text-sm text-gray-600">控制文件管理系統的進階功能</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.settings.features.update') }}" method="POST" class="px-6 py-6 space-y-6">
|
||||
@csrf
|
||||
|
||||
<!-- QR Codes -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="qr_codes_enabled" id="qr_codes_enabled"
|
||||
{{ $settings['qr_codes_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="qr_codes_enabled" class="font-medium text-gray-700">啟用 QR Code 功能</label>
|
||||
<p class="text-gray-500">允許為文件產生 QR Code 以便快速存取</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tagging -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="tagging_enabled" id="tagging_enabled"
|
||||
{{ $settings['tagging_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="tagging_enabled" class="font-medium text-gray-700">啟用標籤功能</label>
|
||||
<p class="text-gray-500">允許為文件添加標籤以便分類和搜尋</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Expiration -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="expiration_enabled" id="expiration_enabled"
|
||||
{{ $settings['expiration_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="expiration_enabled" class="font-medium text-gray-700">啟用到期日功能</label>
|
||||
<p class="text-gray-500">允許設定文件到期日並接收提醒通知</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bulk Import -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="bulk_import_enabled" id="bulk_import_enabled"
|
||||
{{ $settings['bulk_import_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="bulk_import_enabled" class="font-medium text-gray-700">啟用批次匯入功能</label>
|
||||
<p class="text-gray-500">允許管理員批次匯入多個文件</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Statistics -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="statistics_enabled" id="statistics_enabled"
|
||||
{{ $settings['statistics_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="statistics_enabled" class="font-medium text-gray-700">啟用統計報表功能</label>
|
||||
<p class="text-gray-500">顯示文件下載統計和使用分析</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Version History -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="version_history_enabled" id="version_history_enabled"
|
||||
{{ $settings['version_history_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="version_history_enabled" class="font-medium text-gray-700">啟用版本控制功能</label>
|
||||
<p class="text-gray-500">保留文件歷史版本並允許回溯</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex items-center justify-end pt-4 border-t">
|
||||
<button type="submit"
|
||||
class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
|
||||
儲存變更
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
80
resources/views/admin/settings/general.blade.php
Normal file
80
resources/views/admin/settings/general.blade.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header">
|
||||
<h2 class="text-xl font-semibold leading-tight text-gray-800">
|
||||
系統設定 - 一般設定
|
||||
</h2>
|
||||
</x-slot>
|
||||
|
||||
<div class="py-12">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-4">
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
@include('admin.settings._sidebar')
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="lg:col-span-3">
|
||||
@if (session('status'))
|
||||
<div class="mb-6 rounded-md bg-green-50 p-4">
|
||||
<p class="text-sm font-medium text-green-800">{{ session('status') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<div class="px-6 py-5 border-b border-gray-200">
|
||||
<h3 class="text-lg font-medium text-gray-900">一般設定</h3>
|
||||
<p class="mt-1 text-sm text-gray-600">配置系統的基本資訊</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.settings.general.update') }}" method="POST" class="px-6 py-6 space-y-6">
|
||||
@csrf
|
||||
|
||||
<!-- System Name -->
|
||||
<div>
|
||||
<label for="system_name" class="block text-sm font-medium text-gray-700">
|
||||
系統名稱
|
||||
</label>
|
||||
<input type="text" name="system_name" id="system_name"
|
||||
value="{{ old('system_name', $settings['system_name']) }}"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">顯示在系統各處的名稱</p>
|
||||
@error('system_name')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Timezone -->
|
||||
<div>
|
||||
<label for="timezone" class="block text-sm font-medium text-gray-700">
|
||||
時區
|
||||
</label>
|
||||
<select name="timezone" id="timezone"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<option value="Asia/Taipei" {{ $settings['timezone'] === 'Asia/Taipei' ? 'selected' : '' }}>台北 (Asia/Taipei)</option>
|
||||
<option value="Asia/Hong_Kong" {{ $settings['timezone'] === 'Asia/Hong_Kong' ? 'selected' : '' }}>香港 (Asia/Hong_Kong)</option>
|
||||
<option value="Asia/Shanghai" {{ $settings['timezone'] === 'Asia/Shanghai' ? 'selected' : '' }}>上海 (Asia/Shanghai)</option>
|
||||
<option value="UTC" {{ $settings['timezone'] === 'UTC' ? 'selected' : '' }}>UTC</option>
|
||||
</select>
|
||||
<p class="mt-1 text-sm text-gray-500">系統使用的時區設定</p>
|
||||
@error('timezone')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex items-center justify-end pt-4 border-t">
|
||||
<button type="submit"
|
||||
class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
|
||||
儲存變更
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
113
resources/views/admin/settings/notifications.blade.php
Normal file
113
resources/views/admin/settings/notifications.blade.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header">
|
||||
<h2 class="text-xl font-semibold leading-tight text-gray-800">
|
||||
系統設定 - 通知設定
|
||||
</h2>
|
||||
</x-slot>
|
||||
|
||||
<div class="py-12">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-4">
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
@include('admin.settings._sidebar')
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="lg:col-span-3">
|
||||
@if (session('status'))
|
||||
<div class="mb-6 rounded-md bg-green-50 p-4">
|
||||
<p class="text-sm font-medium text-green-800">{{ session('status') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<div class="px-6 py-5 border-b border-gray-200">
|
||||
<h3 class="text-lg font-medium text-gray-900">通知設定</h3>
|
||||
<p class="mt-1 text-sm text-gray-600">配置系統通知和電子郵件提醒</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.settings.notifications.update') }}" method="POST" class="px-6 py-6 space-y-6">
|
||||
@csrf
|
||||
|
||||
<!-- Enable Notifications -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="enabled" id="enabled"
|
||||
{{ $settings['enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="enabled" class="font-medium text-gray-700">啟用系統通知</label>
|
||||
<p class="text-gray-500">啟用所有系統通知功能</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Expiration Alerts -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="expiration_alerts_enabled" id="expiration_alerts_enabled"
|
||||
{{ $settings['expiration_alerts_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="expiration_alerts_enabled" class="font-medium text-gray-700">文件到期提醒</label>
|
||||
<p class="text-gray-500">當文件即將到期時發送電子郵件提醒</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Expiration Recipients -->
|
||||
<div>
|
||||
<label for="expiration_recipients" class="block text-sm font-medium text-gray-700">
|
||||
到期通知收件人
|
||||
</label>
|
||||
<input type="text" name="expiration_recipients" id="expiration_recipients"
|
||||
value="{{ old('expiration_recipients', implode(', ', $settings['expiration_recipients'])) }}"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
placeholder="admin@example.com, manager@example.com">
|
||||
<p class="mt-1 text-sm text-gray-500">接收到期通知的電子郵件地址,以逗號分隔</p>
|
||||
@error('expiration_recipients')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Archive Notifications -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="archive_notifications_enabled" id="archive_notifications_enabled"
|
||||
{{ $settings['archive_notifications_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="archive_notifications_enabled" class="font-medium text-gray-700">文件封存通知</label>
|
||||
<p class="text-gray-500">當文件被封存時發送通知</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- New Document Alerts -->
|
||||
<div class="flex items-start">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" name="new_document_alerts_enabled" id="new_document_alerts_enabled"
|
||||
{{ $settings['new_document_alerts_enabled'] ? 'checked' : '' }}
|
||||
class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500">
|
||||
</div>
|
||||
<div class="ml-3 text-sm">
|
||||
<label for="new_document_alerts_enabled" class="font-medium text-gray-700">新文件通知</label>
|
||||
<p class="text-gray-500">當有新文件上傳時發送通知給相關人員</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex items-center justify-end pt-4 border-t">
|
||||
<button type="submit"
|
||||
class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
|
||||
儲存變更
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
109
resources/views/admin/settings/security.blade.php
Normal file
109
resources/views/admin/settings/security.blade.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header">
|
||||
<h2 class="text-xl font-semibold leading-tight text-gray-800">
|
||||
系統設定 - 安全性與限制
|
||||
</h2>
|
||||
</x-slot>
|
||||
|
||||
<div class="py-12">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-4">
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
@include('admin.settings._sidebar')
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="lg:col-span-3">
|
||||
@if (session('status'))
|
||||
<div class="mb-6 rounded-md bg-green-50 p-4">
|
||||
<p class="text-sm font-medium text-green-800">{{ session('status') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="bg-white shadow sm:rounded-lg">
|
||||
<div class="px-6 py-5 border-b border-gray-200">
|
||||
<h3 class="text-lg font-medium text-gray-900">安全性與限制設定</h3>
|
||||
<p class="mt-1 text-sm text-gray-600">配置下載速率限制和文件上傳限制</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ route('admin.settings.security.update') }}" method="POST" class="px-6 py-6 space-y-6">
|
||||
@csrf
|
||||
|
||||
<!-- Rate Limit - Authenticated Users -->
|
||||
<div>
|
||||
<label for="rate_limit_authenticated" class="block text-sm font-medium text-gray-700">
|
||||
已登入用戶下載限制(每小時)
|
||||
</label>
|
||||
<input type="number" name="rate_limit_authenticated" id="rate_limit_authenticated"
|
||||
value="{{ old('rate_limit_authenticated', $settings['rate_limit_authenticated']) }}"
|
||||
min="1" max="1000"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">已登入用戶每小時可下載的文件次數</p>
|
||||
@error('rate_limit_authenticated')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Rate Limit - Guest Users -->
|
||||
<div>
|
||||
<label for="rate_limit_guest" class="block text-sm font-medium text-gray-700">
|
||||
訪客下載限制(每小時)
|
||||
</label>
|
||||
<input type="number" name="rate_limit_guest" id="rate_limit_guest"
|
||||
value="{{ old('rate_limit_guest', $settings['rate_limit_guest']) }}"
|
||||
min="1" max="1000"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">未登入訪客每小時可下載的文件次數</p>
|
||||
@error('rate_limit_guest')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Max File Size -->
|
||||
<div>
|
||||
<label for="max_file_size_mb" class="block text-sm font-medium text-gray-700">
|
||||
檔案大小上限(MB)
|
||||
</label>
|
||||
<input type="number" name="max_file_size_mb" id="max_file_size_mb"
|
||||
value="{{ old('max_file_size_mb', $settings['max_file_size_mb']) }}"
|
||||
min="1" max="100"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
required>
|
||||
<p class="mt-1 text-sm text-gray-500">單一文件上傳的最大檔案大小</p>
|
||||
@error('max_file_size_mb')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Allowed File Types -->
|
||||
<div>
|
||||
<label for="allowed_file_types" class="block text-sm font-medium text-gray-700">
|
||||
允許的檔案類型
|
||||
</label>
|
||||
<input type="text" name="allowed_file_types" id="allowed_file_types"
|
||||
value="{{ old('allowed_file_types', implode(', ', $settings['allowed_file_types'])) }}"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
placeholder="pdf, doc, docx, xls, xlsx">
|
||||
<p class="mt-1 text-sm text-gray-500">允許上傳的檔案副檔名,以逗號分隔</p>
|
||||
@error('allowed_file_types')
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex items-center justify-end pt-4 border-t">
|
||||
<button type="submit"
|
||||
class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
|
||||
儲存變更
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
Reference in New Issue
Block a user