Commit dc8eebf1 authored by wuhao's avatar wuhao 🎯

jkuier

parent a5f936be
...@@ -78,6 +78,21 @@ export default [ ...@@ -78,6 +78,21 @@ export default [
}, },
], ],
}, },
{
path: "/historystore",
name: "出入库明细",
icon: "search",
routes: [
{
path: "/historystore/histore",
name: "出入库明细",
component: "./historystore/Histore",
},
{
component: "./404",
},
],
},
{ {
path: "/system", path: "/system",
name: "系统基础管理", name: "系统基础管理",
......
import React, { useState, useMemo, useRef, createContext } from 'react'; import React, { useState, useMemo, useRef, createContext } from 'react';
import { Tree, Input, Popconfirm, Tooltip, Divider, Modal, message } from 'antd'; import { Tree, Input, Popconfirm, Tooltip, Divider, Modal, message } from 'antd';
import { MinusSquareOutlined, FormOutlined, PlusSquareOutlined } from '@ant-design/icons'; import { MinusSquareOutlined, FormOutlined, PlusSquareOutlined, ArrowDownOutlined, ArrowRightOutlined } from '@ant-design/icons';
import getPrem from '@/utils/getPrem'; import getPrem from '@/utils/getPrem';
import { useRequest } from 'ahooks'; import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch'; import { doFetch } from '@/utils/doFetch';
...@@ -12,17 +12,34 @@ let { Search } = Input, ...@@ -12,17 +12,34 @@ let { Search } = Input,
function TreeRender({ url, deleteurl, saveurl, onselected }) { function TreeRender({ url, deleteurl, saveurl, onselected, params, noaction, maxWidth }) {
const [search, setsearch] = useState(""); const [search, setsearch] = useState("");
const [savetitle, setsavetitle] = useState(null); const [savetitle, setsavetitle] = useState(null);
const [modal, setModal] = useState({ const [modal, setModal] = useState({
visible: false visible: false
}); });
const [expandall, setexpandall] = useState(false);
const [expandedKeys, onExpand] = useState();
const { data, loading, refresh } = useRequest(() => { const { data, loading, refresh } = useRequest(() => {
return doFetch({ url, params: { title: search } }) return doFetch({ url, params: params ?? { title: search } })
}, { }, {
refreshDeps: [search] refreshDeps: [search]
}); });
const allkeys = useMemo(() => {
let res = [];
const fn = (source) => {
source.map(el => {
res.push(el)
el.children && el.children.length > 0 ? fn(el.children) : "" // 子级递归
})
}
fn(data?.data?.dataList ?? []);
return res.filter(it => it.children).map(it => it.key)
}, [data])
const ref1 = useRef(), ref2 = useRef(); const ref1 = useRef(), ref2 = useRef();
const treeData = useMemo(() => { const treeData = useMemo(() => {
let res = data?.data?.dataList ?? []; let res = data?.data?.dataList ?? [];
...@@ -35,14 +52,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) { ...@@ -35,14 +52,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
] ]
}, [data]); }, [data]);
const loop = data => data.map(item => { const loop = data => data.map(item => {
const index = item.title.indexOf(search); const index = item.title.indexOf(search);
const beforeStr = item.title.substr(0, index); const beforeStr = item.title.substr(0, index);
const afterStr = item.title.substr(index + search.length); const afterStr = item.title.substr(index + search.length);
const title = let title =
index > -1 ? ( index > -1 ? (
<Tooltip title={item.title} placement="bottom"> <Tooltip title={item.title} placement="bottom">
<span style={{ display: "inline-block", maxWidth: 88, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}> <span style={{ display: "inline-block", maxWidth: maxWidth ?? 88, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
{beforeStr} {beforeStr}
<span style={{ color: '#f50' }}>{search}</span> <span style={{ color: '#f50' }}>{search}</span>
{afterStr} {afterStr}
...@@ -50,88 +68,117 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) { ...@@ -50,88 +68,117 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
</Tooltip> </Tooltip>
) : ( ) : (
<Tooltip title={item.title} placement="bottom"> <Tooltip title={item.title} placement="bottom">
<span style={{ display: "inline-block", maxWidth: 88, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>{item.title}</span> <span style={{ display: "inline-block", maxWidth: maxWidth ?? 88, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>{item.title}</span>
</Tooltip> </Tooltip>
); );
const actiontitle = ( const actiontitle = (
<div style={{ display: "flex", alignItems: "center" }}> <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
{title} {title}
{ <div>
item.key != "0" && <Divider type='vertical' style={{ margin: "0 6px" }}></Divider> {
} item.key != "0" && <Divider type='vertical' style={{ margin: "0 6px" }}></Divider>
{ }
item.key != "0" && <Tooltip title="编辑" onClick={(e) => { {
e.stopPropagation(); item.key != "0" && <Tooltip title="编辑" onClick={(e) => {
setsavetitle(null)
if (getPrem("enElectricityMeterType_save", "ifs")) {
setModal({
visible: true,
closable: true,
title: "修改节点名称",
okText: "修改",
cancelText: "取消",
placeholder: item.title,
key: item.key
})
}
}}>
<FormOutlined style={{ color: "#1890ff" }} />
</Tooltip>
}
<Divider type='vertical' style={{ margin: "0 6px" }}></Divider>
<Tooltip title="新增">
<PlusSquareOutlined
disabled={!getPrem("enElectricityMeterType_save", "ifs")}
onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
setsavetitle(null) setsavetitle(null)
if (getPrem("enElectricityMeterType_save", "ifs")) { if (getPrem("enElectricityMeterType_save", "ifs")) {
setModal({ setModal({
visible: true, visible: true,
closable: true, closable: true,
title: "新增子结构", title: "修改节点名称",
okText: "新增", okText: "修改",
cancelText: "取消", cancelText: "取消",
placeholder: item.title, placeholder: item.title,
key: item.key key: item.key
}) })
} }
}} }}>
style={{ color: `${getPrem("enElectricityMeterType_save", "ifs") ? "green" : ""}` }} <FormOutlined style={{ color: "#1890ff" }} />
/></Tooltip> </Tooltip>
{ }
(!item.children || item.children.length == 0) &&
<Divider type='vertical' style={{ margin: "0 6px" }}></Divider> <Divider type='vertical' style={{ margin: "0 6px" }}></Divider>
} <Tooltip title="新增">
{ <PlusSquareOutlined
(!item.children || item.children.length == 0) && (item.key != "0") && disabled={!getPrem("enElectricityMeterType_save", "ifs")}
<Popconfirm onClick={(e) => {
placement='bottom' e.stopPropagation();
title="是否删除该节点?" setsavetitle(null)
okText="删除" if (getPrem("enElectricityMeterType_save", "ifs")) {
cancelText="取消" setModal({
onConfirm={() => { visible: true,
doFetch({ url: deleteurl, params: { id: item.key } }).then(res => { closable: true,
if (res.code == '0000') { title: "新增子结构",
message.success("操作成功") okText: "新增",
refresh(); cancelText: "取消",
placeholder: item.title,
key: item.key
})
} }
}) }}
}} style={{ color: `${getPrem("enElectricityMeterType_save", "ifs") ? "green" : ""}` }}
disabled={!getPrem("enElectricityMeterType_deleteById", "ifs")} /></Tooltip>
> {
<Tooltip title="删除"> (!item.children || item.children.length == 0) &&
<MinusSquareOutlined onClick={(e) => { e.stopPropagation() }} style={{ color: "red" }} /> <Divider type='vertical' style={{ margin: "0 6px" }}></Divider>
}
{
(!item.children || item.children.length == 0) && (item.key != "0") &&
<Popconfirm
placement='bottom'
title="是否删除该节点?"
okText="删除"
cancelText="取消"
onConfirm={() => {
doFetch({ url: deleteurl, params: { id: item.key } }).then(res => {
if (res.code == '0000') {
message.success("操作成功")
refresh();
}
})
}}
disabled={!getPrem("enElectricityMeterType_deleteById", "ifs")}
>
<Tooltip title="删除">
<MinusSquareOutlined onClick={(e) => { e.stopPropagation() }} style={{ color: "red" }} />
</Tooltip>
</Popconfirm>
}
{
item.key === "" && <Divider type='vertical' style={{ margin: "0 6px" }}></Divider>
}
{
item.key === "" && <Tooltip title={expandall ? "收起" : "展开"} onClick={(e) => {
e.stopPropagation();
setexpandall(!expandall)
onExpand(expandall ? [] : allkeys)
}}>
{expandall ? <ArrowDownOutlined /> : <ArrowRightOutlined />}
</Tooltip> </Tooltip>
</Popconfirm> }
</div>
}
</div> </div>
) )
if (item.key === "") {
title = (
<div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", flex: 1 }}>
{title}
<Tooltip title={expandall ? "收起" : "展开"} onClick={(e) => {
e.stopPropagation();
setexpandall(!expandall)
onExpand(expandall ? [] : allkeys)
}}>
{expandall ? <ArrowDownOutlined /> : <ArrowRightOutlined />}
</Tooltip>
</div>
)
}
// if (item.children) { // if (item.children) {
// return ( // return (
// <TreeNode key={item.key} title={actiontitle}> // <TreeNode key={item.key} title={actiontitle}>
...@@ -141,7 +188,7 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) { ...@@ -141,7 +188,7 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
// } // }
// return <TreeNode key={item.key} title={title} />; // return <TreeNode key={item.key} title={title} />;
return ( return (
<TreeNode key={item.key} title={actiontitle}> <TreeNode key={item.key} title={noaction ? title : actiontitle}>
{item.children && loop(item.children)} {item.children && loop(item.children)}
</TreeNode> </TreeNode>
); );
...@@ -234,9 +281,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) { ...@@ -234,9 +281,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
<Tree <Tree
onSelect={(selectedKeys, e) => { onSelect={(selectedKeys, e) => {
onselected?.(selectedKeys) onselected?.(selectedKeys, e)
}} }}
autoExpandParent={true} autoExpandParent={true}
defaultExpandAll={true}
expandedKeys={expandedKeys}
onExpand={(expandedKeys) => {
console.log(expandedKeys);
onExpand(expandedKeys)
}}
> >
{loop(treeData ? treeData : [])} {loop(treeData ? treeData : [])}
</Tree> </Tree>
......
...@@ -321,4 +321,17 @@ table { ...@@ -321,4 +321,17 @@ table {
} }
.ant-select-selector{ .ant-select-selector{
overflow: hidden !important; overflow: hidden !important;
}
.ant-breadcrumb{
span{
>span{
max-width: 600px !important;
}
}
}
.ant-tree .ant-tree-treenode{
width: 100%;
>span:last-child{
flex:1
}
} }
\ No newline at end of file
...@@ -6,16 +6,63 @@ import { ...@@ -6,16 +6,63 @@ import {
import { Breadcrumb, Layout, Menu, Input, Tooltip, Tree } from 'antd'; import { Breadcrumb, Layout, Menu, Input, Tooltip, Tree } from 'antd';
import React, { useState } from 'react'; import React, { useState } from 'react';
import styles from './index.less' import styles from './index.less'
import TreeRender from '@/components/TreeRender';
import AutoTable from "@/components/AutoTable";
const { Header, Content, Footer, Sider } = Layout, const { Header, Content, Footer, Sider } = Layout,
{ Search } = Input { Search } = Input
const Storesearch = () => { const Storesearch = (props) => {
const [collapsed, setCollapsed] = useState(false); const [collapsed, setCollapsed] = useState(false);
const [search, setsearch] = useState(); const [search, setsearch] = useState();
const [select, setselect] = useState({}); const [select, setselect] = useState({});
const columns = [
{
"title": "物料编码",
"dataIndex": "materieCode",
"key": "materieCode"
},
{
"title": "物料名称",
"dataIndex": "materieName",
"key": "materieName"
},
{
"title": "物料类型",
"dataIndex": "materieTypeName",
"key": "materieTypeName"
},
{
"title": "库存数量",
"dataIndex": "stockNum",
"key": "stockNum",
"search": false
},
{
"title": "可用库存",
"dataIndex": "usableNum",
"key": "usableNum",
"search": false
},
{
"title": "库存单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"search": false
}
]
const tableprops = {
...props,
pageextra: "none",
columns,
path: "/ngic-workmanship/wmsMaterieStock/queryStockList"
}
return ( return (
<Layout <Layout
style={{ style={{
...@@ -45,25 +92,15 @@ const Storesearch = () => { ...@@ -45,25 +92,15 @@ const Storesearch = () => {
/> />
)} )}
</div> </div>
{
!collapsed && <div style={{ padding: 12, paddingBottom: collapsed ? 12 : 0 }}>
<Search value={search} onChange={e => setsearch(e.target.value)} style={{ marginRight: 10 }}></Search>
</div>
}
{ {
!collapsed ? !collapsed ?
<div style={{ padding: collapsed ? 0 : 12 }}> <div style={{ padding: collapsed ? 0 : 12 }}>
<Tree <TreeRender
treeData={[ url="/ngic-auth/sysStore/queryTreeList"
{ title: '全部仓库', key: '0' }, // 菜单项务必填写 key params={{}}
{ title: '菜单项二', key: 'item-2' }, noaction={true}
{ maxWidth={140}
title: '子菜单', onselected={(selectedKeys, e) => {
key: 'submenu',
children: [{ title: '子菜单项', key: 'submenu-item-1' }],
},
]}
onSelect={(selectedKeys, e) => {
setselect(selectedKeys[0] ? { setselect(selectedKeys[0] ? {
title: e.node.title, title: e.node.title,
selectedKeys: selectedKeys[0] selectedKeys: selectedKeys[0]
...@@ -71,7 +108,9 @@ const Storesearch = () => { ...@@ -71,7 +108,9 @@ const Storesearch = () => {
}) })
}} }}
/> >
</TreeRender>
</div> : </div> :
<div onDoubleClick={() => { <div onDoubleClick={() => {
setCollapsed(false) setCollapsed(false)
...@@ -97,7 +136,7 @@ const Storesearch = () => { ...@@ -97,7 +136,7 @@ const Storesearch = () => {
}} }}
> >
<Breadcrumb.Item>物料库存</Breadcrumb.Item> <Breadcrumb.Item>物料库存</Breadcrumb.Item>
<Breadcrumb.Item>{select.title}</Breadcrumb.Item> <Breadcrumb.Item style={{ maxWidth: 600 }}>{select.title}</Breadcrumb.Item>
</Breadcrumb> </Breadcrumb>
<div <div
className={styles.sitelayoutbackground} className={styles.sitelayoutbackground}
...@@ -107,7 +146,11 @@ const Storesearch = () => { ...@@ -107,7 +146,11 @@ const Storesearch = () => {
flex: 1 flex: 1
}} }}
> >
Bill is a cat. <AutoTable
{
...tableprops
}
></AutoTable>
</div> </div>
</Content> </Content>
</Layout> </Layout>
......
import { factorySelect, shopSelectByFactory } from "@/services/system";
import { doFetch } from "@/utils/doFetch";
import { Table } from "antd";
const one = {
"materieInstoreNo": {
"value": null,
"type": "input",
"title": "入库单号",
"name": [
"materieInstoreNo"
],
"required": false
},
"storeId": {
"value": null,
"type": "select",
"title": "仓库",
"name": [
"storeId"
],
"required": true,
"options": {
database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
params: {}
},
},
"supplierId": {
"value": null,
"type": "select",
"title": "供应商",
"name": [
"supplierId"
],
"required": true,
"options": {
database: () => doFetch({ url: "/ngic-auth/sysSupplier/query/selection", params: {} }),
params: {}
},
},
"businessNo": {
"value": null,
"type": "input",
"title": "相关单号",
"name": [
"businessNo"
],
"required": false
},
"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/pmMaterie/queryUnitByMaterieId", params }),
params: { "materieId": "linked" },
effectresult: {
"productionUnit": "productionUnit",//key 为列表更新值 value为response 返回值
"productionUnitName": "productionUnitName"
}
}
},
columns: [
{
"title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "materieId",
"key": "materieId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "批次号/SN号",
"dataIndex": "materieControlNo",
"key": "materieControlNo"
},
{
"title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "instroeNum",
"key": "instroeNum",
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"readonly": 'productionUnitName',
"width": 60
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
<a key="delete" onClick={() => { }}>
删除
</a>,
],
},
],
rowKey: "id",
}
},
two = {
"materieInstoreNo": {
"value": null,
"type": "input",
"title": "入库单号",
"name": [
"materieInstoreNo"
],
"required": false
},
"storeId": {
"value": null,
"type": "select",
"title": "仓库",
"name": [
"storeId"
],
"required": true,
"options": {
database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
params: {}
},
},
"supplierId": {
"value": "2022070124566476657",
"type": "select",
"title": "供应商",
"name": [
"supplierId"
],
"required": true,
"disabled": true,
"options": [
{
value: "2022070124566476657",
label: "南高(默认)"
}
],
},
"businessNo": {
"value": null,
"type": "input",
"title": "相关单号",
"name": [
"businessNo"
],
"required": false
},
"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/pmMaterie/queryUnitByMaterieId", params }),
params: { "materieId": "linked" },
effectresult: {
"productionUnit": "productionUnit",//key 为列表更新值 value为response 返回值
"productionUnitName": "productionUnitName"
}
}
},
columns: [
{
"title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "materieId",
"key": "materieId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "批次号/SN号",
"dataIndex": "materieControlNo",
"key": "materieControlNo"
},
{
"title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "instroeNum",
"key": "instroeNum",
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"readonly": 'productionUnitName',
"width": 60
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
<a key="delete" onClick={() => { }}>
删除
</a>,
],
},
],
rowKey: "id",
}
},
three = {
"materieInstoreNo": {
"value": null,
"type": "input",
"title": "入库单号",
"name": [
"materieInstoreNo"
],
"required": false
},
"storeId": {
"value": null,
"type": "select",
"title": "仓库",
"name": [
"storeId"
],
"required": true,
"options": {
database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
params: {}
},
},
"businessNo": {
"value": null,
"type": "input",
"title": "相关单号",
"name": [
"businessNo"
],
"required": false
},
"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/pmMaterie/queryUnitByMaterieId", params }),
params: { "materieId": "linked" },
effectresult: {
"productionUnit": "productionUnit",//key 为列表更新值 value为response 返回值
"productionUnitName": "productionUnitName"
}
}
},
columns: [
{
"title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "materieId",
"key": "materieId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": <span>供应商编号-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "supplierId",
"key": "supplierId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-auth/sysSupplier/query/selection/withNo", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "批次号/SN号",
"dataIndex": "materieControlNo",
"key": "materieControlNo"
},
{
"title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "instroeNum",
"key": "instroeNum",
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"readonly": 'productionUnitName',
"width": 60
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
<a key="delete" onClick={() => { }}>
删除
</a>,
],
},
],
rowKey: "id",
}
},
four = {
"materieInstoreNo": {
"value": null,
"type": "input",
"title": "入库单号",
"name": [
"materieInstoreNo"
],
"required": false
},
"storeId": {
"value": null,
"type": "select",
"title": "仓库",
"name": [
"storeId"
],
"required": true,
"options": {
database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
params: {}
},
},
"businessNo": {
"value": null,
"type": "input",
"title": "相关单号",
"name": [
"businessNo"
],
"required": false
},
"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/pmMaterie/queryUnitByMaterieId", params }),
params: { "materieId": "linked" },
effectresult: {
"productionUnit": "productionUnit",//key 为列表更新值 value为response 返回值
"productionUnitName": "productionUnitName"
}
}
},
columns: [
{
"title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "materieId",
"key": "materieId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": <span>供应商编号-名称 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "supplierId",
"key": "supplierId",
"valueType": "select",
"width": 300,
"request": async () => {
let res = await doFetch({ url: "/ngic-auth/sysSupplier/query/selection/withNo", params: {} })
return res?.data?.dataList
},
"fieldProps": {
allowClear: false,
showSearch: true
},
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "批次号/SN号",
"dataIndex": "materieControlNo",
"key": "materieControlNo"
},
{
"title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
"dataIndex": "instroeNum",
"key": "instroeNum",
"formItemProps": () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
},
{
"title": "单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"readonly": 'productionUnitName',
"width": 60
},
{
title: "操作",
valueType: "option",
width: 70,
render: (text, record, _, action) => [
<a key="delete" onClick={() => { }}>
删除
</a>,
],
},
],
rowKey: "id",
}
},
detail = {
totalCard: [
//物料详情
{
cardTitle: "基本信息",
itemData: [
{
title: "入库单号",
key: "materieInstoreNo",
},
{
title: "入库类型",
key: "instoreTypeName",
},
{
title: "入库仓库",
key: "storeName",
},
{
title: "相关单号",
key: "businessNo",
},
{
title: "备注",
key: "remark",
},
{
title: "创建人",
key: "createUserName",
},
{
title: "创建时间",
key: "createTime",
},
],
},
{
cardTitle: "物料信息列表",
itemData: [
{
key: "materialList",
type: "table",
col: { span: 24 },
columns: [
{
title: "物料名称",
dataIndex: "materieName",
key: "materieName",
search: false,
},
{
title: "物料编码",
dataIndex: "materieCode",
key: "materieCode",
search: false,
},
{
title: "入库数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
},
{
title: "单位",
dataIndex: "productionUnitName",
key: "productionUnitName",
search: false,
},
],
expandable: {
expandedRowRender: record => <Table
style={{ marginLeft: 48 }}
columns={[
{
title: "库位名称",
dataIndex: "storeName",
key: "storeName",
search: false,
},
{
title: "上架数量",
dataIndex: "instroeNum",
key: "instroeNum",
search: false,
}
]}
dataSource={record.uploadList}
pagination={false}
/>,
}
},
],
},
]
};
export default {
one,
two,
three,
four,
detail
};
import React, { useEffect, useMemo, useRef, useState } from "react";
import {
Dropdown,
Menu,
Button,
message,
} 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
function Instore(props) {
const actionRef = useRef(),
ChildRef = null;
const columns = [
{
"title": "操作时间",
"dataIndex": "operateTime",
"key": "operateTimeList",
"valueType": "dateRange",
"render": (_, row) => {return (<div>{row.operateTime}</div>)},
},
{
"title": "操作人",
"dataIndex": "operateUserName",
"key": "operateUserName"
},
{
"title": "物料编码",
"dataIndex": "materieCode",
"key": "materieCode"
},
{
"title": "物料名称",
"dataIndex": "materieName",
"key": "materieName"
},
{
"title": "批次号/SN号",
"dataIndex": "materieControlNo",
"key": "materieControlNo"
},
{
"title": "当时库存数量",
"dataIndex": "currentNum",
"key": "currentNum",
"search": false
},
{
"title": "操作数量",
"dataIndex": "operateNum",
"key": "operateNum",
"search": false
},
{
"title": "库存单位",
"dataIndex": "productionUnitName",
"key": "productionUnitName",
"search": false
},
{
"title": "操作类型",
"dataIndex": "stockTypeName",
"key": "stockTypeName",
},
{
"title": "仓库名称",
"dataIndex": "storeName",
"key": "storeName"
},
{
"title": "库位",
"dataIndex": "storePositionName",
"key": "storePositionName"
},
{
"title": "相关单号",
"dataIndex": "relatedNo",
"key": "relatedNo"
}
]
const tableprops = {
...props,
pageextra: "none",
columns,
path: "/ngic-workmanship/wmsMaterieStockRecord/queryList"
}
return (
<div>
<AutoTable
{
...tableprops
}
actionRef={actionRef}
onRef={(node) => (ChildRef = node)}
></AutoTable>
</div>
);
}
export default Instore;
\ No newline at end of file
.sitelayout {
min-height: calc(100vh - 98px) !important;
.sitelayoutbackground {
background: #fff;
}
}
.title{
margin: 0px;
}
\ No newline at end of file
...@@ -19,10 +19,10 @@ const keytoval = { ...@@ -19,10 +19,10 @@ const keytoval = {
"four": 4 "four": 4
}, items = [ }, items = [
{ {
key: 'one', key: 'one',
label: ( label: (
<a> <a>
采购出库 生产领料出库
</a> </a>
), ),
}, },
...@@ -30,7 +30,7 @@ const keytoval = { ...@@ -30,7 +30,7 @@ const keytoval = {
key: 'two', key: 'two',
label: ( label: (
<a> <a>
生产出库 销售出库
</a> </a>
), ),
}, },
...@@ -38,7 +38,7 @@ const keytoval = { ...@@ -38,7 +38,7 @@ const keytoval = {
key: 'three', key: 'three',
label: ( label: (
<a> <a>
退料出库 报废出库
</a> </a>
), ),
}, },
...@@ -97,7 +97,7 @@ function Instore(props) { ...@@ -97,7 +97,7 @@ function Instore(props) {
val: "detail", val: "detail",
title: `查看详情`, title: `查看详情`,
...defaultFields?.detail, ...defaultFields?.detail,
totalPath: "/ngic-workmanship/wmsmaterieOutstore/getInStoreInfoById", totalPath: "/ngic-workmanship/wmsMaterieOutstore/getOutStoreInfoById",
totalParams: { id: record.id } totalParams: { id: record.id }
})) }))
}} }}
...@@ -241,7 +241,7 @@ function Instore(props) { ...@@ -241,7 +241,7 @@ function Instore(props) {
val: "detail", val: "detail",
title: `查看详情`, title: `查看详情`,
...defaultFields?.detail, ...defaultFields?.detail,
totalPath: "/ngic-workmanship/wmsmaterieOutstoreHis/getInStoreInfoById", totalPath: "/ngic-workmanship/wmsMaterieOutstoreHis/getOutStoreInfoById",
totalParams: { id: record.id } totalParams: { id: record.id }
})) }))
}} }}
...@@ -255,15 +255,15 @@ function Instore(props) { ...@@ -255,15 +255,15 @@ function Instore(props) {
"valueType": "select", "valueType": "select",
"options": [ "options": [
{ {
"label": "采购出库", "label": "生产领料出库",
"value": "1" "value": "1"
}, },
{ {
"label": "生产出库", "label": "销售出库",
"value": "2" "value": "2"
}, },
{ {
"label": "退料出库", "label": "报废出库",
"value": "3" "value": "3"
}, },
{ {
...@@ -404,6 +404,10 @@ function Instore(props) { ...@@ -404,6 +404,10 @@ function Instore(props) {
{...drawprops} {...drawprops}
submitData={async (value) => { submitData={async (value) => {
if (drawprops.val == "add") { if (drawprops.val == "add") {
value.materialList = value.materialList?.map(it=>{
delete it.usableNum;
return it
})//usableNum
let res = await doFetch({ url: "/ngic-workmanship/wmsMaterieOutstore/saveOutStore", params: { ...value, outstoreType: drawprops.outstoreType } }) let res = await doFetch({ url: "/ngic-workmanship/wmsMaterieOutstore/saveOutStore", params: { ...value, outstoreType: drawprops.outstoreType } })
if (res.code == "0000") { if (res.code == "0000") {
reload(); reload();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment