import React, { useEffect, useState } from 'react'; import { Modal, Select, Button, Table, Form, message, Tabs, Input } from 'antd'; import ChoosePartModal from './ChoosePartModal'; import usePagination from '@/hooks/usePagination'; import { getStoragePage } from '@/pages/pms/storage/StorageManage/api'; import { getPageListApi, Item as item } from "@/pages/pms/partPlan/PlanSupplier/api"; import {getPurchasePool, Item as poolitem} from '@/pages/pms/purchase/PurchasePool/api'; import PartModal from '@/pages/pms/purchase/PurchasePool/comonents/PartModal'; import {purchaseApply, getrelationlist, EditItem} from '../api'; import {getList, ListVO, Params} from '@/pages/pms/partPlan/PlanPool/api'; import _ from 'lodash'; import useInitial from '@/hooks/useInitail'; import PmsSelect from '@/pages/pms/comonents/PmsSelect'; import { getPartTypeApi } from '@/pages/pms/part/Repertory/api'; import {planPoolTypeData} from '@/pages/pms/entity'; const Option = Select.Option; const {Item} = Form; const {Column} = Table; const {TabPane} = Tabs; interface Props { onCancel: () => any, visible: boolean, itemData?:EditItem, setItemData?:Function } interface Relation{ value: number, name: string } export default function PartStorageModal({ onCancel, visible, itemData, setItemData }: Props) { const { list: storages } = usePagination(getStoragePage, { pageSize: 1000 }); const { list: suppliers } = usePagination(getPageListApi, { supplierType: 40, pageSize: 500 }); const [delay, setDelay] = useState(true); const {data: planeData, setParams, setData: setPlaneData} = useInitial(getList, [], {}, delay); const {data: casData, setParams: casSetParams, setData: casSetData} = useInitial(getPurchasePool, [], {}, delay); const [planePart, setPlanePart] = useState([]); const { data: partTypeData } = useInitial(getPartTypeApi, [], {}); const [choosePartVisable, setChoosePartVisable] = useState(false); const [selectedParts, setSelectedParts] = useState([]); const [form] = Form.useForm(); const [btnloading, setBtnloading] = useState(false); const [storageid, setStorageid] = useState(); const [partParams, setPartParams] = useState<{stId?:number, spId?: number}>(); const [casPart, setCasPart] = useState(); const [listRelation, setListRelation] = useState(); const [partvisible, setPartvisible] = useState(false); const [item, setItem] = useState(); const [settlementMethod, setSettlementMethod] = useState(); // 编辑时数据回显 useEffect(() => { if (itemData?.storageId) { form.setFieldsValue({ storageId: itemData.storageId, supplierId: itemData.supplierId, settlementMethod: itemData.payType, proportion: itemData.proportion, isOutSide: itemData.isOutSide ? "1" : "0" }); getrelationlist({tradeCompanyId: itemData.supplierId, compCategory: 1, dealerId: storages.find(i => i.id == itemData.storageId)?.dealerId}).then(res => { if (res.success) { setListRelation(res.data && res.data[0].settleMethodList); form.setFieldsValue({accountCheckPeriod: res.data && res.data[0].accountCheckPeriod}); } }).catch(e => message.error(e.message)); setPartParams({stId: itemData.storageId, spId: itemData.supplierId}); setStorageid(itemData.storageId); setSelectedParts(itemData.parts || []); setCasPart(itemData.poolParts); setPlanePart(itemData.planParts || []); return; } if (!visible) { form.resetFields(); setStorageid(undefined); setPlaneData([]); casSetData([]); setSelectedParts([]); setCasPart([]); setPlanePart([]); setListRelation([]); } }, [visible]); //查询计划池配件和工单缺件配件 useEffect(() => { if (storageid) { setDelay(false); setParams({}, true); casSetParams({storageId: storageid}, true); } }, [storageid]); // 提交申请 function handSave() { form.validateFields().then(fields => { const supplier = suppliers.find(it => it.supplierId == fields.supplierId) || {}; const storage = storages.find(it => it.id == fields.storageId) || {}; const params = { storageId: storage.id, storageName: storage.storageName, supplierId: supplier.supplierId, supplierName: supplier.supplierName, proportion: fields.proportion, payType: fields.settlementMethod, accountCheckPeriod: settlementMethod == 2 ? fields.accountCheckPeriod : undefined, parts: [...selectedParts.map(i => ({partId: i.partId, partCnt: i.partCnt, price: i.price, type: 1})), ...planePart.map(i => ({poolId: i.poolId, partId: i.partId, partCnt: i.cnt, price: i.price, type: 2})), ...(casPart?.map(i => (i.details?.map(it => ({partId: it.partId, partCnt: it.partCnt, poolId: it.poolId, expectInTime: it.expectInTime, price: it.price, type: 3})))).flat() || []) ], isOutSide: !!fields.isOutSide }; setBtnloading(true); purchaseApply(params).then(res => { message.success("提交成功"); setBtnloading(false); setItemData && setItemData(); onCancel && onCancel(); setPartParams({}); }).catch(e => { message.error(e.message); setBtnloading(false); }); }); } return ( { onCancel(); setPartParams({}); }} maskClosable={false} title="新增配件外采申请" footer={[ , ]} >
{ if (!form.getFieldValue("supplierId")) { message.error("请先选择供应商"); return; } if (!listRelation?.length) { message.error(`请财务先配置${suppliers.find(i => i.supplierId == form.getFieldValue('supplierId'))?.supplierName}的结算方式`); } }} > {listRelation?.map(i => )} {!!settlementMethod && settlementMethod == 2 && ( )}
`${r.partCode}`} > _.ceil((r.partCnt * r.price), 2)} /> ( setSelectedParts(selectedParts.filter(i => i.partCode != _item.partCode))}> 删除 )} />
setParams({keywords: e}, true)} style={{ width: 220 }} /> { setParams({poolType: v}, true); }} placeholder="请选择来源类型" options={planPoolTypeData.map(i => ({value: i.value, label: i.label}))} /> setParams({partType: v}, true)} placeholder="请选择配件类型" options={partTypeData.map(i => ({value: i.value, label: i.label}))} /> setParams({storageId: v}, true)} placeholder="请选择库房" options={storages.map(i => ({value: i.id, label: i.storageName}))} />
{ setPlanePart(selectedRows); }, selectedRowKeys: [...(planePart?.map(i => i.poolId) || [])] }} > _.ceil((r.cnt * r.price), 2)} />
casSetParams({keywords: e}, true)} style={{ width: 220 }} />
{ setCasPart(selectedRows); }, selectedRowKeys: [...(casPart?.map(i => i.name) || [])] }} > { setPartvisible(true); setItem(r.details); }}>{r.kind}} />
合计金额:{ ((selectedParts.reduce((sum, i) => (sum + _.ceil(Number(i.partCnt * i.price), 2)), 0)) + casPart?.map(i => i.details).flat().reduce((sum, item) => (sum + (item?.amount || 0)), 0) + planePart.reduce((sum, it) => (sum + _.ceil(Number((it.price || 0) * (it.cnt || 0)), 2)), 0)).toFixed(2) } 元
setChoosePartVisable(false)} onOk={(part) => { const findPart = selectedParts.find(it => it.partId == part.partId); if (JSON.stringify(findPart) != undefined) { setSelectedParts([...selectedParts.filter(it => it.partId != part.partId), {...part}]); } else { setSelectedParts([...selectedParts, part]); } }} /> setPartvisible(false)} />
); }