'use client'; import { useState, useEffect } from 'react'; import api from '@/lib/api'; import { RefreshCw, Search, CheckCheck } from 'lucide-react'; import Pagination from '@/components/common/Pagination'; import ConfirmationTable from '@/components/admin/payments/ConfirmationTable'; import ConfirmationDetailModal from '@/components/admin/payments/ConfirmationDetailModal'; import { PaymentConfirmation } from '@/types/payment'; export default function PaymentConfirmationsPage() { const [list, setList] = useState([]); const [loading, setLoading] = useState(true); // 分页与搜索 const [page, setPage] = useState(1); const [pageSize] = useState(10); const [total, setTotal] = useState(0); const [keyword, setKeyword] = useState(''); // 弹窗状态 const [selectedItem, setSelectedItem] = useState(null); const [isDetailOpen, setIsDetailOpen] = useState(false); useEffect(() => { fetchData(1); }, []); const fetchData = async (targetPage: number) => { setLoading(true); try { const res = await api.post('/api/vas/payment_confirmation/list_all', {}, { params: { page: targetPage, size: pageSize, keyword: keyword } }); const data = res.data.data; if (data && Array.isArray(data.items)) { setList(data.items); setTotal(data.total || 0); } else { setList([]); setTotal(0); } setPage(targetPage); } catch (error) { console.error("Fetch confirmations failed", error); setList([]); } finally { setLoading(false); } }; const handleSearch = () => fetchData(1); // 打开详情 const handleViewDetail = (item: PaymentConfirmation) => { setSelectedItem(item); setIsDetailOpen(true); }; // 确认收款 const handleApprove = async (item: PaymentConfirmation) => { const moneyStr = `${(item.amount / 100).toFixed(2)} ${item.currency}`; if (!confirm(`确认已收到支付单 #${item.payment_id} 的款项 (${moneyStr}) 吗?`)) return; try { // 使用新的确认接口 await api.post('/api/vas/payment/confirm_by_admin', { status: 'confirmed', admin_confirmed_at: new Date().toISOString() }, { params: { id: item.id } // 这里的 id 是 confirmation record id }); alert('已确认收款'); fetchData(page); } catch (e: any) { alert('操作失败: ' + (e.response?.data?.message || '未知错误')); } }; return (
{/* Header */}

支付确认管理

处理用户提交的“我已付款”确认请求

setKeyword(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleSearch()} />
{/* Table */}
{/* Modal */} setIsDetailOpen(false)} data={selectedItem} onApprove={handleApprove} />
); }