新增职务权限管理与聊天室管理权限控制
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
showForm: false,
|
||||
editing: null,
|
||||
selectedIds: [],
|
||||
selectedPermissions: [],
|
||||
form: {
|
||||
department_id: '',
|
||||
name: '',
|
||||
@@ -32,12 +33,14 @@
|
||||
openCreate() {
|
||||
this.editing = null;
|
||||
this.selectedIds = [];
|
||||
this.selectedPermissions = [];
|
||||
this.form = { department_id: '', name: '', icon: '🎖️', rank: 50, level: 60, max_persons: 1, max_reward: '', daily_reward_limit: '', recipient_daily_limit: '', sort_order: 0 };
|
||||
this.showForm = true;
|
||||
},
|
||||
openEdit(pos, appointableIds) {
|
||||
openEdit(pos, appointableIds, permissions) {
|
||||
this.editing = pos;
|
||||
this.selectedIds = appointableIds;
|
||||
this.selectedPermissions = permissions;
|
||||
this.form = {
|
||||
department_id: pos.department_id,
|
||||
name: pos.name,
|
||||
@@ -61,6 +64,16 @@
|
||||
},
|
||||
isSelected(id) {
|
||||
return this.selectedIds.includes(id);
|
||||
},
|
||||
togglePermission(code) {
|
||||
if (this.selectedPermissions.includes(code)) {
|
||||
this.selectedPermissions = this.selectedPermissions.filter(item => item !== code);
|
||||
} else {
|
||||
this.selectedPermissions.push(code);
|
||||
}
|
||||
},
|
||||
isPermissionSelected(code) {
|
||||
return this.selectedPermissions.includes(code);
|
||||
}
|
||||
}">
|
||||
|
||||
@@ -92,15 +105,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (session('success'))
|
||||
<div class="mb-4 px-4 py-3 bg-green-50 border border-green-200 text-green-700 rounded-lg text-sm">
|
||||
{{ session('success') }}</div>
|
||||
@endif
|
||||
@if (session('error'))
|
||||
<div class="mb-4 px-4 py-3 bg-red-50 border border-red-200 text-red-700 rounded-lg text-sm">
|
||||
{{ session('error') }}</div>
|
||||
@endif
|
||||
|
||||
{{-- 全局奖励接收上限配置卡片(失焦/回车自动保存) --}}
|
||||
<div class="mb-6 bg-amber-50 border border-amber-200 rounded-xl p-5" x-data="{
|
||||
val: {{ $globalRecipientDailyMax }},
|
||||
@@ -181,6 +185,7 @@
|
||||
<th class="px-4 py-3 text-center">单次上限</th>
|
||||
<th class="px-4 py-3 text-center">单日上限</th>
|
||||
<th class="px-4 py-3 text-center">任命权</th>
|
||||
<th class="px-4 py-3 text-center">聊天室权限</th>
|
||||
@php $superLvl = (int) \App\Models\Sysparam::getValue('superlevel', '100'); @endphp
|
||||
@if (Auth::user()->user_level >= $superLvl)
|
||||
<th class="px-4 py-3 text-right">操作</th>
|
||||
@@ -249,6 +254,34 @@
|
||||
<span class="text-xs text-gray-400">无</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="px-4 py-3">
|
||||
@if (! empty($pos->permissions))
|
||||
@php
|
||||
$permissionSummaryLabels = collect($pos->permissions)
|
||||
->map(fn ($permissionCode) => $permissionLabels[$permissionCode] ?? $permissionCode)
|
||||
->values();
|
||||
$permissionPreview = $permissionSummaryLabels->take(2)->implode('、');
|
||||
$permissionTitle = $permissionSummaryLabels->implode(' / ');
|
||||
@endphp
|
||||
<div class="mx-auto max-w-[220px] rounded-xl border border-amber-100 bg-gradient-to-br from-amber-50 via-white to-orange-50 px-3 py-2 shadow-sm"
|
||||
title="{{ $permissionTitle }}">
|
||||
<div class="flex items-center justify-between gap-3">
|
||||
<span class="text-[11px] font-semibold tracking-[0.08em] text-amber-700">已开通</span>
|
||||
<span class="rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-bold text-amber-700">
|
||||
{{ $permissionSummaryLabels->count() }} 项
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-1 text-xs leading-5 text-slate-600">
|
||||
{{ $permissionPreview }}
|
||||
@if ($permissionSummaryLabels->count() > 2)
|
||||
<span class="text-amber-600">等 {{ $permissionSummaryLabels->count() }} 项</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="text-center text-xs text-gray-400">无</div>
|
||||
@endif
|
||||
</td>
|
||||
<td class="px-4 py-3 text-right space-x-1">
|
||||
@php $superLvl = (int) \App\Models\Sysparam::getValue('superlevel', '100'); @endphp
|
||||
@if (Auth::user()->user_level >= $superLvl)
|
||||
@@ -266,7 +299,7 @@
|
||||
recipient_daily_limit: {{ $pos->recipient_daily_limit ?? 'null' }},
|
||||
sort_order: {{ $pos->sort_order }},
|
||||
requestUrl: '{{ route('admin.positions.update', $pos->id) }}'
|
||||
}, {{ json_encode($appointableIds) }})"
|
||||
}, {{ json_encode($appointableIds) }}, {{ json_encode($pos->permissions ?? []) }})"
|
||||
class="text-xs bg-indigo-50 text-indigo-600 font-bold px-2 py-1 rounded hover:bg-indigo-600 hover:text-white transition">
|
||||
编辑
|
||||
</button>
|
||||
@@ -286,7 +319,8 @@
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="9" class="px-4 py-6 text-center text-gray-400">该部门暂无职务</td>
|
||||
<td colspan="{{ Auth::user()->user_level >= $superLvl ? 11 : 10 }}"
|
||||
class="px-4 py-6 text-center text-gray-400">该部门暂无职务</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
@@ -391,6 +425,37 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- 聊天室权限多选 --}}
|
||||
<div class="border rounded-lg p-4 bg-amber-50 mt-4">
|
||||
<h4 class="text-xs font-bold text-amber-800 mb-2">
|
||||
权限管理
|
||||
<span class="font-normal text-amber-700 ml-1">(控制聊天室输入框上方「管理」菜单中可见的功能按钮)</span>
|
||||
</h4>
|
||||
<div class="space-y-4">
|
||||
@foreach ($positionPermissions as $groupName => $permissions)
|
||||
<div>
|
||||
<div class="text-xs font-bold text-amber-700 mb-2">{{ $groupName }}</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-2">
|
||||
@foreach ($permissions as $permissionCode => $permissionMeta)
|
||||
<label
|
||||
class="flex items-start gap-2 cursor-pointer rounded-lg border border-amber-200 bg-white px-3 py-2 text-sm"
|
||||
:class="isPermissionSelected('{{ $permissionCode }}') ? 'ring-2 ring-amber-300 border-amber-300' : ''">
|
||||
<input type="checkbox" name="permissions[]" value="{{ $permissionCode }}"
|
||||
:checked="isPermissionSelected('{{ $permissionCode }}')"
|
||||
@change="togglePermission('{{ $permissionCode }}')"
|
||||
class="mt-0.5 rounded text-amber-600">
|
||||
<span class="min-w-0">
|
||||
<span class="block font-bold text-gray-700">{{ $permissionMeta['label'] }}</span>
|
||||
<span class="block text-xs text-gray-500">{{ $permissionMeta['description'] }}</span>
|
||||
</span>
|
||||
</label>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end space-x-3 pt-4 mt-4 border-t">
|
||||
<button type="button" @click="showForm = false"
|
||||
class="px-4 py-2 border rounded font-medium text-gray-600 hover:bg-gray-50">取消</button>
|
||||
|
||||
Reference in New Issue
Block a user