售后金额

This commit is contained in:
liu
2026-08-29 13:54:06 +08:00
parent c3ec416a77
commit d0ce897a0f
25 changed files with 175 additions and 58 deletions
+3 -3
View File
@@ -25,14 +25,14 @@ export interface PurchaseCellUpdateParams {
weight?: number;
}
/** 生成账单:单个门店的配送费/周转筐/托盘数量与售后/备注 */
/** 生成账单:单个门店的配送费/周转筐/托盘数量与售后金额/备注 */
export interface BillGenerateStoreParams {
store_id: number;
delivery_fee: number;
box_num: number;
tray_num: number;
/** 售后说明(文本,仅记录 */
after_sale?: string;
/** 售后金额(可正负,计入总金额;正数=加收,负数=售后减免 */
after_sale?: number;
/** 备注 */
remark?: string;
}
+2 -2
View File
@@ -109,7 +109,7 @@ export interface IBill {
tray_price: string;
/** 附加金额 = 周转筐×筐单价 + 托盘×托盘单价 */
added_amount: string;
/** 账单总金额 = 商品金额 + 配送费 + 附加金额 */
/** 账单总金额 = 商品金额 + 配送费 + 附加金额 + 售后金额 */
total_amount: string;
/** 支付状态:0未支付 1已支付 */
status?: number;
@@ -122,7 +122,7 @@ export interface IBill {
paid_operator_id?: number;
order_count?: number;
remark?: string;
/** 售后说明(生成账单时按门店填写) */
/** 售后金额(生成账单时按门店填写,可正负,计入总金额 */
after_sale?: string;
created_at?: string;
/** 门店账单列表/详情接口附带 */
+11 -9
View File
@@ -187,17 +187,18 @@ const PurchaseOrderPage: React.FC = () => {
const [billSaving, setBillSaving] = useState(false);
const [billForm] = Form.useForm<{ stores: BillGenerateStoreParams[] }>();
// 弹窗内实时预览:附加金额 = 筐×筐单价 + 托盘×托盘单价;总额 = 商品 + 配送费 + 附加
// 弹窗内实时预览:附加金额 = 筐×筐单价 + 托盘×托盘单价;总额 = 商品 + 配送费 + 附加 + 售后金额(可正负)
const watchBillStores = Form.useWatch('stores', billForm) ?? [];
const billPreview = (billPrepare?.stores ?? []).map((row, index) => {
const input = watchBillStores[index] ?? {};
const deliveryFee = Number(input.delivery_fee ?? 0);
const afterSale = Number(input.after_sale ?? 0);
const added =
Number(input.box_num ?? 0) * Number(row.box_price) +
Number(input.tray_num ?? 0) * Number(row.tray_price);
return {
added,
total: Number(row.product_amount) + deliveryFee + added,
total: Number(row.product_amount) + deliveryFee + added + afterSale,
};
});
const billAllGenerated =
@@ -441,7 +442,7 @@ const PurchaseOrderPage: React.FC = () => {
delivery_fee: row.bill ? Number(row.bill.delivery_fee) : 0,
box_num: row.bill ? row.bill.box_num : 0,
tray_num: row.bill ? row.bill.tray_num : 0,
after_sale: row.bill?.after_sale ?? '',
after_sale: row.bill ? Number(row.bill.after_sale) : 0,
remark: row.bill?.remark ?? '',
})),
});
@@ -1428,7 +1429,7 @@ const PurchaseOrderPage: React.FC = () => {
</Form>
</Modal>
{/* 生成账单:按门店填写配送费/周转筐/托盘数量(商品金额只读,由订单汇总) */}
{/* 生成账单:按门店填写配送费/周转筐/托盘数量与售后金额(商品金额只读,由订单汇总) */}
<Modal
title={billPrepare ? `生成账单 · ${billPrepare.purchase.purchase_no}` : '生成账单'}
open={billOpen}
@@ -1447,7 +1448,7 @@ const PurchaseOrderPage: React.FC = () => {
{billPrepare && (
<>
<div className="py-2 text-gray-500">
/==/
/====
{billAllGenerated ? '该采购单已全部生成账单,仅可查看。' : '生成后采购单中的全部订单将关联到对应门店账单。'}
</div>
<Form form={billForm} layout="vertical" onFinish={handleBillSave}>
@@ -1460,7 +1461,7 @@ const PurchaseOrderPage: React.FC = () => {
<div className="w-32 shrink-0 text-center"></div>
<div className="w-32 shrink-0 text-center">¥{billPrepare.stores[0]?.box_price ?? '0.00'}/</div>
<div className="w-32 shrink-0 text-center">¥{billPrepare.stores[0]?.tray_price ?? '0.00'}/</div>
<div className="w-36 shrink-0 text-center"></div>
<div className="w-36 shrink-0 text-center"></div>
<div className="w-36 shrink-0 text-center"></div>
<div className="w-28 shrink-0 text-center"></div>
<div className="flex-1 text-center"></div>
@@ -1524,10 +1525,11 @@ const PurchaseOrderPage: React.FC = () => {
className="m-0! w-36 shrink-0 px-1!"
name={[field.name, 'after_sale']}
>
<Input
maxLength={255}
<InputNumber
className="w-full"
precision={2}
disabled={billed}
placeholder="售后说明(可选)"
placeholder="可正负,计入总额"
/>
</Form.Item>
<Form.Item
+20 -5
View File
@@ -266,6 +266,18 @@ const BillPage: React.FC = () => {
</span>
),
},
{
title: '售后金额',
dataIndex: 'after_sale',
hideInForm: true,
hideInSearch: true,
align: 'center',
render: (_, record) => (
<Text type={Number(record.after_sale ?? 0) < 0 ? 'success' : undefined}>
¥{record.after_sale ?? '0.00'}
</Text>
),
},
{
title: '账单总金额',
dataIndex: 'total_amount',
@@ -361,7 +373,7 @@ const BillPage: React.FC = () => {
<div className="mb-5">
<Title level={3}></Title>
<Text type="secondary">
= + + /
= + + /+
Excel
</Text>
</div>
@@ -388,6 +400,12 @@ const BillPage: React.FC = () => {
{detail.bill.box_num}×¥{detail.bill.box_price} {detail.bill.tray_num}×¥{detail.bill.tray_price}
</Text>
</Descriptions.Item>
<Descriptions.Item label="售后金额">
<Text type={Number(detail.bill.after_sale ?? 0) < 0 ? 'success' : undefined}>
¥{detail.bill.after_sale ?? '0.00'}
</Text>
<Text type="secondary" className="ml-2!"></Text>
</Descriptions.Item>
<Descriptions.Item label="账单总金额">
<Text strong type="danger">¥{detail.bill.total_amount}</Text>
</Descriptions.Item>
@@ -403,9 +421,6 @@ const BillPage: React.FC = () => {
{detail.bill.pay_remark ? (
<Descriptions.Item label="付款备注" span={3}>{detail.bill.pay_remark}</Descriptions.Item>
) : null}
{detail.bill.after_sale ? (
<Descriptions.Item label="售后" span={3}>{detail.bill.after_sale}</Descriptions.Item>
) : null}
{detail.bill.remark ? (
<Descriptions.Item label="备注" span={3}>{detail.bill.remark}</Descriptions.Item>
) : null}
@@ -453,7 +468,7 @@ const BillPage: React.FC = () => {
>
<div className="py-2 text-gray-500">
<Text strong type="danger">¥{payTarget?.total_amount ?? '0.00'}</Text>
¥{payTarget?.product_amount ?? '0.00'} + ¥{payTarget?.delivery_fee ?? '0.00'} + ¥{payTarget?.added_amount ?? '0.00'}
¥{payTarget?.product_amount ?? '0.00'} + ¥{payTarget?.delivery_fee ?? '0.00'} + ¥{payTarget?.added_amount ?? '0.00'} + ¥{payTarget?.after_sale ?? '0.00'}
线
</div>
<Form form={payForm} layout="vertical" onFinish={handlePaySave}>