迁移钓鱼事件后台脚本

This commit is contained in:
2026-04-25 13:16:23 +08:00
parent ed7ff81321
commit 91ddfbb408
3 changed files with 225 additions and 62 deletions
+27 -62
View File
@@ -3,6 +3,28 @@
@section('title', '钓鱼事件管理')
@section('content')
@php
$fishingEventPayload = $events->mapWithKeys(
fn($event) => [
(string) $event->id => [
'id' => $event->id,
'emoji' => $event->emoji,
'name' => $event->name,
'message' => $event->message,
'exp' => $event->exp,
'jjb' => $event->jjb,
'weight' => $event->weight,
'sort' => $event->sort,
'is_active' => (bool) $event->is_active,
'update_url' => route('admin.fishing.update', $event->id),
'toggle_url' => route('admin.fishing.toggle', $event->id),
],
],
);
@endphp
<script type="application/json" id="admin-fishing-events-data">@json($fishingEventPayload)</script>
<div class="space-y-6">
{{-- 页头 --}}
@@ -63,14 +85,15 @@
@endif
</td>
<td class="px-4 py-3 text-center">
<button onclick="toggleEvent({{ $event->id }})" id="toggle-{{ $event->id }}"
<button type="button" data-fishing-toggle-id="{{ $event->id }}"
id="toggle-{{ $event->id }}"
class="px-2 py-1 rounded-full text-xs font-bold transition
{{ $event->is_active ? 'bg-emerald-100 text-emerald-700 hover:bg-emerald-200' : 'bg-gray-100 text-gray-500 hover:bg-gray-200' }}">
{{ $event->is_active ? '启用' : '禁用' }}
</button>
</td>
<td class="px-4 py-3 text-right">
<button onclick="openEdit({{ $event->id }})"
<button type="button" data-fishing-edit-id="{{ $event->id }}"
class="px-3 py-1 bg-indigo-50 text-indigo-700 rounded text-xs font-bold hover:bg-indigo-100 transition mr-1">
编辑
</button>
@@ -153,7 +176,7 @@
<div class="bg-white rounded-xl w-full max-w-lg shadow-2xl">
<div class="p-5 border-b border-gray-100 flex justify-between items-center">
<h3 class="font-bold text-gray-800">✏️ 编辑钓鱼事件</h3>
<button onclick="closeEdit()" class="text-gray-400 hover:text-gray-600 text-xl"></button>
<button type="button" data-fishing-edit-close class="text-gray-400 hover:text-gray-600 text-xl"></button>
</div>
<form id="edit-form" method="POST" class="p-5">
@csrf @method('PUT')
@@ -205,7 +228,7 @@
class="px-5 py-2 bg-indigo-600 text-white rounded-lg font-bold hover:bg-indigo-700 transition text-sm">
💾 保存修改
</button>
<button type="button" onclick="closeEdit()"
<button type="button" data-fishing-edit-close
class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg font-bold hover:bg-gray-200 transition text-sm">
取消
</button>
@@ -213,62 +236,4 @@
</form>
</div>
</div>
<script>
// 事件数据(供编辑弹窗填充)
const fishingEvents = @json($events->keyBy('id'));
/**
* 打开编辑弹窗并填充数据
*/
function openEdit(id) {
const e = fishingEvents[id];
if (!e) return;
document.getElementById('edit-form').action = `/admin/fishing/${id}`;
document.getElementById('edit-emoji').value = e.emoji;
document.getElementById('edit-name').value = e.name;
document.getElementById('edit-message').value = e.message;
document.getElementById('edit-exp').value = e.exp;
document.getElementById('edit-jjb').value = e.jjb;
document.getElementById('edit-weight').value = e.weight;
document.getElementById('edit-sort').value = e.sort;
document.getElementById('edit-is-active').checked = !!e.is_active;
document.getElementById('edit-modal').classList.remove('hidden');
}
/**
* 关闭编辑弹窗
*/
function closeEdit() {
document.getElementById('edit-modal').classList.add('hidden');
}
/**
* 切换事件启用/禁用状态
*/
function toggleEvent(id) {
fetch(`/admin/fishing/${id}/toggle`, {
method: 'POST',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Accept': 'application/json',
},
})
.then(r => r.json())
.then(data => {
if (!data.ok) return;
const btn = document.getElementById(`toggle-${id}`);
const row = document.getElementById(`row-${id}`);
btn.textContent = data.is_active ? '启用' : '禁用';
btn.className = `px-2 py-1 rounded-full text-xs font-bold transition ${
data.is_active
? 'bg-emerald-100 text-emerald-700 hover:bg-emerald-200'
: 'bg-gray-100 text-gray-500 hover:bg-gray-200'
}`;
row.classList.toggle('opacity-50', !data.is_active);
// 同步内存里的状态
if (fishingEvents[id]) fishingEvents[id].is_active = data.is_active;
});
}
</script>
@endsection