import './index.less'; import React from 'react'; import InvoiceController from './InvoiceController'; import useToGenerateId from './tools/useToGenerateId'; import idGenerator from './tools/idGenerator'; import * as calculator from './tools/calculate'; import * as utils from './tools/utils'; import InvoiceHeader from './ui/default/InvoiceHeader'; import GoodsList from './ui/default/GoodsList'; import Seller from './ui/default/Seller'; import Buyer from './ui/default/Buyer'; import Sign from './ui/default/Sign'; import InvoiceHeaderDigtal from './ui/digtal/InvoiceHeader'; import Stakeholder from './ui/digtal/Stakeholder'; import StakeFarmerholder from './ui/digtal/StakeFarmerholder'; import SignDigtal from './ui/digtal/Sign'; import GoodsListDigtal from './ui/digtal/GoodsList'; import RealEstateInfo from './ui/digtal/RealEstateInfo'; import Architecture from './ui/digtal/Architecture'; import FreightList from './ui/digtal/FreightList'; import ImportBuyerDrawer from './ui/default/ImportBuyerDrawer'; import ImportGoodsDrawer from './ui/default/ImportGoodsDrawer'; import ImportBatchGoodsDrawer from './ui/default/ImportBatchGoodsDrawer'; import ImportBatchGoodsDrawerDigtal from './ui/digtal/ImportBatchGoodsDrawer'; import EndowCodeDrawer from './ui/default/EndowCodeDrawer'; import AddComparisonDrawer from './ui/default/AddComparisonDrawer'; // import { create, all } from 'mathjs'; // const config = { // number: 'BigNumber', // precision: 64, // } // create(all, config); /** 发票组件的上下文 */ export const InvoiceContext = React.createContext( undefined as any, ); export interface IInvoiceProps { /** 发票数据控制器 */ controller?: InvoiceController; /** 发票头UI */ invoiceHeader?: React.ReactNode; /** 货物列表UI */ goodsList?: React.ReactNode; /** 购买方UI (invoiceType为default时生效) */ buyer?: React.ReactNode; /** 销售方UI (invoiceType为default时生效)*/ seller?: React.ReactNode; /** 干系人(购买方&销售方) (invoiceType为digtal时生效) */ stakeholder?: React.ReactNode; /** 落款UI */ sign?: React.ReactNode; /** 特殊信息 */ specialInfor?: React.ReactNode; /** 底部扩展UI */ footExpand?: React.ReactNode; /** 发票种类: default-默认,digtal-数电 */ invoiceType?: 'default' | 'digtal'; /** 编辑中的商品行变化时触发(数量/单价/税率等字段变更时) */ onEditGoodChange?: (editGood: any) => void; /** 商品列表变化时触发(新增/删除行时) */ onGoodsListChange?: (goodsList: any[]) => void; } export default class Invoice extends React.PureComponent { /** 控制器 */ static readonly InvoiceController = InvoiceController; /** 发票头(默认) */ static readonly InvoiceHeader = InvoiceHeader; /** 货物列表(默认) */ static readonly GoodsList = GoodsList; /** 销售方(默认) */ static readonly Seller = Seller; /** 落款(默认) */ static readonly Sign = Sign; /** 购买方(默认) */ static readonly Buyer = Buyer; /** 发票头(数电) */ static readonly InvoiceHeaderDigtal = InvoiceHeaderDigtal; /** 干系人(数电) */ static readonly Stakeholder = Stakeholder; /** 农产品干系人(数电) */ static readonly StakeFarmerholder = StakeFarmerholder; /** 落款(数电) */ static readonly SignDigtal = SignDigtal; /** 特殊信息-不动产经营租赁服务(数电) */ static readonly RealEstateInfo = RealEstateInfo; /** 特殊信息-建筑服务(数电) */ static readonly Architecture = Architecture; static readonly FreightList = FreightList; /** 货物列表(数电) */ static readonly GoodsListDigtal = GoodsListDigtal; /** 货物索引生成器 */ static idGenerator = idGenerator; /** 金额计算方法 */ static calculator = calculator; /** 工具方法 */ static utils = utils; /** 获取控制器钩子 */ static useInvoiceController = () => { return React.useContext(InvoiceContext) }; render() { if (this.props.invoiceType === 'digtal') { return ; } else { return
; } } } /** 默认 */ const Main = (props: IInvoiceProps) => { const controller = React.useMemo(() => props.controller || new InvoiceController(), [props.controller]); const [key, setKey] = React.useState(0); useToGenerateId(controller); React.useEffect(() => { setKey(key + 1) }, [controller]); const editGood = controller.useMemo(s => s.goodsListState.editGood, []); const goodsList = controller.useMemo(s => s.goodsListState.goodsList, []); React.useEffect(() => { if (props.onEditGoodChange) { props.onEditGoodChange(editGood); } }, [editGood, props.onEditGoodChange]); React.useEffect(() => { if (props.onGoodsListChange) { props.onGoodsListChange(goodsList); } }, [goodsList, props.onGoodsListChange]); return (
(async (s, e) => { s.rootElement = e })} > {props.invoiceHeader || /** 发票头 */} {props.buyer || /** 购买方 */} {props.goodsList || /** 货物列表 */} {props.seller || /** 销售方 */} {props.sign || /** 落款 */} {props.footExpand}
{/** 批量导入商品 */} {/* 导入购买方的抽屉 */} {/* 导入货品的抽屉 */} {/* 给货品赋码的抽屉 */} {/* 添加商品对照的抽屉 */}
); }; /** 数电 */ const Digtal = (props: IInvoiceProps) => { const controller = React.useMemo(() => props.controller || new InvoiceController(), [props.controller]); const [key, setKey] = React.useState(0); useToGenerateId(controller); React.useEffect(() => { setKey(key + 1) }, [controller]); const editGood = controller.useMemo(s => s.goodsListState.editGood, []); const goodsList = controller.useMemo(s => s.goodsListState.goodsList, []); React.useEffect(() => { if (props.onEditGoodChange) { props.onEditGoodChange(editGood); } }, [editGood, props.onEditGoodChange]); React.useEffect(() => { if (props.onGoodsListChange) { props.onGoodsListChange(goodsList); } }, [goodsList, props.onGoodsListChange]); return (
(async (s, e) => { s.rootElement = e })} > {props.invoiceHeader || /** 发票头 */}
{props.stakeholder || /** 干系人 */} {props.goodsList || /** 货物列表 */}
{props.specialInfor /** 特殊信息 */} {props.sign || /** 落款 */}
{/** 批量导入商品 */} { /** 导入货品的抽屉 */} { /** 给货品赋码的抽屉 */}
) }