|
|
@@ -1,5 +1,5 @@
|
|
|
import { useState } from 'react'
|
|
|
-import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
|
|
+import { useQuery, useMutation } from '@tanstack/react-query'
|
|
|
import { Plus, Search, Edit, Trash2 } from 'lucide-react'
|
|
|
import { format } from 'date-fns'
|
|
|
import { useForm } from 'react-hook-form'
|
|
|
@@ -26,8 +26,6 @@ const createFormSchema = CreateAdvertisementTypeDto
|
|
|
const updateFormSchema = UpdateAdvertisementTypeDto
|
|
|
|
|
|
export const AdvertisementTypeManagement = () => {
|
|
|
- const queryClient = useQueryClient()
|
|
|
-
|
|
|
// 状态管理
|
|
|
const [searchParams, setSearchParams] = useState<AdvertisementTypeQueryParams>({ page: 1, limit: 10, search: '' })
|
|
|
const [isModalOpen, setIsModalOpen] = useState(false)
|
|
|
@@ -37,7 +35,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
const [typeToDelete, setTypeToDelete] = useState<number | null>(null)
|
|
|
|
|
|
// 表单实例
|
|
|
- const createForm = useForm<AdvertisementTypeFormData>({
|
|
|
+ const createForm = useForm({
|
|
|
resolver: zodResolver(createFormSchema),
|
|
|
defaultValues: {
|
|
|
name: '',
|
|
|
@@ -47,7 +45,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
- const updateForm = useForm<AdvertisementTypeFormData>({
|
|
|
+ const updateForm = useForm({
|
|
|
resolver: zodResolver(updateFormSchema),
|
|
|
defaultValues: {
|
|
|
name: '',
|
|
|
@@ -61,7 +59,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
const { data, isLoading, refetch } = useQuery({
|
|
|
queryKey: ['advertisement-types', searchParams],
|
|
|
queryFn: async () => {
|
|
|
- const res = await advertisementTypeClient.$get({
|
|
|
+ const res = await advertisementTypeClient.index.$get({
|
|
|
query: {
|
|
|
page: searchParams.page,
|
|
|
pageSize: searchParams.limit,
|
|
|
@@ -76,7 +74,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
// 创建mutation
|
|
|
const createMutation = useMutation({
|
|
|
mutationFn: async (data: AdvertisementTypeFormData) => {
|
|
|
- const res = await advertisementTypeClient.$post({ json: data })
|
|
|
+ const res = await advertisementTypeClient.index.$post({ json: data })
|
|
|
if (res.status !== 201) throw new Error('创建失败')
|
|
|
return await res.json()
|
|
|
},
|
|
|
@@ -95,7 +93,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
const updateMutation = useMutation({
|
|
|
mutationFn: async ({ id, data }: { id: number; data: AdvertisementTypeFormData }) => {
|
|
|
const res = await advertisementTypeClient[':id']['$put']({
|
|
|
- param: { id: id.toString() },
|
|
|
+ param: { id: id },
|
|
|
json: data
|
|
|
})
|
|
|
if (res.status !== 200) throw new Error('更新失败')
|
|
|
@@ -116,7 +114,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
const deleteMutation = useMutation({
|
|
|
mutationFn: async (id: number) => {
|
|
|
const res = await advertisementTypeClient[':id']['$delete']({
|
|
|
- param: { id: id.toString() }
|
|
|
+ param: { id: id }
|
|
|
})
|
|
|
if (res.status !== 204) throw new Error('删除失败')
|
|
|
return await res.json()
|
|
|
@@ -172,7 +170,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const handleCreateSubmit = async (data: AdvertisementTypeFormData) => {
|
|
|
+ const handleCreateSubmit = async (data: any) => {
|
|
|
try {
|
|
|
createMutation.mutate(data)
|
|
|
} catch (error) {
|
|
|
@@ -180,7 +178,7 @@ export const AdvertisementTypeManagement = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const handleUpdateSubmit = async (data: AdvertisementTypeFormData) => {
|
|
|
+ const handleUpdateSubmit = async (data: any) => {
|
|
|
if (!editingType) return
|
|
|
|
|
|
try {
|
|
|
@@ -333,8 +331,8 @@ export const AdvertisementTypeManagement = () => {
|
|
|
<Button
|
|
|
variant="outline"
|
|
|
size="sm"
|
|
|
- onClick={() => setSearchParams(prev => ({ ...prev, page: prev.page - 1 }))}
|
|
|
- disabled={searchParams.page <= 1}
|
|
|
+ onClick={() => setSearchParams(prev => ({ ...prev, page: (prev.page || 1) - 1 }))}
|
|
|
+ disabled={(searchParams.page || 1) <= 1}
|
|
|
data-testid="prev-page-button"
|
|
|
>
|
|
|
上一页
|
|
|
@@ -345,8 +343,8 @@ export const AdvertisementTypeManagement = () => {
|
|
|
<Button
|
|
|
variant="outline"
|
|
|
size="sm"
|
|
|
- onClick={() => setSearchParams(prev => ({ ...prev, page: prev.page + 1 }))}
|
|
|
- disabled={searchParams.page >= Math.ceil(data.pagination.total / searchParams.limit)}
|
|
|
+ onClick={() => setSearchParams(prev => ({ ...prev, page: (prev.page || 1) + 1 }))}
|
|
|
+ disabled={(searchParams.page || 1) >= Math.ceil(data.pagination.total / (searchParams.limit || 10))}
|
|
|
data-testid="next-page-button"
|
|
|
>
|
|
|
下一页
|