feat: 按文档对接账务管理下页面逻辑与字段

This commit is contained in:
ZhuRui
2026-07-31 17:25:42 +08:00
parent ea906a0d92
commit 3b107e8d52
29 changed files with 1833 additions and 888 deletions
+149
View File
@@ -0,0 +1,149 @@
/**
* 支付流水假数据
* 对应接口:GET /admin/finance/paymentFlow/page
*/
import type { PaymentFlowVO, PaymentFlowQueryParams, PageData } 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,
): PageData<PaymentFlowVO> {
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),
);
const total = filtered.length;
const start = (page - 1) * limit;
return { total, list: filtered.slice(start, start + limit) };
}
+185
View File
@@ -0,0 +1,185 @@
/**
* 钱包列表假数据
* 对应接口:GET /admin/finance/wallet/summary
*/
import type { WalletSummaryVO, WalletQueryParams, PageData } from '@/api/wallet';
const MOCK_LIST: WalletSummaryVO[] = [
{
userId: 1001,
userNickname: '张三',
phone: '12345678997',
amount: '0.00',
frozenAmount: '0.00',
withdrawalAmount: '0.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1002,
userNickname: '李四',
phone: '12345678998',
amount: '350.00',
frozenAmount: '200.00',
withdrawalAmount: '1450.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1003,
userNickname: '王五',
phone: '12345678999',
amount: '1280.00',
frozenAmount: '0.00',
withdrawalAmount: '800.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1004,
userNickname: '赵六',
phone: '13800138000',
amount: '560.00',
frozenAmount: '100.00',
withdrawalAmount: '200.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1005,
userNickname: '钱七',
phone: '13900139001',
amount: '4200.00',
frozenAmount: '1500.00',
withdrawalAmount: '5600.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1006,
userNickname: '孙八',
phone: '12345678997',
amount: '880.00',
frozenAmount: '0.00',
withdrawalAmount: '300.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1007,
userNickname: '周九',
phone: '17000170001',
amount: '2100.00',
frozenAmount: '800.00',
withdrawalAmount: '3200.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1008,
userNickname: '吴十',
phone: '18900189000',
amount: '650.00',
frozenAmount: '0.00',
withdrawalAmount: '450.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1009,
userNickname: '郑十一',
phone: '15200152000',
amount: '980.00',
frozenAmount: '200.00',
withdrawalAmount: '1200.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1010,
userNickname: '冯十二',
phone: '18600186001',
amount: '320.00',
frozenAmount: '50.00',
withdrawalAmount: '100.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1011,
userNickname: '褚十三',
phone: '13500135000',
amount: '5800.00',
frozenAmount: '0.00',
withdrawalAmount: '2000.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
{
userId: 1012,
userNickname: '卫十四',
phone: '13700137000',
amount: '75.00',
frozenAmount: '0.00',
withdrawalAmount: '75.00',
totalAmount: '0.00',
totalFrozenAmount: '0.00',
totalWithdrawalAmount: '0.00',
},
];
/** 计算汇总值 */
function computeSummary(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,
): PageData<WalletSummaryVO> {
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;
const pageList = filtered.slice(start, start + limit);
// 将汇总值写入每条记录(方便前端提取统计卡数据)
const summary = computeSummary(filtered);
for (const item of pageList) {
item.totalAmount = summary.totalAmount;
item.totalFrozenAmount = summary.totalFrozenAmount;
item.totalWithdrawalAmount = summary.totalWithdrawalAmount;
}
return { total, list: pageList };
}
+187
View File
@@ -0,0 +1,187 @@
/**
* 钱包交易明细假数据
* 对应接口: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
@@ -0,0 +1,150 @@
/**
* 提现详情假数据
* 对应接口: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
@@ -0,0 +1,194 @@
/**
* 提现列表假数据
* 对应接口: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) };
}