"use client" import { useState, useEffect } from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import * as z from "zod" import { Button } from "@/components/ui/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { toast } from "sonner" import { apiRequest } from '@/lib/api-utils' import { useRouter } from "next/navigation" const formSchema = z.object({ name: z.string().min(2, "项目名称至少需要2个字符"), account: z.string().min(3, "账号至少需要3个字符"), password: z.string().optional(), confirmPassword: z.string().optional(), phone: z.string().optional(), memo: z.string().optional(), }) interface ProjectEditProps { projectId: string onSuccess?: () => void } interface ProjectData { id: number name: string account: string memo?: string phone?: string } export default function ProjectEdit({ projectId, onSuccess }: ProjectEditProps) { const [isLoading, setIsLoading] = useState(false) const [isFetching, setIsFetching] = useState(true) const [project, setProject] = useState(null) const router = useRouter() const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: "", account: "", password: "", confirmPassword: "", phone: "", memo: "", }, }) // 获取项目数据 useEffect(() => { const fetchProject = async () => { try { setIsLoading(true) const result = await apiRequest(`/company/profile/${projectId}`) if (result.code === 200 && result.data) { setProject(result.data) form.reset({ name: result.data.name || "", account: result.data.account || "", password: "", confirmPassword: "", phone: result.data.phone || "", memo: result.data.memo || "", }) } else { toast.error(result.msg || "获取项目信息失败") } } catch (error) { console.error("获取项目信息失败:", error) toast.error("网络错误,请稍后再试") } finally { setIsLoading(false) } } fetchProject() }, [projectId, form]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsLoading(true) try { const result = await apiRequest('/company/update', 'POST', { id: projectId, name: project?.name, account: project?.account, memo: project?.memo, phone: project?.phone, username: project?.username, status: project?.status, ...(form.getValues('password') && { password: form.getValues('password') }) }) if (result.code === 200) { toast.success("更新成功") router.push("/dashboard/projects") } else { toast.error(result.msg) } } catch (error) { toast.error("网络错误,请稍后重试") } finally { setIsLoading(false) } } if (isFetching) { return
加载中...
} return ( 编辑项目 更新项目信息和设置
( 项目名称 )} />
( 账号 )} /> ( 手机号 )} />
( 密码 )} /> ( 确认密码 )} />
( 项目描述