<template>
|
<view>
|
<scroll-view scroll-y catch:touchmove="touchmove">
|
<view class="square-2">
|
<view class="square-title">
|
<view class="title-sign">
|
<view class="sign"></view>
|
</view>
|
<view class="title-text"><text>托盘条码</text></view>
|
</view>
|
<view class="square-content">
|
<view class="content-input">
|
<input v-model="barcode" type="text" placeholder="扫码 / 输入" maxlength="10" :focus="barcodeFocus"
|
@input="barcodeInput" placeholder-style="line-height: 85rpx;">
|
<uni-icons type="closeempty" size="20" color="#dadada" @click="removeBarcode()"></uni-icons>
|
</view>
|
</view>
|
</view>
|
|
<view class="square-2">
|
<view class="square-title">
|
<view class="title-sign">
|
<view class="sign"></view>
|
</view>
|
<view class="title-text"><text>商品条码</text></view>
|
</view>
|
<view class="square-content">
|
<view class="content-input">
|
<input v-model="code" type="text" placeholder="扫码 / 输入" :focus="codeFocus" @input="codeInput"
|
placeholder-style="line-height: 85rpx;">
|
<uni-icons type="closeempty" size="20" color="#dadada" @click="removeCode()()"></uni-icons>
|
</view>
|
</view>
|
</view>
|
|
|
<view class="square-1">
|
<view class="square-title">
|
<view class="title-sign">
|
<view class="sign"></view>
|
</view>
|
<view class="title-text" style="width: 200rpx;"><text>商品列表</text></view>
|
<view v-show="matList.length != 0" class="lable">
|
<label class="label-btn" style="width: 170rpx;line-height: 95rpx;">
|
<checkbox :checked="check" @click="allChecked()">{{checkText}}</checkbox>
|
</label>
|
<label class="label-btn">
|
<text @click="reChecked()">反选</text>
|
</label>
|
<label>
|
<uni-icons type="trash" size="25" color="#a5a5a5" @click="remove()"></uni-icons>
|
</label>
|
</view>
|
</view>
|
|
</view>
|
<view class="square-none" v-show="matList.length === 0">
|
<view class="v-show">暂无更多数据...</view>
|
</view>
|
|
<checkbox-group @change="checkbox">
|
<view v-for="(item,index) in matList" :key="index" class="data-list bg-false"
|
:class="'bg-'+item.checked">
|
<label class="left-check-box">
|
<checkbox :value="item.id+''" :checked="item.checked" style="display: block;" />
|
</label>
|
<view class="data-list-left">
|
<view class="matnr"><text style="width: 500rpx;">编码:{{item.matnr}}</text>
|
<text style="margin-left: 100rpx;">名称:{{item.maktx}}</text>
|
</view>
|
<view><text style="width: 500rpx;">PO:{{item.standby1}}</text>
|
<text style="margin-left: 100rpx;">SKU:{{item.standby3}}</text>
|
</view>
|
<view><text style="width: 500rpx;">UPC:{{item.standby2}}</text></view>
|
<view><text style="width: 500rpx;">采购单:{{item.boxType3}}</text>
|
<text style="margin-left: 100rpx;">数量:{{item.anfme}}</text>
|
</view>
|
</view>
|
<view class="data-list-right">
|
<label><uni-icons type="compose" size="20" color="#a5a5a5"
|
@click="revise(item,index)"></uni-icons></label>
|
<!-- list中删除键 -->
|
<!-- <label><uni-icons type="trash" size="25" color="#a5a5a5" @click="remove(item,index)"></uni-icons></label> -->
|
</view>
|
</view>
|
</checkbox-group>
|
</scroll-view>
|
|
<!-- 底部按钮 -->
|
<view class="footer flex justify-around">
|
<!-- 底部全选 反选按钮 -->
|
<!-- <label class="label-btn" style="width: 170rpx;">
|
<checkbox :checked="check" @click="allChecked()">{{checkText}}</checkbox>
|
</label>
|
<label class="label-btn" style="width: 100rpx;">
|
<text @click="reChecked()">反选</text>
|
</label> -->
|
|
<label class="label-btn flex justify-center align-center">
|
<button class="cu-btn" @click="resst()">重置</button>
|
</label>
|
<label class="label-btn flex justify-center align-center">
|
<button class="cu-btn bg-blue " @click="comb()">组托</button>
|
</label>
|
</view>
|
|
<view>
|
<!-- 修改数量 -->
|
<uni-popup ref="revise" background-color="#fff" @change="change">
|
<view class="revise-box">
|
<view class="revise-box-top">
|
<view class="color-block-blue"></view>
|
<text class="title">组托数量</text>
|
</view>
|
<view class="text-box">
|
<text>可组数量:{{enableQty}}</text>
|
</view>
|
<view class="changeBox flex justify-around">
|
<view class="num-box">
|
<uni-number-box v-model="count" :min="minCount" :max="maxCount" color="#747474"
|
@change="changeValue" />
|
</view>
|
|
</view>
|
<view class="revise-box-buttom">
|
<view>
|
<button class="cu-btn bg-blue" @click="confirm()">确认</button>
|
</view>
|
</view>
|
|
</view>
|
</uni-popup>
|
</view>
|
</view>
|
</template>
|
|
<script>
|
import permision from "@/common/permission.js"
|
export default {
|
data() {
|
return {
|
commonUrl: null,
|
barcode: '',
|
barcodeFocus: true,
|
focus: false,
|
type: 'center',
|
searchBox: 'hide',
|
pick: 'hide',
|
order: null,
|
matList: [],
|
result: '',
|
count: '',
|
minCount: 0,
|
maxCount: '',
|
rowNum: '',
|
enableQty: '',
|
check: false,
|
checkText: '全选',
|
checkedData: [],
|
orderNo: '',
|
orderNoList: [],
|
showDropdown: false,
|
code: '',
|
codeFocus: true,
|
}
|
},
|
mounted() {
|
const UIP = uni.getStorageSync('UIP');
|
this.baseIP = UIP;
|
const UPORT = uni.getStorageSync('UPORT');
|
this.basePORT = UPORT
|
const PROJ = uni.getStorageSync('UPROJ');
|
this.baseUrl = PROJ
|
this.getUrl()
|
},
|
methods: {
|
getOrderDet(orderNo) {
|
if (!orderNo || orderNo.trim() === '') return;
|
uni.request({
|
url: this.commonUrl + '/mobile/order/search/orderNoList/auth',
|
method: 'GET',
|
data: {
|
orderNo
|
},
|
header: {
|
token: uni.getStorageSync('token')
|
},
|
success: res => {
|
const list = res.data.data || [];
|
this.orderNoList = list.map(o => o.orderNo);
|
}
|
});
|
},
|
|
onOrderSelect(order) {
|
this.orderNo = order;
|
// 可选:自动触发查询
|
// this.getOrderDetlByOrderNo();
|
},
|
getOrderDetlByOrderNo() {
|
if (!this.orderNo) {
|
uni.showToast({
|
title: '请选择订单',
|
icon: 'none'
|
});
|
return;
|
}
|
let that = this;
|
uni.request({
|
url: that.commonUrl + '/mobile/order/search/orderNo/auth',
|
data: {
|
orderNo: that.orderNo
|
},
|
header: {
|
token: uni.getStorageSync('token')
|
},
|
success(result) {
|
let res = result.data;
|
console.log(res.data[0]);
|
if (res.code === 200) {
|
if (res.data) {
|
uni.showLoading();
|
that.matList = res.data[0].combMats;
|
that.initAnfme();
|
console.log(that.matList);
|
}
|
} else if (res.code == 403) {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
setTimeout(() => {
|
uni.reLaunch({
|
url: '../login/login'
|
});
|
}, 1000);
|
} else {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
}
|
}
|
});
|
},
|
|
|
|
selectOrder(orderNo) {
|
this.order = orderNo
|
this.showDropdown = false
|
},
|
removeOrder() {
|
this.order = ''
|
this.orderSuggestions = []
|
this.showDropdown = false
|
},
|
// 获取url
|
getUrl() {
|
this.commonUrl = this.baseHttp + this.baseIP + ':' + this.basePORT + "/" + this.baseUrl
|
},
|
// barcode input 事件
|
barcodeInput() {
|
var len = this.barcode.length
|
if (len != 6) {
|
uni.showToast({
|
title: '托盘码有误请重试',
|
icon: "none",
|
position: 'top'
|
});
|
this.barcodeFocuss()
|
return;
|
}
|
if (len == 6) {
|
this.focuss()
|
}
|
},
|
codeInput() {
|
const that = this;
|
let m = that.code.split(";")
|
if (!m[1] || !m[5] || !m[9]) {
|
uni.showToast({
|
title: '条码有误',
|
icon: "none",
|
position: 'top'
|
});
|
this.codeFocuss()
|
return;
|
}
|
uni.request({
|
url: that.commonUrl + '/mobile/order/search/orderDetl/auth',
|
data: JSON.stringify({
|
orderNo: m[1],
|
sku: m[5],
|
upc: m[9],
|
}),
|
method: 'POST',
|
header: {
|
'token': uni.getStorageSync('token'),
|
},
|
success(result) {
|
var res = result.data;
|
if (res.code === 200) {
|
res.data.combMats.forEach(item => {
|
const existItem = that.matList.find(m => m.matnr === item.matnr &&
|
m.standby2 === item.standby2 &&
|
m.standby3 === item.standby3 &&
|
m.boxtype3 === item.boxtype3
|
)
|
if (existItem) {
|
existItem.anfme = (existItem.anfme || 0) + (item.anfme || 1)
|
} else {
|
item.anfme = 1
|
that.matList.push(item)
|
}
|
})
|
that.codeFocuss()
|
} else if (res.code == 403) {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
setTimeout(() => {
|
uni.reLaunch({
|
url: '../login/login'
|
});
|
}, 1000);
|
} else {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
}
|
}
|
});
|
console.log(m)
|
},
|
// 托盘码有误重置
|
codeFocuss() {
|
|
let that = this;
|
that.codeFocus = false;
|
setTimeout(() => {
|
that.code = '';
|
that.codeFocus = true;
|
}, 100);
|
|
},
|
barcodeFocuss() {
|
// #ifdef APP
|
let that = this;
|
that.barcodeFocus = false;
|
setTimeout(() => {
|
that.barcode = '';
|
that.barcodeFocus = true;
|
}, 100);
|
// #endif
|
},
|
focuss() {
|
// #ifdef APP
|
let that = this;
|
that.focus = false;
|
setTimeout(() => {
|
that.matnrId = '';
|
that.focus = true;
|
}, 100);
|
// #endif
|
},
|
resst() {
|
this.matList = []
|
this.barcode = ''
|
this.order = ''
|
this.orderNo = '';
|
this.barcodeFocuss()
|
uni.vibrateShort();
|
},
|
removeBarcode() {
|
this.barcode = ''
|
uni.vibrateShort();
|
this.barcodeFocus = false;
|
this.$nextTick(function() {
|
this.barcodeFocus = true;
|
});
|
},
|
removeCode() {
|
this.code = ''
|
uni.vibrateShort();
|
this.codeFocus = false;
|
this.$nextTick(function() {
|
this.codeFocus = true;
|
});
|
},
|
removeOrder() {
|
this.order = ''
|
uni.vibrateShort();
|
this.focus = false;
|
this.$nextTick(function() {
|
this.focus = true;
|
});
|
},
|
eject(type) {
|
this.type = type
|
// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
|
this.$refs.revise.open(type)
|
},
|
initAnfme() {
|
|
for (var i = 0; i < this.matList.length; i++) {
|
this.matList[i].enableQty = this.matList[i].anfme
|
this.matList[i].anfme = 0
|
}
|
uni.hideLoading();
|
},
|
revise(item, index) {
|
var maxCount = this.matList[index].maxCount
|
if (maxCount == undefined) {
|
this.matList[index]["maxCount"] = item.enableQty
|
}
|
this.enableQty = item.enableQty
|
this.count = this.minCount
|
this.maxCount = item.maxCount
|
this.rowNum = index
|
this.eject()
|
},
|
changeMax() {
|
this.count = this.enableQty
|
},
|
changeValue() {
|
|
},
|
remove() {
|
console.log(this.matList.filter(item => item.checked !== true))
|
this.matList = this.matList.filter(item => item.checked !== true)
|
|
// this.matList.splice(i,1)
|
|
// for (var i = 0; i < this.matList.length; i++) {
|
// if (this.matList[i].checked == true) {
|
|
// }
|
// }
|
this.checkList();
|
uni.vibrateShort();
|
},
|
// 列表中删除
|
// remove(item,index) {
|
// this.matList.splice(index,1)
|
// uni.vibrateShort();
|
// },
|
confirm() {
|
this.matList[this.rowNum].anfme = this.count
|
this.$refs.revise.close()
|
},
|
comb() {
|
uni.vibrateShort();
|
let that = this;
|
|
if (that.barcode === '') {
|
uni.showToast({
|
title: '请扫描托盘条码',
|
icon: "none",
|
position: 'top'
|
});
|
return;
|
}
|
if (that.barcode.length !== 6) {
|
uni.showToast({
|
title: '托盘码必须为6位',
|
icon: "none",
|
position: 'top'
|
});
|
return;
|
}
|
if (that.matList.length === 0) {
|
uni.showToast({
|
title: '请添加商品列表',
|
icon: "none",
|
position: 'top'
|
});
|
return;
|
}
|
|
// 过滤出数量大于0的商品
|
const validMats = that.matList.filter(item => item.anfme > 0);
|
|
if (validMats.length === 0) {
|
uni.showToast({
|
title: '所有商品组托数量为0,无法组托',
|
icon: "none",
|
position: 'top'
|
});
|
return;
|
}
|
|
// 删除数量为0的商品
|
that.matList = validMats;
|
|
uni.showLoading();
|
|
uni.request({
|
url: that.commonUrl + '/mobile/comb/auth',
|
data: JSON.stringify({
|
billNo: that.orderNo,
|
orderNo: that.orderNo,
|
barcode: that.barcode,
|
combMats: validMats
|
}),
|
method: 'POST',
|
header: {
|
'token': uni.getStorageSync('token'),
|
},
|
success(result) {
|
uni.showLoading();
|
var res = result.data;
|
if (res.code === 200) {
|
uni.showToast({
|
title: res.msg,
|
position: 'top',
|
duration: 1000
|
});
|
that.resst();
|
} else if (res.code == 403) {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
setTimeout(() => {
|
uni.reLaunch({
|
url: '../login/login'
|
});
|
}, 1000);
|
} else {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
});
|
}
|
}
|
});
|
},
|
|
findOrder() {
|
let that = this
|
uni.request({
|
url: that.commonUrl + '/mobile/order/search/orderNo/auth',
|
data: {
|
orderNo: that.order
|
},
|
header: {
|
'token': uni.getStorageSync('token')
|
},
|
success(result) {
|
let res = result.data
|
console.log(res.data[0])
|
if (res.code === 200) {
|
if (res.data) {
|
uni.showLoading();
|
that.matList = res.data[0].combMats;
|
that.orderNo = that.order
|
that.initAnfme()
|
console.log(that.matList)
|
}
|
} else if (res.code == 403) {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
})
|
setTimeout(() => {
|
uni.reLaunch({
|
url: '../login/login'
|
});
|
}, 1000);
|
} else {
|
uni.showToast({
|
title: res.msg,
|
icon: "none",
|
position: 'top'
|
})
|
}
|
}
|
});
|
},
|
change(e) {
|
// console.log('当前模式:' + e.type + ',状态:' + e.show);
|
},
|
toggle(type) {
|
this.type = type
|
// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
|
this.$refs.goodsSearch.open(type)
|
},
|
// 列表选择
|
checkbox(e) {
|
const values = e.detail.value;
|
this.matList.forEach(item => {
|
// 确保 item.id 是字符串
|
const itemId = item.id + '';
|
item.checked = values.includes(itemId);
|
});
|
|
if (values.length === this.matList.length) {
|
this.check = true;
|
this.checkText = "取消全选";
|
} else {
|
this.check = false;
|
this.checkText = "全选";
|
}
|
|
uni.vibrateShort();
|
},
|
|
// 列表反选
|
reChecked() {
|
if (this.matList.length == 0) {
|
return;
|
}
|
var checkArr = []
|
for (var i = 0; i < this.matList.length; i++) {
|
if (this.matList[i].checked == true) {
|
this.$set(this.matList[i], 'checked', false)
|
} else {
|
this.$set(this.matList[i], 'checked', true)
|
}
|
if (this.matList[i].checked == true) {
|
checkArr.push(this.matList[i].checked)
|
}
|
}
|
if (checkArr.length == this.matList.length) {
|
this.check = true
|
this.checkText = "取消全选"
|
} else {
|
this.check = false
|
this.checkText = "全选"
|
}
|
uni.vibrateShort();
|
},
|
// 列表全选
|
allChecked(e) {
|
if (this.check == true) {
|
for (var i = 0; i < this.matList.length; i++) {
|
this.$set(this.matList[i], 'checked', false)
|
}
|
this.check = false
|
this.checkText = "全选"
|
} else {
|
for (var i = 0; i < this.matList.length; i++) {
|
this.$set(this.matList[i], 'checked', true)
|
}
|
this.check = true
|
this.checkText = "取消全选"
|
}
|
uni.vibrateShort();
|
},
|
// 检验列表长度 等于0 显示全选
|
checkList() {
|
if (this.matList.length == 0) {
|
this.check = false
|
this.checkText = "全选"
|
return;
|
}
|
}
|
}
|
}
|
</script>
|
|
<style>
|
/* @import "../../colorui/main.css";
|
@import "../../colorui/icon.css"; */
|
.square-1 .lable {
|
display: inline-block;
|
float: right;
|
height: 100%;
|
width: 400rpx;
|
}
|
|
.square-1 .lable label {
|
display: inline-block;
|
float: left;
|
height: 100%;
|
width: 90rpx;
|
line-height: 100rpx;
|
}
|
|
.pak-seach-box {
|
background-color: #FFFFFF;
|
margin: 15rpx 15rpx 0rpx 15rpx;
|
width: 96%;
|
height: 150rpx;
|
border-radius: 20rpx;
|
}
|
|
.box-top {
|
display: block;
|
height: 60rpx;
|
width: 720rpx;
|
}
|
|
.color-block-blue {
|
background-color: #1E9FFF;
|
display: inline-block;
|
float: left;
|
margin: 15rpx 15rpx 0 15rpx;
|
width: 12rpx;
|
height: 40rpx;
|
border: 5rpx solid #1E9FFF;
|
border-radius: 20rpx;
|
}
|
|
.title {
|
display: inline-block;
|
float: left;
|
font-size: 34rpx;
|
font-weight: 700;
|
height: 50rpx;
|
line-height: 50rpx;
|
margin-top: 10rpx;
|
}
|
|
.box-buttom {
|
display: inline-block;
|
background-color: #ededed;
|
width: 96%;
|
height: 60rpx;
|
border-radius: 20rpx;
|
margin: 15rpx 15rpx 0rpx 15rpx;
|
}
|
|
.box-buttom input {
|
width: 75%;
|
float: left;
|
margin: 8rpx 10rpx 0rpx 25rpx;
|
}
|
|
.box-buttom .search-icon {
|
width: 60rpx;
|
height: 60rpx;
|
float: right;
|
margin-top: 5rpx;
|
margin-right: 10rpx;
|
}
|
|
.pak-seach-box button {
|
background-color: #1E9FFF;
|
color: #ffffff;
|
display: inline-block;
|
float: right;
|
width: 150rpx;
|
height: 60rpx;
|
margin: 15rpx 15rpx 0rpx 15rpx;
|
line-height: 60rpx;
|
}
|
|
.pakin-btn {
|
background-color: #1E9FFF;
|
}
|
|
.pak-data-box {
|
background-color: #F1F1F1;
|
margin: 15rpx 15rpx 0rpx 15rpx;
|
width: 96%;
|
height: 70rpx;
|
border-radius: 20rpx;
|
}
|
|
.pak-data-box .box-top {
|
background-color: #FFFFFF;
|
height: 70rpx;
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
}
|
|
.bg-false {
|
background-color: #FFFFFF;
|
}
|
|
.bg-true {
|
background-color: #ebebeb;
|
}
|
|
.data-list {
|
border-bottom: 1px solid #d8d8d8;
|
height: 180rpx;
|
margin: 15rpx;
|
border-radius: 20rpx;
|
}
|
|
.data-list:first-child {
|
margin-top: 20rpx;
|
}
|
|
.data-list:last-child {
|
margin-bottom: 160rpx;
|
}
|
|
/* .data-list-left {
|
display: inline-block;
|
float: left;
|
text-align: center;
|
width: 100rpx;
|
height: 180rpx;
|
line-height: 180rpx;
|
} */
|
.left-check-box {
|
display: inline-block;
|
/* background-color: #1E9FFF; */
|
float: left;
|
height: 100%;
|
width: 100rpx;
|
text-align: center;
|
line-height: 170rpx;
|
}
|
|
.data-list-left {
|
/* background-color: #ffff7f; */
|
display: inline-block;
|
float: left;
|
height: 180rpx;
|
width: 500rpx;
|
color: #676767;
|
}
|
|
.matnr {
|
padding-top: 10rpx;
|
}
|
|
.data-list-right {
|
/* background-color: #55ffff; */
|
display: inline-block;
|
float: right;
|
width: 100rpx;
|
height: 180rpx;
|
line-height: 180rpx;
|
}
|
|
.data-list-right label {
|
display: inline-block;
|
float: left;
|
width: 100rpx;
|
height: 180rpx;
|
}
|
|
.revise-box {
|
width: 500rpx;
|
height: 500rpx;
|
}
|
|
.revise-box-top {
|
width: 100%;
|
height: 100rpx;
|
background-color: #fff;
|
padding: 10rpx;
|
}
|
|
.changeBox {
|
width: 100%;
|
height: 100rpx;
|
line-height: 120rpx;
|
text-align: center;
|
background-color: #FFF;
|
margin-top: 20rpx;
|
border-bottom: 1px solid #e3e3e3;
|
}
|
|
.text-box {
|
width: 100%;
|
height: 100rpx;
|
line-height: 120rpx;
|
text-align: center;
|
/* padding-left: 120rpx; */
|
background-color: #FFF;
|
margin-top: 20rpx;
|
border-bottom: 1px solid #e3e3e3;
|
}
|
|
.changeBox .num-box {
|
display: inline-block;
|
float: left;
|
}
|
|
.changeBox button {
|
float: left;
|
}
|
|
.revise-box-buttom {
|
position: absolute;
|
width: 100%;
|
height: 100rpx;
|
line-height: 100rpx;
|
background-color: #FFFFFF;
|
bottom: 0;
|
text-align: center;
|
}
|
</style>
|