feat(finance): 人工支出改为从客服备用金扣款
This commit is contained in:
@@ -37,6 +37,7 @@ import dayjs from '@/lib/dayjs'
|
||||
import {
|
||||
approveAdminManualExpense,
|
||||
createAdminManualExpense,
|
||||
fetchAdminFundAccounts,
|
||||
fetchAdminManualExpenseCostItems,
|
||||
fetchAdminManualExpenseOverview,
|
||||
fetchAdminManualExpenses,
|
||||
@@ -54,6 +55,7 @@ type FilterForm = { dateRange?: unknown; status?: string; keyword?: string }
|
||||
type ExpenseForm = {
|
||||
orderId?: number
|
||||
orderItemId?: number
|
||||
fundAccountId?: number
|
||||
costItemId?: number
|
||||
amountYuan?: number
|
||||
expenseCategory: string
|
||||
@@ -137,10 +139,17 @@ export default function AdminManualExpensePage() {
|
||||
queryKey: ['admin-manual-expense-cost-items'],
|
||||
queryFn: fetchAdminManualExpenseCostItems,
|
||||
})
|
||||
const fundAccountsQuery = useQuery({
|
||||
queryKey: ['admin-fund-accounts', 'agent'],
|
||||
queryFn: () =>
|
||||
fetchAdminFundAccounts({ accountType: 'agent', status: 'active', pageSize: 200 }),
|
||||
enabled: createOpen,
|
||||
})
|
||||
|
||||
const list = listQuery.data?.data
|
||||
const overview = overviewQuery.data?.data?.overview
|
||||
const costItems = costItemsQuery.data?.data.items || []
|
||||
const fundAccounts = fundAccountsQuery.data?.data.items || []
|
||||
|
||||
useEffect(() => {
|
||||
const orderId = Number(searchParams.get('orderId') || 0)
|
||||
@@ -160,9 +169,17 @@ export default function AdminManualExpensePage() {
|
||||
if (systemItem) expenseForm.setFieldValue('costItemId', systemItem.id)
|
||||
}, [costItems, createOpen, expenseForm])
|
||||
|
||||
useEffect(() => {
|
||||
if (!createOpen || fundAccounts.length !== 1) return
|
||||
if (!expenseForm.getFieldValue('fundAccountId')) {
|
||||
expenseForm.setFieldValue('fundAccountId', fundAccounts[0]?.id)
|
||||
}
|
||||
}, [createOpen, expenseForm, fundAccounts])
|
||||
|
||||
function refreshAll() {
|
||||
void queryClient.invalidateQueries({ queryKey: ['admin-manual-expenses'] })
|
||||
void queryClient.invalidateQueries({ queryKey: ['admin-manual-expense-overview'] })
|
||||
void queryClient.invalidateQueries({ queryKey: ['admin-fund-accounts'] })
|
||||
}
|
||||
|
||||
function applyFilters(values: FilterForm) {
|
||||
@@ -193,6 +210,7 @@ export default function AdminManualExpensePage() {
|
||||
const response = await createAdminManualExpense({
|
||||
orderId: values.orderId || undefined,
|
||||
orderItemId: values.orderItemId || undefined,
|
||||
fundAccountId: values.fundAccountId,
|
||||
costItemId: values.costItemId || undefined,
|
||||
amountFen,
|
||||
expenseCategory: values.expenseCategory,
|
||||
@@ -346,6 +364,22 @@ export default function AdminManualExpensePage() {
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '备用金账户',
|
||||
key: 'fundAccount',
|
||||
width: 180,
|
||||
render: (_, row) =>
|
||||
row.fundAccountId ? (
|
||||
<Space direction="vertical" size={2}>
|
||||
<span>{row.fundAccountOwnerName || '-'}</span>
|
||||
<Typography.Text type="secondary">
|
||||
{row.fundAccountNo || `#${row.fundAccountId}`} · {row.fundExpenseNo || '-'}
|
||||
</Typography.Text>
|
||||
</Space>
|
||||
) : (
|
||||
<Tag color="default">未走备用金</Tag>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '凭证',
|
||||
dataIndex: 'evidenceJson',
|
||||
@@ -538,7 +572,7 @@ export default function AdminManualExpensePage() {
|
||||
columns={columns}
|
||||
dataSource={list?.items || []}
|
||||
loading={listQuery.isLoading}
|
||||
scroll={{ x: 1650 }}
|
||||
scroll={{ x: 1830 }}
|
||||
pagination={buildAdminTablePagination({
|
||||
current: page,
|
||||
pageSize,
|
||||
@@ -590,6 +624,34 @@ export default function AdminManualExpensePage() {
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Form.Item
|
||||
name="fundAccountId"
|
||||
label="备用金账户"
|
||||
rules={[{ required: true, message: '请选择备用金账户' }]}
|
||||
extra="人工支出会直接从该客服的备用金余额扣减,并同步出现在「备用金」支出明细里"
|
||||
>
|
||||
<Select
|
||||
showSearch
|
||||
optionFilterProp="label"
|
||||
loading={fundAccountsQuery.isLoading}
|
||||
placeholder="请选择这笔支出从哪个客服备用金账户出"
|
||||
options={fundAccounts.map((account) => ({
|
||||
value: account.id,
|
||||
label: `${account.ownerName} · ${account.accountNo} · 余额 ${formatMoney(
|
||||
account.balanceFen,
|
||||
)}`,
|
||||
}))}
|
||||
/>
|
||||
</Form.Item>
|
||||
{!fundAccountsQuery.isLoading && fundAccounts.length === 0 ? (
|
||||
<Alert
|
||||
type="warning"
|
||||
showIcon
|
||||
style={{ marginBottom: 14 }}
|
||||
message="没有可用的客服备用金账户"
|
||||
description="请先到「备用金」页为客服开通账户并拨付备用金,否则无法登记人工支出。"
|
||||
/>
|
||||
) : null}
|
||||
<Row gutter={12}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
|
||||
Reference in New Issue
Block a user