// 云账单成本记录弹窗(新建/编辑)— 自包含状态,从 CloudBilling 提取 // Logan.Li import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Loader2 } from 'lucide-react'; import { toast } from 'sonner'; import { billingApi } from '@/services/api'; import { providerLabels } from './CloudBillingHelpers'; const emptyRecord = { provider: 'aliyun', billing_date: '', cost: '', service: '', region: '', account_name: '', description: '', }; interface Props { open: boolean; onOpenChange: (open: boolean) => void; editingRecord: any | null; onSuccess: () => void; } export function BillingRecordDialog({ open, onOpenChange, editingRecord, onSuccess }: Props) { const [form, setForm] = useState(emptyRecord); const [submitting, setSubmitting] = useState(false); // 弹窗打开时初始化表单(新建预填今日日期,编辑回填数据) // Logan.Li useEffect(() => { if (!open) return; if (editingRecord) { setForm({ provider: editingRecord.provider, billing_date: editingRecord.billing_date, cost: editingRecord.cost, service: editingRecord.service || '', region: editingRecord.region || '', account_name: editingRecord.account_name || '', description: editingRecord.description || '', }); } else { setForm({ ...emptyRecord, billing_date: new Date().toISOString().slice(0, 10) }); } }, [open, editingRecord]); const handleSave = async () => { if (!form.provider || !form.billing_date || !form.cost) { toast.error('请填写必填字段'); return; } setSubmitting(true); try { const data = { ...form, cost: parseFloat(form.cost) }; if (editingRecord) { await billingApi.remove(editingRecord.id); await billingApi.create(data); } else { await billingApi.create(data); } onOpenChange(false); onSuccess(); toast('保存成功'); } catch (e: any) { toast.error('保存失败', { description: (e as Record).message }); } finally { setSubmitting(false); } }; return ( {editingRecord ? '编辑成本记录' : '记录成本'} 记录一条每日云资源成本
setForm({ ...form, billing_date: e.target.value })} />
setForm({ ...form, cost: e.target.value })} />
setForm({ ...form, service: e.target.value })} />
setForm({ ...form, region: e.target.value })} />
setForm({ ...form, account_name: e.target.value })} />
setForm({ ...form, description: e.target.value })} />
); }