import { useState } from 'react'; import { Form, Input, Select, Button, Table, Tag, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { LEDGER_TYPE_LABELS, fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; type Row = { id: string; type: string; amount: number; balanceAfter: number; remark: string | null; createdAt: string; user?: { userNo: string }; coupon?: { couponNo: string }; }; export default function BenefitLedgersPage() { const [form] = Form.useForm(); const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize } = useAdminList( '/admin/benefit/ledgers', () => { const qs = new URLSearchParams(); if (filters.userId) qs.set('userId', filters.userId); if (filters.couponId) qs.set('couponId', filters.couponId); if (filters.type) qs.set('type', filters.type); return qs; }, [filters], ); const columns: ColumnsType = [ { title: '类型', dataIndex: 'type', width: 90, render: (t) => {LEDGER_TYPE_LABELS[t] || t} }, { title: '用户', dataIndex: ['user', 'userNo'], width: 120, ellipsis: false }, { title: '券号', dataIndex: ['coupon', 'couponNo'], width: 200, ellipsis: false }, { title: '变动', dataIndex: 'amount', width: 90, render: (v) => `${v >= 0 ? '+' : ''}${v}` }, { title: '余额后', dataIndex: 'balanceAfter', width: 90 }, { title: '备注', dataIndex: 'remark', ellipsis: true }, { title: '时间', dataIndex: 'createdAt', width: 160, render: fmtTime }, ]; return (
权益流水
{ setFilters(v); setPage(1); }}>