import React, { useEffect, useState } from 'react'; import { Typography } from 'antd'; import XinTable from '@/components/XinTable'; import type { XinTableColumn, XinTableProps } from '@/components/XinTable/typings.ts'; import type IContainerReturn from '@/domain/iContainerReturn.ts'; import { getStoreOptions } from '@/api/customer/store.ts'; import type IStore from '@/domain/iStore.ts'; const { Title, Text } = Typography; /** 有符号数量展示:正数=压筐(橙色 +N),负数=回筐(绿色 N),0 置灰 */ const SignedNum: React.FC<{ value?: number }> = ({ value }) => { const num = Number(value ?? 0); if (num > 0) { return +{num}; } if (num < 0) { return {num}; } return 0; }; /** 有符号金额展示:正=压筐附加(橙),负=回筐抵扣(绿) */ const SignedAmount: React.FC<{ value?: string }> = ({ value }) => { const num = Number(value ?? 0); if (num > 0) { return +¥{num.toFixed(2)}; } if (num < 0) { return -¥{Math.abs(num).toFixed(2)}; } return ¥0.00; }; /** * 压回筐记录(周转筐/托盘跟账单走:生成账单时自动写入完整快照,只读) * 数量正数=压筐(附加金额),负数=回筐(抵扣金额) */ const ContainerReturnPage: React.FC = () => { const [stores, setStores] = useState([]); useEffect(() => { getStoreOptions().then((res) => setStores(res.data.data ?? [])); }, []); const columns: XinTableColumn[] = [ { title: '门店', dataIndex: 'store_id', valueType: 'select', hideInForm: true, fieldProps: { options: stores.map((s) => ({ label: s.name, value: s.id })), showSearch: true, optionFilterProp: 'label', }, render: (_, record) => record.store?.name ?? `门店#${record.store_id}`, }, { title: '关联账单', dataIndex: 'bill_id', hideInForm: true, hideInSearch: true, render: (_, record) => record.bill ? ( <> {record.bill.bill_no}
{record.bill.bill_date}
) : '-', }, { title: '压(回)筐数量', dataIndex: 'box_num', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => , }, { title: '压(回)托盘数量', dataIndex: 'tray_num', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => , }, { title: '筐单价', dataIndex: 'box_price', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => `¥${Number(record.box_price ?? 0).toFixed(2)}`, }, { title: '托盘单价', dataIndex: 'tray_price', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => `¥${Number(record.tray_price ?? 0).toFixed(2)}`, }, { title: '抵扣(附加)金额', dataIndex: 'amount', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => , }, { title: '操作人', dataIndex: 'operator', hideInForm: true, hideInSearch: true, align: 'center', render: (_, record) => record.operator?.nickname ?? '-', }, { title: '记录时间', dataIndex: 'created_at', valueType: 'dateRange', hideInForm: true, hideInTable: true, align: 'center', }, { title: '记录时间', dataIndex: 'created_at', hideInForm: true, hideInSearch: true, align: 'center', }, ]; const tableProps: XinTableProps = { api: '/recon/container-return', columns, rowKey: 'id', accessName: 'recon.containerReturn', // 记录随账单生成,只读:不新增、不编辑、不删除 addShow: false, editShow: false, deleteShow: false, formProps: false, }; return ( <>
回筐记录 周转筐/托盘跟账单走:生成账单时按填写数量自动写入;正数=压筐(附加金额),负数=回筐(抵扣金额),数量为 0 不生成记录。
{...tableProps} /> ); }; export default ContainerReturnPage;