"use client"; import { DeleteOutlined, EditOutlined, PlusOutlined, ReloadOutlined, SearchOutlined } from "@ant-design/icons"; import { ProTable, type ProColumns } from "@ant-design/pro-components"; import { Button, Card, Col, Form, Input, InputNumber, Modal, Row, Space, Tag, Tooltip, Typography } from "antd"; import dayjs from "dayjs"; import { useEffect, useState } from "react"; import type { AdminCreditLog } from "@/services/api/admin"; import { useAdminCreditLogs } from "./use-admin-credit-logs"; type CreditLogFormValues = Partial; const creditLogTypeLabels: Record = { admin_adjust: "后台调整", ai_consume: "模型消费", ai_refund: "失败返还", }; export default function AdminCreditLogsPage() { const { logs, keyword, page, pageSize, total, isLoading, searchLogs, changePage, changePageSize, resetFilters, refreshLogs, saveLog: saveAdminLog, deleteLog } = useAdminCreditLogs(); const [form] = Form.useForm(); const [keywordText, setKeywordText] = useState(keyword); const [editingLog, setEditingLog] = useState | null>(null); const [deletingLog, setDeletingLog] = useState(null); useEffect(() => setKeywordText(keyword), [keyword]); useEffect(() => { if (editingLog) form.setFieldsValue({ type: "admin_adjust", amount: 0, balance: 0, ...editingLog }); }, [editingLog, form]); const saveLog = async () => { const value = await form.validateFields(); await saveAdminLog({ ...editingLog, ...value }); setEditingLog(null); }; const columns: ProColumns[] = [ { title: "用户 ID", dataIndex: "userId", width: 220, render: (_, item) => {item.userId}, }, { title: "类型", dataIndex: "type", width: 140, render: (_, item) => {creditLogTypeLabels[item.type] || item.type || "-"}, }, { title: "变动", dataIndex: "amount", width: 100, render: (_, item) => = 0 ? "success" : "danger"}>{item.amount}, }, { title: "余额", dataIndex: "balance", width: 100, }, { title: "备注", dataIndex: "remark", ellipsis: true, render: (_, item) => {item.remark || "-"}, }, { title: "创建时间", dataIndex: "createdAt", width: 180, render: (_, item) => {item.createdAt ? dayjs(item.createdAt).format("YYYY-MM-DD HH:mm:ss") : "-"}, }, { title: "操作", key: "actions", width: 96, align: "right", render: (_, item) => ( rowKey="id" columns={columns} dataSource={logs} loading={isLoading} search={false} defaultSize="middle" tableLayout="fixed" cardProps={{ variant: "borderless" }} headerTitle={ 算力点日志 {total} 条 } options={{ density: true, setting: true, reload: () => void refreshLogs() }} toolBarRender={() => [ , ]} pagination={{ current: page, pageSize, total, showSizeChanger: true, pageSizeOptions: [10, 20, 50, 100], showTotal: (value) => `共 ${value} 条`, onChange: (nextPage, nextPageSize) => (nextPageSize !== pageSize ? changePageSize(nextPageSize) : changePage(nextPage)), }} /> setEditingLog(null)} onOk={() => void saveLog()} okText="保存" cancelText="取消" destroyOnHidden>
setDeletingLog(null)} onOk={async () => { if (!deletingLog) return; await deleteLog(deletingLog.id); setDeletingLog(null); }} okText="删除" okButtonProps={{ danger: true }} cancelText="取消" > 确定删除这条算力点日志吗? ); }