Feature/0723/zr #8

Merged
chenzhen merged 26 commits from feature/0723/ZR into release/0.01 2026-08-06 13:51:34 +08:00
29 changed files with 0 additions and 2258 deletions
Showing only changes of commit e3bd35e154 - Show all commits
-8
View File
@@ -2,8 +2,6 @@
* Banner 管理 API
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { MOCK_BANNER_LIST } from '@/config/mock/bannerList';
import type {
BannerListQueryParams,
BannerSaveParams,
@@ -22,16 +20,10 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
/** GET /manager/banner/list — Banner 列表 */
export async function getBannerList(
params: BannerListQueryParams,
): Promise<ApiResult<TournamentAdminBannerListVO[]>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return { code: 200, msg: 'success', data: MOCK_BANNER_LIST };
}
return get('/manager/banner/list', params as Record<string, any>);
}
-19
View File
@@ -2,8 +2,6 @@
* 操作日志 API
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockOperationLogPage } from '@/config/mock/operationLogs';
import type {
OperationLogQueryParams,
SysOperationLogVO,
@@ -20,27 +18,10 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
function pickFilters(params: OperationLogQueryParams): OperationLogQueryParams {
const { page: _page, limit: _limit, ...filters } = params;
return filters;
}
/** GET /admin/sys/operation/page — 系统操作日志分页 */
export async function getOperationLogList(
params: OperationLogQueryParams,
): Promise<ApiResult<PageData<SysOperationLogVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOperationLogPage(page, limit, pickFilters(params)),
};
}
return get('/sys/operation/page', params as Record<string, any>);
}
-37
View File
@@ -3,13 +3,6 @@
* 注意:/admin 前缀已通过 VITE_API_BASE_URL 统一注入(见 .env.*),此文件中只写业务路径。
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockOrderListPage } from '@/config/mock/orderList';
import { MOCK_ORDER_DETAIL } from '@/config/mock/orderDetail';
import {
MOCK_ORDER_PLAYER_LIST,
buildMockOrderPlayerListPage,
} from '@/config/mock/orderPlayerList';
import type {
OrderListQueryParams,
OrderDetailQueryParams,
@@ -35,8 +28,6 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
/**
* 订单管理 - 订单分页
* GET /admin/manager/order/page → /manager/order/page
@@ -44,16 +35,6 @@ const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve,
export async function getOrderList(
params: OrderListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminOrderPageVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOrderListPage(page, limit),
};
}
return get('/manager/order/page', params as Record<string, any>);
}
@@ -64,14 +45,6 @@ export async function getOrderList(
export async function getOrderDetail(
params: OrderDetailQueryParams,
): Promise<ApiResult<TournamentAdminOrderInfoVO>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return {
code: 200,
msg: 'success',
data: { ...MOCK_ORDER_DETAIL },
};
}
return get('/manager/order/info', params as Record<string, any>);
}
@@ -82,16 +55,6 @@ export async function getOrderDetail(
export async function getOrderPlayerList(
params: OrderPlayerListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminOrderInfoPageVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOrderPlayerListPage(page, limit),
};
}
return get('/manager/order/info/page', params as Record<string, any>);
}
-10
View File
@@ -3,8 +3,6 @@
* 对应 OpenAPI: GET /admin/finance/paymentFlow/page
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockPaymentFlowPage } from '@/config/mock/paymentFlow';
import type {
PaymentFlowQueryParams,
PaymentFlowVO,
@@ -20,17 +18,9 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
/** GET /admin/finance/paymentFlow/page — 支付流水分页 */
export async function getPaymentFlowList(
params: PaymentFlowQueryParams,
): Promise<ApiResult<PaymentFlowPageData>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockPaymentFlowPage(page, limit, params) };
}
return get('/finance/paymentFlow/page', params as Record<string, any>);
}
-23
View File
@@ -2,10 +2,6 @@
* 角色管理 API
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockRoleListPage } from '@/config/mock/roleList';
import { buildMockRoleUsageUserPage } from '@/config/mock/roleUsageUser';
import { buildMockPermissionTree } from '@/config/mock/permissionTree';
import type {
RoleListQueryParams,
RoleUsageUserQueryParams,
@@ -26,18 +22,10 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
/** GET /sys/role/page — 角色列表分页 */
export async function getRoleList(
params: RoleListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminRolePageVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockRoleListPage(page, limit) };
}
return get('/admin/sys/role/page', params as Record<string, any>);
}
@@ -45,12 +33,6 @@ export async function getRoleList(
export async function getRoleUsageUserList(
params: RoleUsageUserQueryParams,
): Promise<ApiResult<PageData<RoleUsageUserVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockRoleUsageUserPage(page, limit) };
}
return get('/sys/role/usageUserPage', params as Record<string, any>);
}
@@ -58,11 +40,6 @@ export async function getRoleUsageUserList(
export async function getPermissionTree(
roleId: number | string,
): Promise<ApiResult<PermissionTreeNode[]>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const id = Number(roleId) || 0;
return { code: 200, msg: 'success', data: buildMockPermissionTree(id) };
}
return get('/sys/role/permissionList', { roleId: String(roleId) });
}
-12
View File
@@ -2,8 +2,6 @@
* 用户管理 API
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockUserListPage } from '@/config/mock/userList';
import type {
UserListQueryParams,
UserSaveParams,
@@ -26,30 +24,20 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
/** GET /admin/sys/user/page — 用户分页 */
export async function getUserList(
params: UserListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminUserVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockUserListPage(page, limit) };
}
return get('/admin/sys/user/page', params as Record<string, any>);
}
/** POST /admin/sys/user/save — 新增用户 */
export function saveUser(params: UserSaveParams): Promise<ApiResult<Record<string, never>>> {
if (USE_MOCK) return delay(MOCK_DELAY).then(() => ({ code: 200, msg: 'success', data: {} }));
return post('/admin/sys/user/save', params);
}
/** POST /admin/sys/user/update — 更新用户 */
export function updateUser(params: UserUpdateParams): Promise<ApiResult<Record<string, never>>> {
if (USE_MOCK) return delay(MOCK_DELAY).then(() => ({ code: 200, msg: 'success', data: {} }));
return post('/admin/sys/user/update', params);
}
-17
View File
@@ -3,9 +3,6 @@
* OpenAPI: GET /admin/finance/wallet/summary, GET /admin/finance/wallet/page
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockWalletPage } from '@/config/mock/walletList';
import { buildMockWalletTransactionPage } from '@/config/mock/walletTransactions';
import type {
WalletQueryParams,
WalletSummaryVO,
@@ -26,18 +23,10 @@ export type {
ApiResult,
} from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
/** GET /admin/finance/wallet/summary — 钱包列表分页 */
export async function getWalletList(
params: WalletQueryParams,
): Promise<ApiResult<WalletSummaryPageData>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockWalletPage(page, limit, params) };
}
return get('/finance/wallet/summary', params as Record<string, any>);
}
@@ -45,11 +34,5 @@ export async function getWalletList(
export async function getWalletTransactionList(
params: WalletTransactionQueryParams,
): Promise<ApiResult<PageData<WalletTransactionVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockWalletTransactionPage(page, limit, params) };
}
return get('/finance/wallet/page', params as Record<string, any>);
}
-19
View File
@@ -3,38 +3,19 @@
* 对应 OpenAPI: GET /admin/finance/withdraw/page, GET /admin/finance/withdraw/info
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockWithdrawPage } from '@/config/mock/withdrawList';
import { buildMockWithdrawInfo } from '@/config/mock/withdrawInfo';
import type { WithdrawQueryParams, WithdrawVO, WithdrawInfoVO, PageData, ApiResult } from './types';
export type { WithdrawVO, WithdrawInfoVO, WithdrawQueryParams, PageData, ApiResult } from './types';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
/** GET /admin/finance/withdraw/page — 提现列表分页 */
export async function getWithdrawList(
params: WithdrawQueryParams,
): Promise<ApiResult<PageData<WithdrawVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockWithdrawPage(page, limit, params),
};
}
return get('/admin/finance/withdraw/page', params as Record<string, any>);
}
/** GET /admin/finance/withdraw/info?id=xxx — 提现详情 */
export async function getWithdrawInfo(id: number): Promise<ApiResult<WithdrawInfoVO>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return { code: 200, msg: 'success', data: buildMockWithdrawInfo(id) };
}
return get('/admin/finance/withdraw/info', { id: String(id) });
}
-169
View File
@@ -1,169 +0,0 @@
/**
* Banner 列表页假数据
*
* 使用页面:`src/pages/events/banner/index.tsx`
* 对应接口:`GET /manager/banner/list`
* 类型:`TournamentAdminBannerListVO[]`
*
* 注意:类型内联定义,避免循环引用。
*/
export interface MockBannerVO {
id: string;
img: string;
title: string;
type: string;
params: string;
area: string;
showTimeBegin: string;
showTimeEnd: string;
status: string;
createDate: string;
}
export const MOCK_BANNER_LIST: MockBannerVO[] = [
{
id: '1',
img: 'https://picsum.photos/seed/banner1/80/44',
title: '2026全国青少年羽毛球锦标赛火热报名中',
type: '1',
params: 'EV20260701001',
area: '深圳市',
showTimeBegin: '2026-08-01 00:00',
showTimeEnd: '2026-08-31 23:59',
status: '1',
createDate: '2026-07-20 08:00:00',
},
{
id: '2',
img: 'https://picsum.photos/seed/banner2/80/44',
title: '马拉松城市联赛限时优惠',
type: '2',
params: 'https://example.com/marathon',
area: '杭州市',
showTimeBegin: '2026-08-15 00:00',
showTimeEnd: '2026-09-15 23:59',
status: '1',
createDate: '2026-07-19 11:30:00',
},
{
id: '3',
img: 'https://picsum.photos/seed/banner3/80/44',
title: '健身运动会专属福利',
type: '1',
params: 'EV20260701003',
area: '北京市',
showTimeBegin: '2026-07-01 00:00',
showTimeEnd: '2026-07-30 23:59',
status: '1',
createDate: '2026-07-18 14:20:00',
},
{
id: '4',
img: 'https://picsum.photos/seed/banner4/80/44',
title: '平台品牌宣传活动',
type: '2',
params: 'https://example.com/promo',
area: '上海市',
showTimeBegin: '2026-06-01 00:00',
showTimeEnd: '2026-06-30 23:59',
status: '0',
createDate: '2026-07-17 18:05:00',
},
{
id: '5',
img: 'https://picsum.photos/seed/banner5/80/44',
title: '2026全国青少年羽毛球锦标赛火热报名中',
type: '1',
params: 'EV20260701005',
area: '深圳市',
showTimeBegin: '2026-09-01 00:00',
showTimeEnd: '2026-09-30 23:59',
status: '1',
createDate: '2026-07-16 21:15:00',
},
{
id: '6',
img: 'https://picsum.photos/seed/banner6/80/44',
title: '马拉松城市联赛限时优惠',
type: '3',
params: '/pages/activity/detail',
area: '杭州市',
showTimeBegin: '2026-10-01 00:00',
showTimeEnd: '2026-10-31 23:59',
status: '1',
createDate: '2026-07-15 00:30:00',
},
{
id: '7',
img: 'https://picsum.photos/seed/banner7/80/44',
title: '全民健身日特别活动',
type: '1',
params: 'EV20260701007',
area: '北京市',
showTimeBegin: '2026-08-08 00:00',
showTimeEnd: '2026-08-08 23:59',
status: '1',
createDate: '2026-07-14 03:50:00',
},
{
id: '8',
img: 'https://picsum.photos/seed/banner8/80/44',
title: '新春运动季大促销',
type: '2',
params: 'https://example.com/spring',
area: '上海市',
showTimeBegin: '2026-01-15 00:00',
showTimeEnd: '2026-02-15 23:59',
status: '0',
createDate: '2026-07-13 07:05:00',
},
{
id: '9',
img: 'https://picsum.photos/seed/banner9/80/44',
title: '2026全国青少年羽毛球锦标赛火热报名中',
type: '0',
params: '',
area: '全国',
showTimeBegin: '2026-08-01 00:00',
showTimeEnd: '2026-08-31 23:59',
status: '1',
createDate: '2026-07-12 10:25:00',
},
{
id: '10',
img: 'https://picsum.photos/seed/banner10/80/44',
title: '平台品牌宣传活动',
type: '2',
params: 'https://example.com/brand',
area: '杭州市',
showTimeBegin: '2026-11-01 00:00',
showTimeEnd: '2026-11-30 23:59',
status: '1',
createDate: '2026-07-11 13:40:00',
},
{
id: '11',
img: 'https://picsum.photos/seed/banner11/80/44',
title: '秋季健身挑战赛',
type: '1',
params: 'EV20260701011',
area: '北京市',
showTimeBegin: '2026-09-01 00:00',
showTimeEnd: '2026-09-30 23:59',
status: '1',
createDate: '2026-07-10 17:00:00',
},
{
id: '12',
img: 'https://picsum.photos/seed/banner12/80/44',
title: '双十一运动装备大促',
type: '2',
params: 'https://example.com/double11',
area: '上海市',
showTimeBegin: '2026-11-01 00:00',
showTimeEnd: '2026-11-11 23:59',
status: '1',
createDate: '2026-07-09 20:15:00',
},
];
-182
View File
@@ -1,182 +0,0 @@
/**
* 操作日志假数据
* 对应接口:GET /admin/sys/operation/page
*
* 类型内联,避免与 @/api/logs 循环引用。
*/
interface MockSysOperationLogVO {
type: number;
nickname: string;
createDate: string;
content: string;
}
interface MockOperationLogQueryParams {
type?: string;
nickname?: string;
dateBegin?: string;
dateEnd?: string;
}
interface MockPageData<T> {
total: number;
list: T[];
}
const MOCK_LOGS: MockSysOperationLogVO[] = [
{
type: 1,
nickname: '张三',
createDate: '2026-07-30 08:00:00',
content: '下架赛事"第二十一届贝格林羽毛球大赛"',
},
{
type: 2,
nickname: '张三',
createDate: '2026-07-30 09:30:00',
content: '上架赛事"第二十一届贝格林羽毛球大赛"',
},
{
type: 3,
nickname: '李四',
createDate: '2026-07-29 10:12:00',
content: '禁用用户"王五(1003"',
},
{
type: 4,
nickname: '李四',
createDate: '2026-07-29 10:20:00',
content: '启用用户"王五(1003"',
},
{
type: 1,
nickname: '赵六',
createDate: '2026-07-28 14:00:00',
content: '下架赛事"春季马拉松大赛"',
},
{
type: 2,
nickname: '赵六',
createDate: '2026-07-28 15:00:00',
content: '上架赛事"春季马拉松大赛"',
},
{
type: 3,
nickname: '张三',
createDate: '2026-07-27 09:00:00',
content: '禁用用户"钱七(1005"',
},
{
type: 4,
nickname: '张三',
createDate: '2026-07-27 09:15:00',
content: '启用用户"钱七(1005"',
},
{
type: 1,
nickname: '孙八',
createDate: '2026-07-26 16:30:00',
content: '下架赛事"夏季游泳锦标赛"',
},
{
type: 2,
nickname: '孙八',
createDate: '2026-07-26 17:00:00',
content: '上架赛事"夏季游泳锦标赛"',
},
{
type: 1,
nickname: '李四',
createDate: '2026-07-25 11:00:00',
content: '下架赛事"秋季篮球邀请赛"',
},
{
type: 2,
nickname: '李四',
createDate: '2026-07-25 12:00:00',
content: '上架赛事"秋季篮球邀请赛"',
},
{
type: 3,
nickname: '周九',
createDate: '2026-07-24 08:30:00',
content: '禁用用户"吴十(1008"',
},
{
type: 4,
nickname: '周九',
createDate: '2026-07-24 08:45:00',
content: '启用用户"吴十(1008"',
},
{
type: 1,
nickname: '张三',
createDate: '2026-07-23 13:00:00',
content: '下架赛事"冬季滑雪挑战赛"',
},
{
type: 2,
nickname: '张三',
createDate: '2026-07-23 14:00:00',
content: '上架赛事"冬季滑雪挑战赛"',
},
{
type: 3,
nickname: '郑十一',
createDate: '2026-07-22 10:00:00',
content: '禁用用户"冯十二(1012"',
},
{
type: 4,
nickname: '郑十一',
createDate: '2026-07-22 10:10:00',
content: '启用用户"冯十二(1012"',
},
{
type: 1,
nickname: '孙八',
createDate: '2026-07-21 15:30:00',
content: '下架赛事"元旦全民健身跑"',
},
{
type: 2,
nickname: '孙八',
createDate: '2026-07-21 16:00:00',
content: '上架赛事"元旦全民健身跑"',
},
];
/** 按日期范围过滤(dateBegin / dateEnd 格式 yyyy-MM-dd */
function inDateRange(dateStr: string, begin?: string, end?: string): boolean {
if (!begin && !end) return true;
const d = dateStr.slice(0, 10);
if (begin && d < begin) return false;
if (end && d > end) return false;
return true;
}
export function buildMockOperationLogPage(
page: number,
limit: number,
params: MockOperationLogQueryParams,
): MockPageData<MockSysOperationLogVO> {
let filtered = [...MOCK_LOGS];
if (params.type) {
filtered = filtered.filter((item) => item.type === Number(params.type));
}
if (params.nickname) {
filtered = filtered.filter((item) => item.nickname.includes(params.nickname!));
}
filtered = filtered.filter((item) =>
inDateRange(item.createDate, params.dateBegin, params.dateEnd),
);
const total = filtered.length;
const start = (page - 1) * limit;
const list = filtered.slice(start, start + limit);
return { total, list };
}
-41
View File
@@ -1,41 +0,0 @@
/**
* 订单详情弹窗假数据
*
* 使用页面:`src/pages/events/orders/components/OrderDetailModal.tsx`
* 对应接口:`GET /manager/order/info`
* 类型:`TournamentAdminOrderInfoVO`
*/
import type { TournamentAdminOrderInfoVO } from '@/api/orders/types';
export const MOCK_ORDER_DETAIL: TournamentAdminOrderInfoVO = {
tournamentName: '2026全国青少年羽毛球锦标赛暨体育文化交流大会',
orderNumber: 'ORD20260700001',
orderTime: '2026.07.12 08:11:07',
payTime: '2026.07.12 08:12:30',
orderAmount: '188.00',
discountAmount: '20.00',
payAmount: '168.00',
refundAmount: '50.00',
refundInfoList: [
{
refundedAmount: '30.00',
totalRefundCount: '2',
refundAmount: '30.00',
isFullRefund: '0',
refundMethod: '原路退回(微信支付)',
refundApplyTime: '2026.07.15 09:30:00',
refundOutTradeNo: '5030000789202607150930000123',
refundTime: '2026.07.15 09:35:00',
},
{
refundedAmount: '20.00',
totalRefundCount: '2',
refundAmount: '20.00',
isFullRefund: '1',
refundMethod: '原路退回(微信支付)',
refundApplyTime: '2026.07.16 14:00:00',
refundOutTradeNo: '5030000789202607161400000456',
refundTime: '',
},
],
};
-256
View File
@@ -1,256 +0,0 @@
/**
* 订单列表页假数据
*
* 使用页面:`src/pages/events/orders/index.tsx`
* 对应接口:`GET /manager/order/page`
* 类型:`TournamentAdminOrderPageVO[]`
*/
import type { TournamentAdminOrderPageVO, PageData } from '@/api/orders/types';
export const MOCK_ORDER_LIST: TournamentAdminOrderPageVO[] = [
{
orderNo: 'ORD20260700001',
uniqueId: 101,
name: '2026全国青少年羽毛球锦标赛暨体育文化交流大会',
realName: '张选手',
phone: '13800138001',
categoryName: '男子青年组',
creatorName: '张报名',
creatorPhone: '13800138001',
creatorSignupCount: 2,
creatorSignupFee: '188.00',
creatorSignupFeeDiscount: '20.00',
creatorSignupFeeActual: '168.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.12 08:11:07',
payTime: '2026.07.12 08:12:30',
orderStatus: 1,
refundStatus: 1,
},
{
orderNo: 'ORD20260700002',
uniqueId: 102,
name: '国际马拉松城市联赛',
realName: '李选手',
phone: '13900139002',
categoryName: '女子青年组',
creatorName: '李报名',
creatorPhone: '13900139002',
creatorSignupCount: 1,
creatorSignupFee: '256.50',
creatorSignupFeeDiscount: '10.00',
creatorSignupFeeActual: '246.50',
creatorSignupFeeRefund: '50.00',
orderTime: '2026.07.11 11:28:20',
payTime: '2026.07.11 11:30:05',
orderStatus: 2,
refundStatus: 2,
},
{
orderNo: 'ORD20260700003',
uniqueId: 103,
name: '全民健身运动会',
realName: '王选手',
phone: '13700137003',
categoryName: '男子中年组',
creatorName: '王报名',
creatorPhone: '13700137003',
creatorSignupCount: 1,
creatorSignupFee: '399.00',
creatorSignupFeeDiscount: '0.00',
creatorSignupFeeActual: '399.00',
creatorSignupFeeRefund: '399.00',
orderTime: '2026.07.10 14:45:33',
payTime: '2026.07.10 14:46:10',
orderStatus: 3,
refundStatus: 2,
},
{
orderNo: 'ORD20260700004',
uniqueId: 104,
name: '2026全国青少年羽毛球锦标赛暨体育文化交流大会',
realName: '赵选手',
phone: '13600136004',
categoryName: '女子中年组',
creatorName: '赵报名',
creatorPhone: '13600136004',
creatorSignupCount: 3,
creatorSignupFee: '128.00',
creatorSignupFeeDiscount: '20.00',
creatorSignupFeeActual: '108.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.09 18:02:46',
payTime: '2026.07.09 18:03:15',
orderStatus: 4,
refundStatus: 1,
},
{
orderNo: 'ORD20260700005',
uniqueId: 105,
name: '国际马拉松城市联赛',
realName: '张选手',
phone: '13800138001',
categoryName: '男子青年组',
creatorName: '张报名',
creatorPhone: '13800138001',
creatorSignupCount: 2,
creatorSignupFee: '520.00',
creatorSignupFeeDiscount: '10.00',
creatorSignupFeeActual: '510.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.08 21:19:59',
payTime: '2026.07.08 21:21:20',
orderStatus: 1,
refundStatus: 1,
},
{
orderNo: 'ORD20260700006',
uniqueId: 106,
name: '全民健身运动会',
realName: '李选手',
phone: '13900139002',
categoryName: '女子青年组',
creatorName: '李报名',
creatorPhone: '13900139002',
creatorSignupCount: 1,
creatorSignupFee: '188.00',
creatorSignupFeeDiscount: '0.00',
creatorSignupFeeActual: '188.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.07 00:36:12',
payTime: '2026.07.07 00:37:00',
orderStatus: 1,
refundStatus: 1,
},
{
orderNo: 'ORD20260700007',
uniqueId: 107,
name: '2026全国青少年羽毛球锦标赛暨体育文化交流大会',
realName: '王选手',
phone: '13700137003',
categoryName: '男子中年组',
creatorName: '王报名',
creatorPhone: '13700137003',
creatorSignupCount: 1,
creatorSignupFee: '256.50',
creatorSignupFeeDiscount: '20.00',
creatorSignupFeeActual: '236.50',
creatorSignupFeeRefund: '236.50',
orderTime: '2026.07.06 03:53:25',
payTime: '2026.07.06 03:54:00',
orderStatus: 3,
refundStatus: 3,
},
{
orderNo: 'ORD20260700008',
uniqueId: 108,
name: '国际马拉松城市联赛',
realName: '赵选手',
phone: '13600136004',
categoryName: '女子中年组',
creatorName: '赵报名',
creatorPhone: '13600136004',
creatorSignupCount: 3,
creatorSignupFee: '399.00',
creatorSignupFeeDiscount: '10.00',
creatorSignupFeeActual: '389.00',
creatorSignupFeeRefund: '30.00',
orderTime: '2026.07.05 07:10:38',
payTime: '2026.07.05 07:11:00',
orderStatus: 2,
refundStatus: 2,
},
{
orderNo: 'ORD20260700009',
uniqueId: 109,
name: '全民健身运动会',
realName: '张选手',
phone: '13800138001',
categoryName: '男子青年组',
creatorName: '张报名',
creatorPhone: '13800138001',
creatorSignupCount: 2,
creatorSignupFee: '128.00',
creatorSignupFeeDiscount: '0.00',
creatorSignupFeeActual: '128.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.04 10:27:51',
payTime: '2026.07.04 10:28:30',
orderStatus: 4,
refundStatus: 1,
},
{
orderNo: 'ORD20260700010',
uniqueId: 110,
name: '2026全国青少年羽毛球锦标赛暨体育文化交流大会',
realName: '李选手',
phone: '13900139002',
categoryName: '女子青年组',
creatorName: '李报名',
creatorPhone: '13900139002',
creatorSignupCount: 1,
creatorSignupFee: '520.00',
creatorSignupFeeDiscount: '20.00',
creatorSignupFeeActual: '500.00',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.03 13:44:04',
payTime: '2026.07.03 13:45:00',
orderStatus: 1,
refundStatus: 1,
},
{
orderNo: 'ORD20260700011',
uniqueId: 111,
name: '国际马拉松城市联赛',
realName: '王选手',
phone: '13700137003',
categoryName: '男子中年组',
creatorName: '王报名',
creatorPhone: '13700137003',
creatorSignupCount: 1,
creatorSignupFee: '188.00',
creatorSignupFeeDiscount: '10.00',
creatorSignupFeeActual: '178.00',
creatorSignupFeeRefund: '50.00',
orderTime: '2026.07.02 17:01:17',
payTime: '2026.07.02 17:02:00',
orderStatus: 2,
refundStatus: 3,
},
{
orderNo: 'ORD20260700012',
uniqueId: 112,
name: '全民健身运动会',
realName: '赵选手',
phone: '13600136004',
categoryName: '女子中年组',
creatorName: '赵报名',
creatorPhone: '13600136004',
creatorSignupCount: 3,
creatorSignupFee: '256.50',
creatorSignupFeeDiscount: '0.00',
creatorSignupFeeActual: '256.50',
creatorSignupFeeRefund: '0.00',
orderTime: '2026.07.01 20:18:30',
payTime: '2026.07.01 20:19:00',
orderStatus: 1,
refundStatus: 1,
},
];
/** 金额汇总假数据(汇总接口独立,此为 mock 占位) */
export const MOCK_ORDER_SUMMARY = {
totalOrderAmount: 113255.0,
totalPaidAmount: 113255.0,
totalRefundAmount: 1255.0,
};
/** 构建分页响应 */
export function buildMockOrderListPage(
page: number,
limit: number,
): PageData<TournamentAdminOrderPageVO> {
const start = (page - 1) * limit;
const list = MOCK_ORDER_LIST.slice(start, start + limit);
return { total: MOCK_ORDER_LIST.length, list };
}
-104
View File
@@ -1,104 +0,0 @@
/**
* 订单详情 — 选手列表假数据
*
* 使用页面:`src/pages/events/orders/components/OrderDetailModal.tsx`
* 对应接口:`GET /manager/order/info/page`
* 类型:`TournamentAdminOrderInfoPageVO[]`
*/
import type { TournamentAdminOrderInfoPageVO } from '@/api/orders/types';
export const MOCK_ORDER_PLAYER_LIST: TournamentAdminOrderInfoPageVO[] = [
{
realName: '张三',
gender: '1',
phone: '13800138001',
idCard: '110101199001011234',
idCardImg: 'https://picsum.photos/seed/idcard1/96/64',
idCardImgList: [
'https://picsum.photos/seed/idcard1a/96/64',
'https://picsum.photos/seed/idcard1b/96/64',
],
categoryName: '男子青年组',
orderAmount: '100.00',
discountAmount: '10.00',
payAmount: '90.00',
refundAmount: '0.00',
},
{
realName: '李四',
gender: '1',
phone: '13900139002',
idCard: '110101199002022345',
idCardImg: '',
idCardImgList: [],
categoryName: '男子青年组',
orderAmount: '88.00',
discountAmount: '10.00',
payAmount: '78.00',
refundAmount: '50.00',
},
{
realName: '王芳',
gender: '2',
phone: '13700137003',
idCard: '110101199103033456',
idCardImg: 'https://picsum.photos/seed/idcard3/96/64',
idCardImgList: ['https://picsum.photos/seed/idcard3a/96/64'],
categoryName: '女子双打',
orderAmount: '0.00',
discountAmount: '0.00',
payAmount: '0.00',
refundAmount: '-',
},
{
realName: '赵六',
gender: '1',
phone: '13600136004',
idCard: '110101199204044567',
idCardImg: '',
idCardImgList: [],
categoryName: '女子双打',
orderAmount: '50.00',
discountAmount: '0.00',
payAmount: '50.00',
refundAmount: '-',
},
{
realName: '孙七',
gender: '2',
phone: '13500135005',
idCard: '110101199305055678',
idCardImg: 'https://picsum.photos/seed/idcard5/96/64',
idCardImgList: [
'https://picsum.photos/seed/idcard5a/96/64',
'https://picsum.photos/seed/idcard5b/96/64',
],
categoryName: '男子青年组',
orderAmount: '60.00',
discountAmount: '5.00',
payAmount: '55.00',
refundAmount: '0.00',
},
{
realName: '周八',
gender: '1',
phone: '13400134006',
idCard: '110101199406066789',
idCardImg: 'https://picsum.photos/seed/idcard6/96/64',
idCardImgList: ['https://picsum.photos/seed/idcard6a/96/64'],
categoryName: '男子中年组',
orderAmount: '120.00',
discountAmount: '20.00',
payAmount: '100.00',
refundAmount: '-',
},
];
export function buildMockOrderPlayerListPage(
page: number,
limit: number,
): { total: number; list: TournamentAdminOrderInfoPageVO[] } {
const start = (page - 1) * limit;
const list = MOCK_ORDER_PLAYER_LIST.slice(start, start + limit);
return { total: MOCK_ORDER_PLAYER_LIST.length, list };
}
-164
View File
@@ -1,164 +0,0 @@
/**
* 支付流水假数据
* 对应接口:GET /admin/finance/paymentFlow/page
*/
import type { PaymentFlowVO, PaymentFlowQueryParams, PaymentFlowPageData } from '@/api/payments';
const MOCK_LIST: PaymentFlowVO[] = [
{
serialNo: 'FL20260730001',
orderNo: 'OD20260730001',
type: 1,
nickname: '张三',
phone: '12345678997',
amount: '99.00',
createDate: '2026-07-30 08:00:00',
},
{
serialNo: '',
orderNo: '',
type: 2,
nickname: '李四',
phone: '12345678998',
amount: '100.00',
createDate: '2026-07-30 07:00:00',
},
{
serialNo: 'FL20260729002',
orderNo: 'OD20260729002',
type: 1,
nickname: '王五',
phone: '12345678998',
amount: '199.00',
createDate: '2026-07-29 16:00:00',
},
{
serialNo: '',
orderNo: '',
type: 2,
nickname: '赵六',
phone: '13800138000',
amount: '50.00',
createDate: '2026-07-29 15:20:00',
},
{
serialNo: 'FL20260728003',
orderNo: 'OD20260728003',
type: 1,
nickname: '钱七',
phone: '13900139001',
amount: '350.00',
createDate: '2026-07-28 14:00:00',
},
{
serialNo: '',
orderNo: '',
type: 2,
nickname: '孙八',
phone: '18600186001',
amount: '120.00',
createDate: '2026-07-28 10:30:00',
},
{
serialNo: 'FL20260727004',
orderNo: 'OD20260727004',
type: 1,
nickname: '周九',
phone: '15200152000',
amount: '88.00',
createDate: '2026-07-27 09:00:00',
},
{
serialNo: 'FL20260727005',
orderNo: 'OD20260727005',
type: 1,
nickname: '吴十',
phone: '17000170001',
amount: '520.00',
createDate: '2026-07-27 08:00:00',
},
{
serialNo: '',
orderNo: '',
type: 2,
nickname: '李四',
phone: '12345678998',
amount: '200.00',
createDate: '2026-07-26 17:00:00',
},
{
serialNo: 'FL20260726006',
orderNo: 'OD20260726006',
type: 1,
nickname: '张三',
phone: '12345678997',
amount: '128.00',
createDate: '2026-07-26 11:00:00',
},
{
serialNo: '',
orderNo: '',
type: 2,
nickname: '王五',
phone: '12345678998',
amount: '80.00',
createDate: '2026-07-25 13:00:00',
},
{
serialNo: 'FL20260725007',
orderNo: 'OD20260725007',
type: 1,
nickname: '赵六',
phone: '13800138000',
amount: '680.00',
createDate: '2026-07-25 10:00:00',
},
];
function inDateRange(date: string, begin?: string, end?: string): boolean {
if (!begin && !end) return true;
const d = date.slice(0, 10);
if (begin && d < begin) return false;
if (end && d > end) return false;
return true;
}
export function buildMockPaymentFlowPage(
page: number,
limit: number,
params: PaymentFlowQueryParams,
): PaymentFlowPageData {
let filtered = [...MOCK_LIST];
if (params.nickname) {
filtered = filtered.filter((item) => item.nickname.includes(params.nickname!));
}
if (params.phone) {
filtered = filtered.filter((item) => item.phone.includes(params.phone!));
}
if (params.type) {
filtered = filtered.filter((item) => item.type === Number(params.type));
}
filtered = filtered.filter((item) =>
inDateRange(item.createDate, params.createDateBegin, params.createDateEnd),
);
let totalAmount = 0;
let totalRefundAmount = 0;
for (const item of filtered) {
const amt = Number(item.amount) || 0;
if (item.type === 1) totalAmount += amt;
else if (item.type === 2) totalRefundAmount += amt;
}
const total = filtered.length;
const start = (page - 1) * limit;
return {
total,
list: filtered.slice(start, start + limit),
exData: {
totalAmount: totalAmount.toFixed(2),
totalRefundAmount: totalRefundAmount.toFixed(2),
},
};
}
-213
View File
@@ -1,213 +0,0 @@
/**
* 角色权限树假数据
* 对应接口:GET /admin/sys/role/permissionList?roleId=xxx
*
* - 传 roleId=0 时返回全量未选中树(新增角色用)
* - 传已有角色ID时返回带 selected 的树,模拟后端已有权限
*
* 结构对齐 PermissionTreeNode: { id, pid, name, selected, children }
* selected 仅叶节点有值(true/false),父节点为 null
*/
import type { PermissionTreeNode } from '@/api/roles';
/**
* 全量权限树(所有节点的 selected=null,叶节点 selected=false
* 作为未授权角色的默认返回
*/
const FULL_UNSELECTED: PermissionTreeNode[] = [
{
id: 1,
pid: 0,
name: '赛事管理',
selected: null,
children: [
{
id: 11,
pid: 1,
name: '赛事列表',
selected: null,
children: [
{ id: 101, pid: 11, name: '赛事列表-查看', selected: false },
{ id: 102, pid: 11, name: '赛事列表-上架', selected: false },
{ id: 103, pid: 11, name: '赛事列表-下架', selected: false },
],
},
{
id: 12,
pid: 1,
name: '赛事规程',
selected: null,
children: [
{ id: 104, pid: 12, name: '赛事规程-查看', selected: false },
{ id: 105, pid: 12, name: '赛事规程-编辑', selected: false },
],
},
{
id: 13,
pid: 1,
name: '订单管理',
selected: null,
children: [
{ id: 106, pid: 13, name: '订单管理-查看', selected: false },
{ id: 107, pid: 13, name: '订单管理-退款', selected: false },
],
},
{
id: 14,
pid: 1,
name: '用户列表',
selected: null,
children: [{ id: 108, pid: 14, name: '用户列表-查看', selected: false }],
},
{
id: 15,
pid: 1,
name: 'Banner管理',
selected: null,
children: [
{ id: 109, pid: 15, name: 'Banner-查看', selected: false },
{ id: 110, pid: 15, name: 'Banner-新增', selected: false },
{ id: 111, pid: 15, name: 'Banner-编辑', selected: false },
{ id: 112, pid: 15, name: 'Banner-删除', selected: false },
],
},
{
id: 16,
pid: 1,
name: '赛事审核',
selected: null,
children: [
{ id: 113, pid: 16, name: '赛事审核-查看', selected: false },
{ id: 114, pid: 16, name: '赛事审核-通过', selected: false },
{ id: 115, pid: 16, name: '赛事审核-驳回', selected: false },
],
},
],
},
{
id: 2,
pid: 0,
name: '账务管理',
selected: null,
children: [
{
id: 21,
pid: 2,
name: '财务报表',
selected: null,
children: [{ id: 201, pid: 21, name: '财务报表-查看', selected: false }],
},
{
id: 22,
pid: 2,
name: '提现管理',
selected: null,
children: [
{ id: 202, pid: 22, name: '提现管理-查看', selected: false },
{ id: 203, pid: 22, name: '提现管理-审核', selected: false },
],
},
{
id: 23,
pid: 2,
name: '支付流水',
selected: null,
children: [{ id: 204, pid: 23, name: '支付流水-查看', selected: false }],
},
{
id: 24,
pid: 2,
name: '钱包管理',
selected: null,
children: [{ id: 205, pid: 24, name: '钱包管理-查看', selected: false }],
},
],
},
{
id: 3,
pid: 0,
name: '系统管理',
selected: null,
children: [
{
id: 31,
pid: 3,
name: '用户管理',
selected: null,
children: [
{ id: 301, pid: 31, name: '用户管理-查看', selected: false },
{ id: 302, pid: 31, name: '用户管理-新增', selected: false },
{ id: 303, pid: 31, name: '用户管理-编辑', selected: false },
{ id: 304, pid: 31, name: '用户管理-启用/禁用', selected: false },
{ id: 305, pid: 31, name: '用户管理-重置密码', selected: false },
],
},
{
id: 32,
pid: 3,
name: '角色权限',
selected: null,
children: [
{ id: 306, pid: 32, name: '角色权限-查看', selected: false },
{ id: 307, pid: 32, name: '角色权限-新增', selected: false },
{ id: 308, pid: 32, name: '角色权限-编辑', selected: false },
{ id: 309, pid: 32, name: '角色权限-删除', selected: false },
],
},
{
id: 33,
pid: 3,
name: '操作日志',
selected: null,
children: [{ id: 310, pid: 33, name: '操作日志-查看', selected: false }],
},
],
},
];
/**
* 根据角色已有权限ID集合,深拷贝全量树并标记叶节点 selected
*/
function applySelected(tree: PermissionTreeNode[], selectedIds: Set<number>): PermissionTreeNode[] {
return tree.map((node) => {
const isLeaf = !node.children || node.children.length === 0;
if (isLeaf) {
return { ...node, selected: selectedIds.has(node.id) };
}
// 父节点:递归处理子节点,自身 selected 保持 null
return {
...node,
selected: null,
children: applySelected(node.children!, selectedIds),
};
});
}
/**
* 构建权限树假数据
* @param roleId 角色ID,0 表示新增(返回全量未选中),其他值模拟该角色已有权限
*/
export function buildMockPermissionTree(roleId: number): PermissionTreeNode[] {
// roleId=0 → 新增角色,全量未选中
if (roleId === 0) {
return JSON.parse(JSON.stringify(FULL_UNSELECTED));
}
// 模拟不同角色拥有不同权限子集
const rolePermissions: Record<number, number[]> = {
// 超级管理员:全选(所有叶节点)
1: [
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 201, 202, 203, 204,
205, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
],
// 赛事管理员:只有赛事管理模块
2: [101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112],
// 财务:只有账务管理模块
4: [201, 202, 203, 204, 205],
// 其他角色默认仅查看权限
};
const selectedIds = new Set<number>(rolePermissions[roleId] || [101, 201, 301, 306, 310]);
return applySelected(FULL_UNSELECTED, selectedIds);
}
-31
View File
@@ -1,31 +0,0 @@
/**
* 角色列表页假数据(类型内联,避免循环引用)
* 对应接口:GET /sys/role/page
*/
interface MockRoleVO {
roleId: number;
roleName: string;
userCount: number;
createTime: string;
}
interface MockPageData<T> {
total: number;
list: T[];
}
const MOCK_ROLES: MockRoleVO[] = [
{ roleId: 1, roleName: '超级管理员', userCount: 2, createTime: '2025-06-01 09:00:00' },
{ roleId: 2, roleName: '赛事管理员', userCount: 5, createTime: '2025-08-15 14:30:00' },
{ roleId: 3, roleName: '裁判', userCount: 8, createTime: '2025-10-10 10:15:00' },
{ roleId: 4, roleName: '财务', userCount: 3, createTime: '2026-01-20 16:00:00' },
{ roleId: 5, roleName: '运营管理员', userCount: 4, createTime: '2026-03-05 11:00:00' },
{ roleId: 6, roleName: '客服', userCount: 6, createTime: '2026-04-10 08:30:00' },
{ roleId: 7, roleName: '审核员', userCount: 3, createTime: '2026-05-18 13:45:00' },
{ roleId: 8, roleName: '内容编辑', userCount: 2, createTime: '2026-06-22 09:20:00' },
];
export function buildMockRoleListPage(page: number, limit: number): MockPageData<MockRoleVO> {
const start = (page - 1) * limit;
return { total: MOCK_ROLES.length, list: MOCK_ROLES.slice(start, start + limit) };
}
-33
View File
@@ -1,33 +0,0 @@
/**
* 角色下用户列表假数据
* 对应接口:GET /sys/role/usageUserPage
*/
interface MockUserVO {
realName: string;
phone: string;
createTime: string;
status: number;
}
interface MockPageData<T> {
total: number;
list: T[];
}
const MOCK_USERS: MockUserVO[] = [
{ realName: '张超管', phone: '13900000001', createTime: '2025-06-01 09:00:00', status: 1 },
{ realName: '李运营', phone: '15900000002', createTime: '2026-01-10 16:00:00', status: 0 },
{ realName: '王运营', phone: '15900000001', createTime: '2025-10-20 10:00:00', status: 1 },
{ realName: '张运营', phone: '13900000002', createTime: '2025-08-15 14:30:00', status: 1 },
{ realName: '赵裁判', phone: '13800000005', createTime: '2025-10-10 10:15:00', status: 1 },
{ realName: '钱裁判', phone: '13800000006', createTime: '2025-10-12 11:00:00', status: 1 },
{ realName: '孙财务', phone: '13700000007', createTime: '2026-01-20 16:00:00', status: 1 },
{ realName: '周客服', phone: '13700000008', createTime: '2026-01-21 09:30:00', status: 1 },
{ realName: '吴客服', phone: '13700000009', createTime: '2026-01-22 10:00:00', status: 0 },
{ realName: '郑客服', phone: '13700000010', createTime: '2026-01-23 14:00:00', status: 1 },
];
export function buildMockRoleUsageUserPage(page: number, limit: number): MockPageData<MockUserVO> {
const start = (page - 1) * limit;
return { total: MOCK_USERS.length, list: MOCK_USERS.slice(start, start + limit) };
}
-134
View File
@@ -1,134 +0,0 @@
/**
* 用户列表页假数据(类型内联,避免循环引用)
* 对应接口:GET /sys/user/page
*/
interface MockUserVO {
id: string;
realName: string;
phone: string;
roleId: string;
roleName: string;
status: string;
createTime: string;
}
interface MockPageData<T> {
total: number;
list: T[];
}
const MOCK_USERS: MockUserVO[] = [
{
id: '1',
realName: '张三',
phone: '13800138001',
roleId: '1',
roleName: '超级管理员',
status: '1',
createTime: '2026-07-20 08:11:07',
},
{
id: '2',
realName: '李四',
phone: '13900139002',
roleId: '2',
roleName: '赛事管理员',
status: '1',
createTime: '2026-07-19 11:28:20',
},
{
id: '3',
realName: '王五',
phone: '13700137003',
roleId: '3',
roleName: '裁判',
status: '1',
createTime: '2026-07-18 14:45:33',
},
{
id: '4',
realName: '赵六',
phone: '13600136004',
roleId: '2',
roleName: '赛事管理员',
status: '0',
createTime: '2026-07-17 18:02:46',
},
{
id: '5',
realName: '孙七',
phone: '13800138005',
roleId: '1',
roleName: '超级管理员',
status: '1',
createTime: '2026-07-16 21:19:59',
},
{
id: '6',
realName: '周八',
phone: '13900139006',
roleId: '3',
roleName: '裁判',
status: '1',
createTime: '2026-07-15 00:36:12',
},
{
id: '7',
realName: '吴九',
phone: '13700137007',
roleId: '2',
roleName: '赛事管理员',
status: '1',
createTime: '2026-07-14 03:53:25',
},
{
id: '8',
realName: '郑十',
phone: '13600136008',
roleId: '4',
roleName: '财务',
status: '1',
createTime: '2026-07-13 07:10:38',
},
{
id: '9',
realName: '陈一',
phone: '13800138009',
roleId: '3',
roleName: '裁判',
status: '1',
createTime: '2026-07-12 10:27:51',
},
{
id: '10',
realName: '刘二',
phone: '13900139010',
roleId: '2',
roleName: '赛事管理员',
status: '0',
createTime: '2026-07-11 13:44:04',
},
{
id: '11',
realName: '黄三',
phone: '13700137011',
roleId: '1',
roleName: '超级管理员',
status: '1',
createTime: '2026-07-10 17:01:17',
},
{
id: '12',
realName: '林四',
phone: '13600136012',
roleId: '4',
roleName: '财务',
status: '1',
createTime: '2026-07-09 20:18:30',
},
];
export function buildMockUserListPage(page: number, limit: number): MockPageData<MockUserVO> {
const start = (page - 1) * limit;
return { total: MOCK_USERS.length, list: MOCK_USERS.slice(start, start + limit) };
}
-143
View File
@@ -1,143 +0,0 @@
/**
* 钱包列表假数据
* 对应接口:GET /admin/finance/wallet/summary
*/
import type { WalletSummaryVO, WalletQueryParams, WalletSummaryPageData } from '@/api/wallet';
const MOCK_LIST: WalletSummaryVO[] = [
{
userId: 1001,
userNickname: '张三',
phone: '12345678997',
amount: '0.00',
frozenAmount: '0.00',
withdrawalAmount: '0.00',
},
{
userId: 1002,
userNickname: '李四',
phone: '12345678998',
amount: '350.00',
frozenAmount: '200.00',
withdrawalAmount: '1450.00',
},
{
userId: 1003,
userNickname: '王五',
phone: '12345678999',
amount: '1280.00',
frozenAmount: '0.00',
withdrawalAmount: '800.00',
},
{
userId: 1004,
userNickname: '赵六',
phone: '13800138000',
amount: '560.00',
frozenAmount: '100.00',
withdrawalAmount: '200.00',
},
{
userId: 1005,
userNickname: '钱七',
phone: '13900139001',
amount: '4200.00',
frozenAmount: '1500.00',
withdrawalAmount: '5600.00',
},
{
userId: 1006,
userNickname: '孙八',
phone: '12345678997',
amount: '880.00',
frozenAmount: '0.00',
withdrawalAmount: '300.00',
},
{
userId: 1007,
userNickname: '周九',
phone: '17000170001',
amount: '2100.00',
frozenAmount: '800.00',
withdrawalAmount: '3200.00',
},
{
userId: 1008,
userNickname: '吴十',
phone: '18900189000',
amount: '650.00',
frozenAmount: '0.00',
withdrawalAmount: '450.00',
},
{
userId: 1009,
userNickname: '郑十一',
phone: '15200152000',
amount: '980.00',
frozenAmount: '200.00',
withdrawalAmount: '1200.00',
},
{
userId: 1010,
userNickname: '冯十二',
phone: '18600186001',
amount: '320.00',
frozenAmount: '50.00',
withdrawalAmount: '100.00',
},
{
userId: 1011,
userNickname: '褚十三',
phone: '13500135000',
amount: '5800.00',
frozenAmount: '0.00',
withdrawalAmount: '2000.00',
},
{
userId: 1012,
userNickname: '卫十四',
phone: '13700137000',
amount: '75.00',
frozenAmount: '0.00',
withdrawalAmount: '75.00',
},
];
function computeExData(list: WalletSummaryVO[]) {
const totalAmount = list.reduce((s, i) => s + Number(i.amount || 0), 0).toFixed(2);
const totalFrozenAmount = list.reduce((s, i) => s + Number(i.frozenAmount || 0), 0).toFixed(2);
const totalWithdrawalAmount = list
.reduce((s, i) => s + Number(i.withdrawalAmount || 0), 0)
.toFixed(2);
return { totalAmount, totalFrozenAmount, totalWithdrawalAmount };
}
export function buildMockWalletPage(
page: number,
limit: number,
params: WalletQueryParams,
): WalletSummaryPageData {
let filtered = [...MOCK_LIST];
if (params.nickname) {
filtered = filtered.filter((item) => item.userNickname.includes(params.nickname!));
}
if (params.phone) {
filtered = filtered.filter((item) => item.phone.includes(params.phone!));
}
if (params.amountBegin) {
filtered = filtered.filter((item) => Number(item.amount) >= Number(params.amountBegin));
}
if (params.amountEnd) {
filtered = filtered.filter((item) => Number(item.amount) <= Number(params.amountEnd));
}
const total = filtered.length;
const start = (page - 1) * limit;
return {
total,
list: filtered.slice(start, start + limit),
exData: computeExData(filtered),
};
}
-187
View File
@@ -1,187 +0,0 @@
/**
* 钱包交易明细假数据
* 对应接口:GET /admin/finance/wallet/page
*
* type: 1=报名入账, 2=提现出账, 3=退款出账
* status(由 freezeAmount/freezeTime 推导): 1=已解冻, 2=冻结中, 3=正常
*/
import type { WalletTransactionVO, WalletTransactionQueryParams, PageData } from '@/api/wallet';
const MOCK_TRANSACTIONS: (WalletTransactionVO & { status: number })[] = [
{
type: 1,
amount: '+100.00',
afterAmount: '600.00',
withdrawAmount: '500.00',
freezeAmount: '100.00',
status: 1,
freezeTime: '2026-06-10 08:00',
unfreezeTime: '2026-06-12 08:00',
orderNo: 'SN20260610001',
createDate: '2026-06-10 08:00',
},
{
type: 2,
amount: '-500.00',
afterAmount: '1100.00',
withdrawAmount: '500.00',
freezeAmount: '600.00',
status: 2,
freezeTime: '2026-06-10 06:00',
unfreezeTime: '',
orderNo: 'SN20260610002',
createDate: '2026-06-10 06:00',
},
{
type: 3,
amount: '-100.00',
afterAmount: '500.00',
withdrawAmount: '500.00',
freezeAmount: '0.00',
status: 3,
freezeTime: '',
unfreezeTime: '',
orderNo: 'SN20260610003',
createDate: '2026-06-10 05:00',
},
{
type: 1,
amount: '+350.00',
afterAmount: '850.00',
withdrawAmount: '750.00',
freezeAmount: '100.00',
status: 3,
freezeTime: '',
unfreezeTime: '',
orderNo: 'SN20260609001',
createDate: '2026-06-09 17:30',
},
{
type: 2,
amount: '-250.00',
afterAmount: '600.00',
withdrawAmount: '500.00',
freezeAmount: '100.00',
status: 1,
freezeTime: '2026-06-08 10:00',
unfreezeTime: '2026-06-09 08:00',
orderNo: 'SN20260608001',
createDate: '2026-06-08 10:00',
},
{
type: 1,
amount: '+800.00',
afterAmount: '2000.00',
withdrawAmount: '1800.00',
freezeAmount: '200.00',
status: 3,
freezeTime: '',
unfreezeTime: '',
orderNo: 'SN20260607001',
createDate: '2026-06-07 14:00',
},
{
type: 2,
amount: '-300.00',
afterAmount: '1200.00',
withdrawAmount: '1000.00',
freezeAmount: '200.00',
status: 2,
freezeTime: '2026-06-06 09:00',
unfreezeTime: '',
orderNo: 'SN20260606001',
createDate: '2026-06-06 09:00',
},
{
type: 3,
amount: '-50.00',
afterAmount: '1500.00',
withdrawAmount: '1300.00',
freezeAmount: '200.00',
status: 1,
freezeTime: '2026-06-05 10:00',
unfreezeTime: '2026-06-07 10:00',
orderNo: 'SN20260605001',
createDate: '2026-06-05 10:00',
},
{
type: 1,
amount: '+200.00',
afterAmount: '1550.00',
withdrawAmount: '1350.00',
freezeAmount: '200.00',
status: 3,
freezeTime: '',
unfreezeTime: '',
orderNo: 'SN20260604001',
createDate: '2026-06-04 08:30',
},
{
type: 2,
amount: '-600.00',
afterAmount: '950.00',
withdrawAmount: '750.00',
freezeAmount: '200.00',
status: 1,
freezeTime: '2026-06-03 16:00',
unfreezeTime: '2026-06-05 16:00',
orderNo: 'SN20260603001',
createDate: '2026-06-03 16:00',
},
{
type: 1,
amount: '+450.00',
afterAmount: '1050.00',
withdrawAmount: '850.00',
freezeAmount: '200.00',
status: 1,
freezeTime: '2026-06-02 11:00',
unfreezeTime: '2026-06-04 11:00',
orderNo: 'SN20260602001',
createDate: '2026-06-02 11:00',
},
{
type: 3,
amount: '-120.00',
afterAmount: '600.00',
withdrawAmount: '400.00',
freezeAmount: '200.00',
status: 3,
freezeTime: '',
unfreezeTime: '',
orderNo: 'SN20260601001',
createDate: '2026-06-01 15:00',
},
];
function inDateRange(date: string, begin?: string, end?: string): boolean {
if (!begin && !end) return true;
const d = date.slice(0, 10);
if (begin && d < begin) return false;
if (end && d > end) return false;
return true;
}
export function buildMockWalletTransactionPage(
page: number,
limit: number,
params: WalletTransactionQueryParams,
): PageData<WalletTransactionVO> {
let filtered = [...MOCK_TRANSACTIONS];
if (params.type) {
filtered = filtered.filter((item) => item.type === Number(params.type));
}
if (params.status) {
filtered = filtered.filter((item) => item.status === Number(params.status));
}
filtered = filtered.filter((item) =>
inDateRange(item.createDate, params.createDateBegin, params.createDateEnd),
);
const total = filtered.length;
const start = (page - 1) * limit;
const list = filtered.slice(start, start + limit).map(({ status, ...rest }) => rest);
return { total, list };
}
-150
View File
@@ -1,150 +0,0 @@
/**
* 提现详情假数据
* 对应接口:GET /admin/finance/withdraw/info?id=xxx
*
* 字段对齐 TournamentFinanceWithdrawInfoVO。
*/
import type { WithdrawInfoVO } from '@/api/withdraw';
/** 银行卡类型映射 */
const BANK_CARD_TYPE_MAP: Record<number, string> = { 1: '个人' };
const MOCK_DETAILS: Record<number, WithdrawInfoVO> = {
1: {
nickname: '可乐',
phone: '17762466262',
realName: '可乐',
createDate: '2026-07-30 09:53:00',
withdrawType: '银行卡',
withdrawAmount: '1000.00',
feeRate: '0.006',
feeAmount: '6.00',
receivedAmount: '994.00',
auditStatus: 0,
payStatus: 0,
bankCardType: 1,
cardHolderName: '龚',
bankCardNumber: '6215581807006475126',
bankName: '交通银行',
branchName: '交通银行宜昌西坝支行',
payTime: '',
orderNo: 'WD04111775872421935100',
auditDate: '',
auditNickname: '',
auditImg: '',
auditImgList: [],
},
2: {
nickname: '李四',
phone: '12345678998',
realName: '李四',
createDate: '2026-07-29 14:30:00',
withdrawType: '银行卡',
withdrawAmount: '200.00',
feeRate: '0.006',
feeAmount: '1.20',
receivedAmount: '198.80',
auditStatus: 1,
payStatus: 1,
bankCardType: 1,
cardHolderName: '李四',
bankCardNumber: '6222021234567890123',
bankName: '工商银行',
branchName: '工商银行北京中关村支行',
payTime: '2026-07-29 14:35:00',
orderNo: 'SN20260729001',
auditDate: '2026-07-29 14:32:00',
auditNickname: '管理员A',
auditImg: '',
auditImgList: [
'https://via.placeholder.com/200x200?text=Audit1',
'https://via.placeholder.com/200x200?text=Audit2',
],
},
3: {
nickname: '王五',
phone: '13800138000',
realName: '王五',
createDate: '2026-07-28 11:15:00',
withdrawType: '银行卡',
withdrawAmount: '500.00',
feeRate: '0.006',
feeAmount: '3.00',
receivedAmount: '497.00',
auditStatus: 1,
payStatus: 2,
bankCardType: 1,
cardHolderName: '王五',
bankCardNumber: '微信钱包',
bankName: '微信支付',
branchName: '-',
payTime: '',
orderNo: 'SN20260728002',
auditDate: '2026-07-28 11:20:00',
auditNickname: '管理员B',
auditImg: '',
auditImgList: [],
},
4: {
nickname: '赵六',
phone: '13900139001',
realName: '赵六',
createDate: '2026-07-27 09:45:00',
withdrawType: '银行卡',
withdrawAmount: '80.00',
feeRate: '0.006',
feeAmount: '0.48',
receivedAmount: '79.52',
auditStatus: 2,
payStatus: 0,
bankCardType: 1,
cardHolderName: '赵六',
bankCardNumber: '6217858000123456789',
bankName: '建设银行',
branchName: '建设银行上海陆家嘴支行',
payTime: '',
orderNo: '',
auditDate: '2026-07-27 10:00:00',
auditNickname: '管理A',
auditImg: '',
auditImgList: ['https://via.placeholder.com/200x200?text=Reject'],
},
5: {
nickname: '孙七',
phone: '18600186001',
realName: '孙七',
createDate: '2026-07-26 16:00:00',
withdrawType: '银行卡',
withdrawAmount: '3000.00',
feeRate: '0.006',
feeAmount: '18.00',
receivedAmount: '2982.00',
auditStatus: 0,
payStatus: 0,
bankCardType: 1,
cardHolderName: '孙七',
bankCardNumber: '6228480012345678910',
bankName: '农业银行',
branchName: '农业银行深圳福田支行',
payTime: '',
orderNo: 'WD05261775872421935200',
auditDate: '',
auditNickname: '',
auditImg: '',
auditImgList: [],
},
};
export function buildMockWithdrawInfo(id: number): WithdrawInfoVO {
const detail = MOCK_DETAILS[id];
if (detail) return { ...detail };
// 找不到对应 ID 时返回一个默认详情(基于 ID 4 的结构)
return {
...MOCK_DETAILS[4],
nickname: `用户${id}`,
phone: `1380000${String(id).padStart(4, '0')}`,
realName: `用户${id}`,
createDate: '2026-07-27 09:45:00',
};
}
-194
View File
@@ -1,194 +0,0 @@
/**
* 提现列表假数据
* 对应接口:GET /admin/finance/withdraw/page
*
* 前端筛选 + 分页,模拟后端行为。
*/
import type { WithdrawVO, WithdrawQueryParams, PageData } from '@/api/withdraw';
const MOCK_LIST: WithdrawVO[] = [
{
id: 1,
nickname: '可乐',
phone: '17762466262',
realName: '可乐',
withdrawType: '银行卡',
withdrawAmount: '1000.00',
receivedAmount: '994.00',
auditStatus: 0,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-30 09:53:00',
},
{
id: 2,
nickname: '李四',
phone: '12345678998',
realName: '李四',
withdrawType: '银行卡',
withdrawAmount: '200.00',
receivedAmount: '198.80',
auditStatus: 1,
payStatus: 1,
serialNumber: 'SN20260729001',
createDate: '2026-07-29 14:30:00',
},
{
id: 3,
nickname: '王五',
phone: '13800138000',
realName: '王五',
withdrawType: '银行卡',
withdrawAmount: '500.00',
receivedAmount: '497.00',
auditStatus: 1,
payStatus: 2,
serialNumber: 'SN20260728002',
createDate: '2026-07-28 11:15:00',
},
{
id: 4,
nickname: '赵六',
phone: '13900139001',
realName: '赵六',
withdrawType: '银行卡',
withdrawAmount: '80.00',
receivedAmount: '79.52',
auditStatus: 2,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-27 09:45:00',
},
{
id: 5,
nickname: '孙七',
phone: '18600186001',
realName: '孙七',
withdrawType: '银行卡',
withdrawAmount: '3000.00',
receivedAmount: '2982.00',
auditStatus: 0,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-26 16:00:00',
},
{
id: 6,
nickname: '周八',
phone: '15200152000',
realName: '周八',
withdrawType: '银行卡',
withdrawAmount: '150.00',
receivedAmount: '149.10',
auditStatus: 1,
payStatus: 1,
serialNumber: 'SN20260725003',
createDate: '2026-07-25 10:20:00',
},
{
id: 7,
nickname: '吴九',
phone: '17000170001',
realName: '吴九',
withdrawType: '银行卡',
withdrawAmount: '600.00',
receivedAmount: '596.40',
auditStatus: 2,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-24 08:30:00',
},
{
id: 8,
nickname: '郑十',
phone: '18900189000',
realName: '郑十',
withdrawType: '银行卡',
withdrawAmount: '2200.00',
receivedAmount: '2186.80',
auditStatus: 0,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-23 13:10:00',
},
{
id: 9,
nickname: '可乐',
phone: '17762466262',
realName: '可乐',
withdrawType: '银行卡',
withdrawAmount: '450.00',
receivedAmount: '447.30',
auditStatus: 1,
payStatus: 2,
serialNumber: 'SN20260722004',
createDate: '2026-07-22 15:45:00',
},
{
id: 10,
nickname: '李四',
phone: '12345678998',
realName: '李四',
withdrawType: '银行卡',
withdrawAmount: '1800.00',
receivedAmount: '1789.20',
auditStatus: 0,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-21 09:00:00',
},
{
id: 11,
nickname: '王五',
phone: '13800138000',
realName: '王五',
withdrawType: '银行卡',
withdrawAmount: '320.00',
receivedAmount: '318.08',
auditStatus: 1,
payStatus: 1,
serialNumber: 'SN20260720005',
createDate: '2026-07-20 17:30:00',
},
{
id: 12,
nickname: '孙七',
phone: '18600186001',
realName: '孙七',
withdrawType: '银行卡',
withdrawAmount: '750.00',
receivedAmount: '745.50',
auditStatus: 2,
payStatus: 0,
serialNumber: '',
createDate: '2026-07-19 11:00:00',
},
];
export function buildMockWithdrawPage(
page: number,
limit: number,
params: WithdrawQueryParams,
): PageData<WithdrawVO> {
let filtered = [...MOCK_LIST];
if (params.nickname) {
filtered = filtered.filter((item) => item.nickname.includes(params.nickname!));
}
if (params.phone) {
filtered = filtered.filter((item) => item.phone.includes(params.phone!));
}
if (params.realName) {
filtered = filtered.filter((item) => item.realName.includes(params.realName!));
}
if (params.auditStatus) {
filtered = filtered.filter((item) => item.auditStatus === Number(params.auditStatus));
}
if (params.payStatus) {
filtered = filtered.filter((item) => item.payStatus === Number(params.payStatus));
}
const total = filtered.length;
const start = (page - 1) * limit;
return { total, list: filtered.slice(start, start + limit) };
}
@@ -3,8 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { MOCK_BANNER_LIST } from '@/config/mock/bannerList';
import type {
BannerListQueryParams,
BannerSaveParams,
@@ -32,8 +30,6 @@ const bannerSave = '/admin/manager/banner/save';
const bannerUpdate = '/admin/manager/banner/update';
const bannerActive = '/admin/manager/banner/active';
const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
// ============================================================
// API 函数
// ============================================================
@@ -42,10 +38,6 @@ const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve,
export async function getBannerList(
params: BannerListQueryParams,
): Promise<ApiResult<TournamentAdminBannerListVO[]>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return { code: 200, msg: 'success', data: MOCK_BANNER_LIST };
}
return get(bannerList, params as Record<string, any>);
}
-34
View File
@@ -3,10 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockOrderListPage } from '@/config/mock/orderList';
import { MOCK_ORDER_DETAIL } from '@/config/mock/orderDetail';
import { buildMockOrderPlayerListPage } from '@/config/mock/orderPlayerList';
import type {
OrderListQueryParams,
OrderDetailQueryParams,
@@ -40,8 +36,6 @@ const orderDetail = '/admin/manager/order/info';
const orderPlayerList = '/admin/manager/order/info/userPage';
const retryRefund = '/admin/manager/order/retryRefund';
const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
// ============================================================
// API 函数
// ============================================================
@@ -50,16 +44,6 @@ const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve,
export async function getOrderList(
params: OrderListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminOrderPageVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOrderListPage(page, limit),
};
}
return get(orderList, params as Record<string, any>);
}
@@ -67,14 +51,6 @@ export async function getOrderList(
export async function getOrderDetail(
params: OrderDetailQueryParams,
): Promise<ApiResult<TournamentAdminOrderInfoVO>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return {
code: 200,
msg: 'success',
data: { ...MOCK_ORDER_DETAIL },
};
}
return get(orderDetail, params as Record<string, any>);
}
@@ -82,16 +58,6 @@ export async function getOrderDetail(
export async function getOrderPlayerList(
params: OrderPlayerListQueryParams,
): Promise<ApiResult<PageData<TournamentAdminOrderInfoPageVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOrderPlayerListPage(page, limit),
};
}
return get(orderPlayerList, params as Record<string, any>);
}
-5
View File
@@ -3,7 +3,6 @@
* 接口文档: GET /admin/manager/user/page
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import type {
UserSaveParams,
UserUpdateParams,
@@ -61,8 +60,6 @@ const userUpdate = '/admin/sys/user/update';
const userActive = '/admin/manager/user/active';
const userUpdatePwd = '/admin/sys/user/updatepwd';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
// ============================================================
// API 函数
// ============================================================
@@ -76,13 +73,11 @@ export function getUserList(
/** 新增用户 */
export function saveUser(params: UserSaveParams): Promise<ApiResult<Record<string, never>>> {
if (USE_MOCK) return delay(MOCK_DELAY).then(() => ({ code: 200, msg: 'success', data: {} }));
return post(userSave, params);
}
/** 更新用户 */
export function updateUser(params: UserUpdateParams): Promise<ApiResult<Record<string, never>>> {
if (USE_MOCK) return delay(MOCK_DELAY).then(() => ({ code: 200, msg: 'success', data: {} }));
return post(userUpdate, params);
}
@@ -3,8 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockPaymentFlowPage } from '@/config/mock/paymentFlow';
import type {
PaymentFlowQueryParams,
PaymentFlowVO,
@@ -25,8 +23,6 @@ export type {
// ============================================================
const paymentFlowList = '/admin/finance/paymentFlow/page';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
// ============================================================
// API 函数
// ============================================================
@@ -35,11 +31,5 @@ const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
export async function getPaymentFlowList(
params: PaymentFlowQueryParams,
): Promise<ApiResult<PaymentFlowPageData>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockPaymentFlowPage(page, limit, params) };
}
return get(paymentFlowList, params as Record<string, any>);
}
@@ -3,9 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockWalletPage } from '@/config/mock/walletList';
import { buildMockWalletTransactionPage } from '@/config/mock/walletTransactions';
import type {
WalletQueryParams,
WalletSummaryVO,
@@ -32,8 +29,6 @@ export type {
const walletList = '/admin/finance/wallet/summary';
const walletTransaction = '/admin/finance/wallet/page';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
// ============================================================
// API 函数
// ============================================================
@@ -42,12 +37,6 @@ const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
export async function getWalletList(
params: WalletQueryParams,
): Promise<ApiResult<WalletSummaryPageData>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockWalletPage(page, limit, params) };
}
return get(walletList, params as Record<string, any>);
}
@@ -55,11 +44,5 @@ export async function getWalletList(
export async function getWalletTransactionList(
params: WalletTransactionQueryParams,
): Promise<ApiResult<PageData<WalletTransactionVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return { code: 200, msg: 'success', data: buildMockWalletTransactionPage(page, limit, params) };
}
return get(walletTransaction, params as Record<string, any>);
}
@@ -3,9 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get, post } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockWithdrawPage } from '@/config/mock/withdrawList';
import { buildMockWithdrawInfo } from '@/config/mock/withdrawInfo';
import type {
WithdrawQueryParams,
WithdrawVO,
@@ -29,8 +26,6 @@ const withdrawList = '/admin/finance/withdraw/page';
const withdrawInfo = '/admin/finance/withdraw/info';
const withdrawAudit = '/admin/finance/withdraw/audit';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
// ============================================================
// API 函数
// ============================================================
@@ -39,25 +34,11 @@ const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
export async function getWithdrawList(
params: WithdrawQueryParams,
): Promise<ApiResult<PageData<WithdrawVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockWithdrawPage(page, limit, params),
};
}
return get(withdrawList, params as Record<string, any>);
}
/** 提现详情 */
export async function getWithdrawInfo(id: number): Promise<ApiResult<WithdrawInfoVO>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
return { code: 200, msg: 'success', data: buildMockWithdrawInfo(id) };
}
return get(withdrawInfo, { id: String(id) });
}
-19
View File
@@ -3,8 +3,6 @@
* 该页面使用的所有接口集中管理
*/
import { get } from '@/utils/request';
import { USE_MOCK, MOCK_DELAY } from '@/config/mock';
import { buildMockOperationLogPage } from '@/config/mock/operationLogs';
import type {
OperationLogQueryParams,
SysOperationLogVO,
@@ -24,30 +22,13 @@ export type {
// ============================================================
const operationLogList = '/admin/sys/operation/page';
const delay = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
// ============================================================
// API 函数
// ============================================================
function pickFilters(params: OperationLogQueryParams): OperationLogQueryParams {
const { page: _page, limit: _limit, ...filters } = params;
return filters;
}
/** 系统操作日志分页 */
export async function getOperationLogList(
params: OperationLogQueryParams,
): Promise<ApiResult<PageData<SysOperationLogVO>>> {
if (USE_MOCK) {
await delay(MOCK_DELAY);
const page = Number(params.page) || 1;
const limit = Number(params.limit) || 10;
return {
code: 200,
msg: 'success',
data: buildMockOperationLogPage(page, limit, pickFilters(params)),
};
}
return get(operationLogList, params as Record<string, any>);
}