"use client" import * as React from "react" import { useState, useEffect } from "react" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Label } from "@/components/ui/label" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { ArrowLeft, Plus, Trash } from "lucide-react" import Link from "next/link" import { toast, Toaster } from "sonner" // 为React.use添加类型声明 declare module 'react' { function use(promise: Promise): T; function use(value: T): T; } interface Device { id: number memo: string } interface Project { id: number name: string memo: string companyId: number createTime: string account: string phone: string | null deviceCount: number friendCount: number userCount: number username: string status: number devices?: Device[] } export default function EditProjectPage({ params }: { params: { id: string } }) { const router = useRouter() const [isSubmitting, setIsSubmitting] = useState(false) const [isLoading, setIsLoading] = useState(true) const [project, setProject] = useState(null) const [password, setPassword] = useState("") const [confirmPassword, setConfirmPassword] = useState("") const { id } = React.use(params) useEffect(() => { const fetchProject = async () => { try { const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/company/detail/${id}`) const data = await response.json() if (data.code === 200) { setProject(data.data) } else { toast.error(data.msg || "获取项目信息失败") } } catch (error) { toast.error("网络错误,请稍后重试") } finally { setIsLoading(false) } } fetchProject() }, [id]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (password && password !== confirmPassword) { toast.error("两次输入的密码不一致") return } setIsSubmitting(true) try { const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/company/update`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: parseInt(id), name: project?.name, account: project?.account, memo: project?.memo, phone: project?.phone, username: project?.username, status: project?.status, ...(password && { password }) }), }) const data = await response.json() if (data.code === 200) { toast.success("更新成功") router.push("/dashboard/projects") } else { toast.error(data.msg) } } catch (error) { toast.error("网络错误,请稍后重试") } finally { setIsSubmitting(false) } } const handleAddDevice = () => { router.push(`/dashboard/projects/${id}/devices/new`) } if (isLoading) { return
加载中...
} return (

编辑项目

项目基本信息 编辑项目的名称、手机号等基础信息
setProject({ ...project, name: e.target.value })} placeholder="请输入项目名称" required />
setProject({ ...project, account: e.target.value })} placeholder="请输入登录的账号" required />
setProject({ ...project, username: e.target.value })} placeholder="用于账号登录后显示的用户名,可以填真实姓名" required />
setProject({ ...project, phone: e.target.value as string })} placeholder="手机号可用于登录" required />
setPassword(e.target.value)} placeholder="不修改请留空" />
setConfirmPassword(e.target.value)} placeholder="不修改请留空" />
{project && project.devices && project.devices.length > 0 && project.devices.map((device) => (
))}