import React, { useState, useRef, useReducer } from "react";
import { Button, Tooltip, Row, Divider, Drawer, Form, message } from "antd";
import AutoTable from "@/components/Tableform";
import getPrem from "@/utils/getPrem"; //权限判断fn
import { useRequest } from "umi";
import defaultFields from "./fields";
import { doFetch } from "@/utils/doFetch";
import DrawInitForm from "@/components/DrawInitForm";
import Details from "@/components/Details";
import { materielDetail } from "@/utils/detailTotalCard";
import InitForm from "@/components/InitForm";
import moment from "moment";
import Coltext from "@/components/Coltext";
import RenderItemType from "@/components/RenderItemType";
import TreeRender from '@/components/TreeRender'
import { set } from "lodash";
import { useEffect } from "react";
const initState = {
vs: false,
fields: {},
iftype: {},
curitem: {},
detail: {
dataSource: {},
totalCard: [],
},
visible: false,
specificFileds: {},
commonFields: {},
defaultCommonFields: [],
},
otherBasic = {
materieCode: "物料编号",
materieName: "物料名称",
materieTypeName: "物料类型",
productionUnitName: "生产单位(主)",
processLineName: "工艺路线",
};
function reducer(state, action) {
let { type } = action,
newState = {};
switch (type) {
case "add":
newState = {
...state,
vs: true,
iftype: {
title: "新增物料",
val: type,
},
fields: { ...action.fields },
commonFields: action.commonFields,
specificFileds: action.specificFileds,
};
break;
case "edit":
newState = {
...state,
vs: true,
iftype: {
title: "编辑物料",
val: type,
},
fields: { ...action.fields },
curitem: action.curitem,
commonFields: action.commonFields,
specificFileds: action.specificFileds,
defaultCommonFields: action.defaultCommonFields,
};
break;
case "bom":
newState = {
...state,
vs: true,
iftype: {
title: "编辑物料BOM",
val: type,
},
fields: { ...action.fields },
curitem: action.curitem,
markKey: action.markKey,
};
break;
case "see":
newState = {
...state,
detail: {
dataSource: action.dataSource,
totalCard: action.totalCard,
},
visible: true,
};
break;
case "changeSpecificFileds":
newState = {
...state,
specificFileds: action.specificFileds,
};
break;
case "changeFields":
newState = {
...state,
fields: action.fields,
};
break;
case "changeCommonFields":
newState = {
...state,
commonFields: action.commonFields,
};
break;
case "changeDefaultCommonFields":
newState = {
...state,
defaultCommonFields: action.defaultCommonFields,
};
break;
case "close":
newState = {
vs: false,
fields: {},
iftype: {},
curitem: {},
detail: {
dataSource: {},
totalCard: [],
},
visible: false,
specificFileds: {},
};
break;
}
return newState;
}
const Materiel = (props) => {
let actionRef = useRef(),
ChildRef = null,
[formRef] = Form.useForm(),
[formRefs] = Form.useForm();
const [materieTypeId, setmaterieTypeId] = useState();
const [defaultSpecificFileds, setdefaultSpecificFileds] = useState();
function reload() {
actionRef?.current?.reload();
ChildRef?.onRefresh();
}
const { run, loading } = useRequest(doFetch, {
manual: true,
formatResult: (res) => res,
onSuccess: (result, params) => {
if (result.code == "0000") {
reload();
dispatch({ type: "close" });
}
},
}),
[state, dispatch] = useReducer(reducer, initState),
{
vs,
fields,
iftype,
curitem,
detail,
visible,
specificFileds,
commonFields,
defaultCommonFields,
markKey,
} = state,
columns = [
{
title: "物料编号",
dataIndex: "materieCode",
key: "materieCode",
},
{
title: "物料名称",
dataIndex: "materieName",
key: "materieName",
render: (_, row) => {
return (
{
doFetch({
url: "/ngic-workmanship/pmMaterie/queryDetailById",
params: { id: row.id },
}).then((res) => {
if (res.code == "0000") {
let dataSource = res?.data?.data ?? {},
specials = res?.data?.data?.materieCharList ?? [];
let newData = formatFieds(specials, "special")?.data;
let newSpecialData = newData.map((it) => {
dataSource[it.fieldsKey] = it.fieldRealValue;
return {
title: it.fieldName,
key: it.fieldsKey,
};
});
let itemCol = [
{
cardTitle: "特殊属性",
itemData: newSpecialData,
},
];
let totalCard = materielDetail.concat(itemCol);
dispatch({ type: "see", dataSource, totalCard });
}
});
}}
>
{row.materieName}
);
},
},
{
title: "物料类型",
dataIndex: "materieTypeName",
key: "materieTypeName",
search: false
},
{
title: "物料管控",
dataIndex: "materieControlName",
key: "materieControlName",
options: {
database: () => doFetch({ url: "/ngic-base-business/sysDic/queryMaterieControlSelect" }),
params: {}
},
valueType: "select",
formItemProps: {
name: "materieControl",
},
},
{
title: "工艺线路",
dataIndex: "processLineName",
key: "processLineName",
search: false,
},
{
title: "保质期",
dataIndex: "qualityGuaranteePeriod",
key: "qualityGuaranteePeriod",
search: false,
render: (text, row) => {
return row.qualityGuaranteePeriod + " " + row.qualityGuaranteePeriodUnitName
}
},
{
title: "最大库存",
dataIndex: "inventoryMax",
key: "inventoryMax",
search: false,
},
{
title: "最小库存",
dataIndex: "inventoryMin",
key: "inventoryMin",
search: false,
},
{
title: "库存单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
options: {
database: () => doFetch({ url: "/ngic-base-business/sysDic/queryMaterieUnitSelect" }),
params: {}
},
valueType: "select",
formItemProps: {
name: "productionUnit",
},
},
{
title: "操作",
dataIndex: "option_dataindex",
key: "option_dataindex",
valueType: "option",
width: 275,
render: (text, row, _, action) => extraAction(text, row, _, action),
},
];
useEffect(() => {
doFetch({ url: "/ngic-workmanship/pmMaterieChar/queryCommonList", params: {} }).then(res => {
setdefaultSpecificFileds(res?.data?.dataList)
})
}, [])
function extraAction(text, record, _, action) {
return [
getPrem("sysDepartment_save", action, "修改", () => {
doFetch({
url: "/ngic-workmanship/pmMaterie/queryUpdateById",
params: { id: record.id },
}).then((res) => {
if (res.code == "0000") {
let data = res?.data?.data ?? {};
let newArr =
data?.materieProductUnitList?.map((it) => {
return {
productionUnit: it.productionUnit,
productionUnitType: it.productionUnitType,
id: it.id,
};
}) ?? [];
for (let i in defaultFields) {
defaultFields[i].value = data[i];
if (i == "unitList") {
defaultFields[i].value = [
{
id: moment().valueOf(),
productionUnit: data?.productionUnit,
productionUnitType: data?.productionUnitType,
},
...newArr,
];
}
}
let all = async () => {
let common = await doFetch({
url: "/ngic-workmanship/pmMaterieChar/queryCommonList",
params: { id: record.id },
});
return {
commonData: common?.data?.dataList,
};
};
all().then((res) => {
let commonDataFields = formatFieds(
res?.commonData,
"common"
)?.obj,
newCommonData = formatFieds(res?.commonData, "common")?.data;
dispatch({
type: "edit",
fields: defaultFields,
curitem: record,
commonFields: commonDataFields,
specificFileds: { ...commonDataFields },
defaultCommonFields: newCommonData,
});
setdefaultSpecificFileds([...newCommonData])
});
}
});
}),
getPrem("sysDepartment_deleteById", action, "删除", null, {
title: "确认删除该物料?",
onConfirm: () => {
run({
url: "/ngic-workmanship/pmMaterie/deleteById",
params: { id: record.id },
});
},
}),
];
}
let saveData = () => {
//新增&修改
let difrid = iftype.val != "add" ? { id: curitem.id } : {},
params,
url;
if (iftype.val != "bom") {
formRef
.validateFields()
.then((firstValues) => {
formRefs
.validateFields()
.then((secondFields) => {
let secondFieldsKeys = Object.keys(secondFields);
let materieCharList = defaultSpecificFileds.map((it) => {
if (secondFieldsKeys.indexOf(it.fieldsKey) != -1) {
it.fieldRealValue = secondFields[it.fieldsKey];
}
const el = {
fieldType: it.fieldType,
fieldTypeName: it.fieldTypeName,
fieldCondName: it.fieldCondName,
fieldCondKey: it.fieldCondKey,
optCondName: it.optCondName,
optCondKey: it.optCondKey,
fieldId: it.fieldId,
fieldName: it.fieldName,
fieldChar: it.fieldChar,
fieldCharName: it.fieldCharName,
fieldCharValue: it.fieldCharValue,
fieldRealValue: it.fieldRealValue,
valueList: it.valueList,
};
return el;
});
let materieProductUnitList = firstValues.materieProductUnitList.map(it => {
return {
productionUnit: it.productionUnit,
conversionRate: it.conversionRate
}
})
params = {
...firstValues,
materieCharList,
...difrid,
materieProductUnitList,
};
url = "/ngic-workmanship/pmMaterie/save";
run({ url, params });
})
.catch((error) => { });
})
.catch((error) => { });
} else {
url = "/ngic-workmanship/pmMaterie/saveMaterieBom";
let firstValues = formRef?.getFieldsValue();
let materieBomList = firstValues?.materieBomList?.map((it, i) => {
return {
materieId: it.id,
materieName: it.materieName,
materieCode: it.materieCode,
materieType: it.materieType,
numberUnits: it.numberUnits,
workingProduceId: it.workingProduceId,
workingFeedingId: it.workingFeedingId,
rowKey: String(i),
productionUnitName: it.productionUnitName,
};
});
params = {
materieBomList,
...difrid,
};
run({ url, params });
}
};
let extrarender = [
,
];
function formatFieds(data, type) {
let obj = {};
for (let i = 0; i < data.length; i++) {
let item = data[i],
fieldsKey = type + "field" + i;
item["fieldsKey"] = fieldsKey;
if (item.fieldChar == 1) {
obj[fieldsKey] = {
value: item?.fieldRealValue ?? "",
title: item.fieldName,
name: [fieldsKey],
required: false,
type: "input",
};
} else {
obj[fieldsKey] = {
value:
item?.fieldRealValue == 0 || item?.fieldRealValue
? item?.fieldRealValue
: item.fieldChar == 4
? []
: "",
title: item.fieldName,
name: [fieldsKey],
required: false,
type: item.fieldChar == 3 ? "radio" : "select",
options: item.valueList,
multiple: item.fieldChar == 4 ? true : false,
};
}
}
return {
obj,
data,
};
}
return (
(ChildRef = node)}
childposition="left"
extraparams={{ materieTypeId: materieTypeId }}
>
{
setmaterieTypeId(vals[0] ?? '')
}}
/>
dispatch({ type: "close" })}
footer={false}
destroyOnClose={true}
getContainer={false}
style={{ position: "absolute" }}
width={"100%"}
>
{(
<>
{
}}
actions={() => {
return null;
}}
>
特定属性
{ }}
actions={() => {
return null;
}}
>
>
)}
dispatch({ type: "close" })}
footer={false}
destroyOnClose={true}
width={"100%"}
{...detail}
>
);
};
export default Materiel;