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
97fa0889
Commit
97fa0889
authored
1 year ago
by
krysent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new
parent
9dbb5e30
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
753 additions
and
316 deletions
+753
-316
routes.js
config/routes.js
+5
-0
index.jsx
src/components/AutoTable/index.jsx
+1
-1
mtable.jsx
src/components/AutoTable/mtable.jsx
+0
-2
fields.js
src/pages/Printer/fields.js
+60
-0
index.jsx
src/pages/Printer/index.jsx
+192
-0
index.jsx
src/pages/craft/Materiel/index.jsx
+44
-44
index.jsx
src/pages/findstore/Storesearch/index.jsx
+182
-245
indexcopy.jsx
src/pages/findstore/Storesearch/indexcopy.jsx
+247
-0
index.jsx
src/pages/historystore/Histore/index.jsx
+20
-23
fields.js
src/pages/system/Reservoir/fields.js
+1
-1
index.jsx
src/pages/system/Reservoir/index.jsx
+1
-0
No files found.
config/routes.js
View file @
97fa0889
...
...
@@ -48,6 +48,11 @@ export default [
name
:
"库存查询"
,
component
:
"./findstore/Storesearch"
,
},
{
path
:
"/wms/label"
,
name
:
"来料标签打印"
,
component
:
"./Printer"
,
},
{
path
:
"/wms/record"
,
name
:
"出入库记录"
,
...
...
This diff is collapsed.
Click to expand it.
src/components/AutoTable/index.jsx
View file @
97fa0889
...
...
@@ -137,7 +137,7 @@ export default (props) => {
<
div
style=
{
{
display
:
"flex"
,
width
:
"100%"
}
}
>
{
(
props
.
childposition
==
"left"
||
!
props
.
childposition
)
&&
props
.
children
}
<
div
style=
{
{
flex
:
1
,
overflow
:
"hidden"
}
}
>
<
div
style=
{
{
flex
:
1
,
overflow
:
"hidden"
}
}
>
{
props
.
childposition
==
"top"
&&
props
.
children
}
<
Mtable
{
...
props
}
/>
</
div
>
...
...
This diff is collapsed.
Click to expand it.
src/components/AutoTable/mtable.jsx
View file @
97fa0889
...
...
@@ -24,7 +24,6 @@ const Mtable = (props) => {
}
=
props
;
console
.
log
(
'额外参数'
,
extraparams
);
const
actionRefs
=
actionRef
??
useRef
(),
formRefs
=
formRef
??
useRef
(),
...
...
@@ -35,7 +34,6 @@ const Mtable = (props) => {
//调用接口
const
request
=
async
(
params
,
sort
,
filter
)
=>
{
console
.
log
(
'request'
,
extraparams
);
if
(
!
path
)
return
;
let
newparams
=
{
...
params
,
...
...
This diff is collapsed.
Click to expand it.
src/pages/Printer/fields.js
0 → 100644
View file @
97fa0889
import
{
factorySelect
,
shopSelectByFactory
,
productionLineSelectByShop
,
sectionSelectByShop
,
}
from
"@/services/system"
;
export
default
{
stationNo
:
{
value
:
null
,
type
:
"input"
,
title
:
"工位编号"
,
name
:
[
"stationNo"
],
required
:
true
,
},
stationName
:
{
value
:
null
,
type
:
"input"
,
title
:
"工位名称"
,
name
:
[
"stationName"
],
required
:
true
,
},
factoryId
:
{
value
:
null
,
type
:
"select"
,
title
:
"所属工厂"
,
name
:
[
"factoryId"
],
required
:
true
,
options
:
{
database
:
factorySelect
,
params
:
{},
},
linked
:
true
,
},
status
:
{
value
:
null
,
type
:
"select"
,
title
:
"启用状态"
,
name
:
[
"status"
],
required
:
true
,
options
:
[
{
label
:
"启用"
,
value
:
1
,
},
{
label
:
"禁用"
,
value
:
0
,
},
],
},
remark
:
{
value
:
null
,
type
:
"textarea"
,
title
:
"描述"
,
name
:
[
"remark"
],
required
:
false
,
col
:
{
span
:
24
},
},
};
This diff is collapsed.
Click to expand it.
src/pages/Printer/index.jsx
0 → 100644
View file @
97fa0889
import
React
,
{
useEffect
,
useRef
,
useReducer
,
useState
}
from
"react"
;
import
{
Button
,
Tooltip
,
Row
,
Divider
,
Drawer
}
from
"antd"
;
import
AutoTable
from
"@/components/AutoTable"
;
import
getPrem
from
"@/utils/getPrem"
;
//权限判断fn
import
{
useRequest
}
from
"umi"
;
import
defaultFields
from
"./fields"
;
import
{
doFetch
}
from
"@/utils/doFetch"
;
import
InitForm
from
"@/components/InitForm"
;
import
Details
from
"@/components/Details"
;
import
{
stationDetail
}
from
"@/utils/detailTotalCard"
;
import
Coltext
from
"@/components/Coltext"
;
const
Station
=
(
props
)
=>
{
let
actionRef
=
useRef
(),
formRef
=
useRef
(),
ChildRef
=
null
;
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"
});
}
},
}),
columns
=
[
{
title
:
"物料编码"
,
dataIndex
:
"materieCode"
,
key
:
"materieCode"
,
},
{
title
:
"物料名称"
,
dataIndex
:
"materieName"
,
key
:
"materieName"
,
},
{
title
:
"规格型号"
,
dataIndex
:
"specificationModel"
,
key
:
"specificationModel"
,
},
{
title
:
"数量"
,
dataIndex
:
"weight"
,
key
:
"weight"
,
search
:
false
,
},
{
title
:
"批号"
,
dataIndex
:
"materieControlNo"
,
key
:
"materieControlNo"
,
},
{
title
:
"供应商"
,
dataIndex
:
"supplierName"
,
key
:
"supplierName"
,
search
:
false
,
},
{
title
:
"宽度"
,
dataIndex
:
"width"
,
key
:
"width"
,
search
:
false
,
},
{
title
:
"片厚"
,
dataIndex
:
"sheetThickness"
,
key
:
"sheetThickness"
,
search
:
false
,
},
{
title
:
"铁损"
,
dataIndex
:
"ironLoss"
,
key
:
"ironLoss"
,
search
:
false
,
},
{
title
:
"单边厚度"
,
dataIndex
:
"unilateralThickness"
,
key
:
"unilateralThickness"
,
search
:
false
,
},
{
title
:
"创建人"
,
dataIndex
:
"createUserName"
,
key
:
"createUserName"
,
search
:
false
,
},
{
title
:
"单据日期"
,
dataIndex
:
"orderDate"
,
key
:
"orderDate"
,
search
:
false
,
},
];
const
[
drawer
,
setDrawer
]
=
useState
({
visible
:
false
,
});
let
saveData
=
(
values
,
fn
)
=>
{
let
newfields
=
JSON
.
parse
(
JSON
.
stringify
(
values
));
//新增&修改
let
difrid
=
iftype
.
val
==
"edit"
?
{
id
:
curitem
.
id
}
:
{};
run
({
url
:
"/ngic-auth/sysStation/save"
,
params
:
{
...
newfields
,
...
difrid
},
});
};
const
OptionsBtn
=
()
=>
{
return
(
<>
<
Button
type=
"primary"
style=
{
{
marginRight
:
8
}
}
onClick=
{
()
=>
{
setDrawer
((
v
)
=>
({
...
v
,
visible
:
true
,
title
:
" 卷料分卷打码"
}));
}
}
>
卷料分卷打码
</
Button
>
<
Button
type=
"primary"
onClick=
{
()
=>
{
setDrawer
((
v
)
=>
({
...
v
,
visible
:
true
,
title
:
" 子卷补码"
}));
}
}
>
子卷补码
</
Button
>
</>
);
};
return
(
<
div
>
<
AutoTable
pagetitle=
{
props
.
route
.
name
}
//页面标题
pageextra=
{
OptionsBtn
()
}
//页面操作 新增or批量删除
columns=
{
columns
}
path=
"/ngic-workmanship/wmsMaterieLabel/page"
actionRef=
{
actionRef
}
onRef=
{
(
node
)
=>
(
ChildRef
=
node
)
}
></
AutoTable
>
<
Drawer
title=
{
drawer
?.
title
}
visible=
{
drawer
?.
visible
}
onClose=
{
()
=>
setDrawer
((
v
)
=>
({
...
v
,
visible
:
false
}))
}
footer=
{
false
}
destroyOnClose=
{
true
}
getContainer=
{
false
}
style=
{
{
position
:
"absolute"
}
}
width=
{
"100%"
}
>
<
InitForm
formRef=
{
formRef
}
fields=
{
defaultFields
}
onChange=
{
(
changedValues
,
allValues
)
=>
{}
}
actions=
{
()
=>
{
return
null
;
}
}
></
InitForm
>
<
Button
style=
{
{
width
:
"100%"
}
}
type=
"primary"
size=
"large"
// loading={loading || !vs}
onClick=
{
()
=>
saveData
()
}
>
保存
</
Button
>
<
Button
style=
{
{
width
:
"100%"
}
}
type=
"primary"
size=
"large"
// loading={loading || !vs}
onClick=
{
()
=>
saveData
()
}
>
保存并打印
</
Button
>
</
Drawer
>
</
div
>
);
};
export
default
Station
;
This diff is collapsed.
Click to expand it.
src/pages/craft/Materiel/index.jsx
View file @
97fa0889
...
...
@@ -175,51 +175,51 @@ const Materiel = (props) => {
title
:
"物料名称"
,
dataIndex
:
"materieName"
,
key
:
"materieName"
,
//
render: (_, row) => {
//
return (
//
<Tooltip title={row.materieName}>
//
<a
//
className="table-cell"
//
onClick={() => {
//
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;
render
:
(
_
,
row
)
=>
{
return
(
<
Tooltip
title=
{
row
.
materieName
}
>
<
a
className=
"table-cell"
onClick=
{
()
=>
{
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,
//
},
//
];
//
dataSource.newqualityGuaranteePeriod =
//
dataSource.qualityGuaranteePeriod == 0 ||
//
dataSource.qualityGuaranteePeriod
//
? dataSource.qualityGuaranteePeriod +
//
dataSource.qualityGuaranteePeriodUnitName
//
: null;
//
let totalCard = materielDetail.concat(itemCol);
//
dispatch({ type: "see", dataSource, totalCard });
//
}
//
});
//
}}
//
>
//
{row.materieName}
//
</a>
//
</Tooltip>
//
);
//
},
let
newSpecialData
=
newData
.
map
((
it
)
=>
{
dataSource
[
it
.
fieldsKey
]
=
it
.
fieldRealValue
;
return
{
title
:
it
.
fieldName
,
key
:
it
.
fieldsKey
,
};
});
let
itemCol
=
[
{
cardTitle
:
"特殊属性"
,
itemData
:
newSpecialData
,
},
];
dataSource
.
newqualityGuaranteePeriod
=
dataSource
.
qualityGuaranteePeriod
==
0
||
dataSource
.
qualityGuaranteePeriod
?
dataSource
.
qualityGuaranteePeriod
+
dataSource
.
qualityGuaranteePeriodUnitName
:
null
;
let
totalCard
=
materielDetail
.
concat
(
itemCol
);
dispatch
({
type
:
"see"
,
dataSource
,
totalCard
});
}
});
}
}
>
{
row
.
materieName
}
</
a
>
</
Tooltip
>
);
},
},
{
title
:
"物料类型"
,
...
...
This diff is collapsed.
Click to expand it.
src/pages/findstore/Storesearch/index.jsx
View file @
97fa0889
This diff is collapsed.
Click to expand it.
src/pages/findstore/Storesearch/indexcopy.jsx
0 → 100644
View file @
97fa0889
import
{
MenuUnfoldOutlined
,
MenuFoldOutlined
,
HomeOutlined
}
from
'@ant-design/icons'
;
import
{
Breadcrumb
,
Layout
,
Menu
,
Input
,
Modal
,
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
=
(
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
},
{
"title"
:
"库存信息"
,
"valueType"
:
"option"
,
"width"
:
88
,
"search"
:
false
,
"render"
:
(
dom
,
record
)
=>
{
return
<
a
onClick=
{
()
=>
{
Modal
.
info
({
title
:
"库存信息"
,
width
:
1200
,
okText
:
"知道了"
,
content
:
(
<
div
>
<
AutoTable
withCard=
{
false
}
columns=
{
[
{
"title"
:
"仓库编号"
,
"dataIndex"
:
"storeCode"
,
"key"
:
"storeCode"
,
},
{
"title"
:
"仓库名称"
,
"dataIndex"
:
"storeName"
,
"key"
:
"storeName"
},
{
"title"
:
"库位名称"
,
"dataIndex"
:
"storePositionName"
,
"key"
:
"storePositionName"
},
{
"title"
:
"批次号/SN号"
,
"dataIndex"
:
"materieControlNo"
,
"key"
:
"materieControlNo"
},
{
"title"
:
"供应商编号"
,
"dataIndex"
:
"supplierNo"
,
"key"
:
"supplierNo"
},
{
"title"
:
"供应商名称"
,
"dataIndex"
:
"supplierName"
,
"key"
:
"supplierName"
},
{
"title"
:
"库存数量"
,
"dataIndex"
:
"stroeNum"
,
"key"
:
"stroeNum"
,
search
:
false
},
]
}
path=
"/ngic-workmanship/wmsMaterieStore/queryPositionList"
extraparams=
{
{
level
:
select
.
level
??
0
,
key
:
select
.
selectedKeys
??
""
,
materieId
:
record
.
materieId
}
}
>
</
AutoTable
>
</
div
>
)
})
}
}
>
查看
</
a
>
}
}
]
const
tableprops
=
{
...
props
,
pageextra
:
"none"
,
columns
,
path
:
"/ngic-workmanship/wmsMaterieStock/queryStockList"
,
extraparams
:
{
level
:
select
.
level
??
0
,
key
:
select
.
selectedKeys
??
""
}
}
return
(
<
Layout
style=
{
{
height
:
'100%'
,
}
}
>
<
Sider
theme=
'light'
collapsed=
{
collapsed
}
width=
{
260
}
>
<
div
style=
{
{
padding
:
12
,
justifyContent
:
"space-between"
,
paddingBottom
:
collapsed
?
12
:
0
,
alignItems
:
"center"
,
display
:
"flex"
,
flexDirection
:
!
collapsed
?
"row"
:
"column"
}
}
>
<
p
className=
{
styles
.
title
}
style=
{
{
marginBottom
:
!
collapsed
?
0
:
12
}
}
>
<
HomeOutlined
/>
{
!
collapsed
?
<
span
style=
{
{
marginLeft
:
6
}
}
>
仓库库位
</
span
>
:
""
}
</
p
>
{
collapsed
?
(
<
MenuUnfoldOutlined
style=
{
{
cursor
:
"pointer"
,
fontSize
:
20
}
}
onClick=
{
()
=>
{
setCollapsed
(
!
collapsed
)
}
}
/>
)
:
(
<
MenuFoldOutlined
style=
{
{
cursor
:
"pointer"
,
fontSize
:
20
}
}
onClick=
{
()
=>
{
setCollapsed
(
!
collapsed
)
}
}
/>
)
}
</
div
>
{
!
collapsed
?
<
div
style=
{
{
padding
:
collapsed
?
0
:
12
}
}
>
<
TreeRender
url=
"/ngic-auth/sysStore/queryTreeList"
params=
{
{}
}
noaction=
{
true
}
maxWidth=
{
140
}
onselected=
{
(
selectedKeys
,
e
,
alldata
)
=>
{
setselect
(
selectedKeys
[
0
]
?
{
title
:
e
.
node
.
title
,
selectedKeys
:
selectedKeys
[
0
],
level
:
alldata
.
filter
(
it
=>
it
.
key
==
selectedKeys
[
0
])[
0
]?.
level
,
key
:
e
.
node
.
key
}
:
{
})
}
}
>
</
TreeRender
>
</
div
>
:
<
div
onDoubleClick=
{
()
=>
{
setCollapsed
(
false
)
}
}
style=
{
{
writingMode
:
"vertical-lr"
,
width
:
"100%"
,
textAlign
:
"center"
,
height
:
"80vh"
,
display
:
"flex"
,
justifyContent
:
"center"
,
alignItems
:
"center"
,
userSelect
:
"none"
}
}
>
双击此处展开
</
div
>
}
</
Sider
>
<
Layout
className=
{
styles
.
sitelayout
}
>
<
Content
style=
{
{
margin
:
'0 0 6px 6px'
,
display
:
"flex"
,
flexDirection
:
"column"
}
}
>
<
Breadcrumb
style=
{
{
margin
:
'8px 6px'
,
}
}
>
<
Breadcrumb
.
Item
>
物料库存
</
Breadcrumb
.
Item
>
{
select
.
key
!=
"00000000"
&&
<
Breadcrumb
.
Item
style=
{
{
maxWidth
:
600
}
}
>
{
select
.
title
}
</
Breadcrumb
.
Item
>
}
</
Breadcrumb
>
<
div
className=
{
styles
.
sitelayoutbackground
}
style=
{
{
padding
:
6
,
height
:
"100%"
,
flex
:
1
}
}
>
<
AutoTable
{
...
tableprops
}
withCard=
{
false
}
></
AutoTable
>
</
div
>
</
Content
>
</
Layout
>
</
Layout
>
);
};
export
default
Storesearch
;
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/pages/historystore/Histore/index.jsx
View file @
97fa0889
...
...
@@ -4,14 +4,15 @@ import { ProTable } from "@ant-design/pro-table";
import
{
doFetch
}
from
"@/utils/doFetch"
;
import
AutoTable
from
"@/components/AutoTable"
;
function
Instore
(
props
)
{
const
columns
=
[
{
title
:
"操作时间"
,
dataIndex
:
"operateTime"
,
key
:
"operateTimeList"
,
width
:
300
,
valueType
:
"dateRange"
,
search
:
false
,
render
:
(
_
,
row
)
=>
{
return
<
div
>
{
row
.
operateTime
}
</
div
>;
},
...
...
@@ -25,6 +26,8 @@ function Instore(props) {
title
:
"物料编码"
,
dataIndex
:
"materieCode"
,
key
:
"materieCode"
,
width
:
300
,
search
:
false
,
},
{
title
:
"物料名称"
,
...
...
@@ -32,7 +35,7 @@ function Instore(props) {
key
:
"materieName"
,
},
{
title
:
"批次号
/SN号
"
,
title
:
"批次号"
,
dataIndex
:
"materieControlNo"
,
key
:
"materieControlNo"
,
},
...
...
@@ -41,6 +44,7 @@ function Instore(props) {
dataIndex
:
"currentNum"
,
key
:
"currentNum"
,
search
:
false
,
width
:
200
,
},
{
title
:
"操作数量"
,
...
...
@@ -53,41 +57,34 @@ function Instore(props) {
dataIndex
:
"productionUnitName"
,
key
:
"productionUnitName"
,
search
:
false
,
width
:
280
,
},
{
title
:
"操作类型"
,
dataIndex
:
"stockDetailTypeName"
,
key
:
"stockDetailTypeName"
,
},
{
title
:
"仓库"
,
title
:
"仓库名称"
,
dataIndex
:
"storeName"
,
key
:
"storeId"
,
fieldProps
:
{
allowClear
:
true
,
showSearch
:
true
,
},
options
:
{
database
:
()
=>
doFetch
({
url
:
"/ngic-auth/sysStore/selectionBox"
,
params
:
{
factoryIdList
:
[]
},
}),
params
:
{},
},
valueType
:
"select"
,
key
:
"storeName"
,
search
:
false
,
},
{
title
:
"库位"
,
dataIndex
:
"storePositionName"
,
key
:
"storePositionName"
,
search
:
false
,
},
{
title
:
"操作类型"
,
dataIndex
:
"stockDetailTypeName"
,
key
:
"stockDetailTypeName"
,
width
:
280
,
},
{
title
:
"相关单号"
,
dataIndex
:
"relatedNo"
,
key
:
"relatedNo"
,
search
:
false
,
},
]
]
;
return
(
<
div
>
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/Reservoir/fields.js
View file @
97fa0889
...
...
@@ -70,7 +70,7 @@ export default {
type
:
"select"
,
name
:
[
"status"
],
title
:
"库位状态"
,
required
:
tru
e
,
required
:
fals
e
,
options
:
[
{
label
:
"启用"
,
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/Reservoir/index.jsx
View file @
97fa0889
...
...
@@ -272,6 +272,7 @@ const Materiel = (props) => {
title
:
"状态"
,
dataIndex
:
"status"
,
key
:
"status"
,
search
:
false
,
render
:
(
_
,
row
)
=>
<
span
>
{
row
?.
status
==
"1"
?
"启用"
:
"禁用"
}
</
span
>,
},
{
...
...
This diff is collapsed.
Click to expand it.
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