'use client'; import React, { useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { useUserStore } from './store/user'; import { useAdminStore } from './store/admin'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Popover, PopoverContent, PopoverTrigger, } from '@/components/ui/popover'; import { Plus, Pencil, Trash2 } from 'lucide-react'; const TableList = () => { const { list, setShowEdit, setFormData, getList } = useUserStore(); const { deleteUser } = useAdminStore(); const [openPopover, setOpenPopover] = React.useState(null); const handleDelete = async (id: string) => { await deleteUser(id); setOpenPopover(null); getList(); }; return (
ID 用户名 描述 操作 {list.map((user) => ( {user.id} {user.username} {user.description || '-'} setOpenPopover(open ? user.id : null)} >
删除

确认删除用户 "{user.username}"?

此操作无法撤销。

))}
); }; const FormModal = () => { const { showEdit, setShowEdit, formData, setFormData, getList } = useUserStore(); const { createNewUser, updateUser } = useAdminStore(); const { handleSubmit, formState: { errors }, reset, register, } = useForm(); useEffect(() => { if (!showEdit) return; if (formData?.id) { reset({ username: formData.username, description: formData.description }); } else { reset({ username: '', description: '' }); } }, [formData, showEdit, reset]); const onSubmit = async (data: any) => { let res; if (formData?.id) { res = await updateUser(formData.id, data); } else { res = await createNewUser(data); } if (res?.code === 200) { setShowEdit(false); setFormData({}); getList(); } }; return ( { setShowEdit(open); if (!open) setFormData({}); }}> {formData?.id ? '编辑用户' : '添加用户'}
{errors.username && {errors.username.message as string}}
{!formData?.id && (
{errors.password && {errors.password.message as string}}
)}
); }; export const List = () => { const { getList, setShowEdit, setFormData } = useUserStore(); useEffect(() => { getList(); }, [getList]); return (
); }; export default List