新功能(#25): 拆分用户中心提现退款记录页签
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
} from "@workspace/ui/components/alert";
|
||||
import { Button } from "@workspace/ui/components/button";
|
||||
import { Checkbox } from "@workspace/ui/components/checkbox";
|
||||
import { Spinner } from "@workspace/ui/components/spinner";
|
||||
import Empty from "@workspace/ui/composed/empty";
|
||||
import {
|
||||
ColumnFilter,
|
||||
@@ -21,7 +22,7 @@ import {
|
||||
} from "@workspace/ui/composed/pro-list/column-filter";
|
||||
import { Pagination } from "@workspace/ui/composed/pro-list/pagination";
|
||||
import { cn } from "@workspace/ui/lib/utils";
|
||||
import { ListRestart, Loader, RefreshCcw } from "lucide-react";
|
||||
import { AlertCircleIcon, ListRestart, RefreshCcw } from "lucide-react";
|
||||
import type React from "react";
|
||||
import { useEffect, useImperativeHandle, useState } from "react";
|
||||
|
||||
@@ -47,6 +48,7 @@ export interface ProListProps<TData, TValue> {
|
||||
selectedRowsText: (total: number) => string;
|
||||
}>;
|
||||
empty?: React.ReactNode;
|
||||
error?: (retry: () => void) => React.ReactNode;
|
||||
}
|
||||
export interface ProListActions {
|
||||
refresh: () => void;
|
||||
@@ -62,6 +64,7 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
action,
|
||||
texts,
|
||||
empty,
|
||||
error,
|
||||
}: ProListProps<TData, TValue>) {
|
||||
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
||||
const [rowSelection, setRowSelection] = useState<{ [key: number]: boolean }>(
|
||||
@@ -74,6 +77,7 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
pageSize: 10,
|
||||
});
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [requestError, setRequestError] = useState(false);
|
||||
|
||||
const table = useReactTable({
|
||||
data,
|
||||
@@ -96,6 +100,7 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
|
||||
const fetchData = async () => {
|
||||
setLoading(true);
|
||||
setRequestError(false);
|
||||
try {
|
||||
const response = await request(
|
||||
{
|
||||
@@ -108,8 +113,10 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
);
|
||||
setData(response.list);
|
||||
setRowCount(response.total);
|
||||
} catch (error) {
|
||||
console.log("Fetch data error:", error);
|
||||
} catch {
|
||||
setData([]);
|
||||
setRowCount(0);
|
||||
setRequestError(true);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -196,7 +203,22 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
})}
|
||||
>
|
||||
<div className="grid grid-cols-1 gap-4">
|
||||
{data.length ? (
|
||||
{requestError ? (
|
||||
<div className="flex items-center justify-center py-24">
|
||||
{error?.(fetchData) || (
|
||||
<Alert className="max-w-md">
|
||||
<AlertCircleIcon />
|
||||
<AlertTitle>Failed to load data</AlertTitle>
|
||||
<AlertDescription className="gap-3">
|
||||
<p>Please try again.</p>
|
||||
<Button onClick={fetchData} size="sm" variant="outline">
|
||||
Retry
|
||||
</Button>
|
||||
</AlertDescription>
|
||||
</Alert>
|
||||
)}
|
||||
</div>
|
||||
) : data.length ? (
|
||||
data.map((item, index) => {
|
||||
const isSelected = !!rowSelection[index];
|
||||
|
||||
@@ -221,7 +243,7 @@ export function ProList<TData, TValue extends Record<string, unknown>>({
|
||||
|
||||
{loading && (
|
||||
<div className="absolute top-0 z-20 flex h-full w-full items-center justify-center bg-muted/80">
|
||||
<Loader className="h-4 w-4 animate-spin" />
|
||||
<Spinner aria-label="Loading data" className="h-4 w-4" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
+25
@@ -170,6 +170,16 @@ declare namespace API {
|
||||
timestamp: number;
|
||||
};
|
||||
|
||||
type CommissionReturnLog = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
amount: number;
|
||||
event_type: number;
|
||||
content: string;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type CommissionWithdrawRequest = {
|
||||
amount: number;
|
||||
method: number;
|
||||
@@ -816,11 +826,26 @@ declare namespace API {
|
||||
total: number;
|
||||
};
|
||||
|
||||
type QueryUserCommissionReturnLogListRequest = {
|
||||
page: number;
|
||||
size: number;
|
||||
};
|
||||
|
||||
type QueryUserCommissionReturnLogListResponse = {
|
||||
list: CommissionReturnLog[];
|
||||
total: number;
|
||||
};
|
||||
|
||||
type QueryUserCommissionLogParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
};
|
||||
|
||||
type QueryUserCommissionReturnLogParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
};
|
||||
|
||||
type QueryUserSubscribeListResponse = {
|
||||
list: UserSubscribe[];
|
||||
total: number;
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// @ts-expect-error
|
||||
/* eslint-disable */
|
||||
import request from "@workspace/ui/lib/request";
|
||||
|
||||
@@ -144,6 +143,26 @@ export async function queryUserCommissionLog(
|
||||
});
|
||||
}
|
||||
|
||||
/** Query User Commission Return Log GET /v1/public/user/commission_return_log */
|
||||
export async function queryUserCommissionReturnLog(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: API.QueryUserCommissionReturnLogParams,
|
||||
options?: { [key: string]: any }
|
||||
) {
|
||||
return request<
|
||||
API.Response & { data?: API.QueryUserCommissionReturnLogListResponse }
|
||||
>(
|
||||
`${import.meta.env.VITE_API_PREFIX || ""}/v1/public/user/commission_return_log`,
|
||||
{
|
||||
method: "GET",
|
||||
params: {
|
||||
...params,
|
||||
},
|
||||
...(options || {}),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/** Commission Withdraw POST /v1/public/user/commission_withdraw */
|
||||
export async function commissionWithdraw(
|
||||
body: API.CommissionWithdrawRequest,
|
||||
|
||||
Reference in New Issue
Block a user