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
2dfba80f
authored
Apr 26, 2023
by
韩达
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'master' of
http://git.ichunt.net/liangjianmin/wmsApp
parents
6e5044e3
71aae4ff
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
867 additions
and
191 deletions
assets/css/picking/me.scss
assets/css/picking/record.scss
assets/css/stockRecheck/index.scss
assets/css/stockRecheck/sort.scss
pages/arrivalRegister/registered.vue
pages/picking/index.vue
pages/picking/me.vue
pages/picking/record.vue
pages/picking/sort.vue
pages/stockRecheck/index.vue
pages/stockRecheck/sort.vue
util/api.js
assets/css/picking/me.scss
View file @
2dfba80f
...
...
@@ -100,6 +100,14 @@
font-size
:
15rpx
;
color
:
#1969f9
;
}
.btn3
{
width
:
68rpx
;
height
:
30rpx
;
background-color
:
#1969f9
;
border-radius
:
8rpx
;
font-size
:
15rpx
;
color
:
#ffffff
;
}
}
}
}
...
...
assets/css/picking/record.scss
View file @
2dfba80f
...
...
@@ -10,6 +10,7 @@
border-radius
:
10rpx
;
margin-bottom
:
15rpx
;
flex-wrap
:
wrap
;
border
:
1px
solid
transparent
;
.check-box-icon
{
position
:
absolute
;
right
:
18rpx
;
...
...
assets/css/stockRecheck/index.scss
View file @
2dfba80f
...
...
@@ -53,6 +53,7 @@
border-radius
:
10rpx
;
margin-right
:
15rpx
;
margin-bottom
:
15rpx
;
border
:
1px
solid
transparent
;
&
:nth-of-type
(
2n
)
{
margin-right
:
0
;
}
...
...
assets/css/stockRecheck/sort.scss
View file @
2dfba80f
...
...
@@ -49,8 +49,10 @@
color
:
#484b59
;
}
.icon-a-juxing11
{
position
:
relative
;
font-size
:
30rpx
;
color
:
#c6c7cc
;
z-index
:
99
;
}
.icon-juxing3
{
font-size
:
30rpx
;
...
...
@@ -119,6 +121,24 @@
border-radius
:
10rpx
;
margin-bottom
:
15rpx
;
flex-wrap
:
wrap
;
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
;
}
}
.input-box
{
margin-bottom
:
11rpx
;
flex
:
0
0
50%
;
...
...
@@ -443,7 +463,7 @@
margin-bottom
:
11rpx
;
flex
:
0
0
50%
;
.label
{
width
:
98
rpx
;
width
:
112
rpx
;
font-size
:
17rpx
;
color
:
#919399
;
white-space
:
nowrap
;
...
...
pages/arrivalRegister/registered.vue
View file @
2dfba80f
...
...
@@ -287,10 +287,17 @@ export default {
}
else
if
(
type
==
2
)
{
stock_in_id
[
0
]
=
id
;
}
uni
.
showModal
({
title
:
'提示'
,
content
:
'确定要取消登记吗?'
,
showCancel
:
true
,
success
:
res
=>
{
if
(
res
.
confirm
)
{
this
.
request
(
API
.
delStockInRegister
,
'POST'
,
{
stock_in_id
:
JSON
.
stringify
(
stock_in_id
)
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'操作
成功'
,
title
:
'取消
成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
...
...
@@ -306,6 +313,12 @@ export default {
});
}
});
}
else
if
(
res
.
cancel
)
{
// 用户点击取消操作
console
.
log
(
'用户点击取消'
);
}
}
});
},
bindPickerChange
:
function
(
e
)
{
console
.
log
(
'picker发送选择改变,携带值为'
,
e
.
detail
.
value
);
...
...
pages/picking/index.vue
View file @
2dfba80f
...
...
@@ -18,7 +18,7 @@
</view>
</view>
<view
class=
"list row bothSide"
v-if=
"list.length > 0"
>
<
navigator
class=
"box"
v-for=
"(item, index) in list"
:key=
"index"
:url=
"'/pages/picking/sort?stock_out_id=' + item.stock_out_id + '&stock_out_sn=' + item.stock_out_sn"
hover-class=
"none
"
>
<
view
class=
"box"
v-for=
"(item, index) in list"
:key=
"index
"
>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
出库单号:
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_sn
}}
</text>
...
...
@@ -44,8 +44,8 @@
<text
class=
"label"
>
销售员:
</text>
<text
class=
"tt"
>
{{
item
.
sale_name
}}
</text>
</view>
<view
class=
"btn-box row"
><view
class=
"btn row rowCenter verCenter"
>
领取
</view></view>
</
navigator
>
<view
class=
"btn-box row"
><view
class=
"btn row rowCenter verCenter"
@
click=
"take(item.stock_out_id, item.stock_out_sn)"
>
领取
</view></view>
</
view
>
</view>
<!-- 无数据展示 -->
<view
class=
"no-date column rowCenter verCenter"
v-else
>
...
...
@@ -104,6 +104,24 @@ export default {
});
},
/**
* 领取
*/
take
(
stock_out_id
,
stock_out_sn
)
{
this
.
request
(
API
.
take
,
'POST'
,
{
stock_out_id
:
stock_out_id
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
navigateTo
({
url
:
'/pages/picking/sort?stock_out_id='
+
stock_out_id
+
'&stock_out_sn='
+
stock_out_sn
});
}
else
{
uni
.
showModal
({
itle
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
},
/**
* 清空数据
*/
clearInput
()
{
...
...
pages/picking/me.vue
View file @
2dfba80f
...
...
@@ -12,47 +12,65 @@
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
/>
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
v-model=
"searchParams.stock_out_sn"
@
input=
"handleInput"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
></text>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput()"
v-if=
"input_flag"
></text>
</view>
</view>
<view
class=
"list row bothSide"
>
<view
class=
"box"
v-for=
"(item, index) in
10
"
:key=
"index"
>
<view
class=
"list row bothSide"
v-if=
"list.length > 0"
>
<view
class=
"box"
v-for=
"(item, index) in
list
"
:key=
"index"
>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
出库单号:
</text>
<text
class=
"t1"
>
ASN2201010001
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_sn
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
状 态:
</text>
<text
class=
"t1"
>
全部锁库
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_status_val
}}
</text>
</view>
<view
class=
"bor row"
></view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
任 务 数:
</text>
<text
class=
"tt"
>
8
</text>
<text
class=
"tt"
>
{{
item
.
items_num
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
总 数 量:
</text>
<text
class=
"tt"
>
5000
</text>
<text
class=
"tt"
>
{{
item
.
total_qty
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
上游备注:
</text>
<text
class=
"tt"
>
我是一条备注我是一条备注我是一条备注我是一条备注
</text>
<text
class=
"tt"
>
{{
item
.
upstream_remark
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
领取时间:
</text>
<text
class=
"tt"
>
2023-04-01 11:28:59
</text>
<text
class=
"tt"
>
{{
item
.
take_time
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
销售员:
</text>
<text
class=
"tt"
>
朱国军
</text>
<text
class=
"tt"
>
{{
item
.
sale_name
}}
</text>
</view>
<view
class=
"btn-box row verCenter"
>
<view
class=
"btn1 row rowCenter verCenter"
>
释放
</view>
<view
class=
"btn2 row rowCenter verCenter"
>
详情
</view>
<!-- 出库单状态为全部锁库,则显示【释放】、【选择】按钮 -->
<template
v-if=
"item.stock_out_status == 3"
>
<view
class=
"btn1 row rowCenter verCenter"
@
click=
"cancelTake(item.stock_out_id)"
>
释放
</view>
<navigator
:url=
"'/pages/picking/sort?stock_out_id=' + item.stock_out_id + '&stock_out_sn=' + item.stock_out_sn"
hover-class=
"none"
class=
"btn3 row rowCenter verCenter"
>
选择
</navigator>
</
template
>
<!--出库单状态为部分拣货-->
<
template
v-if=
"item.stock_out_status == 4"
>
<navigator
:url=
"'/pages/picking/sort?stock_out_id=' + item.stock_out_id + '&stock_out_sn=' + item.stock_out_sn"
hover-class=
"none"
class=
"btn3 row rowCenter verCenter"
>
选择
</navigator>
</
template
>
<!--出库单状态为全部拣货-->
<
template
v-if=
"item.stock_out_status == 5"
>
<navigator
url=
"/pages/picking/record"
hover-class=
"none"
class=
"btn2 row rowCenter verCenter"
>
详情
</navigator>
</
template
>
</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>
</template>
...
...
@@ -63,15 +81,81 @@ import debounce from 'lodash/debounce';
export
default
{
data
()
{
return
{
input_flag
:
false
,
index
:
0
,
array
:
[
'出库单号'
]
array
:
[
'出库单号'
],
list
:
[],
searchParams
:
{
stock_out_sn
:
''
//出库单号
}
};
},
onLoad
()
{},
onShow
()
{
this
.
getData
();
},
methods
:
{
bindPickerChange
:
function
(
e
)
{
console
.
log
(
'picker发送选择改变,携带值为'
,
e
.
detail
.
value
);
this
.
index
=
e
.
detail
.
value
;
},
/**
* 清空数据
*/
clearInput
()
{
this
.
input_flag
=
false
;
this
.
searchParams
.
stock_out_sn
=
''
;
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput
:
debounce
(
function
(
event
)
{
var
val
=
event
.
target
.
value
;
if
(
val
)
{
this
.
input_flag
=
true
;
}
else
{
this
.
input_flag
=
false
;
}
this
.
getData
();
},
500
),
/**
* 释放已领取拣货单
*/
cancelTake
(
stock_out_id
)
{
this
.
request
(
API
.
cancelTake
,
'POST'
,
{
stock_out_id
:
stock_out_id
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'释放成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
getData
();
this
.
filter_id
=
[];
},
2000
);
}
else
{
uni
.
showModal
({
itle
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
},
/**
* 获取列表数据
*/
getData
()
{
this
.
request
(
API
.
getTakedList
,
'POST'
,
{
page
:
this
.
page
,
limit
:
this
.
limit
,
...
this
.
searchParams
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
this
.
list
=
res
.
data
.
list
;
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'error'
});
}
});
}
}
};
...
...
pages/picking/record.vue
View file @
2dfba80f
<
template
>
<view
class=
"picking-record"
>
<view
class=
"list"
>
<view
class=
"box row
curr"
v-for=
"(item, index) in 15
"
>
<view
class=
"check-box-icon"
></view>
<view
class=
"list"
v-if=
"list.length > 0"
>
<view
class=
"box row
"
v-for=
"(item, index) in list"
:key=
"index"
:class=
"
{ curr: filter_list[index] }
">
<view
class=
"check-box-icon"
@
click=
"filterChange(index)"
></view>
<view
class=
"input-box row verCenter curr"
>
<text
class=
"label"
>
入库批次号:
</text>
<text
class=
"tt"
>
L-ASN2201010001
</text>
<text
class=
"tt"
>
{{
item
.
stock_in_batch_sn
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
容 器:
</text>
<text
class=
"tt"
>
RQ0001
</text>
<text
class=
"tt"
>
{{
item
.
container_sn
}}
</text>
</view>
<view
class=
"bor"
></view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品编码:
</text>
<text
class=
"text"
>
L-ASN2201010001
</text>
<text
class=
"text"
>
{{
item
.
goods_sn
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品名称:
</text>
<text
class=
"text"
>
A65512
</text>
<text
class=
"text"
>
{{
item
.
goods_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
标准品牌:
</text>
<text
class=
"text"
>
TI
</text>
<text
class=
"text"
>
{{
item
.
brand_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
D / C:
</text>
<text
class=
"text"
>
22+
</text>
<text
class=
"text"
>
{{
item
.
date_code
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
产 地:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{
item
.
coo
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品品质:
</text>
<text
class=
"text"
>
良品
</text>
<text
class=
"text"
>
{{
item
.
quality_val
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
入 仓 号:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{
item
.
inhouse
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
其他批次属性:
</text>
<text
class=
"text"
>
-
</text>
<text
class=
"text"
>
{{
item
.
other_batch_attr
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
拣货数量:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{
item
.
pick_qty
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
拣货库位:
</text>
<text
class=
"text"
>
KW001
</text>
<text
class=
"text"
>
{{
item
.
position_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
拣 货 员:
</text>
<text
class=
"text"
>
欧阳雪雁
</text>
<text
class=
"text"
>
{{
item
.
create_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"text"
>
朱国军:
</text>
<text
class=
"text"
>
{{
item
.
sale_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
拣货时间:
</text>
<text
class=
"text"
>
2023-04-01 11:28:59
</text>
<text
class=
"text"
>
{{
item
.
create_time
}}
</text>
</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=
"btn1 row rowCenter verCenter"
>
<text
class=
"check-box-icon
curr
"
></text>
<view
class=
"btn1 row rowCenter verCenter"
@
click=
"allChnage()"
>
<text
class=
"check-box-icon
"
:class=
"
{ curr: this.filter_list.length == this.filter_id.length }
">
</text>
<text
class=
"text"
>
全选
</text>
</view>
<view
class=
"btn2 row rowCenter verCenter"
>
取消拣货
</view>
<view
class=
"btn2 row rowCenter verCenter"
@
click=
"cancelPicking"
>
取消拣货
</view>
</view>
</view>
</
template
>
<
script
>
import
{
API
}
from
'@/util/api.js'
;
import
{
createArray
}
from
'@/util/util.js'
;
import
debounce
from
'lodash/debounce'
;
export
default
{
data
()
{
return
{};
return
{
input_flag
:
false
,
all_flag
:
false
,
//全选标记
page
:
1
,
limit
:
1000
,
list
:
[],
filter_list
:
[],
//筛选已选中的列表
filter_id
:
[],
//过滤id
searchParams
:
{
stock_out_sn
:
''
}
};
},
onShow
()
{
this
.
getData
();
},
methods
:
{
/**
* 全选
*/
allChnage
()
{
this
.
all_flag
=
!
this
.
all_flag
;
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
this
.
all_flag
);
if
(
this
.
all_flag
)
{
this
.
filter_id
=
this
.
list
.
map
(
function
(
item
)
{
return
item
.
id
;
});
}
else
{
this
.
filter_id
=
[];
}
},
/**
* 找出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
.
input_flag
=
false
;
this
.
searchParams
.
stock_out_sn
=
''
;
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput
:
debounce
(
function
(
event
)
{
var
val
=
event
.
target
.
value
;
if
(
val
)
{
this
.
input_flag
=
true
;
}
else
{
this
.
input_flag
=
false
;
}
this
.
getData
();
},
500
),
/**
* 取消拣货
*/
cancelPicking
()
{
if
(
this
.
filter_id
.
length
==
0
)
{
uni
.
showToast
({
title
:
'请勾选货物'
,
icon
:
'error'
});
return
false
;
}
uni
.
showModal
({
title
:
'提示'
,
content
:
'确定要取消拣货吗?'
,
showCancel
:
true
,
success
:
res
=>
{
if
(
res
.
confirm
)
{
this
.
request
(
API
.
cancelPicking
,
'POST'
,
{
pick_id
:
this
.
filter_id
.
join
(
','
)
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'取消成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
getData
();
this
.
closeDrawer
();
this
.
filter_id
=
[];
},
2000
);
}
else
{
uni
.
showModal
({
title
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
}
else
if
(
res
.
cancel
)
{
// 用户点击取消操作
console
.
log
(
'用户点击取消'
);
}
}
});
},
onLoad
()
{},
methods
:
{}
/**
* 获取列表数据
*/
getData
()
{
this
.
request
(
API
.
getAllPickedList
,
'POST'
,
{
page
:
this
.
page
,
limit
:
this
.
limit
,
...
this
.
searchParams
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
this
.
list
=
res
.
data
.
list
;
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
false
);
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'error'
});
}
});
}
}
};
</
script
>
...
...
pages/picking/sort.vue
View file @
2dfba80f
...
...
@@ -197,7 +197,7 @@
</view>
<view
class=
"form-input"
>
<view
class=
"input-title"
><text
class=
"input-title-t1"
>
拣货数量:
</text></view>
<view
class=
"input-box"
><input
type=
"
text
"
class=
"uni-input"
placeholder-style=
"color:#919399"
placeholder=
"请输入"
v-model=
"formParams.pick_qty"
/></view>
<view
class=
"input-box"
><input
type=
"
number
"
class=
"uni-input"
placeholder-style=
"color:#919399"
placeholder=
"请输入"
v-model=
"formParams.pick_qty"
/></view>
</view>
<view
class=
"bor"
></view>
<view
class=
"field-item row"
>
...
...
pages/stockRecheck/index.vue
View file @
2dfba80f
...
...
@@ -12,78 +12,83 @@
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
/>
<input
class=
"uni-input"
placeholder=
"请扫描或输入号码"
placeholder-style=
"color:#919399"
focus
v-model=
"searchParams.stock_out_sn"
@
input=
"handleInput"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
></text>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput()"
v-if=
"input_flag"
></text>
</view>
</view>
<view
class=
"list row bothSide"
>
<view
class=
"box"
v-for=
"(item, index) in 10"
:key=
"index"
>
<template
v-if=
"index == 1"
>
<view
class=
"check-box-icon"
></view>
</
template
>
<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] }">
<view
class=
"check-box-icon"
@
click=
"filterChange(index)"
></view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
出库单号:
</text>
<text
class=
"t1"
>
ASN2201010001
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_sn
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
状 态:
</text>
<text
class=
"t1"
>
全部锁库
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_status_val
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
复核确认:
</text>
<text
class=
"t1"
>
待确认
</text>
<text
class=
"t1"
>
{{
item
.
stock_out_status
!=
8
?
'待确认'
:
'已确认'
}}
</text>
</view>
<view
class=
"bor row"
></view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
任 务 数:
</text>
<text
class=
"tt"
>
8
</text>
<text
class=
"tt"
>
{{
item
.
items_num
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
总 数 量:
</text>
<text
class=
"tt"
>
5000
</text>
<text
class=
"tt"
>
{{
item
.
total_qty
}}
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
上游备注:
</text>
<text
class=
"tt"
>
我是一条备注我是一条备注我是一条备注我是一条备注
</text>
</view>
<view
class=
"text-item row verCenter"
>
<text
class=
"label"
>
销售员:
</text>
<text
class=
"tt"
>
朱国军
</text>
<text
class=
"tt"
>
{{
item
.
upstream_remark
}}
</text>
</view>
<view
class=
"btn-box row"
>
<
template
v-if=
"index == 0"
>
<navigator
url=
"/pages/stockRecheck/sort"
class=
"btn1 row rowCenter verCenter"
hover-class=
"none"
>
选择
</navigator>
</
template
>
<
template
v-else-if=
"index == 1"
>
<!-- 出库单状态为全部复核时,则显示【详情】按钮 -->
<template
v-if=
"item.stock_out_status == 7"
>
<navigator
class=
"btn2 row rowCenter verCenter"
url=
"/pages/stockRecheck/record"
hover-class=
"none"
>
详情
</navigator>
</
template
>
<
template
v-else
>
<navigator
url=
"/pages/stockRecheck/sort
"
class=
"btn1 row rowCenter verCenter"
hover-class=
"none"
>
选择
</navigator>
<
template
v-else
-if=
"item.stock_out_status == 5 || item.stock_out_status == 6"
>
<navigator
:url=
"'/pages/stockRecheck/sort?stock_out_id=' + item.stock_out_id
"
class=
"btn1 row rowCenter verCenter"
hover-class=
"none"
>
选择
</navigator>
</
template
>
</view>
</view>
</view>
<view
class=
"fix-btn row verCenter"
>
<view
class=
"btn1 row rowCenter verCenter"
>
<text
class=
"check-box-icon curr"
></text>
<text
class=
"text"
>
全选
</text>
</view>
<view
class=
"btn2 row rowCenter verCenter"
>
复核确认
</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=
"btn2 row rowCenter verCenter"
style=
"width: 100%;"
@
click=
"makeStockOutFinish"
>
复核确认
</view></view>
</view>
</template>
<
script
>
import
{
API
}
from
'@/util/api.js'
;
import
{
createArray
}
from
'@/util/util.js'
;
import
debounce
from
'lodash/debounce'
;
export
default
{
data
()
{
return
{
input_flag
:
false
,
page
:
1
,
limit
:
1000
,
index
:
0
,
array
:
[
'出库单号'
]
array
:
[
'出库单号'
],
list
:
[],
filter_list
:
[],
//筛选已选中的列表
filter_id
:
[],
//过滤处理的id
searchParams
:
{
stock_out_sn
:
''
//出库单号
}
};
},
onLoad
()
{},
onShow
()
{
this
.
getData
();
},
onNavigationBarButtonTap
(
e
)
{
if
(
e
.
index
==
0
)
{
uni
.
navigateTo
({
...
...
@@ -95,6 +100,102 @@ export default {
bindPickerChange
:
function
(
e
)
{
console
.
log
(
'picker发送选择改变,携带值为'
,
e
.
detail
.
value
);
this
.
index
=
e
.
detail
.
value
;
},
/**
* 找出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
].
stock_out_id
);
},
/**
* 清空数据
*/
clearInput
()
{
this
.
input_flag
=
false
;
this
.
searchParams
.
stock_out_sn
=
''
;
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput
:
debounce
(
function
(
event
)
{
var
val
=
event
.
target
.
value
;
if
(
val
)
{
this
.
input_flag
=
true
;
}
else
{
this
.
input_flag
=
false
;
}
this
.
getData
();
},
500
),
/**
* 获取列表数据
*/
getData
()
{
this
.
request
(
API
.
getToCheckList
,
'POST'
,
{
page
:
this
.
page
,
limit
:
this
.
limit
,
...
this
.
searchParams
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
this
.
list
=
res
.
data
.
list
;
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
false
);
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'error'
});
}
});
},
/**
* 复核确认
*/
makeStockOutFinish
()
{
if
(
this
.
filter_id
.
length
==
0
)
{
uni
.
showToast
({
title
:
'请勾选货物'
,
icon
:
'error'
});
return
false
;
}
if
(
this
.
filter_id
.
length
>
1
)
{
uni
.
showToast
({
title
:
'请勾选一条'
,
icon
:
'error'
});
return
false
;
}
this
.
request
(
API
.
makeStockOutFinish
,
'POST'
,
{
stock_out_id
:
this
.
filter_id
[
0
]
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'复核成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
filter_id
=
[];
this
.
getData
();
},
2000
);
}
else
{
uni
.
showModal
({
itle
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
}
}
};
...
...
pages/stockRecheck/sort.vue
View file @
2dfba80f
...
...
@@ -10,116 +10,142 @@
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请扫描或输入库位"
placeholder-style=
"color:#919399
"
/>
<input
type=
"number"
class=
"uni-input"
placeholder=
"请扫描或输入箱号"
style=
"width: 150rpx;"
placeholder-style=
"color:#919399"
v-model=
"searchParams.box_name"
@
input=
"handleInput(1, searchParams.box_name)
"
/>
</view>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-a-juxing11"
style=
"margin-right: 26rpx;"
></text>
<text
class=
"iconfont icon-juxing3"
></text>
<text
class=
"iconfont icon-a-juxing11"
style=
"margin-right: 26rpx;"
@
click=
"clearInput(1)"
v-if=
"input_flag_box_name"
></text>
<text
class=
"iconfont icon-juxing3"
@
click=
"refresh"
></text>
</view>
</view>
</view>
<view
class=
"right"
>
<template
v-if=
"curr == 0"
>
<view
class=
"title"
>
入库批次号:
</view>
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请扫描或输入入库批次号"
placeholder-style=
"color:#919399
"
/>
<input
class=
"uni-input"
placeholder=
"请扫描或输入入库批次号"
placeholder-style=
"color:#919399"
v-model=
"searchParams.stock_in_batch_sn"
@
input=
"handleInput(2, searchParams.stock_in_batch_sn)
"
/>
</view>
<text
class=
"iconfont icon-a-juxing11
"
></text>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput(2)"
v-if=
"input_flag_stock_in_batch_sn
"
></text>
</view>
</
template
>
<
template
v-else-if=
"curr == 1"
s
>
<view
class=
"title"
>
容器:
</view>
<view
class=
"search-bar row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请扫描或输入容器"
placeholder-style=
"color:#919399"
v-model=
"searchParams.container_sn"
@
input=
"handleInput(3, searchParams.container_sn)"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput(3)"
v-if=
"input_flag_container_sn"
></text>
</view>
</
template
>
</view>
<view
class=
"list"
v-if=
"curr == 0"
>
<view
class=
"box row"
v-for=
"(item, index) in 15"
>
</view>
<!-- 按货品拣货列表 -->
<
template
v-if=
"curr == 0"
>
<view
class=
"list"
v-if=
"list.length > 0"
>
<view
class=
"box row"
v-for=
"(item, index) in list"
:key=
"index"
:class=
"
{ curr: filter_list[index] }">
<view
class=
"check-box-icon"
@
click=
"filterChange(index)"
></view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
入库批次号:
</text>
<text
class=
"text"
>
L-ASN2201010001
</text>
<text
class=
"text"
>
{{
item
.
stock_in_batch_sn
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
状态:
</text>
<text
class=
"tt"
>
待审核
</text>
<text
class=
"tt"
>
{{
item
.
recheck_status_val
}}
</text>
</view>
<view
class=
"bor"
></view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品编码:
</text>
<text
class=
"text"
>
L-ASN2201010001
</text>
<text
class=
"text"
>
{{
item
.
goods_sn
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品名称:
</text>
<text
class=
"text"
>
A65512
</text>
<text
class=
"text"
>
{{
item
.
goods_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
标准品牌:
</text>
<text
class=
"text"
>
TI
</text>
<text
class=
"text"
>
{{
item
.
brand_name
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
D / C:
</text>
<text
class=
"text"
>
22+
</text>
<text
class=
"text"
>
{{
item
.
date_code
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
产 地:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{
item
.
coo
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品品质:
</text>
<text
class=
"text"
>
良品
</text>
<text
class=
"text"
>
{{
item
.
quality_val
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
入 仓 号:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{
item
.
inhouse
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
其他批次属性:
</text>
<text
class=
"text"
>
-
</text>
<text
class=
"text"
>
{{
item
.
other_batch_attr
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
待复核数:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{
item
.
no_recheck_qty
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
已复核数:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{
item
.
recheck_qty
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"text"
>
朱国军:
</text>
<text
class=
"text"
>
{{
item
.
sale_name
}}
:
</text>
</view>
<view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(1, item)"
>
选择
</view>
</view>
<view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(1)"
>
复核
</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=
"list-style row bothSide"
v-if=
"curr == 1"
>
<view
class=
"box"
v-for=
"(item, index) in 15"
>
</
template
>
<!-- 按容器拣货列表 -->
<
template
v-else-if=
"curr == 1"
>
<view
class=
"list-style row bothSide"
v-if=
"list.length > 0"
>
<view
class=
"box"
v-for=
"(item, index) in list"
:key=
"index"
>
<view
class=
"input-box row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
容 器:
</text>
<text
class=
"tt"
>
L-ASN2201010001
</text>
<text
class=
"tt"
>
{{
item
.
container_sn
}}
</text>
</view>
<view
class=
"bor"
></view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
任 务 数:
</text>
<text
class=
"text"
>
88
</text>
<text
class=
"text"
>
{{
item
.
task_num
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
合计应拣数量:
</text>
<text
class=
"text"
>
100
</text>
<text
class=
"text"
>
{{
item
.
total_check_num
}}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"text"
>
朱国军
</text>
<view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(2, item)"
>
选择
</view>
</view>
<view
class=
"btn row rowCenter verCenter"
@
click=
"showDrawer(2)"
>
选择
</view>
</view>
<!-- 无数据展示 -->
<view
class=
"no-date column rowCenter verCenter"
v-else
>
<text
class=
"iconfont icon-a-juxing21"
></text>
<text
class=
"text"
>
查不到当前数据
</text>
</view>
</
template
>
</view>
<view
class=
"fix-btn row verCenter"
v-if=
"curr == 0"
>
<view
class=
"btn1 row rowCenter verCenter"
>
<text
class=
"check-box-icon
curr
"
></text>
<view
class=
"btn1 row rowCenter verCenter"
@
click=
"allChnage()"
>
<text
class=
"check-box-icon
"
:class=
"{ curr: this.filter_list.length == this.filter_id.length }
"
></text>
<text
class=
"text"
>
全选
</text>
</view>
<view
class=
"btn2 row rowCenter verCenter"
@
click=
"showDrawer(0)"
>
一键复核
</view>
</view>
<!-- 按货品
复核单个详情
弹窗 -->
<!-- 按货品
拣货-
弹窗 -->
<uni-drawer
ref=
"showRight"
mode=
"right"
>
<view
class=
"uni-drawer-picking"
>
<view
class=
"uni-drawer-picking"
v-if=
"detail"
>
<view
class=
"title row rowCenter verCenter"
>
<text
class=
"iconfont icon-juxing2"
@
click=
"closeDrawer(1)"
></text>
<text
class=
"text"
>
按货品复核单个
</text>
...
...
@@ -130,19 +156,19 @@
<view
class=
"search row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请输入
物流单号"
placeholder-style=
"color:#919399
"
/>
<input
class=
"uni-input"
placeholder=
"请输入
打包箱号"
placeholder-style=
"color:#919399"
v-model=
"searchParams.box_name"
@
input=
"handleInput(1, searchParams.box_name)
"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
></text>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput(1)"
v-if=
"input_flag_box_name"
></text>
</view>
<view
class=
"row verCenter"
>
<view
class=
"icon-box row rowCenter verCenter"
><text
class=
"iconfont icon-juxing3"
></text></view>
<view
class=
"icon-box row rowCenter verCenter"
@
click=
"refresh"
><text
class=
"iconfont icon-juxing3"
></text></view>
</view>
</view>
</view>
<view
class=
"field-item row"
style=
"margin-top: 39rpx;"
>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
入库批次号:
</text>
<text
class=
"text"
>
ASN2201010001
</text>
<text
class=
"text"
>
{{ detail.stock_in_batch_sn }}
</text>
</view>
</view>
<view
class=
"bor"
></view>
...
...
@@ -150,64 +176,64 @@
<view
class=
"field-item row"
>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
货品编码:
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
6546546416541654665
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
{{ detail.goods_sn }}
</text>
</view>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
货品名称:
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
ASD3DAADS22
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
{{ detail.goods_name }}
</text>
</view>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
标准品牌:
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
Nexperia
</text>
<text
class=
"tt"
style=
"max-width: 100%;"
>
{{ detail.brand_name }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
D / C:
</text>
<text
class=
"tt"
>
22+
</text>
<text
class=
"tt"
>
{{ detail.date_code }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
产 地:
</text>
<text
class=
"tt"
>
美国
</text>
<text
class=
"tt"
>
{{ detail.coo }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
货品品质:
</text>
<text
class=
"tt"
>
良品
</text>
<text
class=
"tt"
>
{{ detail.quality_val }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
入 仓 号:
</text>
<text
class=
"tt"
>
C12345
</text>
<text
class=
"tt"
>
{{ detail.inhouse }}
</text>
</view>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;margin-bottom: 17rpx;"
>
<text
class=
"label"
>
其他批次属性:
</text>
<text
class=
"tt"
>
-
</text>
<text
class=
"tt"
>
{{ detail.other_batch_attr }}
</text>
</view>
</view>
<view
class=
"bor"
></view>
<view
class=
"field-item row"
>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
锁库数量:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
100000
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
{{ detail.lock_qty }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
锁库
数量:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
0
</text>
<text
class=
"label"
>
拣货
数量:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
{{ detail.pick_qty }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
已复核数:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
212
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
{{ detail.recheck_qty }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
待复核数:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
22222:
</text>
<text
class=
"tt"
style=
"color: #F98119;"
>
{{ detail.no_recheck_qty }}
</text>
</view>
</view>
<view
class=
"form-input"
style=
"margin-top: 17rpx;"
>
<view
class=
"input-title"
><text
class=
"input-title-t1"
>
复核数量:
</text></view>
<view
class=
"input-box"
><input
type=
"text"
class=
"uni-input"
placeholder-style=
"color:#919399"
placeholder=
"请输入"
/></view>
<view
class=
"input-box"
><input
type=
"text"
class=
"uni-input"
placeholder-style=
"color:#919399"
placeholder=
"请输入
复核数量"
v-model=
"formParams.recheck_qty
"
/></view>
</view>
<view
class=
"field-item row"
>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"tt"
>
拾贰
</text>
<text
class=
"tt"
>
{{ detail.sale_name }}
</text>
</view>
</view>
<view
class=
"bor"
></view>
...
...
@@ -217,48 +243,11 @@
</view>
<view
class=
"btn row verCenter bothSide"
>
<view
class=
"btn0 row rowCenter verCenter"
@
click=
"closeDrawer(1)"
>
取 消
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: 50%;"
>
复 核
</view>
</view>
</view>
</uni-drawer>
<!-- 按货品复核一键详情弹窗 -->
<uni-drawer
ref=
"showRightAll"
mode=
"right"
>
<view
class=
"uni-drawer-picking"
>
<view
class=
"title row rowCenter verCenter"
>
<text
class=
"iconfont icon-juxing2"
@
click=
"closeDrawer(0)"
></text>
<text
class=
"text"
>
一键复核
</text>
</view>
<view
class=
"p-text"
>
<text
class=
"tt"
>
您已选中
</text>
<text
class=
"ed"
>
5
</text>
<text
class=
"tt"
>
个复核任务
</text>
</view>
<view
class=
"pack"
style=
"margin-bottom: 25rpx;margin-top: 25rpx;"
>
<view
class=
"h2"
>
打包箱号:
</view>
<view
class=
"row verCenter bothSide"
>
<view
class=
"search row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请输入物流单号"
placeholder-style=
"color:#919399"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
></text>
</view>
<view
class=
"row verCenter"
>
<view
class=
"icon-box row rowCenter verCenter"
><text
class=
"iconfont icon-juxing3"
></text></view>
</view>
</view>
</view>
<view
class=
"print row verCenter"
>
<text
class=
"check-box-icon curr"
></text>
<text
class=
"tt"
>
打印客户专属标签
</text>
</view>
<view
class=
"btn row verCenter bothSide"
>
<view
class=
"btn0 row rowCenter verCenter"
@
click=
"closeDrawer(0)"
>
取 消
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: 50%;"
>
一键复核
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: 50%;"
@
click=
"markChecked(detail.stock_out_item_id, formParams.recheck_qty, searchParams.box_name)"
>
复 核
</view>
</view>
</view>
</uni-drawer>
<!-- 按容器
复核详情
弹窗 -->
<!-- 按容器
拣货-
弹窗 -->
<uni-drawer
ref=
"showRightPack"
mode=
"right"
>
<view
class=
"uni-drawer-picking"
>
<view
class=
"title row rowCenter verCenter"
>
...
...
@@ -268,78 +257,78 @@
<view
class=
"field-item row"
style=
"margin-top: 39rpx;"
>
<view
class=
"item row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
容 器:
</text>
<text
class=
"text"
>
A00001
</text>
<text
class=
"text"
>
{{ detailContainer.container_sn }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
任 务 数:
</text>
<text
class=
"tt"
>
8
</text>
<text
class=
"tt"
>
{{ detailContainer.task_num }}
</text>
</view>
<view
class=
"item row verCenter"
>
<text
class=
"label"
>
合计待复核数量:
</text>
<text
class=
"tt"
>
1118
</text>
<text
class=
"label"
style=
"white-space: nowrap;"
>
合计待复核数量:
</text>
<text
class=
"tt"
>
{{ detailContainer.total_check_num }}
</text>
</view>
</view>
<view
class=
"bor"
></view>
<view
class=
"item-tit"
>
货品明细
</view>
<view
class=
"list-drawer"
>
<scroll-view
style=
"max-height: 755rpx"
scroll-y=
"true"
>
<view
class=
"box row"
v-for=
"(item, index) in
25
"
:key=
"index"
>
<view
class=
"box row"
v-for=
"(item, index) in
detailContainer.list
"
:key=
"index"
>
<view
class=
"input-box row verCenter"
style=
"flex: 0 0 100%;"
>
<text
class=
"label"
>
入库批次号:
</text>
<text
class=
"tt"
>
L-ASN2201010001
</text>
<text
class=
"tt"
>
{{ item.stock_in_batch_sn }}
</text>
</view>
<view
class=
"bor"
style=
"flex: 0 0 100%;"
></view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品编码:
</text>
<text
class=
"text"
>
L-ASN2201010001
</text>
<text
class=
"text"
>
{{ item.goods_sn }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品名称:
</text>
<text
class=
"text"
>
A65512
</text>
<text
class=
"text"
>
{{ item.goods_name }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
标准品牌:
</text>
<text
class=
"text"
>
TI
</text>
<text
class=
"text"
>
{{ item.brand_name }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
D / C:
</text>
<text
class=
"text"
>
22+
</text>
<text
class=
"text"
>
{{ item.date_code }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
产 地:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{ item.coo }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
货品品质:
</text>
<text
class=
"text"
>
良品
</text>
<text
class=
"text"
>
{{ item.quality_val }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
入 仓 号:
</text>
<text
class=
"text"
>
C12345
</text>
<text
class=
"text"
>
{{ item.inhouse }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
其他批次属性:
</text>
<text
class=
"text"
>
-
</text>
<text
class=
"text"
>
{{ item.other_batch_attr }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
锁库数量:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{ item.lock_qty }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
拣货数量:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{ item.pick_qty }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
已复核数:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{ item.recheck_qty }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
待复核数:
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
2121
</text>
<text
class=
"text"
style=
"color: #F98119;"
>
{{ item.no_recheck_qty }}
</text>
</view>
<view
class=
"input-box row verCenter"
>
<text
class=
"label"
>
销 售 员:
</text>
<text
class=
"text"
>
朱国军
</text>
<text
class=
"text"
>
{{ item.sale_name }}
</text>
</view>
</view>
</scroll-view>
...
...
@@ -349,7 +338,44 @@
<text
class=
"check-box-icon curr"
></text>
<text
class=
"text"
>
打印客户专属标签
</text>
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: calc(100% - 248rpx);"
>
复 核
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: calc(100% - 248rpx);"
@
click=
"multiMarkChecked()"
>
复 核
</view>
</view>
</view>
</uni-drawer>
<!-- 按货品复核一键详情弹窗 -->
<uni-drawer
ref=
"showRightAll"
mode=
"right"
>
<view
class=
"uni-drawer-picking"
>
<view
class=
"title row rowCenter verCenter"
>
<text
class=
"iconfont icon-juxing2"
@
click=
"closeDrawer(0)"
></text>
<text
class=
"text"
>
一键复核
</text>
</view>
<view
class=
"p-text"
>
<text
class=
"tt"
>
您已选中
</text>
<text
class=
"ed"
>
{{ filter_id.length }}
</text>
<text
class=
"tt"
>
个复核任务
</text>
</view>
<view
class=
"pack"
style=
"margin-bottom: 25rpx;margin-top: 25rpx;"
>
<view
class=
"h2"
>
打包箱号:
</view>
<view
class=
"row verCenter bothSide"
>
<view
class=
"search row bothSide verCenter"
>
<view
class=
"row verCenter"
>
<text
class=
"iconfont icon-juxing1"
></text>
<input
class=
"uni-input"
placeholder=
"请输入物流单号"
placeholder-style=
"color:#919399"
v-model=
"searchParams.box_name"
/>
</view>
<text
class=
"iconfont icon-a-juxing11"
@
click=
"clearInput(1)"
v-if=
"input_flag_box_name"
></text>
</view>
<view
class=
"row verCenter"
>
<view
class=
"icon-box row rowCenter verCenter"
@
click=
"refresh"
><text
class=
"iconfont icon-juxing3"
></text></view>
</view>
</view>
</view>
<view
class=
"print row verCenter"
>
<text
class=
"check-box-icon curr"
></text>
<text
class=
"tt"
>
打印客户专属标签
</text>
</view>
<view
class=
"btn row verCenter bothSide"
>
<view
class=
"btn0 row rowCenter verCenter"
@
click=
"closeDrawer(0)"
>
取 消
</view>
<view
class=
"btn1 row rowCenter verCenter"
style=
"width: 50%;"
@
click=
"multiMarkChecked"
>
一键复核
</view>
</view>
</view>
</uni-drawer>
...
...
@@ -358,11 +384,37 @@
<
script
>
import
{
API
}
from
'@/util/api.js'
;
import
{
createArray
}
from
'@/util/util.js'
;
import
debounce
from
'lodash/debounce'
;
export
default
{
data
()
{
return
{
stock_out_sn
:
''
,
//标题显示出库单号
lock_ids
:
[],
//出库id集合
all_flag
:
false
,
//全选标记
input_flag_box_name
:
false
,
input_flag_stock_in_batch_sn
:
false
,
input_flag_container_sn
:
false
,
page
:
1
,
limit
:
1000
,
curr
:
0
,
itemArr
:
[
'按货品复核'
,
'按容器复核'
]
itemArr
:
[
'按货品复核'
,
'按容器复核'
],
list
:
[],
filter_list
:
[],
//筛选已选中的列表
filter_id
:
[],
//过滤处理的id
detail
:
{},
//按货品拣货详情
detailContainer
:
{},
//按容器拣货详情
stock_out_item_ids
:
''
,
//复核任务ids
searchParams
:
{
stock_out_id
:
''
,
box_name
:
'001'
,
stock_in_batch_sn
:
''
,
container_sn
:
''
},
formParams
:
{
recheck_qty
:
''
}
};
},
onNavigationBarButtonTap
(
e
)
{
...
...
@@ -372,26 +424,222 @@ export default {
});
}
},
onLoad
()
{},
onLoad
(
options
)
{
this
.
searchParams
.
stock_out_id
=
options
.
stock_out_id
||
''
;
},
onShow
()
{
this
.
getData
();
},
methods
:
{
/**
* 找出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
].
stock_out_item_id
);
},
/**
* 全选
*/
allChnage
()
{
this
.
all_flag
=
!
this
.
all_flag
;
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
this
.
all_flag
);
if
(
this
.
all_flag
)
{
this
.
filter_id
=
this
.
list
.
map
(
function
(
item
)
{
return
item
.
stock_out_item_id
;
});
}
else
{
this
.
filter_id
=
[];
}
},
/**
* 自动补齐3位
* @param {Object} num
*/
autoFillInt
(
num
)
{
return
String
(
num
+
1
).
padStart
(
3
,
'0'
);
},
/**
* 刷新数字
*/
refresh
()
{
this
.
searchParams
.
box_name
=
this
.
autoFillInt
(
Number
(
this
.
searchParams
.
box_name
));
},
/**
* 清空数据
*/
clearInput
(
type
)
{
if
(
type
==
1
)
{
this
.
searchParams
.
box_name
=
''
;
this
.
input_flag_box_name
=
false
;
}
else
if
(
type
==
2
)
{
this
.
searchParams
.
stock_in_batch_sn
=
''
;
this
.
input_flag_stock_in_batch_sn
=
false
;
}
else
if
(
type
==
3
)
{
this
.
searchParams
.
container_sn
=
''
;
this
.
input_flag_container_sn
=
false
;
}
this
.
getData
();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput
:
debounce
(
function
(
type
,
val
)
{
if
(
val
)
{
if
(
type
==
1
)
{
this
.
input_flag_box_name
=
true
;
}
else
if
(
type
==
2
)
{
this
.
input_flag_stock_in_batch_sn
=
true
;
}
else
if
(
type
==
3
)
{
this
.
input_flag_container_sn
=
true
;
}
}
else
{
if
(
type
==
1
)
{
this
.
input_flag_box_name
=
false
;
}
else
if
(
type
==
2
)
{
this
.
input_flag_stock_in_batch_sn
=
false
;
}
else
if
(
type
==
3
)
{
this
.
input_flag_container_sn
=
false
;
}
}
this
.
getData
();
},
500
),
tab
(
index
)
{
this
.
curr
=
index
;
this
.
getData
();
},
/**
* 获取列表数据
*/
getData
()
{
var
URL
=
''
;
if
(
this
.
curr
==
0
)
{
URL
=
API
.
getRecheckTaskItems
;
}
else
if
(
this
.
curr
==
1
)
{
URL
=
API
.
getContainerTaskList
;
}
uni
.
setNavigationBarTitle
({
title
:
this
.
stock_out_sn
+
'复核'
});
this
.
request
(
URL
,
'POST'
,
{
page
:
this
.
page
,
limit
:
this
.
limit
,
...
this
.
searchParams
},
false
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
this
.
list
=
res
.
data
.
list
;
this
.
filter_list
=
createArray
(
this
.
list
.
length
,
false
);
}
else
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'error'
});
}
});
},
showDrawer
(
type
)
{
/**
*按货品复核-单个复核
*/
markChecked
(
stock_out_item_id
,
recheck_qty
,
box_name
)
{
if
(
Number
(
this
.
formParams
.
recheck_qty
)
<=
0
)
{
uni
.
showToast
({
title
:
'输入复核数量'
,
icon
:
'error'
});
return
false
;
}
this
.
request
(
API
.
markChecked
,
'POST'
,
{
stock_out_item_id
:
stock_out_item_id
,
recheck_qty
:
recheck_qty
,
box_name
:
box_name
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'复核成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
getData
();
this
.
closeDrawer
(
1
);
this
.
filter_id
=
[];
//清空
},
2000
);
}
else
{
uni
.
showModal
({
itle
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
},
/**
* 按容器复核-一键复核
*/
multiMarkChecked
()
{
this
.
request
(
API
.
multiMarkChecked
,
'POST'
,
{
stock_out_item_ids
:
this
.
stock_out_item_ids
.
join
(
','
),
box_name
:
this
.
box_name
},
true
).
then
(
res
=>
{
if
(
res
.
code
===
0
)
{
uni
.
showToast
({
title
:
'一键复核成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
this
.
getData
();
this
.
closeDrawer
(
2
);
this
.
closeDrawer
(
0
);
this
.
filter_id
=
[];
//清空
},
2000
);
}
else
{
uni
.
showModal
({
itle
:
'提示'
,
content
:
res
.
msg
,
showCancel
:
false
});
}
});
},
showDrawer
(
type
,
data
)
{
if
(
type
==
1
)
{
//按货品复核
this
.
$refs
.
showRight
.
open
();
this
.
detail
=
data
;
this
.
formParams
.
recheck_qty
=
data
.
no_recheck_qty
;
}
else
if
(
type
==
2
)
{
//按容器复核
this
.
$refs
.
showRightPack
.
open
();
this
.
detailContainer
=
data
;
this
.
stock_out_item_ids
=
data
.
list
.
map
(
function
(
item
)
{
return
item
.
stock_out_item_id
;
});
}
else
if
(
type
==
0
)
{
//一键复核
if
(
this
.
filter_id
.
length
==
0
)
{
uni
.
showToast
({
title
:
'请勾选数据'
,
icon
:
'error'
});
return
false
;
}
this
.
stock_out_item_ids
=
this
.
filter_id
;
this
.
$refs
.
showRightAll
.
open
();
}
},
closeDrawer
(
type
)
{
if
(
type
==
1
)
{
//按货品复核
this
.
$refs
.
showRight
.
close
();
}
else
if
(
type
==
2
)
{
//按容器复核
this
.
$refs
.
showRightPack
.
close
();
}
else
if
(
type
==
0
)
{
//一键复核
this
.
$refs
.
showRightAll
.
close
();
}
}
...
...
util/api.js
View file @
2dfba80f
...
...
@@ -84,6 +84,50 @@ const API = {
* */
makeMultiPickingFinish
:
API_BASE
+
'/api/stockOut/makeMultiPickingFinish'
,
/**
* 我的拣货
* */
getTakedList
:
API_BASE
+
'/api/stockOut/getTakedList'
,
/**
* 领取拣货单
* */
take
:
API_BASE
+
'/api/stockOut/take'
,
/**
* 获取我的拣货记录
* */
getAllPickedList
:
API_BASE
+
'/api/stockOut/getAllPickedList'
,
/**
* 取消拣货
* */
cancelPicking
:
API_BASE
+
'/api/stockOut/cancelPicking'
,
/**
* 释放已领取拣货单
* */
cancelTake
:
API_BASE
+
'/api/stockOut/cancelTake'
,
/**
* 复核列表
* */
getToCheckList
:
API_BASE
+
'/api/stockRecheck/getToCheckList'
,
/**
* 复核确认
* */
makeStockOutFinish
:
API_BASE
+
'/api/stockRecheck/makeStockOutFinish'
,
/**
* 按货品复核列表
* */
getRecheckTaskItems
:
API_BASE
+
'/api/stockRecheck/getRecheckTaskItems'
,
/**
* 按容器复核列表
* */
getContainerTaskList
:
API_BASE
+
'/api/stockRecheck/getContainerTaskList'
,
/**
* 标记复核
* */
markChecked
:
API_BASE
+
'/api/stockRecheck/markChecked'
,
/**
* 一键复核
* */
multiMarkChecked
:
API_BASE
+
'/api/stockRecheck/multiMarkChecked'
,
/**
* 上传文件
* */
upload
:
API_BASE_LIEXIN
+
'/oss/upload'
,
...
...
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