import React, { useEffect, useRef, useState } from "react";
import moment from "moment";
import { cloneDeep } from "lodash";
import {
Tabs,
Modal,
Space,
Button,
DatePicker,
Radio,
message,
Badge,
Spin
} from "antd";
import * as commonUtils from "@/utils/utils";
import * as 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 useCommonBase from "@/components/Common/CommonHooks/useCommonBase";
import CommonOperationBarComponent from "@/mes/common/commonOperationBarComponent";
import StaticEditTable from "@/components/Common/CommonTable";
import CommonViewTable from "@/components/Common/CommonViewTable";
import RouterComponent from "@/routes/mes/routerComponent";
import EquipmentRepair from "../../serviceUpkeep/equipmentRepair";
import SwasterTypeTable from "./Table/SWasteType";
import ChoosePalletComponent from "../choosePalletComponent";
import CommonViewDragable from "@/components/Common/CommonViewDragable";
import costomPageFun from "@/mes/costomPageFun";
import ReportInfo from "@/mes/productionExec/noticeModal/reportInfoButton";
import styles from "./index.less";
const { TabPane } = Tabs;
// 事件层
const useCommonModelEvent = props => {
const {
formData: formDataOld = [],
enabled,
copyTo,
sFilterConditions, // 父页面过滤条件
noGetData // 不要加载数据,根据另一张表选中行加载时用
} = props;
let formData =
props.parentProps?.btnConfig?.sActiveId === "12710101117087374661080"
? formDataOld.filter(item => item.sGrd === "Knifetable")
: formDataOld;
// 标签补打formData特殊处理
formData = useGetFormDataNew(props, formData);
// 合并自定义列
const handleMergeCustomColumn = (addState, tableList = []) => {
tableList.forEach(tableName => {
const { [`${tableName}ColumnConfig`]: columnConfig } = addState;
const config =
addState[`${tableName}Config`] || props[`${tableName}Config`];
if (columnConfig) {
const configNew = JSON.parse(JSON.stringify(config));
configNew.gdsconfigformslave.forEach(item => {
if (item.sName && item.bVisible && !item.sControlName) {
item.bVisible = false;
}
});
columnConfig.forEach(item => {
const iIndex = configNew.gdsconfigformslave.findIndex(
item1 => item1.sName && item1.sName === item.sName
);
if (iIndex > -1) {
configNew.gdsconfigformslave[iIndex].bVisible = item.bVisible;
configNew.gdsconfigformslave[iIndex].iOrder = item.iOrder;
item.showName &&
(configNew.gdsconfigformslave[iIndex].showName = item.showName);
} else {
configNew.gdsconfigformslave.push(item);
}
});
configNew.gdsconfigformslave = configNew.gdsconfigformslave.sort(
(a, b) => a.iOrder - b.iOrder
);
addState = {
...addState,
[`${tableName}Config`]: configNew,
[`${tableName}Column`]: commonFunc.getHeaderConfig(configNew)
};
}
});
return addState;
};
// 特殊情况下处理下页面布局(班组报工)
const handleGetFilterPageLayout = pageLayout => {
const bOne2Fore = JSON.stringify(pageLayout).includes("第一转到第四转");
const bOne2Six = JSON.stringify(pageLayout).includes("第一转到第六转");
if (
props.sModelsId !== "12710101117087404588200" &&
props.sModelsId !== "12710101117260270570210" &&
props.sModelsId !== "12710101117086786735350" &&
!bOne2Fore &&
!bOne2Six
)
return pageLayout;
const { sMachineId, iTeamType } = props.app.userinfo;
const [tableList, tabConfig] = pageLayout;
const tabConfigFilter = cloneDeep(tabConfig);
let tableListFilter = tableList;
// 复制第一转到第四转
let stepCopy = cloneDeep(
tabConfig?.[0].configList?.[0].children?.[1]?.configList?.[0]
);
if (bOne2Fore && stepCopy) {
try {
stepCopy.sTabName = "第一转";
tabConfigFilter[0].configList[0].children[1].configList[0] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第二转";
tabConfigFilter[0].configList[0].children[1].configList[1] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第三转";
tabConfigFilter[0].configList[0].children[1].configList[2] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第四转";
tabConfigFilter[0].configList[0].children[1].configList[3] = cloneDeep(
stepCopy
);
tabConfigFilter[0].configList[0].children[1].configList.forEach(
item => {
if (JSON.stringify(pageLayout).includes("第一转到第四转-丝印")) {
item.children[0].configList[0].sTabName = item.sTabName;
} else {
item.children[0].configList[0].sTabName += `_${item.sTabName}`;
item.children[1].configList[0].sTabName += `_${item.sTabName}`;
item.children[2].configList[0].sTabName = item.sTabName;
}
}
);
} catch (error) {
console.log("=====err", error);
}
return [tableListFilter, tabConfigFilter];
}
// 复制第一转到第六转
stepCopy = cloneDeep(
tabConfig?.[0].configList?.[0].children?.[1]?.configList?.[0]
);
if (bOne2Six) {
try {
stepCopy.sTabName = "第一转";
tabConfigFilter[0].configList[0].children[1].configList[0] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第二转";
tabConfigFilter[0].configList[0].children[1].configList[1] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第三转";
tabConfigFilter[0].configList[0].children[1].configList[2] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第四转";
tabConfigFilter[0].configList[0].children[1].configList[3] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第五转";
tabConfigFilter[0].configList[0].children[1].configList[4] = cloneDeep(
stepCopy
);
stepCopy.sTabName = "第六转";
tabConfigFilter[0].configList[0].children[1].configList[5] = cloneDeep(
stepCopy
);
tabConfigFilter[0].configList[0].children[1].configList.forEach(
item => {
item.children[0].configList[0].sTabName = item.sTabName;
}
);
} catch (error) {
console.log("=====err", error);
}
return [tableListFilter, tabConfigFilter];
}
// 工单信息非烫金时隐藏电化铝子集
if (props.sModelsId === "12710101117086786735350") {
const { currentSelectedMachineTaskDataRow = {} } = commonUtils.getAppData(
"globalData"
);
const { sProcessClassifyName = "" } = currentSelectedMachineTaskDataRow;
if (sProcessClassifyName.includes("烫金")) return pageLayout;
tableListFilter = tableList.filter(item => item !== "materials31");
try {
delete tabConfigFilter[3].configList[3];
} catch (error) {}
return [tableListFilter, tabConfigFilter];
}
if (
iTeamType === 2
// [
// "17183488470003431845359008405500",
// "127101011170917824480111",
// "127101011170917824480112",
// "127101011170917824480113",
// "127101011170917824480114"
// ].includes(sMachineId)
) {
// 包装一组
tableListFilter = tableList.filter(
item => !["table4", "table13", "table41", "table131"].includes(item)
);
try {
delete tabConfigFilter[0].configList[0].children[1].configList[2];
delete tabConfigFilter[0].configList[0].children[1].configList[1];
} catch (error) {}
} else if (
iTeamType === 1
// [
// // "17140458730005386447188915338000",
// "17140460550001912614399026018800",
// "17140461020006385813836342722000",
// "17140461340004361455002739094000"
// ].includes(sMachineId)
) {
// 人检一组
tableListFilter = tableList.filter(
item =>
!["table4", "table13", "table42", "table132", "tableS12"].includes(
item
)
);
try {
delete tabConfigFilter[0].configList[0].children[1].configList[3];
delete tabConfigFilter[0].configList[0].children[1].configList[1];
delete tabConfigFilter[0].configList[1].children[2].configList[7];
} catch (error) {}
} else {
tableListFilter = tableList.filter(
item =>
!["table41", "table131", "table42", "table132", "tableS12"].includes(
item
)
);
try {
delete tabConfigFilter[0].configList[0].children[1].configList[3];
delete tabConfigFilter[0].configList[0].children[1].configList[2];
delete tabConfigFilter[0].configList[1].children[2].configList[7];
} catch (error) {}
}
return [tableListFilter, tabConfigFilter];
};
const [refreshCount, setRefreshCount] = useState(0);
// 初始化事件
useEffect(
async () => {
if (commonUtils.isNotEmptyArr(formData)) {
let pageLayout = [];
let addState = {};
const { gdsconfigformslave } = formData[0];
const pageLayoutConfig = gdsconfigformslave.find(
item => item.sControlName === "pageLayout"
);
if (pageLayoutConfig) {
pageLayout = commonUtils.convertStrToObj(
pageLayoutConfig.sDefault,
[]
);
}
if (commonUtils.isNotEmptyArr(pageLayout)) {
// 特殊情况下处理下页面布局
pageLayout = handleGetFilterPageLayout(pageLayout);
const [tableList, tabConfig] = pageLayout;
const colunmData = handleGetColumnData(tableList, true);
const result = !noGetData
? await handleGetData(tableList, true, true)
: await handleGetData(
tableList.filter(
item =>
item === "workerOrderBatchMaterial" || item === "plateInfo"
),
true,
true
);
addState = {
...addState,
tableList,
tabConfig,
...colunmData,
...result,
firstTableName: tableList[0],
bFinish: props.bFinish ? props.bFinish + 1 : 1
};
// 读码时,点下料不需要选中,使用指令集 clearrowkey, 发现与这个是异步的,导致还是选中状态。
// addState["salveWydm1SelectedRowKeys"] = []; // 0806解决生成检验标示后选中状态消失
if (tableList[0] === "Knifetable") {
const globalData = commonUtils.getAppData("globalData");
const bFilter = [
{
bFilterCondition: "=",
bFilterName: "sProductId",
bFilterValue: globalData.currentWorkOrderInfo?.sProductId
}
];
addState["KnifetableFilter"] = bFilter;
addState.refreshTableList = ["Knifetable"];
}
// 如果有自定义列,合并自定义列
addState = {
...addState,
...handleMergeCustomColumn(addState, tableList)
};
props.onSaveState(addState);
}
}
},
[
formData.length,
refreshCount,
enabled,
noGetData,
JSON.stringify(sFilterConditions)
]
);
// 初始化后执行一次指令集
const [initLoading, setInitLoading] = useState(false);
useEffect(
() => {
if (!props.bFinish) return;
window.refreshTableList = undefined;
const { firstTableName } = props;
if (!firstTableName) return;
const tableConfig = ({} = props[`${firstTableName}Config`]);
const { sOnShowInstruct } = tableConfig;
if (sOnShowInstruct) {
setInitLoading(true);
window.instructSetLock = false;
props.onExecInstructSet({
btnConfig: { sInstruct: sOnShowInstruct, showName: "页面初始化" }
});
}
},
[props.bFinish]
);
useEffect(() => {
if (initLoading && !props.pageLoading) {
setInitLoading(false);
}
}, [props.pageLoading]);
// 监听表格选中数据变化,根据变化,刷新指定表格
const selectedDataGroup = useGetSelectedDataGroup(props);
const selectedDataGroupBak = useRef({});
useEffect(
() => {
if (commonUtils.isEmptyObject(selectedDataGroup)) return;
let refreshTableListNew = [];
Object.keys(selectedDataGroup).forEach(tableName => {
const item = selectedDataGroup[tableName];
const { rowData, list, refreshFlagId } = item;
const itemBak = selectedDataGroupBak.current[tableName] || {};
const {
rowData: rowDataBak = {},
refreshFlagId: refreshFlagIdBak
} = itemBak;
if (
rowData.sId !== rowDataBak.sId ||
rowData.sSlaveId !== rowDataBak.sSlaveId ||
refreshFlagId != refreshFlagIdBak
) {
// 只有数据变化了才刷新对应表格
refreshTableListNew = [...refreshTableListNew, ...list];
}
});
selectedDataGroupBak.current = selectedDataGroup;
if (refreshTableListNew.length) {
props.onSaveState({ refreshTableList: refreshTableListNew });
}
},
[JSON.stringify(selectedDataGroup)]
);
// 如果是copyto,默认为编辑状态
useEffect(
() => {
if (!props.bFinish) return;
if (commonUtils.isEmptyObject(copyTo)) return;
const { masterConfig, sModelsId } = props;
let masterDataCopyTo = {};
for (const key in copyTo) {
const tableData = copyTo[key];
if (tableData && !Array.isArray(tableData)) {
masterDataCopyTo = tableData;
}
}
const masterDataNew = {
...commonFunc.getDefaultData(masterConfig),
handleType: "add",
sId: commonUtils.createSid(),
sFormId: sModelsId,
...masterDataCopyTo
};
props.onSaveState({ masterData: masterDataNew, enabled: true });
},
[props.bFinish]
);
// 如果是表单类型,并且主表数据为空,默认为编辑状态
// useEffect(
// () => {
// const { masterData, masterConfig, sModelsId } = props;
// if (
// commonUtils.isNotEmptyObject(masterConfig) &&
// commonUtils.isEmptyObject(masterData)
// ) {
// const masterDataNew = {
// ...commonFunc.getDefaultData(masterConfig),
// handleType: "add",
// sId: commonUtils.createSid(),
// sFormId: sModelsId
// };
// props.onSaveState({ masterData: masterDataNew, enabled: true });
// }
// },
// [props.bFinish]
// );
// 获取表头数据
const handleGetColumnData = (tableList = [], isWait) => {
let addState = {};
for (let i = 0; i < tableList.length; i++) {
const tableName = tableList[i];
const config = formData.find(item => item.sGrd === tableName);
if (!config) continue;
const column = commonFunc.getHeaderConfig(config);
addState = {
...addState,
[`${tableName}Column`]: column,
[`${tableName}Config`]: config
};
}
if (isWait) {
return addState;
} else {
props.onSaveState(addState);
}
};
// 获取数据集
const handleGetData = async (tableList = [], isWait, bInit) => {
let addState = {};
for (let i = 0; i < tableList.length; i++) {
const tableName = tableList[i];
const config = formData.find(item => item.sGrd === tableName);
if (!config || tableName.includes("FirstlineSelected")) continue;
const conditonValues = props.onGetSqlConditionValues(config);
let { [`${tableName}Filter`]: bFilter } = props;
// 初始化时,加上搜索按钮上iTag为1的条件
if (!bFilter && bInit) {
const initSearchConfig = config.gdsconfigformslave.find(
item =>
item.bVisible &&
item.sControlName?.includes("BtnRight") &&
item.iTag === 1 &&
[
"近2天",
"近两天",
"近7天",
"近七天",
"近一月",
"近三月",
"近半年",
"近一年"
].includes(item.showName.trim())
);
if (initSearchConfig) {
const { showName, sActiveKey } = initSearchConfig;
const tomorrowDate = moment()
.add(1, "days")
.format("YYYY-MM-DD");
let oneMonthAgo;
switch (showName.trim()) {
case "近2天":
case "近两天":
oneMonthAgo = moment()
.subtract(2, "days")
.format("YYYY-MM-DD");
break;
case "近7天":
case "近七天":
oneMonthAgo = moment()
.subtract(7, "days")
.format("YYYY-MM-DD");
break;
case "近一月":
oneMonthAgo = moment()
.subtract(1, "months")
.format("YYYY-MM-DD");
break;
case "近三月":
oneMonthAgo = moment()
.subtract(3, "months")
.format("YYYY-MM-DD");
break;
case "近半年":
oneMonthAgo = moment()
.subtract(6, "months")
.format("YYYY-MM-DD");
break;
case "近一年":
oneMonthAgo = moment()
.subtract(12, "months")
.format("YYYY-MM-DD");
break;
default:
break;
}
const searchFieldList = config.gdsconfigformslave.filter(
item => item.bVisible && item.bFind
);
const searchField = searchFieldList[0] || {};
bFilter = [
{
bFilterCondition: "between",
bFilterName: sActiveKey || searchField.sName,
bFilterValue: `${oneMonthAgo},${tomorrowDate}`
}
];
addState[`${tableName}SelectedBtn`] = showName.trim();
addState[`${tableName}Filter`] = bFilter;
}
}
// 行车记录新增时间、白夜班条件
if (config.sId === "12710101117087404588590") {
// 判断当前时间是否小于上午8点,如果是,则默认为昨天
const now = moment();
const today8AM = moment()
.hour(8)
.minute(0)
.second(0)
.millisecond(0);
const isBefore8AM = now.isSameOrBefore(today8AM);
const {
runningTime = isBefore8AM
? now.subtract(1, "days").format("YYYY-MM-DD")
: now.format("YYYY-MM-DD"),
runningShift = props.app?.userinfo?.sShift.toString()
} = props;
conditonValues.tCreateTime = runningTime;
conditonValues.sShiftNew = runningShift;
}
//【班组报工特殊处理】历史日报查看详情如果班组报工没查到数据,用sSReserve1当历史日报的sId
if (tableName === "tableS0" && props.sSReserve1) {
conditonValues.sSReserve1 = props.sSReserve1;
}
const result =
(await props.onGetDataSet({
name: tableName,
configData: config,
condition: {
sSqlCondition: { ...conditonValues, ...sFilterConditions },
bFilter
},
isWait: true
})) || {};
props.setTempRef(result);
if (tableName?.includes("master")) {
const masterData = result[`${tableName}Data`];
result[`${tableName}Data`] = masterData?.[0] || {};
} else {
// 如果选中的数据不在返回的数据中,则清空选中数据
const { [`${tableName}Data`]: tableData = [] } = result;
const { [`${tableName}SelectedRowKeys`]: selectedRowKeys = [] } = props;
if (selectedRowKeys.length) {
const selectedRowKeysNew = selectedRowKeys.filter(item =>
tableData.some(rowData =>
[rowData.sId, rowData.sSlaveId].includes(item)
)
);
result[`${tableName}SelectedRowKeys`] = selectedRowKeysNew;
}
}
// 如果配置了默认选中第一行,则默认选中第一行,刷新数据集时配置NotFirstlineSelected则不刷新
let bNotFirstlineSelected =
tableList.findIndex(
item => item === `${tableName}NotFirstlineSelected`
) > -1;
if (!bNotFirstlineSelected) {
// 如果配置了默认选中第一行,则默认选中第一行
let bFirstlineSelected = config.gdsconfigformslave.find(
item => item.sControlName === "bFirstlineSelected" && item.bVisible
);
// 配置刷新数据时,配置 数据集名称+FirstlineSelected,默认选中首行数据。
if (!bFirstlineSelected) {
bFirstlineSelected =
tableList.findIndex(
item => item === `${tableName}FirstlineSelected`
) > -1;
}
if (bFirstlineSelected) {
if (commonUtils.isNotEmptyObject(result[`${tableName}Data`])) {
result[`${tableName}SelectedRowKeys`] = [
result[`${tableName}Data`][0].sId
];
result.triggerClickTableList = result.triggerClickTableList || [];
result.triggerClickTableList.push(tableName);
}
}
}
addState = { ...addState, ...result };
if (tableName === "tableS0" && props.sSReserve1) {
addState.sSReserve1 = undefined;
}
}
props.setTempRef({}, true);
if (isWait) {
return addState;
} else {
props.onSaveState(addState);
}
};
// 刷新页面
const handleRefresh = () => {
setRefreshCount(pre => pre + 1);
};
// 刷新指定表格
const { refreshTableList = [], clearRowKeyList = [] } = props;
useEffect(
async () => {
if (!refreshTableList.length) return;
if (refreshTableList.includes("*")) {
props.onSaveState({ refreshTableList: [] }, () => {
handleRefresh();
});
return;
}
const { refreshTableListCount = 0 } = props;
let addState = {
refreshTableList: [],
refreshTableListCount: refreshTableListCount + 1,
...(await handleGetData(refreshTableList, true))
};
// 清空选中行
if (clearRowKeyList.length) {
addState.clearRowKeyList = [];
clearRowKeyList.forEach(tableName => {
addState[`${tableName}SelectedRowKeys`] = [];
});
}
// 合并自定义列
addState = {
...addState,
...handleMergeCustomColumn(addState, refreshTableList)
};
//【班组报工特殊处理】历史日报查看详情如果班组报工没查到数据,用sSReserve1当历史日报的sId
if (
refreshTableList.length === 1 &&
refreshTableList[0] === "table0" &&
!addState.table0Data.length &&
props.sSReserve1
) {
addState.refreshTableList = ["tableS0"];
}
props.onSaveState(addState, nextProps => {
// 【特殊处理】行车记录修改时间后查询到空数据时,清空所有数据(历史日报tableS6除外)
const { runningStatusConditionFlag, table0Data = [] } = nextProps;
const addState = { runningStatusConditionFlag: undefined };
if (runningStatusConditionFlag && table0Data.length === 0) {
formData.forEach(item => {
const tableName = item.sGrd;
if (tableName && tableName !== "tableS6") {
addState[`${tableName}Data`] = [];
addState[`${tableName}SelectedRowKeys`] = [];
}
});
}
props.onSaveState(addState);
if (window.rowclickAfterFunc) {
window.rowclickAfterFunc(nextProps);
window.rowclickAfterFunc = null;
}
});
},
[refreshTableList.toString()]
);
// 通用过程执行后->刷新页面->执行剩余执行集
const { onDoInstructAfterProcedure } = props;
useEffect(
() => {
if (refreshTableList.length || !onDoInstructAfterProcedure) return;
props.onSaveState({ onDoInstructAfterProcedure: null }, () => {
setTimeout(() => {
onDoInstructAfterProcedure();
}, 200);
});
},
[refreshTableList]
);
// 默认选中第一行后触发点击事件
const { triggerClickTableList = [] } = props;
useEffect(
() => {
if (!triggerClickTableList.length) return;
triggerClickTableList.forEach(tablename => {
const { [`${tablename}SelectedRowKeys`]: selectedRowKeys } = props;
props.onTableSelectRowChange(tablename, selectedRowKeys);
});
props.onSaveState({
triggerClickTableList: []
});
},
[triggerClickTableList.length]
);
// 表格按钮事件
const handleTableBtnClick = params => {
props.onTableBtnClick({
...params,
onSuccess: () => {
handleRefresh();
}
});
};
// 更新机台状态
const handleUpdateProductionplan = async ({ item, iFlag }) => {
const { app } = props;
const { sId } = item?.record || {};
const { token } = app;
const url = `${
commonConfig.server_host
}oee/updateProductionplan/${sId}/${iFlag}`;
const dataReturn = (await commonServices.getService(token, url)).data;
if (dataReturn.code === 1) {
handleRefresh();
} else {
message.error(dataReturn.msg);
}
};
// 开工事件
const handleStartWork = async params => {
const { sModelsId, token, app } = props;
const { name, record, config, iFlag } = params;
const { sAssignField } = config;
const allTableData = {
[name]: record
};
let rowData = commonFunc.getDefaultData(config, allTableData); // 取默认值
rowData = {
...rowData,
...commonFunc.getAssignFieldValue(sAssignField, record, allTableData),
handleType: "add",
sId: commonUtils.createSid(),
sTeamId: app.sTeamNameSId,
sMachineId: app.sMachineNameSId,
sParentId: record.sId,
tCreateDate: new Date()
};
const valuesNew = {};
valuesNew.data = [];
valuesNew.data.push(
commonBusiness.mergeData(name, "plc_machinedata", [rowData], [])
);
if ((iFlag || Object.is(iFlag, 0)) && valuesNew.data[0]) {
valuesNew.data[0].iFlag = iFlag;
}
const BtnSave = commonFunc.showMessage(
app.commonConst,
"BtnSave"
); /* 保存 */
params.optName = BtnSave;
params.sClientType = "1";
const returnData = await commonBusiness.saveData({
token,
value: valuesNew,
sModelsId,
bMachineTask: true
});
return returnData;
};
// 查看合版信息
const handleViewChoose = (name, sName, record) => {
const { sId } = record;
const { enabled, slaveData } = props;
let { packData } = props;
const handlePackDataAdd = (item, index, sControlId, handleType) => {
const tableDataRow = {};
if (handleType === "add") {
tableDataRow.sId = commonUtils.createSid();
tableDataRow.handleType = "add";
tableDataRow.sSlaveId = item.sId;
tableDataRow.iOrder = item.iOrder;
}
tableDataRow.sParentId = item.sParentId;
if (commonUtils.isNotEmptyObject(sControlId)) {
tableDataRow.sControlId = sControlId;
}
tableDataRow.sProductId = item.sProductId; /* 产品id */
tableDataRow.sCustomerId = item.sCustomerId; /* 客户id */
tableDataRow.sCustomerName = item.sCustomerName; /* 客户名称 */
tableDataRow.sProductName = item.sProductName; /* 产品名称 */
tableDataRow.sProductNo = item.sProductNo; /* 产品编号 */
/* 主表配置bProductQtyAdd 则代表产品数量不叠加备货数 赠送数 */
let bProductQtySelf = false;
if (
commonUtils.isNotEmptyObject(props.masterConfig) &&
commonUtils.isNotEmptyArr(props.masterConfig.gdsconfigformslave)
) {
const iIndex = props.masterConfig.gdsconfigformslave.findIndex(
item => item.sControlName === "bProductQtySelf"
);
if (iIndex > -1) {
bProductQtySelf = true;
}
}
if (bProductQtySelf) {
tableDataRow.dProductQty = commonUtils.isNull(item.dProductQty, 0);
} else {
tableDataRow.dProductQty =
commonUtils.isNull(item.dProductQty, 0) +
commonUtils.isNull(item.dGiveQty, 0) +
commonUtils.isNull(item.dStockupQty, 0); /* 生产数量 */
}
tableDataRow.sProductUnit = item.sProductUnit; /* 单位 */
tableDataRow.sProductStyle = item.sProductStyle; /* 产品规格 */
return tableDataRow;
};
if (name === "control" && sName === "sCombinedMemo") {
const packSelectedRowKeys = [];
/* 合并从表相同客户、产品数据 */
const slaveDataMerge = [];
slaveData.forEach(item => {
const iIndex = slaveDataMerge.findIndex(
child =>
child.sCustomerId === item.sCustomerId &&
child.sProductId === item.sProductId
);
if (iIndex === -1) {
const itemNew = JSON.parse(JSON.stringify(item));
slaveDataMerge.push(itemNew);
} else if (iIndex > -1) {
const dProductQtyNew =
commonUtils.isNull(slaveDataMerge[iIndex].dProductQty, 0) +
commonUtils.isNull(item.dProductQty, 0); /* 生产数量叠加 */
const dGiveQtyNew =
commonUtils.isNull(slaveDataMerge[iIndex].dGiveQty, 0) +
commonUtils.isNull(item.dGiveQty, 0); /* 赠送数量叠加 */
const dStockupQtyNew =
commonUtils.isNull(slaveDataMerge[iIndex].dStockupQty, 0) +
commonUtils.isNull(item.dStockupQty, 0); /* 备货数量叠加 */
slaveDataMerge[iIndex].dProductQty = dProductQtyNew;
slaveDataMerge[iIndex].dGiveQty = dGiveQtyNew;
slaveDataMerge[iIndex].dStockupQty = dStockupQtyNew;
}
});
/* 合并合版表相同客户、产品数据 */
const packDataMerge = [];
packData.forEach(item => {
const iIndex = packDataMerge.findIndex(
child =>
commonUtils.isNotEmptyObject(item.sCombinePartsName) &&
child.sCombinePartsName === item.sCombinePartsName &&
commonUtils.isNotEmptyObject(item.sProductId) &&
child.sProductId === item.sProductId
);
if (iIndex === -1) {
const itemNew = JSON.parse(JSON.stringify(item));
packDataMerge.push(itemNew);
} else if (iIndex > -1) {
const dProductQtyNew =
commonUtils.isNull(packDataMerge[iIndex].dProductQty, 0) +
commonUtils.isNull(item.dProductQty, 0); /* 生产数量叠加 */
const dGiveQtyNew =
commonUtils.isNull(packDataMerge[iIndex].dGiveQty, 0) +
commonUtils.isNull(item.dGiveQty, 0); /* 赠送数量叠加 */
const dStockupQtyNew =
commonUtils.isNull(packDataMerge[iIndex].dStockupQty, 0) +
commonUtils.isNull(item.dStockupQty, 0); /* 备货数量叠加 */
packDataMerge[iIndex].dProductQty = dProductQtyNew;
packDataMerge[iIndex].dGiveQty = dGiveQtyNew;
packDataMerge[iIndex].dStockupQty = dStockupQtyNew;
}
});
if (commonUtils.isNotEmptyArr(packDataMerge)) {
packData = packDataMerge;
}
/* 填充合版信息数值 如果packData为空,则填充从表所有数据 */
if (commonUtils.isNotEmptyArr(slaveDataMerge)) {
slaveDataMerge.forEach((item, index) => {
const packDataFilter = packData.filter(
itemNew =>
itemNew.sSlaveId === item.sId && itemNew.sControlId === sId
);
if (commonUtils.isNotEmptyArr(packDataFilter)) {
packDataFilter.forEach(itemPack => {
const iIndex = packData.findIndex(
child => child.sId === itemPack.sId
);
if (iIndex > -1) {
const packRowAdd = handlePackDataAdd(item);
if (commonUtils.isNotEmptyObject(packRowAdd)) {
packData[iIndex] = { ...packData[iIndex], ...packRowAdd };
if (
itemPack.dCombineQty !== undefined &&
itemPack.dCombineQty !== null &&
itemPack.dCombineQty !== 0
) {
packSelectedRowKeys.push(itemPack.sId);
}
}
}
});
} else {
const tableDataRow = this.handlePackDataAdd(
item,
index,
sId,
"add"
);
if (commonUtils.isNotEmptyObject(tableDataRow)) {
packData.push(tableDataRow);
}
}
});
}
props.onSaveState({
viewChooseVisible: true,
packSelectedRowKeys,
packData
});
} else if (name === "process" && sName === "sParams") {
props.onSaveState({
sWorkParamsModalVisible: true
});
}
};
const { sModelsId } = props;
let name;
if (sModelsId === "12710101117192328814280") {
name = "rwtable0";
} else if (sModelsId === "17086709360008036458897337633000") {
name = "table0";
}
useEffect(
() => {
if (
!name ||
!Array.isArray(props[`${name}Data`]) ||
!props[`${name}Data`]?.length
) {
return;
}
const globalData = commonUtils.convertStrToObj(
localStorage.xlybusinessglobalData
);
const { currentSelectedMachineTaskDataRow = {} } = globalData;
// 当前选中行sId,默认取缓存数据
let currentSelectedRowKey = props[`${name}SelectedRowKeys`]?.[0];
let rowValue = {};
if (currentSelectedRowKey) {
rowValue = props[`${name}Data`]?.find(
item => item && item.sId === currentSelectedRowKey
);
} else {
rowValue = props[`${name}Data`]?.find(
item => item && item.sId === currentSelectedMachineTaskDataRow?.sId
);
if (
rowValue &&
sModelsId === currentSelectedMachineTaskDataRow?.sModelsId
) {
currentSelectedRowKey = currentSelectedMachineTaskDataRow.sId;
} else {
currentSelectedRowKey = props[`${name}Data`][0]?.sId;
rowValue = props[`${name}Data`][0];
}
if (currentSelectedRowKey) {
props.onSaveState({
[`${name}SelectedRowKeys`]: [currentSelectedRowKey]
});
}
}
// 将当前选中行保存到全局
props.dispatch({
type: "app/saveGlobalData",
payload: {
currentSelectedMachineTaskDataRow: { ...(rowValue || {}), sModelsId }
}
});
},
[props[`${name}Data`], props[`${name}SelectedRowKeys`]]
);
return {
...props,
initLoading,
onGetColumnData: handleGetColumnData,
onRefresh: handleRefresh, // 刷新页面
onTableBtnClick: handleTableBtnClick, // 表格按钮事件
onSendApiRow: props.onSendApiRow, // 表格按钮事件
handleUpdateProductionplan,
handleStartWork,
onViewChoose: handleViewChoose
};
};
// 计算commonDiv高度
const useComputedCommonDivHeight = props => {
let returnHeight = "calc(100% - 10px)";
const { sTabName, showType, sName, bHideTitle } = props;
const { [`${sName}Config`]: config = {} } = props;
// 是否有按钮栏
const bHasOperationBar =
sName !== "palletBatchMaterial" &&
config.gdsconfigformslave?.some(
item =>
item.bVisible &&
(item.sControlName?.includes("BtnRight") ||
item.sControlName?.includes("BtnLeft") ||
item.bFind)
);
if (bHasOperationBar) {
returnHeight = `calc(${returnHeight} - 40px)`;
}
// 如果有标题
if (sTabName && !bHideTitle) {
returnHeight = `calc(${returnHeight} - 40px)`;
}
// 如果是报工任务
if (
config.sId === "12710101117087404588590" ||
config.sId === "12710101117260270570600"
) {
returnHeight = `calc(${returnHeight} - 40px)`;
}
// 下料界面板材信息
if(sTabName=='版材信息'){
returnHeight = `calc(100% - 10px)`;
}
return returnHeight;
};
// 获取跟sSqlCondition有关的选中的数据
const useGetSelectedDataGroup = props => {
// 获取页面加载的所有表名
const { tableList = [] } = props;
// 获取所有表格配置中有sSqlCondition的配置
const [sSqlConditionGroup, setSSqlConditionGroup] = useState({});
useEffect(
() => {
if (!tableList.length) return;
const temp = tableList
.map(tableName => {
const { [`${tableName}Config`]: config = {} } = props;
const { sSqlCondition } = config;
return sSqlCondition
? {
tableName,
sSqlCondition
}
: null;
})
.filter(item => item)
.reduce((result, item) => {
const { tableName, sSqlCondition } = item;
const sSqlConditionList = sSqlCondition.split(",");
sSqlConditionList.forEach(condition => {
const [tbName] = condition.split(".");
if (tableList.includes(tbName)) {
if (!result[tbName]) {
result[tbName] = [];
}
if (!result[tbName].includes(tableName)) {
result[tbName].push(tableName);
}
}
});
return result;
}, {});
setSSqlConditionGroup(temp);
},
[tableList.length]
);
const selectedDataGroup = Object.keys(sSqlConditionGroup).reduce(
(result, tableName) => {
const {
[`${tableName}Data`]: tableData = [],
[`${tableName}SelectedRowKeys`]: selectedRowKeys = []
} = props;
if (selectedRowKeys.length) {
const rowData = tableData.find(
item =>
selectedRowKeys.includes(item.sId) ||
selectedRowKeys.includes(item.sSlaveId)
);
if (rowData) {
result[tableName] = { rowData, list: sSqlConditionGroup[tableName] };
if (props.selectedDataGroupFlagList?.[tableName]) {
result[tableName].refreshFlagId =
props.selectedDataGroupFlagList[tableName];
}
}
}
return result;
},
{}
);
return selectedDataGroup;
};
// 主入口
const CommonModel = baseProps => {
const props = baseProps.costomModal
? useCommonModelEvent(baseProps)
: useCommonModelEvent(useCommonBase(baseProps));
const { bFinish } = props;
if (!bFinish) return "";
const { tabConfig = [] } = props;
if (props.sModelsId === "12710101117191104477380") {
return