You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.8 KiB
220 lines
7.8 KiB
import { useEffect, useMemo, useState } from "react";
|
|
import useCopyLink from "~/hooks/useCopy";
|
|
import { getTime, splitAddress, toThousands } from "~/utils";
|
|
import store from "~/store";
|
|
import { observer } from "mobx-react";
|
|
import { useRouter } from "~/hooks/useRouter";
|
|
import BackBar from "~/components/BackBar";
|
|
import { Cell, Empty, List, Tabs } from "react-vant";
|
|
import { debounce } from 'lodash';
|
|
import '~/styles/personal.scss';
|
|
import { history_record } from "~/api";
|
|
|
|
const Record = () => {
|
|
|
|
const { token } = store.state;
|
|
const { push, location } = useRouter()
|
|
console.log(location);
|
|
|
|
const recordTabs = useMemo(() => ['充值', '提现', '收益'], []);
|
|
const [recordIndex, setRecordIndex] = useState(location.state ? location.state.index : 0);
|
|
const { copyVal } = useCopyLink();
|
|
const [query, setQuery] = useState([
|
|
{ page: 1, page_size: 20 },
|
|
{ page: 1, page_size: 20 },
|
|
{ page: 1, page_size: 20 },
|
|
]);
|
|
const [finished, setFinished] = useState<boolean[]>([true, true, true]);
|
|
const [assetsRecord, setAssetsRecord] = useState([
|
|
[] as any[],
|
|
[] as any[],
|
|
[] as any[],
|
|
]);
|
|
|
|
const getAssetsRecord = debounce(async () => {
|
|
|
|
let res: any = await history_record({ type: recordIndex + 1, ...query[recordIndex] });
|
|
if (res.code === 0) {
|
|
if (res.data.length < 20) {
|
|
if (assetsRecord[recordIndex].length <= 0) {
|
|
assetsRecord[recordIndex] = res.data
|
|
} else {
|
|
assetsRecord[recordIndex] = [...assetsRecord[recordIndex], ...res.data]
|
|
}
|
|
finished[recordIndex] = true
|
|
setFinished([...finished]);
|
|
setAssetsRecord([...assetsRecord]);
|
|
return
|
|
}
|
|
query[recordIndex].page = query[recordIndex].page + 1
|
|
if (assetsRecord[recordIndex].length <= 0) {
|
|
assetsRecord[recordIndex] = res.data
|
|
} else {
|
|
assetsRecord[recordIndex] = [...assetsRecord[recordIndex], ...res.data]
|
|
};
|
|
finished[recordIndex] = false;
|
|
setFinished([...finished]);
|
|
setAssetsRecord([...assetsRecord]);
|
|
setQuery([...query]);
|
|
};
|
|
}, 200);
|
|
|
|
const renderItem = (index: number) => {
|
|
let el = [
|
|
<RechargeRecord list={assetsRecord[recordIndex]} copy={copyVal} finished={finished[recordIndex]} getData={getAssetsRecord} />,
|
|
<WithdrawRecord list={assetsRecord[recordIndex]} copy={copyVal} finished={finished[recordIndex]} getData={getAssetsRecord} />,
|
|
<TransferRecord list={assetsRecord[recordIndex]} finished={finished[recordIndex]} getData={getAssetsRecord} />,
|
|
];
|
|
return el[index];
|
|
};
|
|
|
|
useEffect(() => {
|
|
token && assetsRecord[recordIndex].length <= 0 && getAssetsRecord();
|
|
!token && push('/', null, true);
|
|
!token && setFinished([true, true, true, true, true, true]);
|
|
}, [recordIndex, token]);
|
|
|
|
|
|
return (
|
|
<div className="plr-2 record">
|
|
<BackBar
|
|
title='账单'
|
|
/>
|
|
<Tabs
|
|
swipeable
|
|
type="capsule"
|
|
background="rgb(248,247,255)"
|
|
sticky
|
|
defaultActive={recordIndex}
|
|
offsetTop={window.innerWidth / 430 * 60}
|
|
onChange={(_, index) => setRecordIndex(index)}
|
|
align="start"
|
|
className="tabs"
|
|
lazyRender
|
|
>
|
|
{
|
|
recordTabs.map((item, index) => (
|
|
<Tabs.TabPane
|
|
key={index}
|
|
title={item}
|
|
titleStyle={{ width: 70, height: 30, padding: 0 }}
|
|
>
|
|
{renderItem(index)}
|
|
</Tabs.TabPane>
|
|
))
|
|
}
|
|
</Tabs>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
interface ChildProps {
|
|
list: any[],
|
|
copy?: Function,
|
|
finished: boolean,
|
|
getData: Function
|
|
}
|
|
|
|
const RechargeRecord = (
|
|
{ list, copy, finished, getData }: ChildProps
|
|
) => {
|
|
|
|
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
|
|
|
|
return (
|
|
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
|
|
{
|
|
list.map((item) => (
|
|
<Cell key={item.id} className="ptb-1" style={{ background: 'none' }}>
|
|
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
<div>
|
|
<div className='fz-wb-550'>{item.name}</div>
|
|
<div className='sub-text fz-14 mt-6px'>{getTime(item.time * 1000)}</div>
|
|
<div className='sub-text fz-14'>
|
|
交易哈希:{splitAddress(item.tx_hash, 10)}
|
|
{
|
|
item.tx_hash && (
|
|
<i className='iconfont icon-fuzhi_copy black ml-5px' onClick={() => copy && copy(item.tx_hash)}></i>
|
|
)
|
|
}
|
|
</div>
|
|
</div>
|
|
<div className='column-justify-between tae'>
|
|
<div className='green fz-wb-550'>+{toThousands(item.amount)} {item.symbol}</div>
|
|
<div className={`tar ${item.status === 1 && 'green'}`}>
|
|
{item.status === 1 ? '完成' : '確認中'}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Cell>
|
|
))
|
|
}
|
|
</List >
|
|
)
|
|
}
|
|
|
|
const WithdrawRecord = ({ list, finished, getData, copy }: ChildProps) => {
|
|
|
|
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
|
|
|
|
return (
|
|
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
|
|
{
|
|
list.map((item, index) => (
|
|
<Cell className='ptb-1' key={item.id} style={{ background: 'none' }}>
|
|
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
<div>
|
|
<div className='fz-wb-550'>提现</div>
|
|
<div className='sub-color fz-14'>{getTime(item.time * 1000)}</div>
|
|
<div className='sub-color fz-14'>
|
|
交易哈希:{item.tx_hash && splitAddress(item.tx_hash, 8)}
|
|
{item.tx_hash && <i className='iconfont icon-fuzhi_copy black ml-5px' onClick={() => {
|
|
copy && copy(item.tx_hash)
|
|
}}></i>}
|
|
</div>
|
|
</div>
|
|
<div className='column-justify-between tae'>
|
|
<div className='tar'>
|
|
<div className="red fz-wb-550">-{toThousands(item.amount)} {item.symbol}</div>
|
|
<div className="sub-text fz-14">手續費:{item.withdraw_fee} {item.withdraw_fee_symbol}</div>
|
|
</div>
|
|
<div className='tar sub-text fz-14'>{item.status === 4 ? '完成' : '確認中'}</div>
|
|
</div>
|
|
</div>
|
|
</Cell>
|
|
))
|
|
}
|
|
</List>
|
|
|
|
)
|
|
}
|
|
|
|
const TransferRecord = ({ list, finished, getData }: ChildProps) => {
|
|
|
|
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
|
|
|
|
return (
|
|
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
|
|
{
|
|
list.map((item, index) => (
|
|
<Cell className="ptb-1" key={item.id} style={{ background: 'none' }}>
|
|
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
<div>
|
|
<div className='fz-wb-550'> {item.name}</div>
|
|
<div className='sub-color fz-14 mt-6px'>{getTime(item.time * 1000)}</div>
|
|
</div>
|
|
<div className='column-justify-between tar fz-wb-550'>
|
|
<div>
|
|
<div className=" green">+{toThousands(item.amount)} {item.symbol}</div>
|
|
</div>
|
|
<div className='sub-text'>+{toThousands(item.amount_usdt)} USDT(價值)</div>
|
|
</div>
|
|
</div>
|
|
</Cell>
|
|
))
|
|
}
|
|
</List>
|
|
)
|
|
}
|
|
|
|
export default observer(Record);
|