新增财务申请时间类型筛选

This commit is contained in:
yml2213
2026-09-02 14:32:26 +08:00
parent bf167d98ed
commit 625df52992
8 changed files with 162 additions and 33 deletions
@@ -20,7 +20,11 @@ import { useState } from 'react'
import { AdminRangePicker } from '@/components/admin/AdminDatePicker'
import PageHeader from '@/components/admin/PageHeader'
import dayjs from '@/lib/dayjs'
import { fetchAdminFinanceSummary, fetchAdminFinanceTransactions } from '@/services/admin'
import {
fetchAdminFinanceSummary,
fetchAdminFinanceTransactions,
type AdminFinanceDateType,
} from '@/services/admin'
import type {
AdminFinanceChannelDailyItem,
AdminFinanceDailyItem,
@@ -30,7 +34,7 @@ import { ADMIN_DEFAULT_PAGE_SIZE, buildAdminTablePagination } from '@/utils/admi
import { formatAdminDateTime } from '@/utils/admin-time'
import { formatMoney } from './panels/shared'
type FinanceFilterForm = { dateRange?: unknown }
type FinanceFilterForm = { dateRange?: unknown; dateType?: AdminFinanceDateType }
const CATEGORY_OPTIONS = [
{ value: '', label: '全部账目' },
@@ -45,7 +49,11 @@ const CATEGORY_OPTIONS = [
export default function AdminFinancePage() {
const [form] = Form.useForm<FinanceFilterForm>()
const [filters, setFilters] = useState({ dateFrom: '', dateTo: '' })
const [filters, setFilters] = useState<{
dateFrom: string
dateTo: string
dateType: AdminFinanceDateType
}>({ dateFrom: '', dateTo: '', dateType: 'occurred' })
const [category, setCategory] = useState('')
const [channel, setChannel] = useState('')
const [channelSummaryFilter, setChannelSummaryFilter] = useState('')
@@ -83,7 +91,7 @@ export default function AdminFinancePage() {
? dayjs(range[1]).second(59).format('YYYY-MM-DD HH:mm:ss')
: ''
setPage(1)
setFilters({ dateFrom, dateTo })
setFilters({ dateFrom, dateTo, dateType: values.dateType || 'occurred' })
}
function resetFilters() {
@@ -92,7 +100,7 @@ export default function AdminFinancePage() {
setChannel('')
setChannelSummaryFilter('')
setPage(1)
setFilters({ dateFrom: '', dateTo: '' })
setFilters({ dateFrom: '', dateTo: '', dateType: 'occurred' })
}
const dailyColumns: TableColumnsType<AdminFinanceDailyItem> = [
@@ -161,7 +169,17 @@ export default function AdminFinancePage() {
className="filter-form"
onFinish={applyFilters}
>
<Form.Item name="dateRange" label="账务日期">
<Form.Item name="dateType" label="时间类型" initialValue="occurred">
<Select
style={{ width: 160 }}
options={[
{ value: 'occurred', label: '账务发生时间' },
{ value: 'created', label: '打手申请时间' },
{ value: 'reviewed', label: '审核通过时间' },
]}
/>
</Form.Item>
<Form.Item name="dateRange" label="时间范围">
<AdminRangePicker showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" />
</Form.Item>
<Form.Item>
@@ -61,6 +61,7 @@ type FinanceConfigFormValues = {
}
type FinanceReviewAction = 'approved' | 'rejected' | 'cancelled'
type FinanceRequestDateType = 'created' | 'reviewed'
export default function FinancePanel() {
const { message } = App.useApp()
@@ -74,7 +75,8 @@ export default function FinancePanel() {
const [requestType, setRequestType] = useState('')
const [keywordInput, setKeywordInput] = useState('')
const [keyword, setKeyword] = useState('')
const [createdRange, setCreatedRange] = useState<[string, string] | null>(null)
const [requestDateType, setRequestDateType] = useState<FinanceRequestDateType>('created')
const [requestDateRange, setRequestDateRange] = useState<[string, string] | null>(null)
const [accountChannel, setAccountChannel] = useState('')
const [page, setPage] = useState(1)
const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE)
@@ -116,8 +118,9 @@ export default function FinancePanel() {
keyword,
page,
pageSize,
createdRange ? createdRange[0] : '',
createdRange ? createdRange[1] : '',
requestDateType,
requestDateRange ? requestDateRange[0] : '',
requestDateRange ? requestDateRange[1] : '',
accountChannel,
],
queryFn: () =>
@@ -129,7 +132,11 @@ export default function FinancePanel() {
page,
pageSize,
accountChannel,
...(createdRange ? { createdFrom: createdRange[0], createdTo: createdRange[1] } : {}),
...(requestDateRange
? requestDateType === 'created'
? { createdFrom: requestDateRange[0], createdTo: requestDateRange[1] }
: { reviewedFrom: requestDateRange[0], reviewedTo: requestDateRange[1] }
: {}),
}),
})
const financeRequestsPagination = financeRequestsQuery.data?.data.pagination
@@ -507,16 +514,31 @@ export default function FinancePanel() {
setPage(1)
}}
/>
<Select
value={requestDateType}
style={{ width: 150 }}
options={[
{ value: 'created', label: '申请提现时间' },
{ value: 'reviewed', label: '审核通过时间' },
]}
onChange={(nextType: FinanceRequestDateType) => {
setRequestDateType(nextType)
setPage(1)
}}
/>
<AdminRangePicker
placeholder={['请选择时间范围', '请选择时间范围']}
format="YYYY-MM-DD HH:mm"
showTime={{
format: 'HH:mm',
defaultValue: [dayjs('00:00:00', 'HH:mm:ss'), dayjs('23:59:59', 'HH:mm:ss')],
}}
value={createdRange ? [dayjs(createdRange[0]), dayjs(createdRange[1])] : null}
value={
requestDateRange ? [dayjs(requestDateRange[0]), dayjs(requestDateRange[1])] : null
}
onChange={(dates) => {
const [start, end] = dates || []
setCreatedRange(
setRequestDateRange(
start && end
? [
// 起止各占满整分钟:开始 xx:00、结束 xx:59
+6 -1
View File
@@ -1,7 +1,11 @@
import { apiGet } from '@/lib/http'
import type { AdminFinanceSummary, AdminFinanceTransactionResult } from '@/types/admin/finance'
export function fetchAdminFinanceSummary(params: { dateFrom?: string; dateTo?: string } = {}) {
export type AdminFinanceDateType = 'occurred' | 'created' | 'reviewed'
export function fetchAdminFinanceSummary(
params: { dateFrom?: string; dateTo?: string; dateType?: AdminFinanceDateType } = {},
) {
return apiGet<AdminFinanceSummary>('/api/v1/admin/finance/summary', params)
}
@@ -9,6 +13,7 @@ export function fetchAdminFinanceTransactions(
params: {
dateFrom?: string
dateTo?: string
dateType?: AdminFinanceDateType
category?: string
channel?: string
page?: number