import React, { useEffect, useMemo, useRef, useState } from "react";
import { Dropdown, Menu, Button, message, Table } from "antd";
import AutoTable from "@/components/AutoTable";
// import defaultFields from "./fields";
import { doFetch } from "@/utils/doFetch";
import DrawInitForm from "@/components/DrawInitForm";
import getPrem from "@/utils/getPrem"; //权限判断fn
import { useReactToPrint } from "react-to-print";
import { useModel } from "umi";
import PrintDom from "./printdom";
import { PrintQrCode } from "@/components/PrintCode";
import { EditableProTable } from "@ant-design/pro-table";
const keytoval = {
one: 1,
two: 2,
three: 3,
four: 4,
},
items = [
{
key: "one",
label: 采购入库,
},
{
key: "two",
label: 生产入库,
},
{
key: "three",
label: 退料入库,
},
{
key: "four",
label: 其他入库,
},
],
itemz = {
one: "采购入库",
two: "生产入库",
three: "退料入库",
four: "其他入库",
};
const EditUpload = ({ record, fid, storeId }) => {
console.log(123);
const [value, setvalue] = useState({
[record.id]: record.uploadList,
});
const { initialState, setInitialState } = useModel("@@initialState");
const [kcList, setkcList] = useState([]);
const fetchRequest = async (params) => {
let newParams = JSON.parse(JSON.stringify(params));
let res = await doFetch({
url: "/ngic-auth/sysStorePosition/queryUseAbleSelection",
params: { storeId: newParams.storeId },
});
setkcList(res?.data?.dataList);
};
useEffect(() => {
if (!value) {
return;
}
let newlist =
Object.keys(value)?.map?.((it) => {
let id = it;
let newArr = value[id]?.filter((it) => typeof it.id == "number") ?? [];
return {
id,
uploadList: newArr.map((its) => {
return {
storePositionId: its?.storePositionId,
instroeNum: its?.instroeNum,
remark: its?.remark,
};
}),
};
}) ?? [];
setInitialState((s) => {
return {
...s,
submit: {
id: fid,
materialList:
s.submit && s?.submit?.materialList
? s?.submit?.materialList
?.filter(
(it) => newlist.map((item) => item.id).indexOf(it.id) == -1
)
?.concat(newlist)
?.filter((it) => it.uploadList?.length > 0)
: [],
},
};
});
// fetchRequest(params);
}, [value]);
useEffect(() => {
fetchRequest({
storeId,
});
}, []);
return (
库位名称 *
),
dataIndex: "storePositionName",
key: "storePositionId",
search: false,
valueType: "select",
// params: {},
// request: async (params) => {
// let newParams = JSON.parse(JSON.stringify(params));
// let res = await doFetch({
// url: "/ngic-auth/sysStorePosition/queryUseAbleSelection",
// params: { storeId: newParams.storeId },
// });
// return res?.data?.dataList;
// },
fieldProps: {
options: kcList,
},
editable: (text, record, index) => {
return !record.materieOutstoreDetailId;
},
params: { storeId: storeId },
formItemProps: () => {
return {
rules: [{ required: true, message: "此项为必填项" }],
};
},
},
{
title: (
上架数量 *
),
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
editable: (text, record, index) => {
return !record.materieOutstoreDetailId;
},
valueType: "digit",
formItemProps: () => {
return {
rules: [{ required: true, message: "此项为必填项" }],
};
},
},
{
title: "备注",
dataIndex: "remark",
key: "remark",
search: false,
editable: (text, record, index) => {
return !record.materieOutstoreDetailId;
},
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
typeof record.id == "number" && (
{}}>
删除
),
],
},
]}
value={value[record.id]}
recordCreatorProps={{
newRecordType: "dataSource",
record: () => ({
id: Date.now(),
}),
}}
editable={{
type: "multiple",
actionRender: (row, config, defaultDoms) => {
return [defaultDoms.delete];
},
onValuesChange: async (records, recordList) => {
setvalue((s) => {
return {
...s,
[record.id]: recordList,
};
});
},
}}
pagination={false}
/>
);
};
function Instore(props) {
const { initialState, setInitialState } = useModel("@@initialState");
const [activeTabKey, onTabChange] = useState("1");
const [selectKeys, setSelectKeys] = useState([]);
let [drawprops, setdrawprops] = useState({
title: "",
visible: false,
onClose: () => {
setdrawprops((s) => ({
...s,
visible: false,
fields: {},
}));
},
fields: {},
width: 1200,
}),
actionRef = useRef(),
ChildRef = null,
printRef = useRef(),
mutiPrintRef = useRef();
//操作完成后刷新
function reload() {
actionRef.current.reload();
ChildRef?.onRefresh();
message.success("操作成功");
setdrawprops((s) => ({
...s,
visible: false,
fields: {},
}));
}
const handlePrint = useReactToPrint({
content: () => printRef.current.dom.current,
});
const mutiPrint = useReactToPrint({
content: () => mutiPrintRef.current.dom.current,
});
// const [PchList, setPchList] = useState();
// useEffect(() => {
// if (drawprops?.visible) {
// doFetch({
// url: "/ngic-workmanship/wmsMaterieLabel/selectionByStatus",
// params: { status: "1" },
// }).then((res) => {
// setPchList(res?.data?.dataList);
// });
// }
// }, [drawprops?.visible]);
const defaultFields = useMemo(() => {
// let option = {
// options: PchList,
// allowClear: true,
// showSearch: true,
// };
// console.log("pchlist:", option);
return {
four: {
materieInstoreNo: {
value: null,
type: "input",
title: "入库单号",
name: ["materieInstoreNo"],
required: false,
placeholder: "不填写系统自动生成",
},
storeId: {
value: null,
type: "select",
title: "入库仓库",
name: ["storeId"],
required: true,
options: {
database: () =>
doFetch({
url: "/ngic-auth/sysStore/selectionBoxAll",
params: {},
}),
params: {},
},
},
remark: {
value: null,
type: "textarea",
title: "备注",
name: ["remark"],
required: false,
col: {
span: 24,
},
},
materialList: {
value: [],
title: "物料信息",
type: "table",
col: { span: 24 },
name: ["materialList"],
required: true,
linkconfig: {
urlchangeval: {
//根据url接口 改变某个value
database: (params) =>
doFetch({
url: "/ngic-workmanship/wmsMaterieLabel/queryByLabelId",
params,
}),
params: { labelId: "linked" },
effectresult: {
productionUnitName: "productionUnitName",
materieCode: "materieCode",
supplierId: "supplierId",
supplierName: "supplierName",
width: "width",
ironLoss: "ironLoss",
sheetThickness: "sheetThickness",
shopSign: "shopSign",
weight: "weight",
specificationModel: "specificationModel",
materieName: "materieName",
},
},
},
columns: [
{
title: (
批次号 *
),
dataIndex: "labelId",
key: "labelId",
valueType: "select",
width: 180,
params: {},
request: async (params) => {
let res = await doFetch({
url: "/ngic-workmanship/wmsMaterieLabel/selectionByStatus",
params: { status: "1" },
});
return res?.data?.dataList;
},
formItemProps: () => {
return {
rules: [{ required: true, message: "此项为必填项" }],
};
},
},
{
title: (
物料编码-名称 *
),
dataIndex: "materieCode",
key: "materieCode",
width: 200,
valueType: "select",
readonly: true,
renderFormItem: ({ entry }) => {
return (
{entry?.materieCode}-{entry?.materieName}
);
},
},
{
title: "规格型号",
dataIndex: "specificationModel",
key: "specificationModel",
readonly: true,
width: 140,
},
{
title: "供应商",
dataIndex: "supplierName",
key: "supplierName",
readonly: "supplierName",
},
{
title: "宽度",
dataIndex: "width",
key: "width",
readonly: "width",
},
{
title: "铁损",
dataIndex: "ironLoss",
key: "ironLoss",
readonly: "ironLoss",
},
{
title: "片厚",
dataIndex: "sheetThickness",
key: "sheetThickness",
readonly: "sheetThickness",
},
{
title: "牌号",
dataIndex: "shopSign",
key: "shopSign",
readonly: "shopSign",
},
{
title: "入库数量",
dataIndex: "weight",
key: "weight",
readonly: "weight",
},
{
title: "库存单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
readonly: "productionUnitName",
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
{}}>
删除
,
],
},
],
rowKey: "id",
},
},
detail: (setselected, dom) => ({
totalCard: [
//物料详情
{
cardTitle: "基本信息",
itemData: [
{
title: "入库单号",
key: "materieInstoreNo",
},
{
title: "入库类型",
key: "instoreTypeName",
},
{
title: "入库仓库",
key: "storeName",
},
{
title: "创建人",
key: "createUserName",
},
{
title: "创建时间",
key: "createTime",
},
{
title: "状态",
key: "statusName",
},
{
title: "完成时间",
key: "finishTime",
},
{
title: "备注",
key: "remark",
noshow: "100%",
},
{
title: "工单条形码",
noshow: true,
key: "qrCodeUrl",
type: "img",
width: 100,
},
],
},
{
cardTitle: "物料信息列表",
extraContent: "",
itemData: [
{
key: "materialList",
type: "table",
col: { span: 24 },
columns: [
{
title: "物料编码 - 名称",
dataIndex: "materieName",
key: "materieName",
search: false,
render: (dom, row) => {
return (
(row.materieCode ?? "") +
" - " +
(row.materieName ?? "")
);
},
},
{
title: "供应商编号 - 名称",
dataIndex: "supplierNo",
key: "supplierNo",
search: false,
render: (dom, row) => {
return (
(row.supplierNo ?? "") +
" - " +
(row.supplierName ?? "")
);
},
},
{
title: "批次号",
dataIndex: "materieControlNo",
key: "materieControlNo",
search: false,
},
{
title: "入库数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
},
{
title: "未上架数量",
dataIndex: "remainderNums",
key: "remainderNums",
search: false,
},
{
title: "库存单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
search: false,
},
],
// expandable: {
// defaultExpandAllRows: true,
// expandedRowRender: (record) => (
// {
// return {
// rules: [
// { required: true, message: "此项为必填项" },
// ],
// };
// },
// },
// {
// title: "上架数量",
// dataIndex: "instroeNum",
// key: "instroeNum",
// search: false,
// formItemProps: () => {
// return {
// rules: [
// { required: true, message: "此项为必填项" },
// ],
// };
// },
// },
// ]}
// dataSource={record.uploadList}
// pagination={false}
// />
// ),
// },
// pagination: "false",
// rowKey: "id",
// rowSelection: {
// onChange: (selectedRowKeys, selectedRows) => {
// setselected(selectedRows);
// },
// },
},
],
},
{
cardTitle: "强制关单信息",
itemData: [
{
title: "关单人",
key: "closeUserName",
},
{
title: "关单时间",
key: "closeTime",
},
],
},
{
cardTitle: "上架明细",
noPrint: true,
itemData: [
{
key: "materialUploadList",
type: "table",
col: { span: 24 },
columns: [
{
title: "物料编码 - 名称",
dataIndex: "materieName",
key: "materieName",
search: false,
render: (dom, row) => {
return (
(row.materieCode ?? "") +
" - " +
(row.materieName ?? "")
);
},
},
{
title: "供应商编号 - 名称",
dataIndex: "supplierNo",
key: "supplierNo",
search: false,
render: (dom, row) => {
return (
(row.supplierNo ?? "") +
" - " +
(row.supplierName ?? "")
);
},
},
{
title: "批次号",
dataIndex: "materieControlNo",
key: "materieControlNo",
search: false,
},
{
title: "入库数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
},
{
title: "库存单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
search: false,
},
],
expandable: {
defaultExpandAllRows: true,
expandedRowRender: (record) => (
{
return {
rules: [
{ required: true, message: "此项为必填项" },
],
};
},
},
{
title: "上架数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
formItemProps: () => {
return {
rules: [
{ required: true, message: "此项为必填项" },
],
};
},
},
{
title: "备注",
dataIndex: "remark",
key: "remark",
search: false,
},
{
title: "操作人",
dataIndex: "uploadUserName",
key: "uploadUserName",
search: false,
},
{
title: "操作时间",
dataIndex: "uploadTime",
key: "uploadTime",
search: false,
},
]}
dataSource={record.uploadList}
pagination={false}
/>
),
},
pagination: "false",
},
],
},
],
}),
doinsert: (fid, storeId) => ({
totalCard: [
//物料详情
{
cardTitle: "基本信息",
itemData: [
{
title: "入库单号",
key: "materieInstoreNo",
},
{
title: "入库类型",
key: "instoreTypeName",
},
{
title: "入库仓库",
key: "storeName",
},
{
title: "相关单号",
key: "businessNo",
},
{
title: "备注",
key: "remark",
},
{
title: "创建人",
key: "createUserName",
},
{
title: "创建时间",
key: "createTime",
},
{
title: "状态",
key: "statusName",
},
],
},
{
cardTitle: "物料信息",
extra: true,
extrapath: "/ngic-workmanship/wmsMaterieInstore/uploadOtherInstore",
extrakey: "submit", //redux key
itemData: [
{
key: "materialList",
type: "table",
col: { span: 24 },
columns: [
{
title: "物料编码 - 名称",
dataIndex: "materieName",
key: "materieName",
search: false,
render: (dom, row) => {
return (
(row.materieCode ?? "") +
" - " +
(row.materieName ?? "")
);
},
},
{
title: "供应商编号 - 名称",
dataIndex: "supplierNo",
key: "supplierNo",
search: false,
render: (dom, row) => {
return (
(row.supplierNo ?? "") +
" - " +
(row.supplierName ?? "")
);
},
},
{
title: "批次号",
dataIndex: "materieControlNo",
key: "materieControlNo",
search: false,
},
{
title: "入库数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
},
{
title: "未上架数量",
dataIndex: "remainderNums",
key: "remainderNums",
search: false,
},
{
title: "库存单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
search: false,
},
],
expandable: {
expandedRowRender: (record) => (
),
},
rowKey: "id",
},
],
},
],
}),
};
}, [drawprops?.visible]);
// const defaultFields = useMemo(() => {
// console.log(PchList);
// return
// }, [PchList]);
const PrintButton = (
);
useEffect(() => {
const detail = defaultFields.detail(setSelectKeys, PrintButton);
setdrawprops((s) => ({
...s,
...detail,
}));
}, [selectKeys]);
const columns = useMemo(() => {
if (activeTabKey == "1") {
return [
{
title: "入库单号",
dataIndex: "materieInstoreNo",
key: "materieInstoreNo",
search: false,
render: (dom, record) => {
return (
{
const detail = defaultFields.detail(
setSelectKeys,
PrintButton
);
setdrawprops((s) => ({
...s,
visible: true,
//查看详情 props
val: "detail",
title: `查看详情`,
...detail,
totalPath:
"/ngic-workmanship/wmsMaterieInstore/getInStoreInfoById",
totalParams: { id: record.id },
extra: (
),
}));
}}
>
{dom}
);
},
},
{
title: "入库类型",
dataIndex: "instoreTypeName",
key: "instoreType",
search: false,
valueType: "select",
options: [
{
label: "采购入库",
value: "1",
},
{
label: "生产入库",
value: "2",
},
{
label: "退料入库",
value: "3",
},
{
label: "其他入库",
value: "4",
},
],
},
{
title: "入库仓库",
search: false,
dataIndex: "storeName",
key: "storeId",
fieldProps: {
allowClear: true,
showSearch: true,
},
options: {
database: () =>
doFetch({
url: "/ngic-auth/sysStore/selectionBox",
params: { factoryIdList: [] },
}),
params: {},
},
valueType: "select",
},
{
title: "备注",
dataIndex: "remark",
key: "remark",
search: false,
},
{
title: "创建人",
dataIndex: "createUserName",
search: false,
key: "createUserName",
},
{
title: "创建时间",
dataIndex: "createTime",
key: "createTime",
valueType: "dateRange",
formItemProps: {
name: "createTimeList",
},
},
{
title: "状态",
dataIndex: "statusName",
search: false,
key: "status",
valueType: "select",
options: [
{
label: "待分配",
value: "3",
},
{
label: "待执行",
value: "0",
},
{
label: "执行中",
value: "1",
},
],
},
{
title: "操作",
valueType: "option",
width: 240,
render: (text, record, _, action) => {
return [
getPrem(
"equipmentCustomer_save",
action,
"上架采集",
async () => {
let extra = defaultFields.doinsert(record.id, record.storeId);
setdrawprops((s) => ({
...s,
visible: true,
//查看详情 props
val: "detail",
title: `上架采集`,
totalPath:
"/ngic-workmanship/wmsMaterieInstore/getInStoreInfoById",
totalParams: { id: record.id },
extra: null,
...extra,
}));
setInitialState((s) => {
return {
...s,
submit: {},
};
});
}
),
getPrem("equipmentCustomer_deleteById", action, "关单", null, {
title: "确认关单?",
onConfirm: () => {
doFetch({
url: "/ngic-workmanship/wmsMaterieInstore/close",
params: { id: record.id },
}).then((res) => {
if (res.code == "0000") {
reload();
}
});
},
}),
record?.status === 7
? null
: getPrem(
"equipmentCustomer_deleteById",
action,
"删除",
null,
{
title: "确认删除?",
onConfirm: () => {
doFetch({
url: "/ngic-workmanship/wmsMaterieInstore/deleteById",
params: { id: record.id },
}).then((res) => {
if (res.code == "0000") {
reload();
}
});
},
}
),
];
},
},
];
} else {
return [
{
title: "入库单号",
dataIndex: "materieInstoreNo",
key: "materieInstoreNo",
render: (dom, record) => {
return (
{
setdrawprops((s) => ({
...s,
visible: true,
//查看详情 props
val: "detail",
title: `查看详情`,
...defaultFields?.detail,
totalPath:
"/ngic-workmanship/wmsMaterieInstoreHis/getInStoreInfoById",
totalParams: { id: record.id },
extra: null,
}));
}}
>
{dom}
);
},
},
{
title: "入库类型",
dataIndex: "instoreTypeName",
search: false,
key: "instoreType",
valueType: "select",
options: [
{
label: "采购入库",
value: "1",
},
{
label: "生产入库",
value: "2",
},
{
label: "退料入库",
value: "3",
},
{
label: "其他入库",
value: "4",
},
],
},
{
title: "入库仓库",
search: false,
dataIndex: "storeName",
key: "storeId",
fieldProps: {
allowClear: true,
showSearch: true,
},
options: {
database: () =>
doFetch({
url: "/ngic-auth/sysStore/selectionBox",
params: { factoryIdList: [] },
}),
params: {},
},
valueType: "select",
},
{
title: "备注",
dataIndex: "remark",
key: "remark",
search: false,
},
{
search: false,
title: "创建人",
dataIndex: "createUserName",
key: "createUserName",
},
{
title: "创建时间",
dataIndex: "createTime",
key: "createTime",
valueType: "dateRange",
formItemProps: {
name: "createTimeList",
},
},
{
title: "完成时间",
dataIndex: "finishTime",
key: "finishTime",
valueType: "dateRange",
formItemProps: {
name: "finishTimeList",
},
},
{
title: "状态",
dataIndex: "statusName",
search: false,
key: "status",
valueType: "select",
options: [
{
label: "已上架",
value: "2",
},
{
label: "已关单",
value: "4",
},
],
},
];
}
}, [activeTabKey]);
const tableprops = {
...props,
pageextra:
activeTabKey == "1" ? (
) : (
"none"
),
tabList: [
{
tab: "未完成",
key: "1",
},
{
tab: "已完成",
key: "2",
},
],
activeTabKey,
onTabChange,
columns,
path:
activeTabKey == "1"
? "/ngic-workmanship/wmsMaterieInstore/queryOtherList"
: "/ngic-workmanship/wmsMaterieInstoreHis/queryOtherList",
};
return (
(ChildRef = node)}
>
{
if (drawprops.val == "add") {
const data = JSON.parse(JSON.stringify(value));
const materialList = data?.materialList?.map((it) => {
return {
labelId: it?.labelId,
};
});
let res = await doFetch({
url: "/ngic-workmanship/wmsMaterieInstore/saveOtherInstore",
params: {
materieInstoreNo: data.materieInstoreNo,
storeId: data.storeId,
remark: data.remark,
materialList: materialList,
},
});
if (res.code == "0000") {
reload();
}
}
}}
reload={reload}
/>
);
}
export default Instore;