import React, { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { DollarSign, CheckCircle, ArrowLeft } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../../contexts/AuthContext'; import { supabase } from '../../supabase/client'; import type { Payment, WashingPlan } from '../../types'; interface PaymentWithPlan extends Payment { plan?: WashingPlan; } export function WashingPaymentPending() { const navigate = useNavigate(); const { auth } = useAuth(); const [payments, setPayments] = useState([]); const [loading, setLoading] = useState(true); const [confirming, setConfirming] = useState(null); useEffect(() => { if (!auth.company) return; fetchPayments(); }, [auth.company]); const fetchPayments = async () => { // 获取当前水洗厂作为收款方的待结款 const { data: paymentData } = await supabase .from('payments') .select('*') .eq('to_company_id', auth.company!.id) .eq('status', 'pending'); if (!paymentData || paymentData.length === 0) { setPayments([]); setLoading(false); return; } // 获取关联的水洗计划信息 const planIds = paymentData.map(p => p.plan_id); const { data: planData } = await supabase .from('washing_plans') .select('*') .in('id', planIds); const planMap: Record = {}; (planData || []).forEach(p => { planMap[p.id] = p; }); const paymentsWithPlans = paymentData.map(p => ({ ...p, plan: planMap[p.plan_id] })); setPayments(paymentsWithPlans); setLoading(false); }; const totalAmount = payments.reduce((sum, item) => sum + item.amount, 0); const handleConfirmPay = async (paymentId: string) => { setConfirming(paymentId); const now = new Date().toISOString(); const { error } = await supabase .from('payments') .update({ status: 'completed' as const, paid_at: now }) .eq('id', paymentId); if (error) { console.error('结款失败:', error); } else { await fetchPayments(); } setConfirming(null); }; return (
navigate('/washing')} className="p-2 hover:bg-gray-200 rounded-full transition-colors will-change-transform" >

待结款

{loading ? (

加载中...

) : ( <>

待结款总额

¥{totalAmount.toLocaleString()}

{payments.length === 0 ? ( 暂无待结款记录 ) : (
{payments.map((item, index) => (
{item.plan?.plan_code || '-'}

已完成: {item.quantity}米 × ¥{item.price_per_meter}/米

¥{item.amount.toLocaleString()}

handleConfirmPay(item.id)} disabled={confirming === item.id} className="flex items-center gap-1.5 sm:gap-2 px-3 sm:px-4 py-1.5 sm:py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors disabled:opacity-50 text-xs sm:text-sm will-change-transform" > {confirming === item.id ? '确认中...' : '确认结款'}
))}
)} )}
); }