v4.0.11HQ后端优化(快链、账单日等)
CI / verify (pull_request) Has been cancelled

This commit is contained in:
2026-09-02 15:45:12 +08:00
parent 1000b489a0
commit 6880b5daf4
31 changed files with 1014 additions and 402 deletions
+45 -7
View File
@@ -1,4 +1,5 @@
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import {
Button,
Card,
@@ -26,6 +27,7 @@ import {
} from '@dukang/shared-types';
import { fmtTime } from '../lib/constants';
import { downloadExcelCsv } from '../lib/exportExcel';
import { appendExportColumns } from '../lib/export-columns';
import { request, type HqProfile } from '../lib/api';
import { useAdminList } from '../lib/useAdminList';
import { useAdminListColumns } from '../lib/useAdminListColumns';
@@ -37,6 +39,8 @@ type Row = {
id: string;
billNo: string;
billDate: string;
periodStart: string;
periodEnd: string;
orderCount: number;
orderAmount: number;
wineryRate: number;
@@ -107,6 +111,7 @@ const WINERY_BANK_KEYS = [
] as const;
export default function WineryBillsPage() {
const navigate = useNavigate();
const [form] = Form.useForm();
const [bankForm] = Form.useForm<Record<string, string>>();
const [reconcileForm] = Form.useForm<{ range?: [Dayjs, Dayjs] }>();
@@ -196,6 +201,7 @@ export default function WineryBillsPage() {
if (filters.month) qs.set('month', filters.month);
if (filters.dateFrom) qs.set('dateFrom', filters.dateFrom);
if (filters.dateTo) qs.set('dateTo', filters.dateTo);
appendExportColumns(qs, exportColumnKeys);
const result = await request<{ csv: string; count: number }>(`/admin/winery-bills/export?${qs}`);
const suffix = filters.year && filters.month ? `${filters.year}-${filters.month}` : 'all';
downloadExcelCsv(result.csv, `酒厂对账单_${suffix}.csv`);
@@ -275,6 +281,7 @@ export default function WineryBillsPage() {
const baseColumns: ColumnsType<Row> = [
{
title: '账单号',
key: '账单号',
dataIndex: 'billNo',
width: 170,
render: (v, row) => (
@@ -284,34 +291,49 @@ export default function WineryBillsPage() {
{
title: (
<Tooltip title="出账当天的北京日历日;T+3 只决定纳入哪天完成的订单">
账单日
出账日
</Tooltip>
),
key: '出账日',
dataIndex: 'billDate',
width: 110,
render: (v) => String(v || '').slice(0, 10),
},
{ title: '订单数', dataIndex: 'orderCount', width: 80 },
{
title: '酒单实付合计',
title: (
<Tooltip title="纳入本账单的订单完成日区间(含起止日)">
账期
</Tooltip>
),
key: '账期',
width: 200,
render: (_, row) => `${row.periodStart} ~ ${row.periodEnd}`,
},
{ title: '订单数', key: '订单数', dataIndex: 'orderCount', width: 80 },
{
title: '订单总额',
key: '订单总额',
dataIndex: 'orderAmount',
width: 120,
render: (v) => `¥${Number(v).toFixed(2)}`,
},
{
title: '酒厂比例',
key: '酒厂比例',
dataIndex: 'wineryRate',
width: 90,
render: (v) => `${Math.round(Number(v) * 100)}%`,
},
{
title: '应付',
key: '应付',
dataIndex: 'wineryAmount',
width: 110,
render: (v) => `¥${Number(v).toFixed(2)}`,
},
{
title: '状态',
key: '状态',
dataIndex: 'status',
width: 100,
render: (s, row) => {
@@ -338,7 +360,7 @@ export default function WineryBillsPage() {
},
];
const { columns, settingsButton, settingsModal } = useAdminListColumns('finance-winery-bills', baseColumns, { page, pageSize });
const { columns, settingsButton, settingsModal, exportColumnKeys } = useAdminListColumns('finance-winery-bills', baseColumns, { page, pageSize });
return (
<div>
@@ -365,7 +387,7 @@ export default function WineryBillsPage() {
<Card size="small" style={{ marginBottom: 16 }}>
<Space size="large" wrap>
<Statistic title="账单数" value={summary.count} />
<Statistic title="酒单实付合计" value={summary.orderAmount ?? 0} prefix="¥" precision={2} />
<Statistic title="订单总额" value={summary.orderAmount ?? 0} prefix="¥" precision={2} />
<Statistic title="应付合计" value={summary.wineryAmount ?? 0} prefix="¥" precision={2} />
</Space>
</Card>
@@ -460,7 +482,10 @@ export default function WineryBillsPage() {
<>
<Descriptions column={1} size="small" bordered>
<Descriptions.Item label="账单号">{detail.billNo}</Descriptions.Item>
<Descriptions.Item label="账单日">{String(detail.billDate).slice(0, 10)}</Descriptions.Item>
<Descriptions.Item label="出账日">{String(detail.billDate).slice(0, 10)}</Descriptions.Item>
<Descriptions.Item label="账期">
{detail.periodStart} ~ {detail.periodEnd}
</Descriptions.Item>
<Descriptions.Item label="应付">¥{Number(detail.wineryAmount).toFixed(2)}</Descriptions.Item>
<Descriptions.Item label="状态">
{displayWineryStatus(detail.status, detail.wineryAmount).label}
@@ -500,7 +525,20 @@ export default function WineryBillsPage() {
pagination={false}
dataSource={detail.items ?? []}
columns={[
{ title: '订单号', dataIndex: 'orderNo' },
{
title: '订单号',
dataIndex: 'orderNo',
render: (v: string) =>
v ? (
<AdminPrimaryLink
onClick={() => navigate(`/orders?orderNo=${encodeURIComponent(v)}`)}
>
{v}
</AdminPrimaryLink>
) : (
'—'
),
},
{
title: '配送',
dataIndex: 'deliveryType',