import {useState} from "react" import {Text} from "react-native" import {useQuery,useQueryClient} from "@tanstack/react-query" import {useRouter} from "expo-router" import {useSession} from "../../src/state/session" import {useAccounts} from "../../src/state/accounts" import {Body,Button,EmptyState,ErrorMessage,Field,Panel,Screen,Title,styles} from "../../src/components/ui" import type {Fill,Portfolio} from "../../src/lib/fills" export default function PortfolioScreen(){ const {session,client}=useSession(),{selected:account}=useAccounts(),router=useRouter(),cache=useQueryClient(),enabled=!!session&&account?.mode==="simulation" const [reversing,setReversing]=useState(null),[reason,setReason]=useState(""),[busy,setBusy]=useState(false),[error,setError]=useState("") const portfolio=useQuery({queryKey:["portfolio",session?.user.id,account?.id],enabled,queryFn:({signal})=>client(`/api/v1/accounts/${account!.id}/portfolio`,{signal})}) const fills=useQuery({queryKey:["fills",session?.user.id,account?.id],enabled,queryFn:({signal})=>client(`/api/v1/accounts/${account!.id}/fills`,{signal})}) const latest=fills.data?.find(f=>!f.reversed) async function reverse(){if(!reversing)return;setBusy(true);setError("");try{await client(`/api/v1/fills/${reversing.id}/reverse`,{method:"POST",body:{reason}});setReversing(null);await Promise.all(["portfolio","fills","accounts","budget","plans"].map(key=>cache.invalidateQueries({queryKey:[key]})))}catch(e){setError(e instanceof Error?e.message:"冲正失败")}finally{setBusy(false)}} return 持仓与账本当前账户:{account?.name??"未选择"}。现金与已实现盈亏来自记录的成交;行情未接入,市值和浮盈亏未知。{!account&&