"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, X } from "lucide-react" import Link from "next/link" import { toast, Toaster } from "sonner" import Image from "next/image" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog" // 为React.use添加类型声明 declare module 'react' { function use(promise: Promise): T; function use(value: T): T; } interface Device { id: number memo: string imei: string phone: string model: string brand: string alive: number createTime: number } 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 s2_accountId?: 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 [isModalOpen, setIsModalOpen] = useState(false) const [qrCodeData, setQrCodeData] = useState("") const [isAddingDevice, setIsAddingDevice] = useState(false) 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 = async () => { if (!project?.s2_accountId) { toast.error("无法添加设备,未找到账号ID") return } setIsAddingDevice(true) try { const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/v1/api/device/add`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ accountId: project.s2_accountId }), }) const data = await response.json() if (data.code === 200 && data.data?.qrCode) { setQrCodeData(data.data.qrCode) setIsModalOpen(true) } else { toast.error(data.msg || "获取设备二维码失败") } } catch (error) { toast.error("网络错误,请稍后重试") } finally { setIsAddingDevice(false) } } const closeModal = () => { setIsModalOpen(false) setQrCodeData("") } 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) => ( ))}
设备名称 IMEI 手机号 型号 品牌 状态 添加时间
{device.memo} {device.imei || '-'} {device.phone || '-'} {device.model || '-'} {device.brand || '-'} {device.alive === 1 ? '在线' : '离线'} {device.createTime || '-'}
)}