feat(assoc): v4.0.1 合伙人关联码、分佣账单与 H5 用户管理
订单佣金只认关联用户;合伙人备注写入独立表;H5 增加用户管理与首页统计。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
Space,
|
||||
Statistic,
|
||||
Table,
|
||||
Tabs,
|
||||
Tag,
|
||||
Typography,
|
||||
message,
|
||||
@@ -27,6 +28,19 @@ import { AdminListHeader } from '../components/AdminListHeader';
|
||||
import { AdminPrimaryLink } from '../components/AdminPrimaryLink';
|
||||
|
||||
|
||||
type BillItemRow = {
|
||||
id: string;
|
||||
kind: 'ORDER' | 'REDEEM';
|
||||
refId: string;
|
||||
refNo: string;
|
||||
title?: string | null;
|
||||
extra?: string | null;
|
||||
baseAmount: number;
|
||||
rate: number;
|
||||
commission: number;
|
||||
occurredAt: string;
|
||||
};
|
||||
|
||||
type Row = {
|
||||
id: string;
|
||||
billNo: string;
|
||||
@@ -39,6 +53,8 @@ type Row = {
|
||||
rejectReason?: string | null;
|
||||
paymentRef?: string | null;
|
||||
paidAt?: string | null;
|
||||
orderItems?: BillItemRow[];
|
||||
redeemItems?: BillItemRow[];
|
||||
partner?: {
|
||||
companyName?: string;
|
||||
phone?: string;
|
||||
@@ -531,7 +547,7 @@ export default function PartnerBillsPage() {
|
||||
title="合伙人账单明细"
|
||||
open={drawerOpen}
|
||||
onClose={() => setDrawerOpen(false)}
|
||||
width={560}
|
||||
width={720}
|
||||
>
|
||||
{detail && (
|
||||
<>
|
||||
@@ -562,6 +578,84 @@ export default function PartnerBillsPage() {
|
||||
{detail.paymentRef ? String(detail.paymentRef) : '—'}
|
||||
</Descriptions.Item>
|
||||
</Descriptions>
|
||||
<Tabs
|
||||
style={{ marginTop: 16 }}
|
||||
items={[
|
||||
{
|
||||
key: 'orders',
|
||||
label: `酒订单 (${detail.orderItems?.length ?? 0})`,
|
||||
children: (
|
||||
<>
|
||||
<Table
|
||||
rowKey="id"
|
||||
size="small"
|
||||
pagination={false}
|
||||
dataSource={detail.orderItems ?? []}
|
||||
columns={[
|
||||
{ title: '订单号', dataIndex: 'refNo', width: 160 },
|
||||
{ title: '商品', dataIndex: 'title' },
|
||||
{ title: '数量', dataIndex: 'extra', width: 70 },
|
||||
{
|
||||
title: '实付',
|
||||
dataIndex: 'baseAmount',
|
||||
render: (v: number) => `¥${Number(v).toFixed(2)}`,
|
||||
},
|
||||
{
|
||||
title: '费率',
|
||||
dataIndex: 'rate',
|
||||
render: (v: number) => `${(Number(v) * 100).toFixed(2)}%`,
|
||||
},
|
||||
{
|
||||
title: '佣金',
|
||||
dataIndex: 'commission',
|
||||
render: (v: number) => `¥${Number(v).toFixed(2)}`,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Typography.Paragraph style={{ textAlign: 'right', marginTop: 8 }}>
|
||||
酒单佣金 ¥{Number(detail.orderCommission).toFixed(2)}
|
||||
</Typography.Paragraph>
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: 'redeems',
|
||||
label: `核销订单 (${detail.redeemItems?.length ?? 0})`,
|
||||
children: (
|
||||
<>
|
||||
<Table
|
||||
rowKey="id"
|
||||
size="small"
|
||||
pagination={false}
|
||||
dataSource={detail.redeemItems ?? []}
|
||||
columns={[
|
||||
{ title: '核销单号', dataIndex: 'refNo', width: 160 },
|
||||
{ title: '门店', dataIndex: 'title' },
|
||||
{
|
||||
title: '核销额',
|
||||
dataIndex: 'baseAmount',
|
||||
render: (v: number) => `¥${Number(v).toFixed(2)}`,
|
||||
},
|
||||
{
|
||||
title: '费率',
|
||||
dataIndex: 'rate',
|
||||
render: (v: number) => `${(Number(v) * 100).toFixed(2)}%`,
|
||||
},
|
||||
{
|
||||
title: '佣金',
|
||||
dataIndex: 'commission',
|
||||
render: (v: number) => `¥${Number(v).toFixed(2)}`,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Typography.Paragraph style={{ textAlign: 'right', marginTop: 8 }}>
|
||||
核销佣金 ¥{Number(detail.redeemCommission).toFixed(2)}
|
||||
</Typography.Paragraph>
|
||||
</>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Typography.Title level={5} style={{ marginTop: 16 }}>
|
||||
收款账户
|
||||
</Typography.Title>
|
||||
|
||||
Reference in New Issue
Block a user