import React, { useEffect } from "react";
import moment from "moment";
import { cloneDeep } from "lodash";
import { Button, Modal, message } from "antd";
import { UnorderedListOutlined, ArrowLeftOutlined } from "@ant-design/icons";
import useCommonBase from "@/components/Common/CommonHooks/useCommonBase";
import * as commonConfig from "@/utils/config";
import * as commonServices from "@/services/services";
import * as commonUtils from "@/utils/utils";
import * as commonFunc from "@/components/Common/commonFunc";
import * as commonBusiness from "@/components/Common/commonBusiness";
import StaticEditTable from "@/components/Common/CommonTable";
import CommonViewTable from "@/components/Common/CommonViewTable";
import SetCountModalComponent from "../setCountModalComponent";
import styles from "./index.less";
const useVerifyScrapBillEvent = props => {
const { formData = [], billType, copyTo = {} } = props;
useEffect(
async () => {
if (!formData.length) return;
const [masterConfig, slaveConfig] = formData;
const slaveColumn = commonFunc.getHeaderConfig(slaveConfig);
let addState = {
masterConfig,
slaveConfig,
slaveColumn,
slaveConfigBak: cloneDeep(slaveConfig),
slaveColumnBak: cloneDeep(slaveColumn),
bFinish: true
};
if (billType === "add") {
addState.enabled = true;
addState.masterData = {
sId: commonUtils.createSid(),
handleType: "add",
sFormId: props.sModelsId,
maxBillNo: "sBillNo",
tStartDate: moment().format("YYYY-MM-DD HH:mm:ss")
};
addState.slaveData = [
{
sParentId: addState.masterData.sId,
sId: commonUtils.createSid(),
handleType: "add"
}
];
} else if (billType === "view") {
addState = {
...addState,
...(await hanldeGetData(copyTo.masterData.sId, true)),
preMasterId: copyTo.masterData.sId
};
}
props.onSaveState(addState);
},
[formData.length]
);
const hanldeGetData = async (sId, isWait) => {
const [masterConfig, slaveConfig] = formData;
const result = {
...((await props.onGetDataSet({
name: "master",
configData: masterConfig,
condition: {
sSqlCondition: { sId }
},
isWait: true
})) || {}),
...((await props.onGetDataSet({
name: "slave",
configData: slaveConfig,
condition: {
sSqlCondition: { sParentId: sId }
},
isWait: true
})) || {})
};
result.masterData = result.masterData[0];
if (isWait) {
return result;
} else {
props.onSaveState(result);
}
};
// 监听主表sWorkOrderNo变化 => 根据返回的customConfig修改从表表头
const { enabled, masterData = {} } = props;
useEffect(
() => {
if (!masterData.sWorkOrderNo) return;
const { slaveConfig = {}, slaveData = [] } = props;
const { customConfig: customConfigStr = "[]" } = masterData;
const customConfig = commonUtils.convertStrToObj(customConfigStr, []);
const slaveConfigNew = cloneDeep(slaveConfig);
slaveConfigNew.gdsconfigformslave = customConfig.sort(
(a, b) => a.iOrder - b.iOrder
);
const slaveColumnNew = commonFunc.getHeaderConfig(slaveConfigNew);
let addState = {
slaveConfig: slaveConfigNew,
slaveColumn: slaveColumnNew
};
if (enabled) {
addState = {
...addState,
slaveDelData: slaveData
.filter(item => item.handleType !== "add")
.map(item => ({ ...item, handleType: "del" })),
slaveData: [
{
sParentId: masterData.sId,
sId: commonUtils.createSid(),
handleType: "add"
}
]
};
}
props.onSaveState(addState);
},
[masterData.sWorkOrderNo]
);
// 自定义表格内容处理
const handleCostomColums = columns => {
const { slaveConfig } = props;
const { gdsconfigformslave } = slaveConfig;
const showConfig = gdsconfigformslave.filter(
item =>
item.bVisible &&
item.sName &&
item.sDropDownType === "popup" &&
item.sName !== "sTrayNo"
);
const sNameList = showConfig.map(item => item.sName);
const costomColumns = columns.filter(item =>
sNameList.includes(item.dataIndex)
);
costomColumns.forEach(column => {
const config = showConfig.find(item => item.sName === column.dataIndex);
column.render = (value, record, index) => {
const valueJson = commonUtils.convertStrToObj(value, {});
return (
{[""].map(() => {
if (!valueJson.detail) return "";
if (valueJson.bTree) {
return valueJson.detail.map(item => {
const { node = {}, data = [] } = item;
const { showName } = node;
const content = data
.map(i => `${i.sName}:${i.dWasteQty}`)
.join(";");
return (
{`${showName}(${content})`}
);
});
} else {
return valueJson.detail.map(item => (
{`${item.sName}:${
item.dWasteQty
}`}
));
}
})}
);
};
});
};
const handleCancel = () => {
props.onSaveState({ setCountModalbVisible: false });
};
const handleOk = result => {
const { currentRowData, currentColumn, slaveData = [] } = props;
const iIndex = slaveData.findIndex(item => item.sId === currentRowData.sId);
slaveData[iIndex][currentColumn] = JSON.stringify(result);
slaveData[iIndex].handleType = slaveData[iIndex].handleType || "update";
props.onSaveState({ slaveData, setCountModalbVisible: false });
};
// 保存
const handleBtnSave = async cb => {
const {
token,
sModelsId,
masterConfig,
masterData,
slaveConfig,
slaveData,
slaveDelData
} = props;
if (!commonBusiness.validateMaster(masterConfig, masterData, props)) return;
if (!commonBusiness.validateTable(slaveConfig, slaveData, props)) return;
const data = [];
data.push(
commonBusiness.mergeData("master", masterConfig.sTbName, [masterData])
);
data.push(
commonBusiness.mergeData(
"slave",
slaveConfig.sTbName,
slaveData,
slaveDelData
)
);
const params = { data, sClientType: "1", sSysLogSrcId: masterData.sId };
const returnData = await commonBusiness.saveData({
token,
value: params,
sModelsId
});
if (returnData.code === 1) {
if (cb && false) {
cb();
return;
}
const bContinue = cb === 'masterClick' ? false : true;
hanldeGetData(masterData.sId);
props.onSaveState({
enabled: bContinue,
billType: "view",
preMasterId: masterData.sId
});
} else {
props.getServiceError(returnData);
}
};
// 取消
const handleBtnCancel = () => {
const { preMasterId } = props;
if (preMasterId) {
hanldeGetData(preMasterId);
props.onSaveState({ enabled: false });
} else {
props.onBackList();
}
};
// 删除
const handleBtnDel = () => {
const handleOkDel = async () => {
const {
// app,
sModelsId,
token,
masterConfig,
masterData,
slaveConfig
} = props;
// const { userinfo, systemData } = app;
// const { sMakePerson } = masterData; /* 本单据制单人 */
// const { sUserName, sType } = userinfo; /* 登录用户 */
// const iIndex = systemData.findIndex(
// item => item.sName === "CkxModifyBillNoMakePerson"
// );
// if (iIndex > -1) {
// const sValue = systemData[iIndex].sValue;
// if (sValue === "0") {
// /* 系统未启用非制单人修改单据,普通用户非制单人不可以修改制单人的单据 */
// if (sType !== "sysadmin" && sUserName !== sMakePerson) {
// message.error(
// commonFunc.showMessage(app.commonConst, "NoDelByNoMakePerson")
// );
// return;
// }
// }
// }
const value = {
sClientType: "1",
data: {
sMasterTable: masterConfig.sTbName,
sId: [masterData.sId]
}
};
const sSlaveTable = [];
sSlaveTable.push({
tableName: slaveConfig.sTbName,
relationName: "sParentId"
});
value.sSlaveTable = sSlaveTable;
const url = `${
commonConfig.server_host
}business/delMasSlaBusinessData?sModelsId=${sModelsId}`;
/* 接收返回值 */
const { data } = await commonServices.postValueService(token, value, url);
if (data.code === 1) {
/* 数据删除成功 */
message.info("删除成功");
props.onBackList();
} else {
/* 失败 */
props.getServiceError(data);
}
};
Modal.confirm({
title: "温馨提示:",
content: 确认删除?
,
okText: "确认",
cancelText: "取消",
onOk() {
handleOkDel();
}
});
};
// 新增
const handleBtnAdd = () => {
const sId = commonUtils.createSid();
const addState = {
billType: "add",
enabled: true,
masterData: {
sId,
handleType: "add",
sFormId: props.sModelsId,
maxBillNo: "sBillNo"
},
slaveConfig: props.slaveConfigBak,
slaveColumn: props.slaveColumnBak,
slaveData: [
{
sParentId: sId,
sId: commonUtils.createSid(),
handleType: "add"
}
],
slaveDelData: [],
slaveSelectRowKeys: []
};
props.onSaveState(addState);
};
// 提交
const handleBtnSubmit = () => {
const { masterConfig, masterData } = props;
const btnConfig = masterConfig.gdsconfigformslave.find(
item => item.sControlName === "BtnSubmit"
);
if (!btnConfig) {
message.info("请先添加按钮配置!");
return;
}
props.onProcedureCall({
btnConfig,
onSuccess: () => {
hanldeGetData(masterData.sId);
}
});
};
// 取消提交
const handleBtnSubmitCancel = () => {
const { masterConfig, masterData } = props;
const btnConfig = masterConfig.gdsconfigformslave.find(
item => item.sControlName === "BtnSubmitCancel"
);
if (!btnConfig) {
message.info("请先添加按钮配置!");
return;
}
props.onProcedureCall({
btnConfig,
onSuccess: () => {
hanldeGetData(masterData.sId);
}
});
};
return {
...props,
onCostomColums: handleCostomColums,
onCancel: handleCancel,
onOk: handleOk,
onBtnSave: handleBtnSave,
onBtnCancel: handleBtnCancel,
onBtnDel: handleBtnDel,
onBtnAdd: handleBtnAdd,
onBtnSubmit: handleBtnSubmit,
onBtnSubmitCancel: handleBtnSubmitCancel
};
};
const VerifyScrapBill = baseProps => {
const sModelsId =
location.pathname.split("/")[8] || "12710101117056272342380";
const props = useVerifyScrapBillEvent(
useCommonBase({ ...baseProps, sModelsId })
);
const { bFinish } = props;
if (!bFinish) return "";
const {
enabled,
billType,
setCountModalbVisible,
sModalActiveId,
masterData = {},
currentRowData = {},
currentColumn,
currentProcessParentId
} = props;
const bCheckModel = sModelsId !== "12710101117056272342380";
const { bSubmit, bCheck } = masterData;
const bStatus = bCheckModel ? bCheck : bSubmit;
const { sEmployeeName } = currentRowData;
const employeeDataArr = commonUtils.convertStrToObj(sEmployeeName, []);
const employeeData =
employeeDataArr.find(item => item.sName === currentColumn) || {};
const modalProps = {
app: props.app,
enabled,
bVisible: setCountModalbVisible,
sModelsId: sModalActiveId,
onOk: props.onOk,
onCancel: props.onCancel,
employeeData,
sValue: currentRowData[currentColumn],
fixedConditonValues: {
sWorkOrderId: masterData.sWorkOrderId,
sBoardNo: currentRowData.sBoardNo,
sProcessParentId: employeeData.sProcessParentId,
sWorkOrderProcessTbId: employeeData.sWorkOrderProcessTbId,
sProcessParentId: currentProcessParentId
}
};
return (
检验废登记表
}
onClick={() => {
if (enabled) {
Modal.confirm({
title: "温馨提示:",
content: "单据未保存,是否保存后返回?",
okText: "确认",
cancelText: "取消",
onOk() {
props.onBtnSave(() => {
props.onBackList();
});
},
onCancel() {
props.onBackList();
}
});
} else {
props.onBackList();
}
}}
>
返回
}
onClick={props.onBackList}
>
列表
{/*
*/}
{/*
*/}
{modalProps.bVisible ?
: ""}
);
};
// 表单
const FormComponent = props => {
const { masterConfig, masterData = {} } = props;
const viewConfigs = masterConfig.gdsconfigformslave.filter(
item =>
item.sName &&
item.bVisible &&
item.sControlName.indexOf("Btn") === -1 &&
item.sControlName.indexOf("_") === -1
);
const viewProps = {
...props,
viewConfigs,
tableConfig: masterConfig,
iColValueView: 24,
viewRow: masterData,
tableName: "master"
};
return ;
};
// 表格
const TableComponent = props => {
const baseProps = commonBusiness.getTableTypes("slave", {
...props,
noStorageColumn: true
});
const tableProps = {
...baseProps,
onCostomColums: props.onCostomColums,
tableProps: {
onChange: () => {}
},
bAddFirst: true,
onMesTableLineDel: (...args) => {
Modal.confirm({
title: "温馨提示:",
content: 确认删除行?
,
okText: "确认",
cancelText: "取消",
onOk() {
props.onMesTableLineDel(...args);
}
});
},
onMesTableLineSave: () => {
props.onBtnSave(() => {});
},
fixedHeight: "calc(100% - 50px)"
};
return ;
};
export default VerifyScrapBill;