blob: 609e6c603a07143a8f1431a5fbb74d2ad5766aa2 [file] [log] [blame]
import React, { useState, useEffect } from 'react';
import { Table, Button, message, Space } from 'antd';
import axios from 'axios'; // 新增 axios 导入
const BountyManage: React.FC = () => {
const [dataSource, setDataSource] = useState<API.Bounty[]>([]);
// 加载悬赏列表(修改请求方式)
useEffect(() => {
const loadBountyList = async () => {
try {
const res = await axios.get('/api/bounties', { params: { status: [0, 1, 2].join(',') } }); // 替换 get 为 axios.get
if (res.data.code === 200) {
setDataSource(res.data.data.records || []);
}
} catch (err) {
message.error('加载悬赏列表失败');
}
};
loadBountyList();
}, []);
// 操作列(修改请求方式)
const handleClose = async (id: number) => {
try {
//这个接口哪来的??
const res = await axios.post('/api/bounties/close', { id }); // 替换 post 为 axios.post
if (res.data.code === 200) {
message.success('悬赏已关闭');
setDataSource(dataSource.map(item => item.id === id ? { ...item, status: 2 } : item));
}
} catch (err) {
message.error('关闭失败');
}
};
const columns = [
{ title: '我是manage标题', dataIndex: 'title' },
{ title: '奖励', dataIndex: 'reward' },
{
title: '状态',
dataIndex: 'status',
// 显式声明 status 为 number 类型
render: (status: number) => status === 0 ? '进行中' : status === 1 ? '已完成' : '已关闭'
},
{
title: '操作',
// 显式声明 record 为 API.Bounty 类型(需确保 API.Bounty 已在 types.d.ts 中定义)
render: (value: unknown, record: API.Bounty) => (
<Space>
<Button type="link" onClick={() => handleClose(record.id)}>关闭</Button>
</Space>
)
}
];
return (
<div className="page-container">
<h2>悬赏管理</h2>
<Table
dataSource={dataSource}
columns={columns}
rowKey="id"
pagination={{ pageSize: 10 }}
/>
</div>
);
};
export default BountyManage;