Files
chatroom/resources/views/admin/game-configs/partials/common-room-scope.blade.php
T

80 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@php
$roomScopeConfig = $roomScopeConfig ?? ['room_scope_mode' => 'single', 'room_ids' => [1]];
$roomScopeDataKey = $roomScopeDataKey ?? 'game';
$roomScopeTitle = $roomScopeTitle ?? '参与房间';
$roomScopeCheckedRoomIds = collect($roomScopeConfig['room_ids'] ?? [1])->map(fn ($roomId) => (int) $roomId)->all();
@endphp
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3">
<div>
<label class="mb-1 block text-xs font-bold text-gray-600">参与房间模式</label>
<select name="params[room_scope_mode]"
data-game-room-mode
class="w-full rounded-lg border border-gray-300 p-2 text-sm focus:border-indigo-400">
<option value="all" @selected(($roomScopeConfig['room_scope_mode'] ?? 'single') === 'all')>全部房间</option>
<option value="single" @selected(($roomScopeConfig['room_scope_mode'] ?? 'single') === 'single')>单选房间</option>
<option value="multiple" @selected(($roomScopeConfig['room_scope_mode'] ?? 'single') === 'multiple')>多选房间</option>
</select>
</div>
<div class="md:col-span-2">
<label class="mb-2 block text-xs font-bold text-gray-600">{{ $roomScopeTitle }}</label>
<div class="grid grid-cols-2 gap-2 rounded-xl border border-dashed border-slate-200 bg-white p-3 lg:grid-cols-3">
@foreach ($availableRooms as $room)
<label class="flex items-center gap-2 rounded-lg border border-slate-100 px-3 py-2 text-sm text-slate-600">
<input type="checkbox"
name="params[room_ids][]"
value="{{ $room->id }}"
@checked(in_array((int) $room->id, $roomScopeCheckedRoomIds, true))
data-game-room-checkbox
class="rounded border-slate-300 text-indigo-600">
<span>#{{ $room->id }} {{ $room->name }}</span>
</label>
@endforeach
</div>
<p class="mt-2 text-xs text-gray-400">单选模式下只保留一个房间,多选模式可同时勾选多个房间。</p>
</div>
</div>
@once
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function () {
function showAdminAlert(message, title = '提示', icon = '️') {
if (window.adminDialog?.alert) {
window.adminDialog.alert(message, title, icon);
return;
}
window.alert(message);
}
document.querySelectorAll('[data-game-room-form]').forEach(function (form) {
form.addEventListener('submit', function (event) {
const modeSelect = this.querySelector('[data-game-room-mode]');
const roomCheckboxes = Array.from(this.querySelectorAll('[data-game-room-checkbox]'));
const checkedRooms = roomCheckboxes.filter(function (checkbox) {
return checkbox.checked;
});
if (!modeSelect) {
return;
}
if (modeSelect.value === 'single' && checkedRooms.length > 1) {
event.preventDefault();
showAdminAlert('单选房间模式下只能选择一个房间。', '房间选择有误', '⚠️');
return;
}
if (modeSelect.value === 'multiple' && checkedRooms.length === 0) {
event.preventDefault();
showAdminAlert('多选房间模式下,请至少选择一个房间。', '房间选择有误', '⚠️');
}
});
});
});
</script>
@endpush
@endonce