Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
wms
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wuhao
wms
Commits
dc8eebf1
Commit
dc8eebf1
authored
Jul 12, 2022
by
wuhao
🎯
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jkuier
parent
a5f936be
Changes
8
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
994 additions
and
96 deletions
+994
-96
routes.js
config/routes.js
+15
-0
index.jsx
src/components/TreeRender/index.jsx
+120
-67
global.less
src/global.less
+13
-0
index.jsx
src/pages/findstore/Storesearch/index.jsx
+63
-20
fields.js
src/pages/historystore/Histore/fields.js
+652
-0
index.jsx
src/pages/historystore/Histore/index.jsx
+108
-0
index.less
src/pages/historystore/Histore/index.less
+10
-0
index.jsx
src/pages/outsetstore/Outstore/index.jsx
+13
-9
No files found.
config/routes.js
View file @
dc8eebf1
...
...
@@ -78,6 +78,21 @@ export default [
},
],
},
{
path
:
"/historystore"
,
name
:
"出入库明细"
,
icon
:
"search"
,
routes
:
[
{
path
:
"/historystore/histore"
,
name
:
"出入库明细"
,
component
:
"./historystore/Histore"
,
},
{
component
:
"./404"
,
},
],
},
{
path
:
"/system"
,
name
:
"系统基础管理"
,
...
...
src/components/TreeRender/index.jsx
View file @
dc8eebf1
import
React
,
{
useState
,
useMemo
,
useRef
,
createContext
}
from
'react'
;
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
{
useRequest
}
from
'ahooks'
;
import
{
doFetch
}
from
'@/utils/doFetch'
;
...
...
@@ -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
[
savetitle
,
setsavetitle
]
=
useState
(
null
);
const
[
modal
,
setModal
]
=
useState
({
visible
:
false
});
const
[
expandall
,
setexpandall
]
=
useState
(
false
);
const
[
expandedKeys
,
onExpand
]
=
useState
();
const
{
data
,
loading
,
refresh
}
=
useRequest
(()
=>
{
return
doFetch
({
url
,
params
:
{
title
:
search
}
})
return
doFetch
({
url
,
params
:
params
??
{
title
:
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
treeData
=
useMemo
(()
=>
{
let
res
=
data
?.
data
?.
dataList
??
[];
...
...
@@ -35,14 +52,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
]
},
[
data
]);
const
loop
=
data
=>
data
.
map
(
item
=>
{
const
index
=
item
.
title
.
indexOf
(
search
);
const
beforeStr
=
item
.
title
.
substr
(
0
,
index
);
const
afterStr
=
item
.
title
.
substr
(
index
+
search
.
length
);
cons
t
title
=
le
t
title
=
index
>
-
1
?
(
<
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
}
<
span
style=
{
{
color
:
'#f50'
}
}
>
{
search
}
</
span
>
{
afterStr
}
...
...
@@ -50,13 +68,14 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
</
Tooltip
>
)
:
(
<
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
>
);
const
actiontitle
=
(
<
div
style=
{
{
display
:
"flex"
,
alignItems
:
"center"
}
}
>
<
div
style=
{
{
display
:
"flex"
,
alignItems
:
"center"
,
justifyContent
:
"space-between"
}
}
>
{
title
}
<
div
>
{
item
.
key
!=
"0"
&&
<
Divider
type=
'vertical'
style=
{
{
margin
:
"0 6px"
}
}
></
Divider
>
}
...
...
@@ -126,12 +145,40 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
<
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
>
}
</
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) {
// return (
// <TreeNode key={item.key} title={actiontitle}>
...
...
@@ -141,7 +188,7 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
// }
// return <TreeNode key={item.key} title={title} />;
return
(
<
TreeNode
key=
{
item
.
key
}
title=
{
actiontitle
}
>
<
TreeNode
key=
{
item
.
key
}
title=
{
noaction
?
title
:
actiontitle
}
>
{
item
.
children
&&
loop
(
item
.
children
)
}
</
TreeNode
>
);
...
...
@@ -234,9 +281,15 @@ function TreeRender({ url, deleteurl, saveurl, onselected }) {
<
Tree
onSelect=
{
(
selectedKeys
,
e
)
=>
{
onselected
?.(
selectedKeys
)
onselected
?.(
selectedKeys
,
e
)
}
}
autoExpandParent=
{
true
}
defaultExpandAll=
{
true
}
expandedKeys=
{
expandedKeys
}
onExpand=
{
(
expandedKeys
)
=>
{
console
.
log
(
expandedKeys
);
onExpand
(
expandedKeys
)
}
}
>
{
loop
(
treeData
?
treeData
:
[])
}
</
Tree
>
...
...
src/global.less
View file @
dc8eebf1
...
...
@@ -322,3 +322,16 @@ table {
.ant-select-selector{
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
src/pages/findstore/Storesearch/index.jsx
View file @
dc8eebf1
...
...
@@ -6,16 +6,63 @@ import {
import
{
Breadcrumb
,
Layout
,
Menu
,
Input
,
Tooltip
,
Tree
}
from
'antd'
;
import
React
,
{
useState
}
from
'react'
;
import
styles
from
'./index.less'
import
TreeRender
from
'@/components/TreeRender'
;
import
AutoTable
from
"@/components/AutoTable"
;
const
{
Header
,
Content
,
Footer
,
Sider
}
=
Layout
,
{
Search
}
=
Input
const
Storesearch
=
()
=>
{
const
Storesearch
=
(
props
)
=>
{
const
[
collapsed
,
setCollapsed
]
=
useState
(
false
);
const
[
search
,
setsearch
]
=
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
(
<
Layout
style=
{
{
...
...
@@ -45,25 +92,15 @@ const Storesearch = () => {
/>
)
}
</
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
?
<
div
style=
{
{
padding
:
collapsed
?
0
:
12
}
}
>
<
Tree
treeData=
{
[
{
title
:
'全部仓库'
,
key
:
'0'
},
// 菜单项务必填写 key
{
title
:
'菜单项二'
,
key
:
'item-2'
},
{
title
:
'子菜单'
,
key
:
'submenu'
,
children
:
[{
title
:
'子菜单项'
,
key
:
'submenu-item-1'
}],
},
]
}
onSelect=
{
(
selectedKeys
,
e
)
=>
{
<
TreeRender
url=
"/ngic-auth/sysStore/queryTreeList"
params=
{
{}
}
noaction=
{
true
}
maxWidth=
{
140
}
onselected=
{
(
selectedKeys
,
e
)
=>
{
setselect
(
selectedKeys
[
0
]
?
{
title
:
e
.
node
.
title
,
selectedKeys
:
selectedKeys
[
0
]
...
...
@@ -71,7 +108,9 @@ const Storesearch = () => {
})
}
}
/>
>
</
TreeRender
>
</
div
>
:
<
div
onDoubleClick=
{
()
=>
{
setCollapsed
(
false
)
...
...
@@ -97,7 +136,7 @@ const Storesearch = () => {
}
}
>
<
Breadcrumb
.
Item
>
物料库存
</
Breadcrumb
.
Item
>
<
Breadcrumb
.
Item
>
{
select
.
title
}
</
Breadcrumb
.
Item
>
<
Breadcrumb
.
Item
style=
{
{
maxWidth
:
600
}
}
>
{
select
.
title
}
</
Breadcrumb
.
Item
>
</
Breadcrumb
>
<
div
className=
{
styles
.
sitelayoutbackground
}
...
...
@@ -107,7 +146,11 @@ const Storesearch = () => {
flex
:
1
}
}
>
Bill is a cat.
<
AutoTable
{
...
tableprops
}
></
AutoTable
>
</
div
>
</
Content
>
</
Layout
>
...
...
src/pages/historystore/Histore/fields.js
0 → 100644
View file @
dc8eebf1
This diff is collapsed.
Click to expand it.
src/pages/historystore/Histore/index.jsx
0 → 100644
View file @
dc8eebf1
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
src/pages/historystore/Histore/index.less
0 → 100644
View file @
dc8eebf1
.sitelayout {
min-height: calc(100vh - 98px) !important;
.sitelayoutbackground {
background: #fff;
}
}
.title{
margin: 0px;
}
\ No newline at end of file
src/pages/outsetstore/Outstore/index.jsx
View file @
dc8eebf1
...
...
@@ -22,7 +22,7 @@ const keytoval = {
key
:
'one'
,
label
:
(
<
a
>
采购
出库
生产领料
出库
</
a
>
),
},
...
...
@@ -30,7 +30,7 @@ const keytoval = {
key
:
'two'
,
label
:
(
<
a
>
生产
出库
销售
出库
</
a
>
),
},
...
...
@@ -38,7 +38,7 @@ const keytoval = {
key
:
'three'
,
label
:
(
<
a
>
退料
出库
报废
出库
</
a
>
),
},
...
...
@@ -97,7 +97,7 @@ function Instore(props) {
val
:
"detail"
,
title
:
`查看详情`
,
...
defaultFields
?.
detail
,
totalPath
:
"/ngic-workmanship/wms
materieOutstore/getIn
StoreInfoById"
,
totalPath
:
"/ngic-workmanship/wms
MaterieOutstore/getOut
StoreInfoById"
,
totalParams
:
{
id
:
record
.
id
}
}))
}
}
...
...
@@ -241,7 +241,7 @@ function Instore(props) {
val
:
"detail"
,
title
:
`查看详情`
,
...
defaultFields
?.
detail
,
totalPath
:
"/ngic-workmanship/wms
materieOutstoreHis/getIn
StoreInfoById"
,
totalPath
:
"/ngic-workmanship/wms
MaterieOutstoreHis/getOut
StoreInfoById"
,
totalParams
:
{
id
:
record
.
id
}
}))
}
}
...
...
@@ -255,15 +255,15 @@ function Instore(props) {
"valueType"
:
"select"
,
"options"
:
[
{
"label"
:
"
采购
出库"
,
"label"
:
"
生产领料
出库"
,
"value"
:
"1"
},
{
"label"
:
"
生产
出库"
,
"label"
:
"
销售
出库"
,
"value"
:
"2"
},
{
"label"
:
"
退料
出库"
,
"label"
:
"
报废
出库"
,
"value"
:
"3"
},
{
...
...
@@ -404,6 +404,10 @@ function Instore(props) {
{
...
drawprops
}
submitData=
{
async
(
value
)
=>
{
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
}
})
if
(
res
.
code
==
"0000"
)
{
reload
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment