import {Card, ConfigProvider, Select, Button, message, Popconfirm, Input} from 'antd'; import { PageHeaderWrapper } from '@ant-design/pro-layout'; import React, {useEffect, useState} from "react"; import DealerModal from './components/DealerModal'; import SuppModal from './components/SuppModal'; import PartDetailModal from './components/PartDetailModal'; import {throttle, sum} from 'lodash'; import useInitial from "@/hooks/useInitail"; import * as API from "@/common/api"; import {getList, Params, ListVO} from "@/pages/pms/partPlan/PlanPool/api"; import {saveApi, draftApi} from './api'; import zhCN from "antd/lib/locale-provider/zh_CN"; import st from "@/pages/pms/partPlan/PlanManage/style.less"; import PartModal from "@/pages/pms/partPlan/PlanManage/subpages/Apply/components/PartModal"; import {groupBys, flattenDeep} from '@/pages/pms/entity'; import {PartDetail} from '../../api'; import { history } from 'umi'; import { getDetail, Params as detailParams, Item } from '../Detail/api'; import ImageUpload from '@/pages/decoration/deco/DeoGoodsManagement/components/ImageUpload'; const { Option } = Select; const apiObj: { [key: number]: any } = { 1: saveApi, 2: draftApi }; export default function Index() { const planId = history.location.query; const [detaildelay, setDetaildelay] = useState(true); const { data, setParams: detailsetParams } = useInitial(getDetail, {}, { ...planId }, detaildelay); const [delay, setDelay] = useState(true); const [loading, setLoading] = useState(false); const { data: brands } = useInitial(API.getBrandFilterApi, [], {}); const [dfParams, setDfParams] = useState({}); const { data: parts, setParams } = useInitial(getList, [], dfParams, delay); const [dealerList, setDealerList] = useState([]); const [dealer, setDealer] = useState({}); const [visibleDealer, setVisibleDealer] = useState(false); const [visibleSupplier, setVisibleSupplier] = useState(false); const [visiblePart, setVisiblePart] = useState(false); const [visiblePartDetail, setVisiblePartDetail] = useState(false); const partList = flattenDeep(dealerList.map(it => (it.suppliers || []).map((su: any) => (su.storages || []).map((st: any) => (st.parts || []))))); const poolIds = partList.map((it: any) => it.poolId); const [imageVisible, setImageVisible] = useState(true); const [info, setInfo] = useState<{ remark?: string, fids?: any }>(); useEffect(() => { if (planId?.planId) { setDetaildelay(false); detailsetParams({ ...planId }, true); } }, []); useEffect(() => { if (data.list?.length) { setImageVisible(false); setDfParams({brandId: data.list[0].brandId}); setParams({}, true); setDelay(false); setDealerList(data.list); setInfo({ remark: data.remark, fids: data.fids?.split(',').map(i => `/api/file/show?fid=${i}`) }); } }, [data.list?.length]); function onOk(parts: ListVO[] = []) { setDealerList(dealerList.map(it => { if (it.settleDealerId == dealer.settleDealerId) { return { ...it, suppliers: (it.suppliers || []).map((su: any) => { if (su.supplierId == dealer.supplierId) { const pas = [...flattenDeep((su.storages || []).map((st: any) => (st.parts || []))), ...parts]; const sto = groupBys(pas, 'storageId', 'storageName'); return { ...su, storages: sto.map(st => ({ storageId: st.storageId, storageName: st.storageName, parts: st.list, })) }; } return su; }) }; } return it; })); } function onOkDealer(dealer: any = {}) { setDealerList([...dealerList, dealer]); } function onOkSupplier(supplier: any = {}) { setDealerList(dealerList.map(it => { if (it.settleDealerId == dealer.settleDealerId) { return { ...it, suppliers: [...(it.suppliers || []), supplier] }; } return it; })); } function deleteSupplier(dealer: any = {}, supplier: any = {}) { setDealerList(dealerList.map(it => { if (it.settleDealerId == dealer.settleDealerId) { return { ...it, suppliers: (it.suppliers || []).filter((su: any) => su.supplierId != supplier.supplierId) }; } return it; })); } function deletePart(dealer: any = {}, supplier: any = {}, storage: any = {}, part: any = {}) { setDealerList(dealerList.map(it => { if (it.settleDealerId == dealer.settleDealerId) { return { ...it, suppliers: (it.suppliers || []).map((su: any) => { if (su.supplierId == supplier.supplierId) { return { ...su, storages: (su.storages || []).map((st: any) => { if (st.storageId==storage.storageId) { return { ...st, parts: (st.parts || []).filter((p: any) => p.poolId!=part.poolId) }; } return st; }) }; } return su; }) }; } return it; })); } function deleteStorage(dealer: any = {}, supplier: any = {}, storage: any = {}) { setDealerList(dealerList.map(it => { if (it.settleDealerId == dealer.settleDealerId) { return { ...it, suppliers: (it.suppliers || []).map((su: any) => { if (su.supplierId == supplier.supplierId) { return { ...su, storages: (su.storages || []).filter((st: any) => st.storageId!=storage.storageId) }; } return su; }) }; } return it; })); } const onSubmit = throttle((isSave) => { setLoading(true); let suppliers = flattenDeep(dealerList.map(de => (de.suppliers || []).map((su: any) => ({...de, ...su})))); suppliers = suppliers.map(su => ({ ...su, settleDealerId: su.settleDealerId, storages: (su.storages || []).map((st: any) => ({ storageId: st.storageId, poolIds: (st.parts || []).map((pa: any) => pa.poolId) })) })); const type = isSave ? 1 : 2; apiObj[type]({ planId: Number(planId?.planId), ...dfParams, suppliers, remark: info?.remark, fids: info?.fids.map((i: any) => { if (typeof i == 'object') { return i.url.split('=')[1]; } else { return i; } }).join() }).then(() => { setLoading(false); history.goBack(); }).catch((e: any) => { setLoading(false); message.error(e.message); }); }, 3000); return (
{ if (!dfParams.brandId) { message.error('请选择品牌'); return; } setVisibleDealer(true); }} > 添加采购商家
{dealerList.map((dealer: any = {}) => (
{`商家: ${dealer.settleDealerName || ''}`}
{ setVisibleSupplier(true); setDealer(dealer); }}> 添加指定供应商 setDealerList(dealerList.filter(it => it.settleDealerId!=dealer.settleDealerId))} okText="确定" cancelText="取消" style={{marginLeft: 20}} >
{(dealer.suppliers || []).map((supplier: any = {}) => { const paList: any[] = flattenDeep((supplier.storages || []).map((st: any) => (st.parts || []))); return (
{`供应商: ${supplier.supplierName || ''}`}
{ setVisiblePart(true); setDealer({...dealer, ...supplier}); }}> 添加采购配件 deleteSupplier(dealer, supplier)} okText="确定" cancelText="取消" style={{marginLeft: 20}} >
{`总金额: ${sum(paList.map((it: any) => (it.price || 0) * (it.count || it.partCnt || 0))).toFixed(2)}元`}
{`品种数: ${[...new Set((paList || []).map((i: PartDetail) => i.partCode))].length}种`}
{(supplier.storages || []).map((storage: any) => (
{`发运库房: ${storage.storageName || ''}`}
{`总金额: ${sum((storage.parts || []).map((it: any) => (it.price || 0) * (it.count || it.partCnt || 0))).toFixed(2)}元`}
{`品种数: ${[...new Set((storage.parts || []).map((i: PartDetail) => i.partCode))].length}种`}
{ setVisiblePartDetail(true); setDealer({dealer, supplier, storage }); }}> 查看配件 deleteStorage(dealer, supplier, storage)} okText="确定" cancelText="取消" style={{marginLeft: 20}} >
))}
); })}
))} setVisibleDealer(false)} onOk={onOkDealer} /> setVisibleSupplier(false)} onOk={onOkSupplier} /> setVisiblePart(false)} parts={parts.filter(it => !poolIds.includes(it.poolId))} onOk={onOk} setParams={setParams} /> setVisiblePartDetail(false)} dealer={dealer.dealer} supplier={dealer.supplier} storage={dealer.storage} deletePart={deletePart} />
备注: setInfo({...info, remark: e.target.value})} />
附件: { const ids = v.fileList.map(it => it?.response?.data || it); setInfo({ ...info, fids: ids }); }} />
); }