import { useState } from 'react' import { useQuery } from '@tanstack/react-query' import api from '@/lib/api' import { CollapsibleSection } from '@/components/CollapsibleSection' import { FilterableTable } from '@/components/FilterableTable' import { LoadingSpinner } from '@/components/LoadingSpinner' import { formatCurrency, formatPercent, formatNumber } from '@/lib/utils' const PAGE_SIZE = 20 const RISK_COLORS: Record = { '即将到期': 'text-red-600 font-medium', '年内到期': 'text-orange-600 font-medium', '明年上半年到期': 'text-yellow-600', '租金占比偏高': 'text-orange-600', '正常': '', } export function RentRiskTab({ month }: { month: string }) { const [page, setPage] = useState(1) const [sort, setSort] = useState('rent_rate_pct') const [filter, setFilter] = useState('') const [riskOnly, setRiskOnly] = useState(false) const [order, setOrder] = useState<'asc' | 'desc'>('desc') const { data, isLoading } = useQuery({ queryKey: ['se/rent', month, page, sort, filter, riskOnly, order], queryFn: () => api.get(`/store-expense/rent-risk?page=${page}&page_size=${PAGE_SIZE}&sort=${sort}&filter=${filter}&risk_only=${riskOnly}&order=${order}&month=${month}`) }) if (isLoading) return const rows = (data as any)?.data || [] const meta = (data as any)?.meta || { page, pageSize: PAGE_SIZE, total: 0 } const filters = [ { key: '', label: '全部' }, { key: 'profitable', label: '盈利门店' }, { key: 'loss', label: '亏损门店' }, { key: 'zero_sales', label: '零销售门店' }, ] const sorts = [ { key: 'rent_rate_pct', label: '租金率' }, { key: 'rent_expense', label: '租金' }, { key: 'received', label: '实收' }, { key: 'received_per_sqm', label: '坪效' }, { key: 'lease_expiry_date', label: '租约到期' }, ] return (
formatCurrency(r.received) }, { key: 'rent_expense', label: '租金', align: 'right', render: (r) => formatCurrency(r.rent_expense) }, { key: 'rent_rate_pct', label: '租金率', align: 'right', render: (r) => 20 ? 'text-red-600 font-medium' : ''}>{formatPercent(r.rent_rate_pct)} }, { key: 'area_sqm', label: '面积(㎡)', align: 'right', render: (r) => formatNumber(r.area_sqm) }, { key: 'received_per_sqm', label: '坪效', align: 'right', render: (r) => formatNumber(r.received_per_sqm) }, { key: 'lease_expiry_date', label: '租约到期', render: (r) => r.lease_expiry_date ? new Date(r.lease_expiry_date).toLocaleDateString('zh-CN') : '-' }, { key: 'risk_level', label: '风险等级', render: (r) => {r.risk_level} }, { key: 'suggestion', label: '建议' }, ]} />
) }