Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
梁建民
/
wmsApp
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1a7fd801
authored
Jun 26, 2023
by
LJM
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
容器
parent
a2d83000
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
923 additions
and
44 deletions
assets/css/container/index.scss
assets/css/putaway/record.scss
desktop.ini
pages.json
pages/arrivalRegister/index.vue
pages/arrivalRegister/registered.vue
pages/container/index.vue
pages/index/index.vue
pages/putaway/index.vue
pages/putaway/packSingle.vue
pages/putaway/record.vue
pages/stockRecheck/print.vue
pages/tallyReceive/index.vue
pages/tallyReceive/record.vue
util/api.js
assets/css/container/index.scss
0 → 100644
View file @
1a7fd801
.page-container
{
padding
:
15rpx
22rpx
;
.search-box
{
border
:
1px
solid
transparent
;
height
:
60rpx
;
background
:
#ffffff
;
border-radius
:
10rpx
;
padding
:
0
18rpx
0
0
;
.sn
{
width
:
164rpx
;
height
:
35rpx
;
border-right
:
1px
solid
#f0f0f2
;
.uni-input
{
font-size
:
18rpx
;
color
:
#292b33
;
font-weight
:
bold
;
}
.uni-arrow
{
width
:
14rpx
;
height
:
9rpx
;
background
:
url('https://img.ichunt.com/images/ichunt/202304/10/e4c72319ad41ce1425f71cc6ec35f111.png')
no-repeat
center
;
background-size
:
contain
;
margin-left
:
12rpx
;
}
}
.search-bar
{
position
:
relative
;
width
:
calc
(
100%
-
164rpx
);
.icon-juxing1
{
font-size
:
30rpx
;
color
:
#919399
;
margin-left
:
17rpx
;
margin-right
:
13rpx
;
}
.uni-input
{
font-size
:
18rpx
;
color
:
#484b59
;
}
.icon-a-juxing11
{
font-size
:
30rpx
;
color
:
#c6c7cc
;
margin-left
:
15rpx
;
}
.icon-juxing3
{
font-size
:
30rpx
;
color
:
#c6c7cc
;
}
.icon-zimu-M
{
font-size
:
30rpx
;
color
:
#c6c7cc
;
margin-left
:
15rpx
;
}
}
.text
{
padding-left
:
30rpx
;
width
:
164rpx
;
height
:
35rpx
;
line-height
:
35rpx
;
border-right
:
1px
solid
#f0f0f2
;
font-size
:
18rpx
;
color
:
#292b33
;
font-weight
:
bold
;
}
}
.search-type
{
margin-top
:
10rpx
;
height
:
60rpx
;
border-radius
:
10rpx
;
background-color
:
#ffffff
;
.text
{
padding-left
:
30rpx
;
width
:
164rpx
;
height
:
35rpx
;
line-height
:
35rpx
;
border-right
:
1px
solid
#f0f0f2
;
font-size
:
18rpx
;
color
:
#292b33
;
font-weight
:
bold
;
}
.search-width
{
width
:
calc
(
100%
-
164rpx
);
padding-right
:
22rpx
;
height
:
100%
;
.icon-juxing1
{
font-size
:
30rpx
;
color
:
#919399
;
margin-left
:
17rpx
;
margin-right
:
13rpx
;
}
.uni-input
{
width
:
80%
;
height
:
60rpx
;
font-size
:
18rpx
;
color
:
#484b59
;
}
.uni-arrow
{
width
:
14rpx
;
height
:
9rpx
;
background
:
url('https://img.ichunt.com/images/ichunt/202304/10/e4c72319ad41ce1425f71cc6ec35f111.png')
no-repeat
center
;
background-size
:
contain
;
margin-left
:
12rpx
;
}
.wrap
{
width
:
100%
;
height
:
100%
;
}
}
}
.radio-wrap
{
padding
:
22rpx
0
;
label
{
margin-right
:
10rpx
;
}
text
{
font-size
:
18rpx
;
color
:
#292b33
;
margin-left
:
5rpx
;
}
}
.list
{
margin-top
:
15rpx
;
padding-bottom
:
150rpx
;
flex-wrap
:
wrap
;
.box
{
position
:
relative
;
padding
:
15rpx
17rpx
17rpx
17rpx
;
width
:
345rpx
;
background
:
#ffffff
;
box-shadow
:
0px
3rpx
3rpx
0px
rgba
(
198
,
199
,
204
,
0
.3
);
border
:
1px
solid
transparent
;
border-radius
:
10rpx
;
margin-right
:
15rpx
;
margin-bottom
:
15rpx
;
border
:
1px
solid
transparent
;
.check-box-icon
{
position
:
absolute
;
right
:
18rpx
;
top
:
17rpx
;
width
:
20rpx
;
height
:
20rpx
;
background
:
url('https://img.ichunt.com/images/ichunt/202304/11/0bf30da3e8ce6c476c210173b5f13d51.png')
no-repeat
center
;
background-size
:
contain
;
display
:
block
;
}
&
.curr
{
border
:
1px
solid
#1969f9
;
.check-box-icon
{
background
:
url('https://img.ichunt.com/images/ichunt/202304/11/71a74e52e94bcf2e89f8df9817d494c6.png')
no-repeat
center
;
background-size
:
contain
;
}
}
&
:nth-of-type
(
2n
)
{
margin-right
:
0
;
}
.bor
{
height
:
1px
;
background-color
:
#f0f0f2
;
margin-bottom
:
10rpx
;
}
.text-item
{
margin-bottom
:
13rpx
;
}
.label
{
width
:
98rpx
;
font-size
:
16rpx
;
color
:
#919399
;
}
.t1
{
font-size
:
16rpx
;
color
:
#1969f9
;
}
.tt
{
width
:
calc
(
100%
-
93rpx
);
font-size
:
16rpx
;
color
:
#484b59
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
}
.desc
{
width
:
calc
(
100%
-
93rpx
);
font-size
:
16rpx
;
color
:
#484b59
;
word-break
:
break-all
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
display
:
-
webkit-box
;
-webkit-box-orient
:
vertical
;
-webkit-line-clamp
:
2
;
}
.ttt
{
width
:
calc
(
100%
-
93rpx
);
font-size
:
16rpx
;
color
:
#f98119
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
}
.btn-box
{
position
:
absolute
;
right
:
17rpx
;
bottom
:
13rpx
;
.btn
{
width
:
68rpx
;
height
:
30rpx
;
background
:
#1969f9
;
border-radius
:
8rpx
;
font-size
:
15rpx
;
color
:
#ffffff
;
}
.detail-btn
{
width
:
68rpx
;
height
:
30rpx
;
border-radius
:
8rpx
;
border
:
1px
solid
#c6c7cc
;
font-size
:
15rpx
;
color
:
#1969f9
;
}
}
}
}
.fix-btn
{
position
:
fixed
;
bottom
:
0
;
width
:
100%
;
left
:
0
;
z-index
:
999
;
.btn
{
width
:
100%
;
height
:
75rpx
;
background
:
#1969f9
;
font-size
:
23rpx
;
color
:
#ffffff
;
}
}
}
::v-deep
.uni-drawer__content
{
width
:
85%
!
important
;
}
.uni-drawer-container
{
width
:
100%
;
background-color
:
#ffffff
;
padding
:
22rpx
22rpx
0
22rpx
;
.title
{
position
:
relative
;
.iconfont
{
position
:
absolute
;
left
:
0
;
top
:
0
;
font-size
:
30rpx
;
color
:
#292b33
;
}
.text
{
font-size
:
23rpx
;
color
:
#292b33
;
font-weight
:
bold
;
}
}
.field-item
{
flex-wrap
:
wrap
;
.item
{
flex
:
0
0
50%
;
margin-bottom
:
8rpx
;
.label
{
width
:
114rpx
;
font-size
:
16rpx
;
color
:
#919399
;
}
.text
{
font-size
:
16rpx
;
color
:
#1969f9
;
margin-left
:
6rpx
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
max-width
:
176rpx
;
}
.tt
{
font-size
:
16rpx
;
color
:
#484b59
;
margin-left
:
6rpx
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
max-width
:
176rpx
;
}
}
}
.field-item-input
{
.item
{
margin-bottom
:
10rpx
;
.label
{
width
:
114rpx
;
font-size
:
16rpx
;
color
:
#919399
;
}
.input-box
{
width
:
calc
(
100%
-
114rpx
);
.uni-input
{
width
:
100%
;
height
:
40rpx
;
background
:
#ffffff
;
border-radius
:
10rpx
;
border
:
1px
solid
#1969f9
;
text-indent
:
15rpx
;
font-size
:
16rpx
;
}
}
}
}
.item-tit
{
font-size
:
20rpx
;
color
:
#292b33
;
font-weight
:
bold
;
margin-bottom
:
18rpx
;
}
.bor
{
height
:
1px
;
background-color
:
#f0f0f2
;
margin-bottom
:
17rpx
;
}
.btn
{
position
:
absolute
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
z-index
:
99
;
.btn1
{
width
:
100%
;
height
:
75rpx
;
background
:
#1969f9
;
font-size
:
23rpx
;
color
:
#ffffff
;
}
}
}
assets/css/putaway/record.scss
View file @
1a7fd801
...
...
@@ -111,9 +111,7 @@
overflow
:
hidden
;
}
.btn-box
{
position
:
absolute
;
right
:
17rpx
;
bottom
:
12rpx
;
justify-content
:
flex-end
;
.btn
{
width
:
68rpx
;
height
:
30rpx
;
...
...
desktop.ini
0 → 100644
View file @
1a7fd801
[.ShellClassInfo]
IconResource
=
C:
\W
INDOWS
\S
ystem32
\S
HELL32.dll,130
[ViewState]
Mode
=
Vid
=
FolderType
=
Generic
pages.json
View file @
1a7fd801
...
...
@@ -316,6 +316,11 @@
"style"
:
{
"navigationBarTitleText"
:
"标签补打"
}
},
{
"path"
:
"pages/container/index"
,
"style"
:
{
"navigationBarTitleText"
:
"容器维护"
}
}],
"globalStyle"
:
{
"navigationBarTextStyle"
:
"black"
,
...
...
pages/arrivalRegister/index.vue
View file @
1a7fd801
...
...
@@ -16,7 +16,7 @@
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.mobile_register_all_search"
@
input=
"handleInput(1, $event)"
/>
</
template
>
<
template
v-else-if=
"index == 1"
>
<input
class=
"uni-input"
placeholder=
"请输入入仓号"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.stock_in_with_stock_in_items_inhouse"
@
input=
"handleInput(2, $event)"
maxlength=
"7
"
/>
<input
class=
"uni-input"
placeholder=
"请输入入仓号"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.stock_in_with_stock_in_items_inhouse"
@
input=
"handleInput(2, $event)"
:maxlength=
"maxInputLength
"
/>
</
template
>
<
template
v-else-if=
"index == 2"
>
<input
class=
"uni-input"
placeholder=
"请输入FedEx"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.tracking_no"
@
input=
"handleInput(3, $event)"
style=
"width: 400rpx;"
/>
...
...
@@ -205,6 +205,7 @@ export default {
stock_in_with_stock_in_items_inhouse
:
''
,
//入仓单号
tracking_no
:
''
//fedex
},
maxInputLength
:
7
,
formParams
:
{
warehouse_id
:
''
,
logistics_company
:
''
,
...
...
@@ -321,6 +322,13 @@ export default {
if
(
type
==
1
)
{
this
.
searchParams
.
mobile_register_all_search
=
val
;
}
else
if
(
type
==
2
)
{
//入仓号
var
str
=
val
;
if
(
str
.
startsWith
(
'F'
))
{
this
.
maxInputLength
=
8
;
}
else
{
this
.
maxInputLength
=
7
;
}
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
val
;
}
else
if
(
type
==
3
)
{
var
last12
=
val
.
slice
(
22
);
// 截取后12位
...
...
pages/arrivalRegister/registered.vue
View file @
1a7fd801
...
...
@@ -16,7 +16,7 @@
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.mobile_register_all_search"
@
input=
"handleInput(1, $event)"
/>
</
template
>
<
template
v-else-if=
"index == 1"
>
<input
class=
"uni-input"
placeholder=
"请输入入仓号"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.stock_in_with_stock_in_items_inhouse"
@
input=
"handleInput(2, $event)"
maxlength=
"7
"
/>
<input
class=
"uni-input"
placeholder=
"请输入入仓号"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.stock_in_with_stock_in_items_inhouse"
@
input=
"handleInput(2, $event)"
:maxlength=
"maxInputLength
"
/>
</
template
>
</view>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput()"
v-if=
"input_flag"
></text>
...
...
@@ -160,6 +160,7 @@ export default {
filter_id
:
[],
//过滤id
detail
:
{},
//详情的数据
hasMoreData
:
true
,
//是否分页加载
maxInputLength
:
7
,
searchParams
:
{
mobile_register_all_search
:
''
,
//全量搜索
stock_in_with_stock_in_items_inhouse
:
''
//入仓单号
...
...
@@ -249,6 +250,13 @@ export default {
if
(
type
==
1
)
{
this
.
searchParams
.
mobile_register_all_search
=
val
;
}
else
if
(
type
==
2
)
{
//入仓号
var
str
=
val
;
if
(
str
.
startsWith
(
'F'
))
{
this
.
maxInputLength
=
8
;
}
else
{
this
.
maxInputLength
=
7
;
}
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
val
;
}
this
.
input_flag
=
true
;
...
...
pages/container/index.vue
0 → 100644
View file @
1a7fd801
<
template
>
<view
class=
"page-container"
>
<view
class=
"search-box row bothSide verCenter"
>
<view
class=
"sn row rowCenter verCenter"
>
<picker
@
change=
"bindPickerChange"
:value=
"index"
:range=
"array"
>
<view
class=
"row verCenter"
>
<view
class=
"uni-input"
>
{{
array
[
index
]
}}
</view>
<view
class=
"uni-arrow"
></view>
</view>
</picker>
</view>
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<template
v-if=
"index == 0"
>
<input
class=
"uni-input"
placeholder=
"请扫描或输入容器编码"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.container_sn"
@
input=
"handleInput(1, $event)"
/>
</
template
>
</view>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput()"
v-if=
"input_flag"
></text>
</view>
</view>
<view
class=
"radio-wrap row verCenter"
>
<radio-group
name=
"radio"
@
change=
"radioChange($event, 1)"
>
<label>
<radio
value=
"0"
style=
"transform:scale(0.7)"
color=
"#1969f9"
checked=
"true"
/>
<text>
近1月
</text>
</label>
<label>
<radio
value=
"1"
style=
"transform:scale(0.7)"
color=
"#1969f9"
/>
<text>
近3月
</text>
</label>
<label>
<radio
value=
"2"
style=
"transform:scale(0.7)"
color=
"#1969f9"
/>
<text>
全部
</text>
</label>
</radio-group>
</view>
<view
class=
"list row bothSide"
v-if=
"list.length > 0"
>
<view
class=
"box"
v-for=
"(item, index) in list"
:key=
"index"
:class=
"{ curr: filter_list[index] }"
style=
"padding-bottom: 50rpx;"
>
<view
class=
"check-box-icon"
@
click=
"filterChange(index)"
></view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
容器编码:
</text>
<text
class=
"t1"
>
{{ item.container_sn }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
容器名称:
</text>
<text
class=
"t1"
>
{{ item.container_name }}
</text>
</view>
<view
class=
"bor row"
></view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
长*宽*高:
</text>
<text
class=
"tt"
>
{{ item.length }}{{ item.width }}{{ item.height }}(cm)
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
净重kg:
</text>
<text
class=
"tt"
>
{{ item.actual_weight }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
毛重kg:
</text>
<text
class=
"tt"
>
{{ item.rough_weight }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
当前库存数:
</text>
<text
class=
"tt"
>
{{ item.stock_items_num }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
更新时间:
</text>
<text
class=
"tt"
>
{{ item.update_time }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
更新人:
</text>
<text
class=
"tt"
>
{{ item.update_name }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
创建时间:
</text>
<text
class=
"tt"
>
{{ item.create_time }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
创建人:
</text>
<text
class=
"tt"
>
{{ item.create_name }}
</text>
</view>
<view
class=
"text-item row"
>
<text
class=
"label"
>
备注:
</text>
<text
class=
"desc"
>
{{ item.remark }}
</text>
</view>
<view
class=
"btn-box row"
><view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(item)"
>
修改
</view></view>
</view>
</view>
<view
class=
"no-date column rowCenter verCenter"
v-else
>
<text
class=
"iconfont icon-a-juxing21"
></text>
<text
class=
"text"
>
查不到当前数据
</text>
</view>
<view
class=
"fix-btn row verCenter"
><view
class=
"btn row rowCenter verCenter"
@
click=
"exportContainerStock()"
>
导出容器库存
</view></view>
<!-- 理货详情弹窗 -->
<uni-drawer
ref=
"showRight"
mode=
"right"
>
<view
class=
"uni-drawer-container"
v-if=
"detail"
>
<view
class=
"title row rowCenter verCenter"
>
<text
class=
"iconfont icon-juxing2"
@
click=
"closeDrawer()"
></text>
<text
class=
"text"
>
修改
</text>
</view>
<view
class=
"field-item row"
style=
"margin-top: 39rpx;"
>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
容器编码:
</text>
<text
class=
"text"
>
{{ detail.container_sn }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
当前库存条数:
</text>
<text
class=
"text"
>
{{ detail.stock_items_num }}
</text>
</view>
</view>
<view
class=
"bor"
></view>
<view
class=
"field-item-input"
>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
容器名称:
</text>
<view
class=
"input-box"
><input
type=
"text"
v-model=
"foramParams.container_name"
class=
"uni-input"
/></view>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
长*宽*高:
</text>
<view
class=
"input-box row"
>
<input
type=
"text"
v-model=
"foramParams.length"
class=
"uni-input"
style=
"width: 33.3%;"
/>
<input
type=
"text"
v-model=
"foramParams.width"
class=
"uni-input"
style=
"width: 33.3%;"
/>
<input
type=
"text"
v-model=
"foramParams.height"
class=
"uni-input"
style=
"width: 33.3%;"
/>
</view>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
净重kg:
</text>
<view
class=
"input-box"
><input
type=
"text"
v-model=
"foramParams.actual_weight"
class=
"uni-input"
/></view>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
毛重kg:
</text>
<view
class=
"input-box"
><input
type=
"text"
v-model=
"foramParams.rough_weight"
class=
"uni-input"
/></view>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
备注:
</text>
<view
class=
"input-box"
><input
type=
"text"
v-model=
"foramParams.remark"
class=
"uni-input"
/></view>
</view>
</view>
<view
class=
"bor"
></view>
<view
class=
"field-item row"
>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
更新时间:
</text>
<text
class=
"tt"
>
{{ detail.update_time }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
更新人:
</text>
<text
class=
"tt"
>
{{ detail.update_name }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
创建时间:
</text>
<text
class=
"tt"
>
{{ detail.create_time }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
创建人:
</text>
<text
class=
"tt"
>
{{ detail.create_name }}
</text>
</view>
</view>
<view
class=
"btn row verCenter bothSide"
><view
class=
"btn1 row rowCenter verCenter"
@
click=
"update()"
>
保存
</view></view>
</view>
</uni-drawer>
</view>
</template>
<
script
>
import
{
API
}
from
'@/util/api.js'
;
import
debounce
from
'lodash/debounce'
;
import
{
createArray
}
from
'@/util/util.js'
;
export
default
{
data
()
{
return
{
page
:
1
,
limit
:
50
,
input_flag
:
false
,
index
:
0
,
array
:
[
'容器编码'
],
list
:
[],
filter_list
:
[],
//筛选已选中的列表
filter_id
:
[],
///筛选已选中id
detail
:
{},
//详情的数据
hasMoreData
:
true
,
//是否分页加载
searchParams
:
{
search_date
:
''
,
//日期
container_sn
:
''
//容器编码
},
foramParams
:
{
id
:
''
,
container_name
:
''
,
length
:
''
,
width
:
''
,
height
:
''
,
rough_weight
:
''
,
actual_weight
:
''
,
remark
:
''
}
};
},
onReachBottom
()
{
if
(
!
this
.
hasMoreData
)
{
return
;
}
this
.
page
++
;
this
.
getData
();
},
onNavigationBarButtonTap
(
e
)
{
if
(
e
.
index
==
0
)
{
uni
.
reLaunch
({
url
:
'/pages/index/index'
});
}
},
onShow
()
{
this
.
resetChange
();
this
.
getData
();
},
methods
:
{
/**
* 日期
*/
getRecentMonthDateRange
(
val
)
{
// 获取当前日期
const
currentDate
=
new
Date
();
// 获取一个月前的日期
const
oneMonthAgoDate
=
new
Date
(
currentDate
);
if
(
val
==
0
)
{
oneMonthAgoDate
.
setMonth
(
oneMonthAgoDate
.
getMonth
()
-
1
);
}
else
if
(
val
==
1
)
{
oneMonthAgoDate
.
setMonth
(
oneMonthAgoDate
.
getMonth
()
-
3
);
}
// 格式化日期为 "yyyy-MM-dd" 格式
const
formatDate
=
date
=>
{
const
year
=
date
.
getFullYear
();
const
month
=
(
date
.
getMonth
()
+
1
).
toString
().
padStart
(
2
,
'0'
);
const
day
=
date
.
getDate
()
.
toString
()
.
padStart
(
2
,
'0'
);
return
`
${
year
}
-
${
month
}
-
${
day
}
`
;
};
// 连接两个格式化后的日期,用 '~' 分隔
return
`
${
formatDate
(
oneMonthAgoDate
)}
~
${
formatDate
(
currentDate
)}
`
;
},
radioChange
(
e
,
type
)
{
this
.
resetChange
();
if
(
type
==
1
)
{
if
(
e
.
detail
.
value
==
2
)
{
this
.
searchParams
.
search_date
=
''
;
}
else
{
this
.
searchParams
.
search_date
=
this
.
getRecentMonthDateRange
(
e
.
detail
.
value
);
}
}
this
.
getData
();
},
bindPickerChange
:
function
(
e
)
{
console
.
log
(
'picker发送选择改变,携带值为'
,
e
.
detail
.
value
);
this
.
index
=
e
.
detail
.
value
;
},
/**
* 导出
*/
exportContainerStock
()
{
this
.
request
(
API
.
exportContainerStock
,
'POST'
,
{
ids
:
decodeURIComponent
(
this
.
filter_id
.
join
(
','
))
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
});
}
});
},
/**
* 找出false对应的下标
* @param {Object} arr
* @param {Object} target
*/
findIndex
(
arr
,
target
)
{
const
result
=
[];
arr
.
map
((
item
,
index
)
=>
{
if
(
item
===
target
)
{
result
.
push
(
index
);
}
});
return
result
;
},
/**
* 筛选过滤出选中的元素
*/
filterChange
(
index
)
{
this
.
$set
(
this
.
filter_list
,
index
,
(
this
.
filter_list
[
index
]
=
!
this
.
filter_list
[
index
]));
let
filter_arr
=
this
.
findIndex
(
this
.
filter_list
,
true
);
this
.
filter_id
=
filter_arr
.
map
(
i
=>
this
.
list
[
i
].
id
);
},
/**
* 清空数据
*/
clearInput
()
{
this
.
resetChange
();
this
.
input_flag
=
false
;
if
(
this
.
index
==
0
)
{
this
.
searchParams
.
container_sn
=
''
;
}
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput
:
debounce
(
function
(
type
,
event
)
{
this
.
resetChange
();
var
val
=
event
.
target
.
value
;
this
.
searchParams
.
container_sn
=
''
;
if
(
val
)
{
if
(
type
==
1
)
{
this
.
searchParams
.
container_sn
=
val
;
}
this
.
input_flag
=
true
;
}
else
{
this
.
input_flag
=
false
;
}
this
.
getData
();
},
500
),
showDrawer
(
data
)
{
this
.
$refs
.
showRight
.
open
();
this
.
detail
=
data
;
this
.
foramParams
.
id
=
data
.
id
;
this
.
foramParams
.
container_name
=
data
.
container_name
;
this
.
foramParams
.
length
=
data
.
length
;
this
.
foramParams
.
width
=
data
.
width
;
this
.
foramParams
.
height
=
data
.
height
;
this
.
foramParams
.
actual_weight
=
data
.
actual_weight
;
this
.
foramParams
.
rough_weight
=
data
.
rough_weight
;
this
.
foramParams
.
remark
=
data
.
remark
;
},
closeDrawer
()
{
this
.
$refs
.
showRight
.
close
();
},
/**
* 获取列表数据
*/
getData
()
{
this
.
request
(
API
.
getContainerList
,
'GET'
,
{
page
:
this
.
page
,
limit
:
this
.
limit
,
...
this
.
searchParams
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
if
(
res
.
data
.
total
>
0
)
{
this
.
hasMoreData
=
true
;
this
.
list
=
this
.
list
.
concat
(
res
.
data
.
list
);
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
false
);
}
else
{
this
.
hasMoreData
=
false
;
}
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
});
}
});
},
update
()
{
this
.
request
(
API
.
containerUpdate
,
'POST'
,
this
.
foramParams
,
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'保存成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
resetChange
();
this
.
closeDrawer
();
this
.
getData
();
},
2000
);
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
});
}
});
},
/**
* 重置
*/
resetChange
()
{
this
.
list
=
[];
this
.
page
=
1
;
}
}
};
</
script
>
<
style
scoped
lang=
"scss"
>
@import
'@/assets/css/container/index.scss'
;
</
style
>
pages/index/index.vue
View file @
1a7fd801
...
...
@@ -30,6 +30,10 @@
<view
class=
"box row rowCenter verCenter"
><image
src=
"/static/home/@2x(8).png"
></image></view>
<text
class=
"text"
>
按货品上架
</text>
</navigator>
<navigator
class=
"box-li column rowCenter verCenter"
url=
"/pages/container/index"
hover-class=
"none"
>
<view
class=
"box row rowCenter verCenter"
><image
src=
"/static/home/@2x(8).png"
></image></view>
<text
class=
"text"
>
容器维护
</text>
</navigator>
<navigator
class=
"box-li column rowCenter verCenter"
url=
"/pages/picking/index"
hover-class=
"none"
>
<view
class=
"box row rowCenter verCenter"
><image
src=
"/static//home/@2x(4).png"
></image></view>
<text
class=
"text"
>
拣货
</text>
...
...
pages/putaway/index.vue
View file @
1a7fd801
...
...
@@ -66,6 +66,10 @@
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"tt"
>
{{ item.sale_user }}
</text>
</view>
<view
class=
"text-item row verCenter"
v-if=
"item.customer_material_number"
>
<text
class=
"label"
>
客户物料编码:
</text>
<text
class=
"tt"
>
{{ item.customer_material_number }}
</text>
</view>
<view
class=
"text-item row"
>
<text
class=
"label"
>
客户:
</text>
<text
class=
"desc"
>
{{ item.customer_name }}
</text>
...
...
pages/putaway/packSingle.vue
View file @
1a7fd801
...
...
@@ -67,6 +67,10 @@
<text
class=
"label"
>
产 地:
</text>
<text
class=
"tt"
>
{{
item
.
coo
}}
</text>
</view>
<view
class=
"text-item row verCenter"
v-if=
"item.customer_material_number"
>
<text
class=
"label"
style=
"width: 108rpx;"
>
客户物料编码:
</text>
<text
class=
"tt"
>
{{
item
.
customer_material_number
}}
北京格分维科技有限公司
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
理货数量:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
{{
item
.
tally_qty
}}
</text>
...
...
pages/putaway/record.vue
View file @
1a7fd801
...
...
@@ -99,6 +99,10 @@
<text
class=
"label"
>
采 购 员:
</text>
<text
class=
"tt"
>
{{ item.purchase_user }}
</text>
</view>
<view
class=
"text-item row verCenter"
v-if=
"item.customer_material_number"
>
<text
class=
"label"
style=
"width: 130rpx;"
>
客户物料编码:
</text>
<text
class=
"tt"
>
{{ item.customer_material_number }}
</text>
</view>
<view
class=
"btn-box row"
><view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(item.id)"
>
详情
</view></view>
</view>
</view>
...
...
pages/stockRecheck/print.vue
View file @
1a7fd801
...
...
@@ -159,6 +159,17 @@
</
template
>
</view>
</view>
<view
class=
"form-input"
>
<view
class=
"input-title"
><text
class=
"input-title-t2"
>
物流付费:
</text></view>
<view
class=
"select-box row"
>
<picker
@
change=
"bindPickerChange(4, $event)"
:value=
"shipping_payment_type_index"
:range=
"shipping_payment_type_data"
:range-key=
"'name'"
style=
"width: 100%;"
>
<view
class=
"row verCenter bothSide wrap"
>
<view
class=
"uni-input"
>
{{ shipping_payment_type_index == -1 ? '请选择' : shipping_payment_type_data[shipping_payment_type_index].name }}
</view>
<view
class=
"uni-arrow"
></view>
</view>
</picker>
</view>
</view>
<view
class=
"print row verCenter"
v-if=
"detail.stock_out_info"
>
<text
class=
"check-box-icon"
:class=
"{ curr: detail.stock_out_info.is_receipt == 1 }"
></text>
<text
class=
"tt"
>
签回单
</text>
...
...
@@ -260,6 +271,8 @@ export default {
searchParams
:
{
stock_out_sn
:
''
},
shipping_payment_type_data
:
[{
name
:
'寄件月结'
,
value
:
1
},
{
name
:
'寄件到付'
,
value
:
2
}],
shipping_payment_type_index
:
-
1
,
hasMoreData
:
true
,
//是否分页加载
formParams
:
{
real_shipping_type
:
''
,
//交货方式
...
...
@@ -267,6 +280,7 @@ export default {
real_shipping_mode
:
''
,
//物流模式
shipping_code
:
''
,
//物流单号
is_receipt
:
''
,
//是否签回单
shipping_payment_type
:
''
,
//物流付费
consignee
:
''
,
country
:
''
,
mobile
:
''
,
...
...
@@ -320,6 +334,9 @@ export default {
}
else
if
(
type
==
3
)
{
this
.
real_shipping_mode_index
=
e
.
detail
.
value
;
this
.
formParams
.
real_shipping_mode
=
this
.
real_shipping_mode_data
[
e
.
detail
.
value
].
value
;
}
else
if
(
type
==
4
)
{
this
.
shipping_payment_type_index
=
e
.
detail
.
value
;
this
.
formParams
.
shipping_payment_type
=
this
.
shipping_payment_type_data
[
e
.
detail
.
value
].
value
;
}
},
/**
...
...
@@ -421,6 +438,10 @@ export default {
let
real_shipping_mode_index
=
this
.
findIndex
(
this
.
real_shipping_mode_data
,
this
.
formParams
.
real_shipping_mode
);
this
.
real_shipping_mode_index
=
real_shipping_mode_index
[
0
];
this
.
formParams
.
shipping_payment_type
=
res
.
data
.
stock_out_address
.
shipping_payment_type
;
//物流付费
let
shipping_payment_type_index
=
this
.
findIndex
(
this
.
shipping_payment_type_data
,
this
.
formParams
.
shipping_payment_type
);
this
.
shipping_payment_type_index
=
shipping_payment_type_index
[
0
];
this
.
formParams
.
shipping_code
=
res
.
data
.
stock_out_address
.
shipping_code
;
//物流单号
this
.
formParams
.
country
=
res
.
data
.
stock_out_address
.
country
;
...
...
@@ -475,6 +496,7 @@ export default {
real_shipping_id
:
this
.
formParams
.
real_shipping_id
,
real_shipping_mode
:
this
.
formParams
.
real_shipping_mode
,
shipping_code
:
this
.
formParams
.
shipping_code
,
shipping_payment_type
:
this
.
formParams
.
shipping_payment_type
,
consignee
:
this
.
formParams
.
consignee
,
mobile
:
this
.
formParams
.
mobile
,
province
:
this
.
formParams
.
province
,
...
...
pages/tallyReceive/index.vue
View file @
1a7fd801
...
...
@@ -21,6 +21,18 @@
<
template
v-else-if=
"index == 2"
>
<input
class=
"uni-input"
placeholder=
"请输入FedEx"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.tracking_no"
@
input=
"handleInput(0, $event)"
style=
"width: 400rpx;"
/>
</
template
>
<
template
v-else-if=
"index == 3"
>
<input
class=
"uni-input"
placeholder=
"请输入Digikey"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.code_type"
@
input=
"handleInput(9, $event)"
style=
"width: 400rpx;"
/>
</
template
>
<
template
v-else-if=
"index == 4"
>
<input
class=
"uni-input"
placeholder=
"请输入Rochester"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.code_type"
@
input=
"handleInput(9, $event)"
style=
"width: 400rpx;"
/>
</
template
>
<
template
v-else-if=
"index == 5"
>
<input
class=
"uni-input"
placeholder=
"请输入TME"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.code_type"
@
input=
"handleInput(9, $event)"
style=
"width: 400rpx;"
/>
</
template
>
<
template
v-else-if=
"index == 6"
>
<input
class=
"uni-input"
placeholder=
"请输入Chip1stop"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.code_type"
@
input=
"handleInput(9, $event)"
style=
"width: 400rpx;"
/>
</
template
>
</view>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput(1)"
v-if=
"input_flag"
></text>
</view>
...
...
@@ -80,6 +92,10 @@
<text
class=
"label"
>
客户:
</text>
<text
class=
"desc"
>
{{ item.company_name }}
</text>
</view>
<view
class=
"text-item row"
v-if=
"item.customer_material_number"
>
<text
class=
"label"
>
客户物料编码:
</text>
<text
class=
"desc"
>
{{ item.customer_material_number }}
</text>
</view>
<view
class=
"text-item row"
>
<text
class=
"label"
>
供应商:
</text>
<text
class=
"desc"
>
{{ item.supplier_name }}
</text>
...
...
@@ -187,7 +203,7 @@ export default {
limit
:
50
,
index
:
0
,
indexContainer
:
-
1
,
array
:
[
'全量搜索'
,
'入仓号'
,
'FedEx'
],
array
:
[
'全量搜索'
,
'入仓号'
,
'FedEx'
,
'Digikey'
,
'Rochester'
,
'TME'
,
'Chip1stop'
],
list
:
[],
filter_list
:
[],
//筛选已选中的列表
filter_id
:
[],
//入库单列表的入库登记
...
...
@@ -200,7 +216,9 @@ export default {
stock_in_with_stock_in_items_inhouse
:
''
,
//入仓单号
container_name
:
''
,
//容器编码
container_id
:
''
,
//容器id,
tracking_no
:
''
//fedex
tracking_no
:
''
,
//fedex
goods_sn
:
''
,
code_type
:
''
},
formParams
:
{
container_id
:
''
,
...
...
@@ -287,27 +305,6 @@ export default {
}
},
/**
* 清空数据
*/
clearInput
(
type
)
{
this
.
resetChange
();
if
(
type
==
1
)
{
this
.
input_flag
=
false
;
if
(
this
.
index
==
0
)
{
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
}
else
if
(
this
.
index
==
1
)
{
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
}
else
if
(
this
.
index
==
2
)
{
this
.
searchParams
.
tracking_no
=
''
;
}
}
else
{
this
.
input_contaion
=
false
;
this
.
searchParams
.
container_name
=
''
;
this
.
searchParams
.
container_id
=
''
;
}
this
.
getData
();
},
/**
*刷新容器
*/
createTallyContainer
(
type
)
{
...
...
@@ -333,6 +330,39 @@ export default {
});
},
/**
* 清空数据
*/
clearInput
(
type
)
{
this
.
resetChange
();
if
(
type
==
1
)
{
this
.
input_flag
=
false
;
if
(
this
.
index
==
0
)
{
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
}
else
if
(
this
.
index
==
1
)
{
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
}
else
if
(
this
.
index
==
2
)
{
this
.
searchParams
.
tracking_no
=
''
;
}
else
if
(
this
.
index
==
3
)
{
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
goods_sn
=
''
;
}
else
if
(
this
.
index
==
4
)
{
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
goods_sn
=
''
;
}
else
if
(
this
.
index
==
5
)
{
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
goods_sn
=
''
;
}
else
if
(
this
.
index
==
6
)
{
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
goods_sn
=
''
;
}
}
else
{
this
.
input_contaion
=
false
;
this
.
searchParams
.
container_name
=
''
;
this
.
searchParams
.
container_id
=
''
;
}
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
...
...
@@ -344,6 +374,7 @@ export default {
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
this
.
searchParams
.
tracking_no
=
''
;
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
mobile_wait_tally_all_search
=
val
;
this
.
input_flag
=
true
;
...
...
@@ -353,15 +384,18 @@ export default {
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
this
.
searchParams
.
tracking_no
=
''
;
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
val
;
this
.
input_flag
=
true
;
this
.
getData
();
}
else
if
(
type
==
0
)
{
//选择了fedex
this
.
resetChange
();
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
this
.
searchParams
.
tracking_no
=
''
;
this
.
searchParams
.
code_type
=
''
;
var
last12
=
val
.
slice
(
22
);
// 截取后12位
this
.
searchParams
.
tracking_no
=
last12
;
...
...
@@ -371,6 +405,26 @@ export default {
this
.
searchParams
.
container_name
=
val
;
this
.
input_contaion
=
true
;
this
.
getTallyContainer
();
}
else
if
(
type
==
9
)
{
this
.
resetChange
();
this
.
searchParams
.
mobile_wait_tally_all_search
=
''
;
this
.
searchParams
.
stock_in_with_stock_in_items_inhouse
=
''
;
this
.
searchParams
.
tracking_no
=
''
;
this
.
searchParams
.
code_type
=
''
;
this
.
searchParams
.
code_type
=
val
;
let
code_type
=
''
;
if
(
this
.
index
==
3
)
{
code_type
=
'Digikey'
;
}
else
if
(
this
.
index
==
4
)
{
code_type
=
'Rochester'
;
}
else
if
(
this
.
index
==
5
)
{
code_type
=
'TME'
;
}
else
if
(
this
.
index
==
6
)
{
code_type
=
'Chip1stop'
;
}
this
.
input_flag
=
true
;
this
.
identifyQrCodeNumAndSn
(
val
,
code_type
);
//识别二维码的数量和型号
}
}
else
{
if
(
type
==
1
||
type
==
2
)
{
...
...
@@ -387,6 +441,22 @@ export default {
this
.
index
=
e
.
detail
.
value
;
},
/**
* 识别二维码的数量和型号
*/
identifyQrCodeNumAndSn
(
code_str
,
code_type
)
{
this
.
request
(
API
.
identifyQrCodeNumAndSn
,
'GET'
,
{
code_str
:
code_str
,
code_type
:
code_type
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
this
.
searchParams
.
goods_sn
=
res
.
data
.
sn
;
this
.
getData
();
}
else
{
uni
.
showToast
({
title
:
'识别错误'
,
icon
:
'error'
});
}
});
},
/**
* 获取列表数据
*/
getData
()
{
...
...
pages/tallyReceive/record.vue
View file @
1a7fd801
...
...
@@ -86,6 +86,10 @@
<text
class=
"label"
>
入库批次号:
</text>
<text
class=
"tt"
>
{{ item.stock_in_batch_sn }}
</text>
</view>
<view
class=
"text-item row verCenter"
v-if=
"item.customer_material_number"
>
<text
class=
"label"
>
客户物料编码:
</text>
<text
class=
"tt"
>
{{ item.customer_material_number }}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
理货数量:
</text>
<text
class=
"ttt"
>
{{ item.tally_qty }}
</text>
...
...
util/api.js
View file @
1a7fd801
// const API_BASE_USER = 'http://user.liexindev.net'; //用户系统
// const API_BASE_ORDER = 'http://order.liexindev.net'; //订单系统
// const API_BASE_PUR = 'http://pur.liexindev.net'; //采购系统
// const API_BASE_SUPPLIER = 'http://supplier.liexin.net'; //供应商系统
// const API_BASE_CRM = 'http://crmnew.liexindev.net'; //CRM系统
// const API_BASE = 'http://wms.liexindev.net'; //WMS系统
// const API_BASE_LIEXIN = 'http://api.liexin.com'; //api系统
// const API_BASE_OSS = 'http://image.liexindev.net'; //oss系统
const
API_BASE_USER
=
'http://user.liexindev.net'
;
//用户系统
const
API_BASE_PUR
=
'http://pur.liexindev.net'
;
//采购系统
const
API_BASE
=
'http://wms.liexindev.net'
;
//WMS系统
const
API_BASE_OSS
=
'http://image.liexindev.net'
;
//oss系统
const
API_BASE_USER
=
'https://user.ichunt.net'
;
//用户系统
const
API_BASE_ORDER
=
'https://order.ichunt.net'
;
//订单系统
const
API_BASE_PUR
=
'https://purchase.ichunt.net'
;
//采购系统
const
API_BASE_SUPPLIER
=
'https://supplier.ichunt.net'
;
//供应商系统
const
API_BASE_CRM
=
'https://crm.ichunt.net'
;
//CRM系统
const
API_BASE
=
'https://wms.ichunt.net'
;
//WMS系统
const
API_BASE_LIEXIN
=
'https://api.ichunt.com'
;
//api系统
const
API_BASE_OSS
=
'https://image.ichunt.net'
;
//oss系统
// const API_BASE_USER = 'https://user.ichunt.net'; //用户系统
// const API_BASE_PUR = 'https://purchase.ichunt.net'; //采购系统
// const API_BASE = 'https://wms.ichunt.net'; //WMS系统
// const API_BASE_OSS = 'https://image.ichunt.net'; //oss系统
const
API
=
{
...
...
@@ -47,10 +39,27 @@ const API = {
* */
waitTallyReceiveList
:
API_BASE
+
'/api/stockIn/tallyReceive/waitTallyReceiveList'
,
/**
* 识别二维码的数量和型号
* */
identifyQrCodeNumAndSn
:
API_BASE
+
'/api/stockIn/identifyQrCodeNumAndSn'
,
/**
* 已理货列表
* */
haveTallyReceiveList
:
API_BASE
+
'/api/stockIn/tallyReceive/haveTallyReceiveList'
,
/**
* 容器维护列表
* */
getContainerList
:
API_BASE
+
'/api/container/getContainerList'
,
/**
* 更新容器
* */
containerUpdate
:
API_BASE
+
'/api/container/update'
,
/**
* 导出容器库存
* */
exportContainerStock
:
API_BASE
+
'/api/container/exportContainerStock'
,
/**
/**
* 取消理货
* */
cancelTallyReceive
:
API_BASE
+
'/api/stockIn/tallyReceive/cancelTallyReceive'
,
...
...
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