import { useState } from 'react'
import { useQuery } from '@tanstack/react-query'
import api from '@/lib/api'
import { CollapsibleSection } from '@/components/CollapsibleSection'
import { DataTable } from '@/components/DataTable'
import { Pagination } from '@/components/Pagination'
import { LoadingSpinner } from '@/components/LoadingSpinner'
import { formatCurrency, formatPercent } from '@/lib/utils'
const PAGE_SIZE = 20
export function FixedVariableTab({ month }: { month: string }) {
const [page, setPage] = useState(1)
const [sort, setSort] = useState('fixed_rate_pct')
const [filter, setFilter] = useState('')
const [order, setOrder] = useState('desc')
const { data, isLoading } = useQuery({ queryKey: ['se/fixed-variable', month, page, sort, filter, order], queryFn: () => api.get(`/store-expense/fixed-variable?page=${page}&page_size=${PAGE_SIZE}&sort=${sort}&filter=${filter}&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: '亏损门店' },
]
const sorts = [
{ key: 'fixed_rate_pct', label: '固定费用率' },
{ key: 'variable_rate_pct', label: '变动费用率' },
{ key: 'received', label: '实收' },
{ key: 'contribution_after_variable', label: '边际贡献' },
{ key: 'break_even_sales', label: '盈亏平衡额' },
]
return (
{filters.map(f => (
))}
|
{sorts.map(s => (
))}
|
formatCurrency(r.received) },
{ key: 'fixed_expense', label: '固定费用', align: 'right', render: (r) => formatCurrency(r.fixed_expense) },
{ key: 'fixed_rate_pct', label: '固定费用率', align: 'right', render: (r) => formatPercent(r.fixed_rate_pct) },
{ key: 'variable_expense', label: '变动费用', align: 'right', render: (r) => formatCurrency(r.variable_expense) },
{ key: 'variable_rate_pct', label: '变动费用率', align: 'right', render: (r) => formatPercent(r.variable_rate_pct) },
{ key: 'contribution_after_variable', label: '边际贡献(扣变动)', align: 'right', render: (r) => {formatCurrency(r.contribution_after_variable)} },
{ key: 'break_even_sales', label: '盈亏平衡销售额', align: 'right', render: (r) => formatCurrency(r.break_even_sales) },
]}
data={rows}
/>
)
}