feat: 支持配置微信用户已通关关卡

This commit is contained in:
richarjiang
2026-04-19 14:28:36 +08:00
parent 6e19bfa661
commit f3f27def2b
19 changed files with 7095 additions and 545 deletions

View File

@@ -1,10 +1,10 @@
'use client'
import { useState, useEffect, useCallback } from 'react'
import { useState } from 'react'
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { Button } from '@/components/ui/button'
import { Header } from '@/components/layout/header'
import { LevelList } from '@/components/levels/level-list'
import { LevelTable } from '@/components/levels/level-table'
import { LevelDialog } from '@/components/levels/level-dialog'
import { Spinner } from '@/components/ui/spinner'
import { Level, LevelFormData } from '@/types'
@@ -83,25 +83,6 @@ export default function LevelsPage() {
},
})
// Reorder mutation
const reorderMutation = useMutation({
mutationFn: async (orders: { id: string; sortOrder: number }[]) => {
const res = await apiFetch('/api/levels/reorder', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ orders }),
})
if (!res.ok) {
const error = await res.json()
throw new Error(error.error || 'Failed to reorder levels')
}
return res.json()
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['levels'] })
},
})
const handleOpenCreate = () => {
setEditingLevel(null)
setIsDialogOpen(true)
@@ -130,13 +111,6 @@ export default function LevelsPage() {
}
}
const handleReorder = useCallback(
(orders: { id: string; sortOrder: number }[]) => {
reorderMutation.mutate(orders)
},
[reorderMutation]
)
if (isLoading) {
return (
<div className="h-screen flex items-center justify-center">
@@ -165,7 +139,7 @@ export default function LevelsPage() {
<div className="h-screen flex flex-col">
<Header />
<div className="flex-1 overflow-auto p-6">
<div className="max-w-4xl mx-auto">
<div>
<div className="flex items-center justify-between mb-6">
<div>
<h1 className="text-2xl font-bold"></h1>
@@ -179,11 +153,11 @@ export default function LevelsPage() {
</Button>
</div>
<LevelList
<LevelTable
levels={levels || []}
onReorder={handleReorder}
onEdit={handleOpenEdit}
onDelete={handleDelete}
deleteConfirmId={deleteConfirmId}
/>
</div>
</div>