完善角色组创建页面样式

This commit is contained in:
Wisp X
2022-01-21 14:36:17 +08:00
parent 84e9caeb71
commit ffc2895a6c
5 changed files with 209 additions and 216 deletions
+3
View File
@@ -16,6 +16,9 @@ final class GroupConfigKey
/** @var string 审查配置 */
const ScanConfigs = 'scan_configs';
/** @var string 违规图片审查后动作 */
const ScannedAction = 'scanned_action';
/** @var string 是否启用原图保护功能 */
const IsEnableOriginalProtection = 'is_enable_original_protection';
+28 -4
View File
@@ -11,7 +11,32 @@ use Illuminate\View\View;
class GroupController extends Controller
{
protected array $extensions = ['jpeg', 'jpg', 'png', 'gif', 'tif', 'bmp', 'ico', 'psd', 'webp'];
public function __construct()
{
\Illuminate\Support\Facades\View::share([
'extensions' => ['jpeg', 'jpg', 'png', 'gif', 'tif', 'bmp', 'ico', 'psd', 'webp'],
'positions' => [
'top-left' => '左上角',
'top' => '上中',
'top-right' => '右上角',
'left' => '左边',
'center' => '中间',
'right' => '右边',
'bottom-left' => '左下角',
'bottom' => '下中',
'bottom-right' => '右下角',
'tiled' => '平铺',
],
'scanAliyunScenes' => [
'porn' => '智能鉴黄',
'terrorism' => '暴恐涉政',
'ad' => '暴恐涉政',
'qrcode' => '二维码',
'live' => '不良场景',
'logo' => 'Logo',
]
]);
}
public function index(Request $request): View
{
@@ -23,14 +48,13 @@ class GroupController extends Controller
public function add(): View
{
return view('admin.group.add', ['extensions' => $this->extensions]);
return view('admin.group.add');
}
public function edit(Request $request): View
{
$group = Group::query()->findOrFail($request->route('id'));
$extensions = $this->extensions;
return view('admin.group.edit', compact('group', 'extensions'));
return view('admin.group.edit', compact('group'));
}
public function create(): Response
+1
View File
@@ -51,6 +51,7 @@ class DatabaseSeeder extends Seeder
GroupConfigKey::IsEnableScan => false,
GroupConfigKey::IsEnableWatermark => false,
GroupConfigKey::IsEnableOriginalProtection => false,
GroupConfigKey::ScannedAction => 'mark', // in mark or delete
GroupConfigKey::ScanConfigs => [
'driver' => 'aliyun',
'drivers' => [
+48 -181
View File
@@ -652,10 +652,6 @@ select {
bottom: 0px;
left: 0px;
}
.inset-y-0 {
top: 0px;
bottom: 0px;
}
.top-1 {
top: 0.25rem;
}
@@ -716,9 +712,6 @@ select {
.col-span-6 {
grid-column: span 6 / span 6;
}
.col-span-3 {
grid-column: span 3 / span 3;
}
.m-2 {
margin: 0.5rem;
}
@@ -776,6 +769,12 @@ select {
.mt-4 {
margin-top: 1rem;
}
.mt-5 {
margin-top: 1.25rem;
}
.mb-3 {
margin-bottom: 0.75rem;
}
.mt-6 {
margin-top: 1.5rem;
}
@@ -800,24 +799,18 @@ select {
.-mt-px {
margin-top: -1px;
}
.-ml-1 {
margin-left: -0.25rem;
}
.mr-4 {
margin-right: 1rem;
}
.-ml-1 {
margin-left: -0.25rem;
}
.mr-3 {
margin-right: 0.75rem;
}
.-mr-2 {
margin-right: -0.5rem;
}
.mb-3 {
margin-bottom: 0.75rem;
}
.mt-5 {
margin-top: 1.25rem;
}
.block {
display: block;
}
@@ -854,6 +847,9 @@ select {
.h-4 {
height: 1rem;
}
.h-20 {
height: 5rem;
}
.h-screen {
height: 100vh;
}
@@ -869,18 +865,15 @@ select {
.h-16 {
height: 4rem;
}
.h-20 {
height: 5rem;
}
.h-7 {
height: 1.75rem;
}
.h-6 {
height: 1.5rem;
}
.h-9 {
height: 2.25rem;
}
.h-6 {
height: 1.5rem;
}
.min-h-\[150px\] {
min-height: 150px;
}
@@ -908,6 +901,9 @@ select {
.w-4 {
width: 1rem;
}
.w-20 {
width: 5rem;
}
.w-3\/4 {
width: 75%;
}
@@ -923,9 +919,6 @@ select {
.w-\[90\%\] {
width: 90%;
}
.w-20 {
width: 5rem;
}
.w-6 {
width: 1.5rem;
}
@@ -1044,9 +1037,6 @@ select {
.flex-nowrap {
flex-wrap: nowrap;
}
.items-start {
align-items: flex-start;
}
.items-center {
align-items: center;
}
@@ -1164,10 +1154,6 @@ select {
.whitespace-nowrap {
white-space: nowrap;
}
.break-normal {
overflow-wrap: normal;
word-break: normal;
}
.break-words {
overflow-wrap: break-word;
}
@@ -1195,10 +1181,6 @@ select {
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
}
.rounded-b-lg {
border-bottom-right-radius: 0.5rem;
border-bottom-left-radius: 0.5rem;
}
.rounded-l-none {
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
@@ -1281,9 +1263,9 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(248 113 113 / var(--tw-bg-opacity));
}
.bg-blue-500 {
.bg-gray-500 {
--tw-bg-opacity: 1;
background-color: rgb(59 130 246 / var(--tw-bg-opacity));
background-color: rgb(107 114 128 / var(--tw-bg-opacity));
}
.bg-yellow-500 {
--tw-bg-opacity: 1;
@@ -1297,6 +1279,10 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(31 41 55 / var(--tw-bg-opacity));
}
.bg-blue-500 {
--tw-bg-opacity: 1;
background-color: rgb(59 130 246 / var(--tw-bg-opacity));
}
.bg-gray-600 {
--tw-bg-opacity: 1;
background-color: rgb(75 85 99 / var(--tw-bg-opacity));
@@ -1305,10 +1291,6 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(248 250 252 / var(--tw-bg-opacity));
}
.bg-gray-500 {
--tw-bg-opacity: 1;
background-color: rgb(107 114 128 / var(--tw-bg-opacity));
}
.bg-red-500 {
--tw-bg-opacity: 1;
background-color: rgb(239 68 68 / var(--tw-bg-opacity));
@@ -1325,17 +1307,6 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(55 65 81 / var(--tw-bg-opacity));
}
.bg-transparent {
background-color: transparent;
}
.bg-indigo-600 {
--tw-bg-opacity: 1;
background-color: rgb(79 70 229 / var(--tw-bg-opacity));
}
.bg-red-50 {
--tw-bg-opacity: 1;
background-color: rgb(254 242 242 / var(--tw-bg-opacity));
}
.bg-opacity-75 {
--tw-bg-opacity: 0.75;
}
@@ -1367,9 +1338,6 @@ select {
.p-1 {
padding: 0.25rem;
}
.p-0 {
padding: 0px;
}
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
@@ -1394,6 +1362,10 @@ select {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-10 {
padding-top: 2.5rem;
padding-bottom: 2.5rem;
}
.py-5 {
padding-top: 1.25rem;
padding-bottom: 1.25rem;
@@ -1426,14 +1398,6 @@ select {
padding-top: 3.5rem;
padding-bottom: 3.5rem;
}
.py-10 {
padding-top: 2.5rem;
padding-bottom: 2.5rem;
}
.py-0 {
padding-top: 0px;
padding-bottom: 0px;
}
.pb-6 {
padding-bottom: 1.5rem;
}
@@ -1461,18 +1425,6 @@ select {
.pb-1 {
padding-bottom: 0.25rem;
}
.pl-7 {
padding-left: 1.75rem;
}
.pr-12 {
padding-right: 3rem;
}
.pl-2 {
padding-left: 0.5rem;
}
.pr-7 {
padding-right: 1.75rem;
}
.text-left {
text-align: left;
}
@@ -1516,14 +1468,14 @@ select {
font-size: 1rem;
line-height: 1.5rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-4xl {
font-size: 2.25rem;
line-height: 2.5rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.font-medium {
font-weight: 500;
}
@@ -1539,9 +1491,6 @@ select {
.leading-7 {
line-height: 1.75rem;
}
.leading-6 {
line-height: 1.5rem;
}
.tracking-wider {
letter-spacing: 0.05em;
}
@@ -1600,6 +1549,10 @@ select {
--tw-text-opacity: 1;
color: rgb(74 222 128 / var(--tw-text-opacity));
}
.text-gray-300 {
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity));
}
.text-gray-900 {
--tw-text-opacity: 1;
color: rgb(17 24 39 / var(--tw-text-opacity));
@@ -1616,10 +1569,6 @@ select {
--tw-text-opacity: 1;
color: rgb(229 231 235 / var(--tw-text-opacity));
}
.text-gray-300 {
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity));
}
.text-green-600 {
--tw-text-opacity: 1;
color: rgb(22 163 74 / var(--tw-text-opacity));
@@ -1628,13 +1577,17 @@ select {
--tw-text-opacity: 1;
color: rgb(248 113 113 / var(--tw-text-opacity));
}
.text-red-800 {
--tw-text-opacity: 1;
color: rgb(153 27 27 / var(--tw-text-opacity));
}
.text-slate-600 {
--tw-text-opacity: 1;
color: rgb(71 85 105 / var(--tw-text-opacity));
}
.text-red-800 {
.text-yellow-500 {
--tw-text-opacity: 1;
color: rgb(153 27 27 / var(--tw-text-opacity));
color: rgb(234 179 8 / var(--tw-text-opacity));
}
.underline {
-webkit-text-decoration-line: underline;
@@ -1762,13 +1715,9 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
}
.hover\:bg-blue-700:hover {
.hover\:bg-blue-600:hover {
--tw-bg-opacity: 1;
background-color: rgb(29 78 216 / var(--tw-bg-opacity));
}
.hover\:bg-gray-700:hover {
--tw-bg-opacity: 1;
background-color: rgb(55 65 81 / var(--tw-bg-opacity));
background-color: rgb(37 99 235 / var(--tw-bg-opacity));
}
.hover\:bg-blue-300:hover {
--tw-bg-opacity: 1;
@@ -1778,18 +1727,6 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(75 85 99 / var(--tw-bg-opacity));
}
.hover\:bg-blue-600:hover {
--tw-bg-opacity: 1;
background-color: rgb(37 99 235 / var(--tw-bg-opacity));
}
.hover\:bg-indigo-700:hover {
--tw-bg-opacity: 1;
background-color: rgb(67 56 202 / var(--tw-bg-opacity));
}
.hover\:bg-gray-500:hover {
--tw-bg-opacity: 1;
background-color: rgb(107 114 128 / var(--tw-bg-opacity));
}
.hover\:text-gray-500:hover {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
@@ -1814,14 +1751,14 @@ select {
--tw-text-opacity: 1;
color: rgb(49 46 129 / var(--tw-text-opacity));
}
.hover\:text-gray-700:hover {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.hover\:text-red-900:hover {
--tw-text-opacity: 1;
color: rgb(127 29 29 / var(--tw-text-opacity));
}
.hover\:text-gray-700:hover {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.focus\:z-10:focus {
z-index: 10;
}
@@ -1833,10 +1770,6 @@ select {
--tw-border-opacity: 1;
border-color: rgb(99 102 241 / var(--tw-border-opacity));
}
.focus\:border-gray-900:focus {
--tw-border-opacity: 1;
border-color: rgb(17 24 39 / var(--tw-border-opacity));
}
.focus\:border-indigo-300:focus {
--tw-border-opacity: 1;
border-color: rgb(165 180 252 / var(--tw-border-opacity));
@@ -1896,10 +1829,6 @@ select {
--tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity));
}
.active\:bg-gray-900:active {
--tw-bg-opacity: 1;
background-color: rgb(17 24 39 / var(--tw-bg-opacity));
}
.active\:text-gray-700:active {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
@@ -1908,9 +1837,6 @@ select {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
}
.disabled\:opacity-25:disabled {
opacity: 0.25;
}
.group:hover .group-hover\:block {
display: block;
}
@@ -1935,14 +1861,6 @@ select {
grid-column: span 3 / span 3;
}
.sm\:col-span-4 {
grid-column: span 4 / span 4;
}
.sm\:col-span-6 {
grid-column: span 6 / span 6;
}
.sm\:-mx-6 {
margin-left: -1.5rem;
margin-right: -1.5rem;
@@ -1965,10 +1883,6 @@ select {
margin-left: 1.5rem;
}
.sm\:mt-0 {
margin-top: 0px;
}
.sm\:block {
display: block;
}
@@ -1989,10 +1903,6 @@ select {
width: 16rem;
}
.sm\:w-full {
width: 100%;
}
.sm\:max-w-md {
max-width: 28rem;
}
@@ -2017,24 +1927,6 @@ select {
justify-content: space-between;
}
.sm\:space-y-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-y-reverse: 0;
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.sm\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(1rem * var(--tw-space-x-reverse));
margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
.sm\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.sm\:rounded-md {
border-radius: 0.375rem;
}
@@ -2057,11 +1949,6 @@ select {
padding-right: 2.5rem;
}
.sm\:px-0 {
padding-left: 0px;
padding-right: 0px;
}
.sm\:pt-0 {
padding-top: 0px;
}
@@ -2084,10 +1971,6 @@ select {
}
@media (min-width: 768px) {
.md\:col-span-1 {
grid-column: span 1 / span 1;
}
.md\:col-span-2 {
grid-column: span 2 / span 2;
}
@@ -2129,26 +2012,14 @@ select {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.md\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.md\:flex-row {
flex-direction: row;
}
.md\:flex-col {
flex-direction: column;
}
.md\:justify-between {
justify-content: space-between;
}
.md\:gap-6 {
gap: 1.5rem;
}
.md\:gap-x-4 {
-moz-column-gap: 1rem;
column-gap: 1rem;
@@ -2185,10 +2056,6 @@ select {
}
@media (min-width: 1024px) {
.lg\:col-span-2 {
grid-column: span 2 / span 2;
}
.lg\:-mx-8 {
margin-left: -2rem;
margin-right: -2rem;
+129 -31
View File
@@ -20,52 +20,52 @@
<div class="px-4 py-5 bg-white sm:p-6">
<div data-tab="basic" class="grid grid-cols-6 gap-6">
<div class="col-span-6">
<label for="name" class="block text-sm font-medium text-gray-700">组名称</label>
<label for="name" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>组名称</label>
<input type="text" name="name" id="name" autocomplete="name" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入组名称">
</div>
<div class="col-span-6">
<label for="maximum_file_size" class="block text-sm font-medium text-gray-700">最大文件大小(KB)</label>
<label for="maximum_file_size" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>最大文件大小(KB)</label>
<input type="number" name="configs[maximum_file_size]" id="maximum_file_size" autocomplete="maximum_file_size" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入上传文件的最大限制,单位kb">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="concurrent_upload_num" class="block text-sm font-medium text-gray-700">并发上传数量</label>
<label for="concurrent_upload_num" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>并发上传数量</label>
<input type="number" name="configs[concurrent_upload_num]" id="concurrent_upload_num" autocomplete="concurrent_upload_num" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入并发上传数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="limit_per_minute" class="block text-sm font-medium text-gray-700">每分钟上传限制</label>
<label for="limit_per_minute" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>每分钟上传限制</label>
<input type="number" name="configs[limit_per_minute]" id="limit_per_minute" autocomplete="limit_per_minute" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入每分钟可以上传的图片数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="limit_per_hour" class="block text-sm font-medium text-gray-700">每小时上传限制</label>
<label for="limit_per_hour" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>每小时上传限制</label>
<input type="number" name="configs[limit_per_hour]" id="limit_per_hour" autocomplete="limit_per_hour" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入每小时可以上传的图片数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="limit_per_day" class="block text-sm font-medium text-gray-700">每天上传限制</label>
<label for="limit_per_day" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>每天上传限制</label>
<input type="number" name="configs[limit_per_day]" id="limit_per_day" autocomplete="limit_per_day" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入每天可以上传的图片数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="limit_per_week" class="block text-sm font-medium text-gray-700">每周上传限制</label>
<label for="limit_per_week" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>每周上传限制</label>
<input type="number" name="configs[limit_per_week]" id="limit_per_week" autocomplete="limit_per_week" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入每周可以上传的图片数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="limit_per_month" class="block text-sm font-medium text-gray-700">每月上传限制</label>
<label for="limit_per_month" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>每月上传限制</label>
<input type="number" name="configs[limit_per_month]" id="limit_per_month" autocomplete="limit_per_month" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入每月可以上传的图片数量">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="path_naming_rule" class="block text-sm font-medium text-gray-700">路径命名规则</label>
<label for="path_naming_rule" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>路径命名规则</label>
<input type="number" name="configs[path_naming_rule]" id="path_naming_rule" autocomplete="path_naming_rule" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入路径命名规则">
</div>
<div class="col-span-6 sm:col-span-3">
<label for="file_naming_rule" class="block text-sm font-medium text-gray-700">文件命名规则</label>
<label for="file_naming_rule" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>文件命名规则</label>
<input type="number" name="configs[file_naming_rule]" id="file_naming_rule" autocomplete="file_naming_rule" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入文件命名规则">
</div>
@@ -85,52 +85,51 @@
</x-fieldset>
</div>
</div>
<div data-tab="review" class="hidden grid grid-cols-6 gap-6">
<div class="col-span-6 mb-4">
<x-fieldset title="图片审核" faq="设置上传是否需要通过鉴黄功能审查,违规的图片会被标记为不健康的图片,或直接被删除。">
<x-switch id="is_enable_review_no" name="configs[is_enable_review]" value="0"></x-switch>
<x-fieldset title="图片审核" faq="设置上传是否需要应用第三方审查,违规的图片会被标记为不健康的图片,或直接被删除。">
<x-switch id="is_enable_review_no" name="configs[is_enable_review]" value="1"></x-switch>
</x-fieldset>
</div>
<div class="col-span-6 mb-4">
<x-fieldset title="审核动作">
<x-fieldset-radio id="test" name="test" checked>标记为不健康</x-fieldset-radio>
<x-fieldset-radio id="test" name="test">直接删除</x-fieldset-radio>
<x-fieldset-radio id="configs[scanned_action]_mark" name="configs[scanned_action]" value="mark" checked>标记为不健康</x-fieldset-radio>
<x-fieldset-radio id="configs[scanned_action]_delete" name="configs[scanned_action]" value="delete">直接删除</x-fieldset-radio>
</x-fieldset>
</div>
<div class="col-span-6 mb-4">
<x-fieldset title="审核驱动">
<x-fieldset-radio id="aliyun" name="aliyun" checked>阿里云</x-fieldset-radio>
<x-fieldset-radio id="configs[scan_configs][driver]" name="configs[scan_configs][driver]" data-select="scan" value="aliyun" checked>阿里云</x-fieldset-radio>
</x-fieldset>
</div>
<div class="mb-4">
<div class="hidden mb-4" data-scan-driver="aliyun">
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[scan_configs][access_key_id]" class="block text-sm font-medium text-gray-700">AccessKeyId</label>
<input type="text" name="configs[scan_configs][access_key_id]" id="configs[scan_configs][access_key_id]" autocomplete="access_key_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入 AccessKeyId">
<label for="configs[scan_configs][drivers][aliyun][access_key_id]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>AccessKeyId</label>
<input type="text" name="configs[scan_configs][drivers][aliyun][access_key_id]" id="configs[scan_configs][drivers][aliyun][access_key_id]" autocomplete="access_key_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入 AccessKeyId">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[scan_configs][access_key_secret]" class="block text-sm font-medium text-gray-700">AccessKeySecret</label>
<input type="text" name="configs[scan_configs][access_key_secret]" id="configs[scan_configs][access_key_secret]" autocomplete="access_key_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入 AccessKeySecret">
<label for="configs[scan_configs][drivers][aliyun][access_key_secret]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>AccessKeySecret</label>
<input type="text" name="configs[scan_configs][drivers][aliyun][access_key_secret]" id="configs[scan_configs][drivers][aliyun][access_key_secret]" autocomplete="access_key_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入 AccessKeySecret">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[scan_configs][biz_type]" class="block text-sm font-medium text-gray-700">场景名称</label>
<input type="text" name="configs[scan_configs][biz_type]" id="configs[scan_configs][biz_type]" autocomplete="biz_type" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入业务场景名称">
<label for="configs[scan_configs][drivers][aliyun][biz_type]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>场景名称</label>
<input type="text" name="configs[scan_configs][drivers][aliyun][biz_type]" id="configs[scan_configs][drivers][aliyun][biz_type]" autocomplete="biz_type" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入业务场景名称">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[scan_configs][region_id]" class="block text-sm font-medium text-gray-700">地域节点</label>
<input type="text" name="configs[scan_configs][region_id]" id="configs[scan_configs][region_id]" autocomplete="region_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入地域节点,例如:cn-shanghai">
<label for="configs[scan_configs][drivers][aliyun][region_id]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>地域节点</label>
<input type="text" name="configs[scan_configs][drivers][aliyun][region_id]" id="configs[scan_configs][drivers][aliyun][region_id]" autocomplete="region_id" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入地域节点,例如:cn-shanghai">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<x-fieldset title="场景">
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="porn" checked>智能鉴黄</x-fieldset-checkbox>
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="terrorism" checked>暴恐涉政</x-fieldset-checkbox>
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="ad" checked>图文违规</x-fieldset-checkbox>
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="qrcode" checked>二维码</x-fieldset-checkbox>
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="live" checked>不良场景</x-fieldset-checkbox>
<x-fieldset-checkbox name="configs[scan_configs][scenes][]" value="logo" checked>Logo</x-fieldset-checkbox>
@foreach($scanAliyunScenes as $key => $scene)
<x-fieldset-checkbox name="configs[scan_configs][drivers][aliyun][scenes][]" value="{{ $key }}">{{ $scene }}</x-fieldset-checkbox>
@endforeach
</x-fieldset>
</div>
</div>
</div>
<div data-tab="protection" class="hidden grid grid-cols-6 gap-6">
<div class="col-span-6 mb-4">
<x-fieldset title="原图保护" faq="设置该角色组下的用户上传的图片是否应用原图保护功能,开启后图片<b>不返回直链</b>">
@@ -140,15 +139,100 @@
<div class="col-span-6 mb-4">
<label for="cache_ttl" class="block text-sm font-medium text-gray-700">图片缓存时间()</label>
<input type="number" name="configs[cache_ttl]" id="cache_ttl" autocomplete="cache_ttl" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入受保护图片的缓存时间,0 为不缓存">
<input type="number" name="configs[cache_ttl]" id="cache_ttl" autocomplete="cache_ttl" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入受保护图片的缓存时间,不填或填0表示不缓存">
</div>
</div>
<div data-tab="watermark" class="hidden grid grid-cols-6 gap-6">
<p class="mb-3 text-red-600 text-sm"><i class="fas fa-exclamation"></i> 开启水印功能前请注意考虑图片版权问题。</p>
<div class="col-span-6 mb-4">
<x-fieldset title="开启水印" faq="请注意,水印功能仅在开启了「原图保护」功能的情况下生效。">
<x-switch id="is_enable_watermark_yes" name="configs[is_enable_watermark]" value="1"></x-switch>
</x-fieldset>
<div class="col-span-6 mt-4 mb-4">
<x-fieldset title="水印类型">
<x-fieldset-radio id="configs[watermark_configs][driver]_font" name="configs[watermark_configs][driver]" data-select="watermark" value="font" checked>文字水印</x-fieldset-radio>
<x-fieldset-radio id="configs[watermark_configs][driver]_image" name="configs[watermark_configs][driver]" data-select="watermark" value="image">图片水印</x-fieldset-radio>
</x-fieldset>
</div>
<div class="mb-4 hidden" data-watermark-driver="font">
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][font]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>字体文件</label>
<input type="text" name="configs[watermark_configs][driver][font][font]" id="configs[watermark_configs][driver][font][font]" autocomplete="text" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入字体文件路径,例如:fonts/lsky.ttf">
<small class="text-yellow-500">请将下载的字体文件放置程序根目录的 storage/app/public 目录下</small>
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][position]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>水印位置</label>
<select id="configs[watermark_configs][driver][image][position]" name="configs[watermark_configs][driver][image][position]" autocomplete="position" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">
@foreach($positions as $key => $position)
<option value="{{ $key }}">{{ $position }}</option>
@endforeach
</select>
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][text]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>水印文字</label>
<input type="text" name="configs[watermark_configs][driver][font][text]" id="configs[watermark_configs][driver][font][text]" autocomplete="text" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入水印文字">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][color]" class="block text-sm font-medium text-gray-700">字体颜色</label>
<input type="text" name="configs[watermark_configs][driver][font][color]" id="configs[watermark_configs][driver][font][color]" autocomplete="color" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入字体颜色,例如:#ffffff">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][size]" class="block text-sm font-medium text-gray-700">字体大小</label>
<input type="number" name="configs[watermark_configs][driver][font][size]" id="configs[watermark_configs][driver][font][size]" autocomplete="size" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入字体大小,默认 14">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][angle]" class="block text-sm font-medium text-gray-700">旋转角度</label>
<input type="number" name="configs[watermark_configs][driver][font][angle]" id="configs[watermark_configs][driver][font][angle]" autocomplete="angle" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入旋转角度,默认 0">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][x]" class="block text-sm font-medium text-gray-700">X轴偏移量</label>
<input type="number" name="configs[watermark_configs][driver][font][x]" id="configs[watermark_configs][driver][font][x]" autocomplete="x" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="X轴偏移量">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][font][y]" class="block text-sm font-medium text-gray-700">Y轴偏移量</label>
<input type="number" name="configs[watermark_configs][driver][font][y]" id="configs[watermark_configs][driver][font][y]" autocomplete="y" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="Y轴偏移量">
</div>
</div>
<div class="mb-4 hidden" data-watermark-driver="image">
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][image]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>水印图片</label>
<input type="text" name="configs[watermark_configs][driver][image][image]" id="configs[watermark_configs][driver][image][image]" autocomplete="image" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入水印路径,例如:images/lsky.png">
<small class="text-yellow-500">请将水印图片放置程序根目录的 storage/app/public 目录下</small>
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][position]" class="block text-sm font-medium text-gray-700"><span class="text-red-600">*</span>水印位置</label>
<select id="configs[watermark_configs][driver][image][position]" name="configs[watermark_configs][driver][image][position]" autocomplete="position" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">
@foreach($positions as $key => $position)
<option value="{{ $key }}">{{ $position }}</option>
@endforeach
</select>
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][width]" class="block text-sm font-medium text-gray-700">图片宽度</label>
<input type="number" name="configs[watermark_configs][driver][image][width]" id="configs[watermark_configs][driver][image][width]" autocomplete="width" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入水印图片宽度">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][height]" class="block text-sm font-medium text-gray-700">图片高度</label>
<input type="number" name="configs[watermark_configs][driver][image][height]" id="configs[watermark_configs][driver][image][height]" autocomplete="height" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入水印图片高度">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][opacity]" class="block text-sm font-medium text-gray-700">不透明度</label>
<input type="number" name="configs[watermark_configs][driver][image][opacity]" id="configs[watermark_configs][driver][image][opacity]" autocomplete="opacity" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入不透明度,取值 0 - 100">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][rotate]" class="block text-sm font-medium text-gray-700">旋转角度</label>
<input type="number" name="configs[watermark_configs][driver][image][rotate]" id="configs[watermark_configs][driver][image][rotate]" autocomplete="rotate" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="请输入旋转角度,默认 0,取值 0 - 100">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][x]" class="block text-sm font-medium text-gray-700">X轴偏移量</label>
<input type="number" name="configs[watermark_configs][driver][image][x]" id="configs[watermark_configs][driver][image][x]" autocomplete="x" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="X轴偏移量">
</div>
<div class="col-span-6 sm:col-span-3 mb-4">
<label for="configs[watermark_configs][driver][image][y]" class="block text-sm font-medium text-gray-700">Y轴偏移量</label>
<input type="number" name="configs[watermark_configs][driver][image][y]" id="configs[watermark_configs][driver][image][y]" autocomplete="y" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md" placeholder="Y轴偏移量">
</div>
</div>
</div>
</div>
</div>
@@ -163,12 +247,26 @@
@push('scripts')
<script>
// tabs select
$('[data-target]').click(function () {
$('[data-tab]').hide();
$('[data-target]').removeClass('bg-white').addClass('bg-gray-200');
$(`[data-tab=${$(this).data('target')}]`).show();
$(this).removeClass('bg-gray-200').addClass('bg-white');
});
// 设置选中驱动
let setSelected = function () {
$('[data-select]').each(function () {
$(`[data-${$(this).data('select')}-driver=${$(this).val()}]`)[this.checked ? 'show' : 'hide']();
});
};
setSelected();
$('[data-select]').click(function () {
setSelected();
});
</script>
@endpush