import {useState} from "react" import {useQueryClient} from "@tanstack/react-query" import {Text,View} from "react-native" import {useAccounts,useSwitchAccount} from "../../src/state/accounts" import {useSession} from "../../src/state/session" import {useAccountSelection} from "../../src/state/account" import {formatMoney,validInitialCash} from "../../src/lib/money" import type {Account} from "../../src/lib/types" import {Body,Button,ErrorMessage,Field,Panel,Screen,Title,styles} from "../../src/components/ui" export default function Accounts(){ const {client,session}=useSession();const {accounts,selected,isPending,isError,error:queryError,refetch}=useAccounts();const switchAccount=useSwitchAccount();const queryClient=useQueryClient() const [mode,setMode]=useState("simulation");const [name,setName]=useState("");const [cash,setCash]=useState("");const [error,setError]=useState("");const [notice,setNotice]=useState("");const [busy,setBusy]=useState(false) const alreadyExists=accounts.some(account=>account.mode===mode) async function submit(){if(busy||alreadyExists)return;setBusy(true);setError("");setNotice("");try{ if(!name.trim())throw new Error("请填写账户名称。") if(mode==="simulation"&&!validInitialCash(cash))throw new Error("初始资金应大于 0,不超过 10 亿元,最多两位小数。") const account=await client("/api/v1/accounts",{method:"POST",body:{mode,name:name.trim(),...(mode==="simulation"?{initial_cash:cash}:{})}}) useAccountSelection.getState().select(account.id);setName("");setCash("");setNotice("账户已创建,初始资金以服务端账本为准。");await queryClient.invalidateQueries({queryKey:["accounts",session?.user.id]}) }catch(e){setError(e instanceof Error?e.message:"创建账户失败,请重试。");void refetch()}finally{setBusy(false)}} async function select(id:string){setError("");try{await switchAccount(id);setNotice("已切换账户。")}catch{setError("账户切换失败,请重试。")}} return 账户管理模拟账户和真实记录账户独立保存,每种模式各可创建一个。{isPending?正在读取账户…:isError?