/* eslint-disable */
import { useRef, useEffect, useState, useCallback, useMemo } from "react";
import { Toast, Input, Tabs, Selector, Grid, Image, Button, Checkbox, Switch, Dialog, Radio, Space, CenterPopup, ImageViewer, Collapse, CapsuleTabs } from "antd-mobile";
import { AddOutline, MinusOutline, EditFill, CloseOutline } from "antd-mobile-icons";
import commonConfig from "@/utils/config";
import * as commonServices from "@/services/services";
import * as commonFunc from "@/components/Common/commonFunc";
import * as commonBusiness from "@/components/Common/commonBusiness";
import styles from "./quotationDetail.less";
import SelectInput from "../components/SelectInput";
import * as commonUtils from "@/utils/utils";
import Typesetting from "@/components/Common/Typesetting/typesetting";
import DynamicSVG from "@/components/Common/BoxDesignCompontent/svg";
import ShowImgM from "@/components/Common/BoxShowImgMaterial/indexNew";
import CommonBase from "@/components/Common/CommonBase";
import { cloneDeep, isEqual } from "lodash";
import moment from "moment";
import { transform } from "@antv/g2/lib/util/transform";
const QuickQuoteEvent = props => {
const { location, selectedNode, sModelsId } = props;
// const selectedNode = JSON.parse(location.state).quotationData;
const addState = {};
addState.onGetFilterState = (state, bInit) => {
const result = Object.keys(state).reduce((pre, cur) => {
if (cur.endsWith("Column") || cur.endsWith("Config") || ["formData", "treeData", "downAbleConfigs", "finishedConfigs"].includes(cur)) {
return pre;
}
pre[cur] = state[cur];
return pre;
}, {});
const { slaveData = [], manyData = [], masterData = {} } = result;
const materialInfoFields = [
"sMaterialsName",
"sMaterialsNo",
"sMaterialsId",
"sAuxiliaryUnit",
"sMaterialsUnit",
"bReel",
"dCoefficient",
"bInverse",
"sMaterialsStyle",
"sComputeId",
"sReComputeId",
"dGramWeight",
"sReConversionComputeId",
"sConversionComputeId",
"sMaterialsType",
"bComMaterials",
"dWlcd",
"dWlkd",
];
const slaveDataNew = bInit
? slaveData.map(item => {
const { materialsInfo = [], sMaterialsName } = item;
if (!materialsInfo.length && sMaterialsName) {
return {
...item,
materialsInfo: [
materialInfoFields.reduce((pre, cur) => {
pre[cur] = item[cur];
return pre;
}, {}),
],
};
} else {
return item;
}
})
: slaveData;
const manyDataNew = manyData.map(item => {
delete item.manyData;
return item;
});
const { sType, sCustomerId, sCustomerName } = props.app.userinfo;
const bCustomer = sType === "Customer";
if (bCustomer && !masterData.sCustomerId) {
masterData.sCustomerName = sCustomerName;
masterData.sCustomerId = sCustomerId;
}
return { ...result, masterData, slaveData: slaveDataNew, manyData: manyDataNew };
};
const sQuoConfig = commonUtils.convertStrToObj(props.masterData?.sQuoConfig, {});
const [state, setState] = useState(addState.onGetFilterState(sQuoConfig, true));
const { formData = [], masterConfig } = state;
const { bLinkFieledClick } = props;
const [hideBackBtn, setHideBackBtn] = useState(false);
const [enabled, setEnabled] = useState(props.enabled);
useEffect(() => {
setHideBackBtn(!bLinkFieledClick);
setEnabled(!bLinkFieledClick || props.enabled);
}, [bLinkFieledClick, props.enabled]);
useEffect(() => {
// 获取 masterConfig
const { masterConfig, token } = props;
const quickQuoteConfig = masterConfig?.gdsconfigformslave.find(item => item.sControlName === "BtnQuickQuote") || {};
const { sActiveId } = quickQuoteConfig;
const configUrls = `${commonConfig.server_host}business/getModelBysId/${sActiveId}?sModelsId=${sActiveId}`;
commonServices.getService(props.app.token, configUrls).then(async ({ data: configReturn }) => {
if (configReturn.code === 1) {
const formData = configReturn.dataset.rows[0].formData;
setState(pre => ({ ...pre, formData, selectedNode, masterConfig: formData[0] }));
}
});
}, []);
// 获取盒型定义配置
useEffect(() => {
if (!formData.length) return '';
const sBoxActiveId = formData.find(item => item.sGrd === "slave")?.gdsconfigformslave?.find(item => item.sName === "sName")?.sActiveId;
if (!sBoxActiveId) return '';
const { token } = props;
const configUrl = `${commonConfig.server_host}business/getModelBysId/${sBoxActiveId}?sModelsId=${sBoxActiveId}`;
commonServices.getService(token, configUrl).then(({ data: configReturn }) => {
if (configReturn.code === 1) {
const formData = configReturn.dataset.rows[0].formData;
setState(pre => ({ ...pre, boxConfig: formData[0] }));
}
});
}, [formData.length]);
// 获取column
useEffect(() => {
if (!formData.length) return '';
let result = {};
for (let i = 0; i < formData.length; i++) {
const tableConfig = formData[i];
const { sGrd } = tableConfig;
if (!sGrd) continue;
const column = commonFunc.getHeaderConfig(tableConfig);
result = {
...result,
[`${sGrd}Column`]: column,
[`${sGrd}Config`]: tableConfig,
};
}
setState(pre => ({ ...pre, ...result }));
}, [formData.length]);
const { slaveData = [], masterData = {} } = state;
useEffect(() => {
if (!slaveData.length) return;
const bNotInit = slaveData.some(item => item.sBackProcessData);
if (!bNotInit) {
const { downAbleConfigs = [] } = state;
const downAbleConfigsNew = downAbleConfigs.filter(item => item.sDefaultProcessId);
if (downAbleConfigsNew.length) {
const slaveDataNew = slaveData.map(item => {
let sBackProcessData = [];
downAbleConfigsNew.forEach(({ sChineseDropDown: sChineseDropDownStr, sDefaultProcessId, sName, sId }) => {
const sChineseDropDown = commonUtils.convertStrToObj(sChineseDropDownStr, []);
const defaultProcess = sChineseDropDown.find(item => item.sId === sDefaultProcessId);
const name = `slaveDown${item.sBoxModel}`;
const sFieldName = sName;
const changeValue = { [sFieldName]: defaultProcess.sId };
const dropDownData = sChineseDropDown.map(item => ({
...item,
sProductClassifyId: sId,
}));
const slaveDataReturn = onDataChange(name, sFieldName, changeValue, item.sId, dropDownData, true);
sBackProcessData = [...sBackProcessData, ...(slaveDataReturn?.sBackProcessData?.filter(item => item.sProductClassifyId === sId) || [])];
});
return {
...item,
sBackProcessData,
};
});
setState(pre => {
return { ...pre, slaveData: slaveDataNew };
});
}
}
const bNotInit1 = !!masterData.cpProcessName;
if (!bNotInit1) {
const { finishedConfigs = [] } = state;
const finishedConfigsNew = finishedConfigs.filter(item => item.sDefaultProcessId);
if (finishedConfigsNew.length) {
let [cpProcessNameList, productProcessInfo] = [[], []];
finishedConfigsNew.forEach(({ sChineseDropDown: sChineseDropDownStr, sDefaultProcessId, sName, sId }) => {
const sChineseDropDown = commonUtils.convertStrToObj(sChineseDropDownStr, []);
const defaultProcess = sChineseDropDown.find(item => item.sId === sDefaultProcessId);
const name = "finished";
const sFieldName = sName;
const changeValue = { [sFieldName]: defaultProcess.sId };
const dropDownData = sChineseDropDown.map(item => ({
...item,
sProductClassifyId: sId,
}));
const { cpProcessName: cpProcessNameNew, productProcessInfo: productProcessInfoNew } = onDataChange(
name,
sFieldName,
changeValue,
masterData.sId,
dropDownData,
true
);
cpProcessNameNew.split(",").forEach((item, index) => {
if (!cpProcessNameList.includes(item)) {
cpProcessNameList.push(item);
productProcessInfo.push(productProcessInfoNew[index]);
}
});
});
setState(pre => ({
...pre,
masterData: {
...masterData,
cpProcessName: cpProcessNameList.join(","),
productProcessInfo,
},
}));
}
}
}, [slaveData.map(item => item.sId).toString()]);
addState.onBackClick = () => {
props.onSaveState({ masterData: { ...props.masterData, sQuoConfig: JSON.stringify(addState.onGetFilterState(state)) }, quickQuoteModel: false });
};
const onDataChange = (name, sFieldName, changeValue, sId, dropDownData, isWait) => {
const { masterData = {}, slaveData = [], selectedNode = {}, manyData = [] } = state;
const extraState = {
calcPriceFinished: false,
};
if (name === "master") {
const { showName: sTreeNodeName } = selectedNode || {};
const masterDataNew = { ...masterData, ...changeValue };
masterDataNew.handleType = masterDataNew.handleType || "update";
masterDataNew.sId = masterDataNew.sId || commonUtils.createSid();
if (sFieldName === "dProductQty") {
setState(pre => ({
...pre,
dProductQty: changeValue.dProductQty,
}));
}
if (sFieldName === "dLength" || sFieldName === "dWidth" || sFieldName === "dHeight") {
if (sTreeNodeName) {
if (props.currentBoxModel) {
const boxModel = props.currentBoxModel.replace("slaveUp", "").replace("slaveDown", "");
const iIndex = slaveData.findIndex(item => item.sTreeNodeName === sTreeNodeName && item.sBoxModel === boxModel);
const sColumnNameConfig = commonUtils.convertStrToObj(slaveData[iIndex].sColumnNameConfig, []).map(item => ({
...item,
iColValue: item.iColValue || 6,
}));
slaveData[iIndex] = {
...slaveData[iIndex],
upAbleConfigsExtra: sColumnNameConfig,
};
} else {
if (!slaveData[0]) return;
const sColumnNameConfig = commonUtils.convertStrToObj(slaveData[0].sColumnNameConfig, []).map(item => ({
...item,
iColValue: item.iColValue || 6,
}));
slaveData[0] = {
...slaveData[0],
upAbleConfigsExtra: sColumnNameConfig,
};
}
} else {
masterDataNew[sFieldName] = changeValue[sFieldName];
}
if (masterData?.sMReserve3) {
const result1 = masterData?.sMReserve3.split('(')[0];
masterDataNew.sMReserve3 = `${result1}(${masterDataNew.dLength}*${masterDataNew.dWidth}*${masterDataNew.dHeight})`;
}
const num = Number(changeValue[sFieldName])
if (Number.isNaN(num)) {
masterDataNew[sFieldName] = null
}
}
setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState }));
} else if (name.includes("slave")) {
const boxModel = name.replace("slaveUp", "").replace("slaveDown", "");
if (sFieldName === "sName") {
let upAbleConfigsList = []
if (!changeValue.sName) return;
const dropDownDataSelected = dropDownData.find(item => item.sName === changeValue.sName);
const { sColumnNameConfig, sColumnNameConfigExclusion, sColumnNameConfigPic } = dropDownDataSelected;
const upAbleConfigsExtra = commonUtils.convertStrToObj(sColumnNameConfig, []).map(item => ({
...item,
iColValue: item.iColValue || 6,
}));
const defaultData = commonFunc.getDefaultData({ gdsconfigformslave: upAbleConfigsExtra });
delete defaultData.sId;
delete dropDownDataSelected.sId;
upAbleConfigsExtra?.forEach(item => {
if (item.sTypes && item.sTypes.includes('09')) {
const list = ['iSLength', 'iSWidth', 'iCLength', 'iCWidth']
const nameList = ['层1长', '层1宽', '层2长', '层2宽']
for (let index = 0; index < 4; index++) {
upAbleConfigsList.push({
...item,
sName: item.sName + list[index],
sDefault: item[list[index]],
showName: item.showName + nameList[index]
})
}
} else {
upAbleConfigsList.push(item)
}
})
changeValue = {
...changeValue,
...defaultData,
...dropDownDataSelected,
upAbleConfigsExtra,
...upAbleConfigsList.reduce((acc, item) => {
acc[item.sName] = item.sDefault;
return acc;
}, {}),
calcMethodData: commonUtils.convertStrToObj(sColumnNameConfigExclusion, []),
boxPicData: commonUtils.convertStrToObj(sColumnNameConfigPic, []),
};
}
const { selectedNode = {}, slaveConfig } = state;
const { showName: sTreeNodeName } = selectedNode;
if (sFieldName === "dSumPQty" && (sTreeNodeName.includes("骑马") || sTreeNodeName.includes("锁线"))) {
changeValue.dSumPQty = Number(changeValue.dSumPQty);
if (changeValue.dSumPQty !== 0) {
if (!changeValue.dSumPQty || changeValue.dSumPQty % 4 !== 0) {
Toast.show({
content: "P数要为4的倍数",
});
changeValue.dSumPQty = 4;
extraState.slaveUpKey = `key_${commonUtils.createSid()}`;
}
}
}
const iIndex = slaveData.findIndex(item => item.sTreeNodeName === sTreeNodeName && item.sBoxModel === boxModel);
if (name.includes("slaveDown")) {
let dropDownDataSelected = dropDownData.find(item => item.sId === changeValue[sFieldName] || item.sId === changeValue.value);
// dropDownDataSelected.sProductClassifyId = dropDownDataSelected.sProductClassifyId ? dropDownDataSelected.sProductClassifyId : dropDownDataSelected.sId
const extraRowData = {};
if (dropDownDataSelected !== undefined) {
dropDownDataSelected[sFieldName] = dropDownDataSelected.sProcessName;
// 后道参数额外配置
const { sParamConfig: sParamConfigStr } = dropDownDataSelected || {};
const sParamConfig = commonUtils.convertStrToObj(sParamConfigStr, []);
extraState.backendParamsConfig = sParamConfig;
extraState.backendConfig = { sParentFieldsName: sFieldName, sBoxModel: boxModel, typeName: 'slave', dropDownDataSelected };
const sBackendParams = sParamConfig
.map(item => {
const { sParamDefault, sParam, sFieldName, iOrder } = item;
return !sParamDefault
? ""
: {
sId: commonUtils.createSid(),
value: sParamDefault,
sParam: sParam,
[`sParam${iOrder}`]: sParamDefault,
...(sFieldName ? { [sFieldName]: sParamDefault } : {}),
sParamKey: sFieldName || `sParam${iOrder}`,
};
})
.filter(item => item !== "");
dropDownDataSelected.sBackendParams = sBackendParams;
}
if (iIndex === -1) {
slaveData.push({
sId: commonUtils.createSid(),
handleType: "add",
sBoxModel: boxModel,
sTreeNodeName,
sBackProcessData: dropDownDataSelected === undefined ? [] : [dropDownDataSelected],
...extraRowData,
});
} else {
const sBackProcessData = slaveData[iIndex].sBackProcessData || [];
const iIndex1 = sBackProcessData.findIndex(item => item.sProductClassifyId === changeValue.sProductClassifyId);
if (iIndex1 === -1) {
dropDownDataSelected !== undefined && sBackProcessData.push(dropDownDataSelected);
} else {
if (dropDownDataSelected === undefined) {
sBackProcessData.splice(iIndex1, 1);
} else {
sBackProcessData[iIndex1] = dropDownDataSelected;
}
}
slaveData[iIndex].sBackProcessData = sBackProcessData;
slaveData[iIndex] = {
...slaveData[iIndex],
...extraRowData,
handleType: slaveData[iIndex].handleType || "update",
};
}
} else {
if (iIndex === -1) {
slaveData.push({
...commonFunc.getDefaultData(slaveConfig, { tree: selectedNode }),
...changeValue,
sId: commonUtils.createSid(),
handleType: "add",
sBoxModel: boxModel,
sTreeNodeName,
});
} else {
slaveData[iIndex] = {
...(sFieldName === "sName"
? {
sId: slaveData[iIndex].sId,
sBoxModel: boxModel,
sTreeNodeName,
...commonFunc.getDefaultData(slaveConfig, { tree: selectedNode }),
sBackProcessData: slaveData[iIndex].sBackProcessData,
}
: slaveData[iIndex]),
...changeValue,
handleType: slaveData[iIndex].handleType || "update",
};
}
}
const saveIndex = slaveData.findIndex(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel);
const materialStyleLength = slaveData[saveIndex].materialLength || 0;
const materialStyleWidth = slaveData[saveIndex].materialWidth || 0;
slaveData[saveIndex] = {
...slaveData[saveIndex],
sMachineStyle: materialStyleLength + "*" + materialStyleWidth,
dMachineQty: masterData.sBillNo && slaveData[saveIndex].dMachineQty ? slaveData[saveIndex].dMachineQty : slaveData[saveIndex].dProductQty ? slaveData[saveIndex].dProductQty : masterData.dProductQty,
};
if (sFieldName === "dWlcd" || sFieldName === "dWlkd") {
const horizontalBoxes = Math.floor(slaveData[saveIndex]?.dWlkd / Number(slaveData[saveIndex]?.dMachineWidth));
const verticalBoxes = Math.floor(slaveData[saveIndex]?.dWlcd / Number(slaveData[saveIndex]?.dMachineLength));
const newDMaterialsKQty = horizontalBoxes * verticalBoxes;
slaveData[saveIndex] = {
...slaveData[saveIndex],
dMachineQty: masterData.sBillNo && slaveData[saveIndex].dMachineQty ? slaveData[saveIndex].dMachineQty : Math.floor(slaveData[saveIndex].dMachineQty / slaveData[saveIndex].dSinglePQty),
dMaterialsKQty: newDMaterialsKQty,
newMaterialLength: sFieldName === "dWlcd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlcd,
newMaterialWidth: sFieldName === "dWlkd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlkd,
materialLength: sFieldName === "dWlcd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlcd,
materialWidth: sFieldName === "dWlkd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlkd,
sMaterialsStyle: `${sFieldName === "dWlcd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlcd || 0}*${sFieldName === "dWlkd" ? changeValue[sFieldName] : slaveData[saveIndex]?.dWlkd || 0}`,
};
}
if (sFieldName === "sName") {
slaveData[saveIndex] = {
...slaveData[saveIndex],
dMaxLength: Number(selectedNode.sMachineStyle.split("*")[0]),
dMaxWidth: Number(selectedNode.sMachineStyle.split("*")[1]),
};
}
if (sFieldName === "bFlap") {
slaveData[saveIndex] = {
...slaveData[saveIndex],
bFold: false,
sFold: "",
dFold: "",
dAdhesive: "",
};
}
if (sFieldName === "bFold") {
slaveData[saveIndex] = {
...slaveData[saveIndex],
bFlap: false,
dFlap: "",
};
}
if (sFieldName === "iPrintModePo") {
slaveData[saveIndex] = {
...slaveData[saveIndex],
iPrintModePo: Number(changeValue.value),
};
}
const { upAbleConfigsExtra = [] } = slaveData[saveIndex] || {};
upAbleConfigsExtra.forEach(item => {
if (item.sName === sFieldName) {
item.sAssignFormula = null;
}
});
if (isWait) {
return slaveData.find(item => item.sBoxModel === boxModel);
}
setState(pre => ({ ...pre, slaveData, ...extraState }));
} else if (name === "finished") {
const { productProcessInfo = [] } = masterData;
const dropDownDataSelected = dropDownData.find(item => item.sId === changeValue[sFieldName] || item.sId === changeValue.value);
if (dropDownDataSelected !== undefined) {
dropDownDataSelected[sFieldName] = dropDownDataSelected.sProcessName;
// 后道参数额外配置
const { sParamConfig: sParamConfigStr } = dropDownDataSelected || {};
const sParamConfig = commonUtils.convertStrToObj(sParamConfigStr, []);
extraState.backendParamsConfig = sParamConfig;
extraState.backendConfig = { sParentFieldsName: sFieldName, typeName: 'finished', dropDownDataSelected };
const sBackendParams = sParamConfig
.map(item => {
const { sParamDefault, sParam, sFieldName, iOrder } = item;
return !sParamDefault
? ""
: {
sId: commonUtils.createSid(),
value: sParamDefault,
sParam: sParam,
[`sParam${iOrder}`]: sParamDefault,
...(sFieldName ? { [sFieldName]: sParamDefault } : {}),
sParamKey: sFieldName || `sParam${iOrder}`,
};
})
.filter(item => item !== "");
dropDownDataSelected.sBackendParams = sBackendParams;
}
const iIndex = productProcessInfo.findIndex(item => item.sProductClassifyId === dropDownData[0].sProductClassifyId);
if (iIndex === -1) {
dropDownDataSelected !== undefined && productProcessInfo.push(dropDownDataSelected);
} else {
if (dropDownDataSelected === undefined) {
productProcessInfo.splice(iIndex, 1);
} else {
productProcessInfo[iIndex] = dropDownDataSelected;
}
}
const cpProcessName = productProcessInfo.map(item => item.sProcessName).join(",");
const masterDataNew = { ...masterData, cpProcessName, productProcessInfo };
masterDataNew.handleType = masterDataNew.handleType || "update";
masterDataNew.sId = masterDataNew.sId || commonUtils.createSid();
if (isWait) {
return masterDataNew;
}
setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState }));
}
};
addState.onDataChange = onDataChange;
addState.onGetAllDelData = () => {
const {
slaveData = [],
slaveDelData: slaveDelDataOld = [],
controlData = [],
controlDelData: controlDelDataOld = [],
materialsData = [],
materialsDelData: materialsDelDataOld = [],
processData = [],
processDelData: processDelDataOld = [],
manyqtysData = [],
manyqtysDelData: manyqtysDelDataOld = [],
colorData = [],
colorDelData: colorDelDataOld = [],
packData = [],
packDelData: packDelDataOld = [],
} = props;
const addState = {
slaveDelData: [
...slaveDelDataOld,
...slaveData.filter(item => !slaveDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
controlDelData: [
...controlDelDataOld,
...controlData.filter(item => !controlDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
materialsDelData: [
...materialsDelDataOld,
...materialsData
.filter(item => !materialsDelDataOld.map(item1 => item1.sId).includes(item.sId))
.map(item => ({ ...item, handleType: "del" })),
],
processDelData: [
...processDelDataOld,
...processData.filter(item => !processDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
manyqtysDelData: [
...manyqtysDelDataOld,
...manyqtysData.filter(item => !manyqtysDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
colorDelData: [
...colorDelDataOld,
...colorData.filter(item => !colorDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
packDelData: [
...packDelDataOld,
...packData.filter(item => !packDelDataOld.map(item1 => item1.sId).includes(item.sId)).map(item => ({ ...item, handleType: "del" })),
],
};
return addState;
};
// 判断单据是否被删除
const bDataDeleted = async () => {
const { masterConfig, currentId, masterData = {}, slaveConfig } = props;
if (!masterData.sBillNo) return false;
const sId = currentId || masterData.sId || "";
const returnData = await props.handleGetDataOne({
name: "master",
configData: masterConfig,
condition: { sId, pageSize: "", pageNum: "" },
bEditClick: false,
slaveConfig,
isWait: true,
});
if (returnData) return false;
Toast.show({
content: "当前报价单已被删除!请重新核价以生成新的报价单!"
});
props.onAdd();
setState(pre => ({
...pre,
// manyData: [],
calcPriceFinished: false,
}));
return true;
};
addState.bDataDeleted = bDataDeleted;
// 存草稿
const onSaveDraft = (nextState = state, nextProps = props) => {
const { masterData = {} } = nextState;
const { sProductName, sProductNo, sCustomerName, sCustomerId, sCustomerNo } = masterData;
if (!sProductName || !sCustomerName) {
// message.info("请先填写客户名称和产品名称");
Toast.show({
content: "请先填写客户名称和产品名称",
});
return;
}
props.onSaveState(
{
...addState.onGetAllDelData(),
masterData: { ...nextProps.masterData, sQuoConfig: JSON.stringify(addState.onGetFilterState(nextState)) },
slaveData: nextProps.slaveData.map(item => {
return {
...item,
sProductName: sProductName,
sProductNo: sProductNo,
sCustomerName: sCustomerName,
sCustomerId: sCustomerId,
sCustomerNo: sCustomerNo,
handleType: "add",
};
}),
isDraftSaved: true,
controlData: nextProps.controlData.map(item => {
return {
...item,
// sPartsName: sProductName,
handleType: "add",
};
}),
materialsData: nextProps.materialsData?.map(item => {
return {
...item,
handleType: "add",
};
}),
processData: nextProps.processData?.map(item => {
return {
...item,
handleType: "add",
};
}),
manyqtysData: nextProps.manyqtysData?.map(item => {
return {
...item,
handleType: "add",
};
}),
colorData: nextProps.colorData?.map(item => {
return {
...item,
handleType: "add",
};
}),
packData: nextProps.packData?.map(item => {
return {
...item,
handleType: "add",
};
}),
loading: true,
isSaveDraft: true,
},
newState => {
if (newState) {
props.onButtonClick("BtnDraft", { ...props, ...newState });
// setTimeout(() => {
// setIsDraftSaved(true);
// }, 500);
}
}
);
};
addState.onSaveDraft = onSaveDraft;
// 获取国际化名称
const getI18nName = (sFieldName, sDefault) => {
return commonFunc.showMessage(props.app?.commonConst, sFieldName) || sDefault;
};
// 核价按钮
addState.handleCalcPrice = async () => {
if (props.app.webSocket === null || props.app.webSocket?.readyState !== WebSocket.OPEN) {
console.log("================webSocket连接======================");
props.dispatch({
type: "app/createWebSocket",
payload: { reStart: true, dispatch: props.dispatch },
});
// 暂停2秒
await new Promise(resolve => setTimeout(resolve, 2000));
}
// const { masterData = {}, slaveData = [], selectedNode = {}, extraParts = {} } = state;
// const selectProduct = commonFunc.showLocalMessage(props, "selectProduct", "请先选择产品");
// const selectCustomer = commonFunc.showLocalMessage(props, "selectCustomer", "请先选择客户名称");
// const selectProductUnit = commonFunc.showLocalMessage(props, "selectProductUnit", "请先输入产品单位");
// const inputLength = commonFunc.showLocalMessage(props, "inputLength", "请先输入长度");
// const inputWidth = commonFunc.showLocalMessage(props, "inputWidth", "请先输入宽度");
// const inputQty = commonFunc.showLocalMessage(props, "inputQty", "请先输入数量");
// if (commonUtils.isEmptyObject(selectedNode)) {
// // message.error("请先选择产品");
// Toast.show({
// icon: "fail",
// content: selectProduct,
// });
// return;
// }
const {
masterConfig,
masterData = {},
slaveConfig,
slaveData = [],
selectedNode = {},
extraParts = {},
downAbleConfigs = [],
downAbleExtraConfigs = [],
finishedConfigs = [],
} = state;
const selectProduct = commonFunc.showLocalMessage(props, "selectProduct", "请先选择产品");
if (commonUtils.isEmptyObject(selectedNode)) {
Toast.show({
icon: "fail",
content: selectProduct,
});
return;
}
const errMsgList = [];
const masterConfigMust = masterConfig?.gdsconfigformslave.filter(item => item.bVisible && item.bNotEmpty);
if (!masterConfigMust) return;
const checkResult = masterConfigMust.filter(item => !masterData[item.sName]);
if (checkResult.length) {
errMsgList.push(
checkResult.map(item => 【{item.showName}】),
{getI18nName("isNotNull")},
);
}
// const mustFieldsMap = {
// sCustomerName: selectCustomer,
// sProductName: selectCustomer,
// sProductUnit: selectProductUnit,
// dLength: inputLength,
// dWidth: inputWidth,
// dProductQty: inputQty,
// };
// const checkResult = Object.keys(mustFieldsMap).find(item => masterData[item] === undefined);
// if (checkResult) {
// Toast.show({
// icon: "fail",
// content: mustFieldsMap[checkResult],
// });
// return;
// }
const { bBox, showName, sId } = selectedNode;
let { sAllPartsName } = selectedNode;
if (!sAllPartsName) {
sAllPartsName = showName;
}
const slaveConfigMust = slaveConfig.gdsconfigformslave
.filter(item => item.bVisible && item.iTag && item.bNotEmpty && item.sName !== "sMaterialsName")
.filter(item => (bBox ? true : item.sName !== "sName"));
const sMaterialsNameConfig = slaveConfig.gdsconfigformslave.find(item => item.sName === "sMaterialsName");
const downAbleConfigMust = [...downAbleConfigs, ...downAbleExtraConfigs].filter(item => item.bNotEmpty);
const errorList = [];
const partsList = [];
slaveData.forEach(slaveRowData => {
const list = slaveConfigMust.filter(item => !slaveRowData[item.sName]);
if (!slaveRowData.materialsInfo || slaveRowData.materialsInfo.some(item => !item.sMaterialsName)) {
list.push(sMaterialsNameConfig);
}
const { sBackProcessData = [] } = slaveRowData;
downAbleConfigMust.forEach(item => {
if (!sBackProcessData.some(x => x.sProductClassifyId === item.sId)) {
list.push(item);
}
});
errorList.push(list);
partsList.push(slaveRowData.sBoxModel);
});
if (!errorList.some(item => !item.length)) {
errMsgList.push(
errorList.map((item, index0) => [
{partsList[index0]}:,
...item.map(config => 【{config.showName}】),
{getI18nName("isNotNull")},
,
])
);
}
const finishedConfigMust = finishedConfigs.filter(item => item.bNotEmpty);
const { productProcessInfo = [] } = masterData;
const checkResult1 = finishedConfigMust.filter(item => !productProcessInfo.some(x => x.sProductClassifyId === item.sId));
if (checkResult1.length) {
errMsgList.push(
checkResult1.map(item => 【{item.showName}】),
{getI18nName("isNotNull")},
);
}
if (errMsgList.length) {
// message.error(errMsgList, 3);
Toast.show({
icon: "fail",
content: errMsgList,
});
return;
}
setState(pre => ({ ...pre, calcPriceLoading: true, calcPriceFinished: false }));
const { sModelsId, token, sBoxModel } = props;
const extraPartsList = extraParts?.[showName] || [];
const sAllPartsNameList = [...sAllPartsName.split(","), ...extraPartsList];
const masterDataNew = {
...masterData,
cpProcessName: masterData.cpProcessName || "",
productProcessInfo: masterData.productProcessInfo?.map(item => ({ ...item, sProcessId: item.sId })) || [],
sProductClassifyId: sId,
sProductName1: masterData.sProductName,
dProductWidth: masterData.dWidth,
dProductLength: masterData.dLength,
dProductHeight: masterData.dHeight,
sProductStyle:
masterData.dHeight !== undefined
? `${masterData.dLength}*${masterData.dWidth}*${masterData.dHeight}`
: `${masterData.dLength}*${masterData.dWidth}`,
};
const paramMap = {
bQuotation: true,
...masterDataNew,
product: masterDataNew,
sPartsStyle: "",
partsInfo: sAllPartsNameList
.map(partName => {
const temp = {
...slaveData.find(item => item.sTreeNodeName === showName && item.sBoxModel === partName),
};
return temp;
})
.filter(item => commonUtils.isNotEmptyObject(item) && item.materialsInfo && item.materialsInfo.length)
.map(item => {
return {
...Object.keys(item).reduce((pre, cur) => {
if (typeof item[cur] !== "object") {
pre[cur] = item[cur];
}
return pre;
}, {}),
iOrder: 1,
dPartsQty: masterData.dProductQty,
// iPositiveColor: Number(item.sColor),
iOppositeColor: item.sBackProcessData?.find(item => item.bPrintParams)?.iPositiveColor || 0,
iOppositeSpecialColor: item.sBackProcessData?.find(item => item.bPrintParams)?.iPositiveSpecialColor || 0,
sPartsName: item.sBoxModel,
materialsInfo: item.materialsInfo?.filter(x => commonUtils.isNotEmptyObject(x)),
processInfo:
item.sBackProcessData?.map(item => ({
...item,
sProcessId: item.sProcessId || item.sId,
})) || [],
};
}),
};
const firstPart = paramMap.partsInfo && paramMap.partsInfo[0];
paramMap.sPartsStyle =
((firstPart && firstPart.dPartsLength) || 0) + "*" + ((firstPart && firstPart.dPartsWidth) || 0);
if (paramMap.sPartsStyle === "0*0") {
delete paramMap.sPartsStyle;
}
// 先用好的数据模拟后面在调整
// const newParamMap = JsonData;
const url = `${commonConfig.server_host}calculationStd/countMoney?sModelsId=${sModelsId}`;
const dataReturn = (await commonServices.postValueService(token, paramMap, url)).data;
if (dataReturn.code === 1) {
// const { app, sModelsId } = props;
// const { slaveConfig, masterData: masterData1, processConfig, materialsConfig } = state;
const { slaveConfig, masterData: masterData1, materialsConfig, processConfig, sModelsId, app } = props;
const { productClassify, partsNewInfo = [], productProcessInfo, partsInfo: partsOldInfo } = dataReturn.dataset.rows[0];
const slaveData = [];
const controlData = [];
const materialsData = [];
let processData = [];
let tableDataRow = {};
for (const item of slaveConfig.gdsconfigformslave) {
tableDataRow[item.sName] = masterData[item.sName];
}
tableDataRow.sId = commonUtils.createSid();
tableDataRow.handleType = "add";
tableDataRow.iOrder = 1;
tableDataRow.sParentId = masterData.sId;
// const productIdDropDown = commonUtils.getStoreDropDownData(sModelsId, 'slave', 'sProductName');
let productIdDropDown;
const slaveIndex = slaveConfig.gdsconfigformslave.findIndex(item => item.sName === "sProductName");
if (slaveIndex > -1) {
const sqlDropDownData = await props.getSqlDropDownData(sModelsId, "slave", slaveConfig.gdsconfigformslave[slaveIndex], tableDataRow);
productIdDropDown = sqlDropDownData.dropDownData;
}
const iProductIdIndex = commonUtils.isEmptyArr(productIdDropDown)
? -1
: productIdDropDown.findIndex(item => item.sId === tableDataRow.sProductId);
if (iProductIdIndex === -1) {
tableDataRow.sProductId = tableDataRow.sProductName;
const tableDataRowNew = { ...tableDataRow, ...masterDataNew };
const extraProps = {
sProductId: tableDataRowNew.sProductName,
sProductName: tableDataRowNew.sProductName,
sProductStyle: tableDataRowNew.sProductStyle,
sProductUnit: tableDataRowNew.sProductUnit,
sProductNo: tableDataRowNew.sProductNo,
sCustomerProductNo: tableDataRowNew.sCustomerProductNo,
sProductClassifyId: tableDataRowNew.sProductClassifyId,
sProductClassifyName: tableDataRowNew.sProductClassifyName,
};
tableDataRow = { ...tableDataRow, ...extraProps };
tableDataRow.sProductInfo = JSON.stringify(extraProps);
} else {
tableDataRow.sProductInfo = "";
}
slaveData.push(tableDataRow);
const sInfoArr = [];
let errorFlag = false;
if (!commonUtils.isEmptyArr(partsOldInfo)) {
partsOldInfo.forEach(item => {
if (commonUtils.isNotEmptyObject(item) && !commonUtils.isEmpty(item.errorFlag)) {
errorFlag = true;
// props.getServiceError({ msg: `${item.sPartsName} ${item.errorFlag}` });
Toast.show({
content: `${item.sPartsName} ${item.errorFlag}`,
});
}
});
}
if (errorFlag) {
setState(pre => ({ ...pre, calcPriceLoading: false }));
return;
}
// 返回数据赋值
const { slaveData: stateSlaveData = [] } = state;
const { bCalculatingArea } = selectedNode;
partsNewInfo.forEach(item => {
const slaveRowData = stateSlaveData.find(row => item.sTreeNodeName === row.sTreeNodeName && item.sBoxModel === row.sBoxModel);
slaveRowData.dMachineQty = item.dMachineQty;
slaveRowData.dAuxiliaryQty = item.materialsInfo?.[0]?.dAuxiliaryQty;
slaveRowData.sPrint = item.sProcessName;
if (bCalculatingArea) {
// todo 核价成功后 判断bSpecialRules 为false 就要给材料长材料款赋值
slaveRowData.dWlcd = item.dMaterialsLength;
slaveRowData.dWlkd = item.dMaterialsWidth;
}
setState(pre => ({ ...pre, slaveData: stateSlaveData }));
});
if (props.app.userinfo.sType === "sysadmin") {
/* 超级管理员,弹窗显示接口返回的sInfo */
partsNewInfo.forEach(item => {
const { sPartsName, sInfo } = item;
const sInfoObj = {};
sInfoObj.sPartsName = sPartsName;
sInfoObj.sInfo = sInfo;
sInfoArr.push(sInfoObj);
});
}
const bProcessAssort = true;
let returnProcessAssort = [];
let processAssignAssort = "";
let dropDownDataProcessName;
if (bProcessAssort) {
const dataUrl = `${commonConfig.server_host}salesorder/getProcessAssort?sModelsId=${sModelsId}`;
const dataProcessAssort = (await commonServices.postValueService(token, {}, dataUrl)).data;
if (dataProcessAssort.code === 1) {
returnProcessAssort = dataProcessAssort.dataset.rows[0].processassort;
const iIndex = processConfig.gdsconfigformslave.findIndex(item => item.sName === "sProcessName");
if (iIndex > -1) {
const sqlDropDownData = await props.getSqlDropDownData(sModelsId, "slave", processConfig.gdsconfigformslave[iIndex]);
dropDownDataProcessName = sqlDropDownData.dropDownData;
processAssignAssort = processConfig.gdsconfigformslave[iIndex].sAssignField;
}
}
}
const newCopyTo = {};
newCopyTo.master = masterData;
newCopyTo.slave = commonUtils.isEmptyArr(slaveData) ? {} : slaveData[0];
for (let i = 0; i < partsNewInfo.length; i++) {
const partInfo = partsNewInfo[i];
const iIndex = i;
const partsDataRow = {};
for (const child of Object.keys(partInfo)) {
partsDataRow[child] = partInfo[child];
}
partsDataRow.handleType = "add";
partsDataRow.iOrder = iIndex + 1; /* 快速下单编号从1开始 */
partsDataRow.sId = commonUtils.createSid();
partsDataRow.sParentId = masterData.sId;
// partsDataRow.sSlaveId = ' ';
if (partsDataRow.iPrintMode !== 3) {
partsDataRow.iOppositeColor = partsDataRow.iPositiveColor;
}
delete partsDataRow.dMaterialsKQty;
// delete partsDataRow.dMaterialsLength;
// delete partsDataRow.dMaterialsWidth;
// if (productClassify.bSpecialRules) {
// partsDataRow.dMachineLength = partsDataRow.dMaxMachineLength;
// partsDataRow.dMachineWidth = partsDataRow.dMaxMachineWidth;
// }
controlData.push(partsDataRow);
// 材料信息
for (let i = 0; i < partInfo.materialsInfo.length; i++) {
const materialInfo = partInfo.materialsInfo[i];
const iOrder = i;
let materialDataRow = {};
for (const item of materialsConfig.gdsconfigformslave) {
materialDataRow[item.sName] = materialInfo[item.sName];
}
materialDataRow.handleType = "add";
materialDataRow.sType = "0";
materialDataRow.iPartOrder = iIndex;
materialDataRow.iOrder = iOrder + 1;
materialDataRow.sPartsName = partsDataRow.sPartsName;
materialDataRow.sId = commonUtils.createSid();
materialDataRow.sParentId = masterData.sId;
materialDataRow.sControlId = partsDataRow.sId;
// materialDataRow.sSlaveId = ' ';
materialDataRow.dMaterialsKQty = partsDataRow.iNumberofMaterial;
const models = "Materials";
materialDataRow = await props.onMaterialsChange(materialDataRow, sModelsId, masterData, [], "dAuxiliaryQty", app, token, models);
materialDataRow = commonBusiness.getCalculateAllMoney(app, models, "dAuxiliaryQty", masterData, materialDataRow);
materialsData.push(materialDataRow);
}
// 工序信息
let processPrintDataRow = {};
processPrintDataRow.handleType = "add";
processPrintDataRow.sProcessId = partInfo.sProcessId;
const iProcessPrintIndex = dropDownDataProcessName.findIndex(item => item.sId === processPrintDataRow.sProcessId);
if (iProcessPrintIndex > -1) {
processPrintDataRow = {
...processPrintDataRow,
...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iProcessPrintIndex], newCopyTo),
}; // 取赋值字段
}
processPrintDataRow.sType = partInfo.sType;
processPrintDataRow.iPartOrder = iIndex;
processPrintDataRow.iOrder = 1;
processPrintDataRow.sProcessName = partInfo.sProcessName;
processPrintDataRow.sPartsName = partsDataRow.sPartsName;
processPrintDataRow.dProcessInQty = partInfo.dProcessInQty;
processPrintDataRow.dLossQty = partInfo.dLossQty;
processPrintDataRow.dProcessOutQty = partInfo.dProcessOutQty;
processPrintDataRow.sId = commonUtils.createSid();
processPrintDataRow.sParentId = masterData.sId;
processPrintDataRow.sControlId = partsDataRow.sId;
const iSpecialColor = partInfo.iSpecialColor !== undefined ? partInfo.iSpecialColor : partInfo.partInfoiSpecialColor;
processPrintDataRow.sColorSerialMemo = JSON.stringify([{ sId: partInfo.sColorId, sName: partInfo.sColor, dColor: partInfo.iColor, iSpecialColor }]);
// processPrintDataRow.sSlaveId = ' ';
processData.push(processPrintDataRow);
// 配套工序
if (bProcessAssort) {
returnProcessAssort
.filter(item => item.sParentId === processPrintDataRow.sProcessId)
.forEach(itemProcessAssort => {
const iIndex = dropDownDataProcessName.findIndex(item => item.sId === itemProcessAssort.sProcessId);
const iProcessIndex = -1;
const iNewProcessIndex = processData.findIndex(
item => item.sProcessId === itemProcessAssort.sProcessId && item.sControlId === partsDataRow.sId
);
if (iIndex > -1 && iProcessIndex < 0 && iNewProcessIndex < 0) {
let processRow = commonFunc.getDefaultData(processConfig, newCopyTo); // 取默认值
processRow = { ...processRow, ...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iIndex], newCopyTo) }; // 取赋值字段
processRow.handleType = "add";
processRow.sId = commonUtils.createSid();
processRow.sParentId = masterData.sId;
processRow.sControlId = partsDataRow.sId;
processRow.sPartsName = partsDataRow.sPartsName;
processRow.sType = dropDownDataProcessName[iIndex].sType;
// processRow.sSlaveId = ' ';
processData.push(processRow);
}
});
}
partInfo.processInfo.forEach((process, iOrder) => {
let processAfterDataRow = {};
for (const item of processConfig.gdsconfigformslave) {
processAfterDataRow[item.sName] = process[item.sName];
}
for (const child of Object.keys(process)) {
processAfterDataRow[child] = process[child];
}
processAfterDataRow.handleType = "add";
processAfterDataRow.sProcessId = process.sProcessId;
const iProcessAfterIndex = dropDownDataProcessName.findIndex(item => item.sId === processAfterDataRow.sProcessId);
if (iProcessAfterIndex > -1) {
processAfterDataRow = {
...processAfterDataRow,
...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iProcessAfterIndex], newCopyTo),
}; // 取赋值字段
}
processAfterDataRow.sType = process.sType;
processAfterDataRow.iPartOrder = iIndex;
processAfterDataRow.iOrder = iOrder + 1;
processAfterDataRow.sPartsName = partsDataRow.sPartsName;
processAfterDataRow.sId = commonUtils.createSid();
processAfterDataRow.sParentId = masterData.sId;
processAfterDataRow.sControlId = partsDataRow.sId;
const sBackendParams = process.sBackendParams || [];
if (sBackendParams.length) {
const sQuoParams = sBackendParams.map(item => ({
sParamKey: item.sParamKey,
sParamName: item.sParam,
sParamValue: item.value !== undefined ? item.value : "",
bSelfCbx: !(item.value === "" || item.value === undefined),
}));
processAfterDataRow.sQuoParams = JSON.stringify(sQuoParams);
}
if (process.sColor) {
processAfterDataRow.sColorSerialMemo = JSON.stringify([{ sId: process.sColorId, sName: process.sColor, dColor: process.iColor }]);
}
// processAfterDataRow.sSlaveId = ' ';
processData.push(processAfterDataRow);
// 配套工序
if (bProcessAssort) {
returnProcessAssort
.filter(item => item.sParentId === processPrintDataRow.sProcessId)
.forEach(itemProcessAssort => {
const iIndex = dropDownDataProcessName.findIndex(item => item.sId === itemProcessAssort.sProcessId);
const iProcessIndex = -1;
const iNewProcessIndex = processData.findIndex(
item => item.sProcessId === itemProcessAssort.sProcessId && item.sControlId === partsDataRow.sId
);
if (iIndex > -1 && iProcessIndex < 0 && iNewProcessIndex < 0) {
let processRow = commonFunc.getDefaultData(processConfig, newCopyTo); // 取默认值
processRow = { ...processRow, ...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iIndex], newCopyTo) }; // 取赋值字段
processRow.handleType = "add";
processRow.sId = commonUtils.createSid();
processRow.sParentId = masterData.sId;
processRow.sControlId = partsDataRow.sId;
processRow.sPartsName = partsDataRow.sPartsName;
processRow.sType = dropDownDataProcessName[iIndex].sType;
// processRow.sSlaveId = ' ';
processData.push(processRow);
}
});
}
});
}
productProcessInfo.forEach((process, iOrder) => {
let processProductDataRow = {};
for (const item of processConfig.gdsconfigformslave) {
processProductDataRow[item.sName] = process[item.sName];
}
for (const child of Object.keys(process)) {
processProductDataRow[child] = process[child];
}
const iProductProcessIndex = dropDownDataProcessName.findIndex(item => item.sId === processProductDataRow.sProcessId);
if (iProductProcessIndex > -1) {
processProductDataRow = {
...processProductDataRow,
...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iProductProcessIndex], newCopyTo),
}; // 取赋值字段
}
processProductDataRow.handleType = "add";
processProductDataRow.sType = "3";
processProductDataRow.sPartsName = "";
processProductDataRow.iPartOrder = 999;
processProductDataRow.iOrder = iOrder + 1;
processProductDataRow.sId = commonUtils.createSid();
processProductDataRow.sParentId = masterData.sId;
const sBackendParams = process.sBackendParams || [];
if (sBackendParams.length) {
const sQuoParams = sBackendParams.map(item => ({
sParamKey: item.sParamKey,
sParamName: item.sParam,
sParamValue: item.value !== undefined ? item.value : "",
bSelfCbx: !(item.value === "" || item.value === undefined),
}));
processProductDataRow.sQuoParams = JSON.stringify(sQuoParams);
}
// processProductDataRow.sSlaveId = ' ';
processData.push(processProductDataRow);
// 配套工序
if (bProcessAssort) {
returnProcessAssort
.filter(item => item.sParentId === processProductDataRow.sProcessId)
.forEach(itemProcessAssort => {
const iIndex = dropDownDataProcessName.findIndex(item => item.sId === itemProcessAssort.sProcessId);
const iProcessIndex = -1;
const iNewProcessIndex = processData.findIndex(item => item.sProcessId === itemProcessAssort.sProcessId);
if (iIndex > -1 && iProcessIndex < 0 && iNewProcessIndex < 0) {
let processRow = commonFunc.getDefaultData(processConfig, newCopyTo); // 取默认值
processRow = { ...processRow, ...commonFunc.getAssignFieldValue(processAssignAssort, dropDownDataProcessName[iIndex], newCopyTo) }; // 取赋值字段
processRow.handleType = "add";
processRow.sId = commonUtils.createSid();
processRow.sParentId = masterData.sId;
processRow.sType = dropDownDataProcessName[iIndex].sType;
// processRow.sSlaveId = ' ';
processData.push(processRow);
}
});
}
});
processData = props.sortData(controlData, processData);
const addState = { controlSelectedRowKeys: ["0000000"] };
if (!commonUtils.isEmptyArr(slaveData)) {
addState.slaveSelectedRowKeys = [slaveData[0].sId];
}
const { sPrintConfig = {}, downAbleConfigs = [], finishedConfigs = [] } = state;
const processConfigs = [sPrintConfig, ...downAbleConfigs, ...finishedConfigs];
const configOrderMap = {};
processConfigs.forEach((config, index) => {
configOrderMap[config.sId] = index;
});
processData.sort((a, b) => {
return configOrderMap[a.sProcessClassifyId] - configOrderMap[b.sProcessClassifyId];
});
processData = processData.map((item, index) => ({ ...item, iOrder: index + 1 }));
const newState = {
materialsConfig,
masterData: { ...masterData1, ...masterData },
slaveData,
controlData,
materialsData,
processData,
fastOrderModalVisible: false,
quotationAllprogress: 0,
materialsSelectedRowKeys: [],
...addState,
sInfoArr,
// bVisiblesInfo: !!commonUtils.isNotEmptyArr(sInfoArr),
Loading: false,
dQuickQuoteProductQty: state?.dQuickQuoteProductQty
// quickQuoteModel: false,
};
delete newState.masterData.sQuoConfig;
setState(pre => ({
...pre,
newNextProps: {
dQuickQuoteProductQty: state.dQuickQuoteProductQty,
...props,
...newState,
// manyqtysConfig: state.manyConfig,
// manyqtysData: state.manyData,
},
}));
const result = await props.handleCalculation(
false,
{ ...props, ...newState, manyqtysConfig: state.manyConfig, manyqtysData: state.manyData, manyqtysDelData: state.manyData, state },
true,
{ ...props, state }
);
if (commonUtils.isEmptyObject(result)) {
setState(pre => ({ ...pre, calcPriceLoading: false }));
return;
}
let hasCalled = false;
const { manyqtysData = [] } = result;
result.manyqtysData = manyqtysData.map(item => ({
...item,
sParentId: newState.masterData.sId,
}));
setState(pre => {
const preNew = {
...pre,
manyData: result.manyqtysData,
calcPriceLoading: false,
calcPriceFinished: true,
};
const stateNew = { ...newState, ...result };
if (hasCalled) return preNew; // 防止重复执行
hasCalled = true;
props.onSaveState(stateNew, () => {
onSaveDraft(preNew, stateNew);
});
return preNew;
});
} else {
// message.error(dataReturn.erroMsg || dataReturn.msg);
Toast.show({
icon: "fail",
content: dataReturn.erroMsg || dataReturn.msg,
});
setState(pre => ({ ...pre, calcPriceLoading: false }));
}
};
// 新报价
addState.onAdd = () => {
const restList = ["formData", "manyColumn", "manyConfig", "masterConfig", "slaveConfig", "slaveColumn", "treeData"];
const stateNew = {
...restList.reduce((pre, cur) => {
pre[cur] = state[cur];
return pre;
}, {}),
masterData: {},
slaveData: [],
manyData: [],
};
setState(stateNew);
props.onAdd();
};
// 选择盒型弹窗
addState.onFieldPopupModal = (showConfig, name) => {
if (showConfig.sName === "sName") {
props.onSaveState({ boxModelSelectedModalVisible: true, currentBoxModel: name });
}
};
return {
...props,
onDataChange0: props.onDataChange,
...addState,
hideBackBtn,
enabled,
state,
setState,
};
};
// 入口
const QuotationAllprogressDetail = baseProps => {
const props = QuickQuoteEvent(baseProps);
const { selectedNode, quotationData, app, sModelsId, masterData, state } = props;
const { slaveConfig, slaveData = [] } = state
const { showName, sUnit } = quotationData;
const timeRef = useRef(0);
useEffect(() => {
if (!selectedNode.sId || commonUtils.isEmptyObject(slaveConfig)) return '';
timeRef.current += 1;
const getDropDownData = async props => {
const showDownConfig = slaveConfig?.gdsconfigformslave.find(item => item.sControlName === "BtnDownConfig");
const downAbleConfigs = await getSqlDropDownData({ ...showDownConfig });
props.setState(pre => {
const { slaveData = [], slaveConfig } = pre;
const addState = {};
const defaultData = commonFunc.getDefaultData(slaveConfig, { tree: selectedNode });
const slaveDataNew = slaveData.filter(item => item.sTreeNodeName === selectedNode.showName);
if (!slaveDataNew.length) {
const sAllPartsName = selectedNode.sAllPartsName || selectedNode.showName;
sAllPartsName?.split(",").forEach((item, index) => {
const tempData = {
sId: commonUtils.createSid(),
handleType: "add",
...defaultData,
sBoxModel: item,
sTreeNodeName: selectedNode.showName,
};
if (selectedNode.sTypeKey === "huace") {
if (index !== 0) {
delete tempData.dSumPQty;
} else {
tempData.dSumPQty = 4;
}
}
slaveDataNew.push(tempData);
});
addState.slaveData = slaveDataNew;
}
if (timeRef.current > 1) {
addState.slaveData = slaveDataNew;
addState.extraParts = {};
}
let sQuoConfigData = {}
if (props?.sQuoData) {
const sQuoConfig = commonUtils.convertStrToObj(props.masterData?.sQuoConfig, {});
sQuoConfigData = props.onGetFilterState(sQuoConfig, true)
sQuoConfigData = {
...sQuoConfigData,
masterData: { ...sQuoConfigData?.masterData, handleType: masterData?.handleType, sBillNo: masterData?.sBillNo },
slaveData: sQuoConfigData?.slaveData?.map((item, i) => {
return {
...item,
sId: props?.slaveData[i] ? sQuoConfigData?.slaveData[i]?.sId : item.sId
}
})
}
} else {
sQuoConfigData = {
masterData: {
...masterData,
sProductName: showName, sProductUnit: sUnit,
}
}
}
return {
...pre,
...addState,
downAbleConfigs: downAbleConfigs
.filter(item => item.sType === "2")
.map((item, index) => ({
...item,
sName: `sParams${index}`,
iColValue: item.iColValue || 4,
sVisColumnName: "sProcessName",
})),
finishedConfigs: downAbleConfigs
.filter(item => item.sType === "3")
.map((item, index) => ({
...item,
sName: `sParams${index}`,
iColValue: item.iColValue || 4,
sVisColumnName: "sProcessName",
})),
...sQuoConfigData,
// masterData: { sProductName: showName, sProductUnit: sUnit, handleType: masterData?.handleType, sBillNo: masterData?.sBillNo },
};
});
};
if (selectedNode.sTypeKey === "juantong") {
props.onSaveState({
masterData: { ...props.masterData, sFormId: "101251240115016002356125200" },
});
} else {
props.onSaveState({
masterData: { ...props.masterData, sFormId: "101251240115016076506222050" },
});
}
getDropDownData(props);
}, [selectedNode.sId, commonUtils.isEmptyObject(slaveConfig)]);
const getSqlDropDownData = async ({ sId }) => {
const url = `${commonConfig.server_host}business/getSelectLimit/${sId}`;
const body = {
sSqlCondition: {
sProductClassifyId: selectedNode.sId,
},
sKeyUpFilterName: "",
pageNum: 1,
pageSize: 20,
};
const retrunData = await commonServices.postValueService(props.app.token, body, url);
const sColumnNameConfigStr = retrunData.data?.dataset?.rows?.[0]?.sColumnNameConfig;
// 取上机尺寸
return commonUtils.convertStrToObj(sColumnNameConfigStr, []);
};
return (