// 云账单成本记录弹窗(新建/编辑)— 自包含状态,从 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 '@/api'; import { providerLabels } from './CloudBillingHelpers'; import type { JsonData } from '@/types/common'; import i18n from '@/i18n'; const emptyRecord = { provider: 'aliyun', billing_date: '', cost: '', service: '', region: '', account_name: '', description: '', }; interface Props { open: boolean; onOpenChange: (open: boolean) => void; editingRecord: JsonData | 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(i18n.t('cloud.billingrecorddi.sd8a97c17')); 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) { toast.error(i18n.t('kubernetes.msg.saveFailed'), { description: (e as JsonData).message }); } finally { setSubmitting(false); } }; return ( {editingRecord ? i18n.t('cloud.billingrecorddi.s3c91e420') : i18n.t('cloud.recordCost')} {i18n.t('cloud.billingrecorddi.s09e541fd')}
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 })} />
); }