You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
612 lines
15 KiB
612 lines
15 KiB
<template> |
|
<!-- <u-navbar title="备货列表" placeholder border=true :autoBack="true" leftIconSize='35'></u-navbar> --> |
|
<u-navbar title="备货列表" bgColor='#D3832A' leftIconColor='#ffffff' titleStyle='color:#ffffff' placeholder |
|
:autoBack="true" leftIconSize='35'></u-navbar> |
|
<view class="head"> |
|
<view class="type1"> |
|
<view>客户:{{user.consignee}}</view> |
|
<view>备货区域:{{user.goodsAreaName}}</view> |
|
</view> |
|
<view class="type1"> |
|
<view>计划件数:{{user.planNum || 0}}</view> |
|
<view>备货件数:{{user.scanNum || 0}}</view> |
|
</view> |
|
</view> |
|
<view class="tabtip"> |
|
<view @click="setorderStatus(1)"> |
|
<view :class="orderStatus==1?'xz':''">定制品</view> |
|
</view> |
|
<view @click="setorderStatus(2)"> |
|
<view :class="orderStatus==2?'xz':''">库存品</view> |
|
</view> |
|
<!-- |
|
<view @click="setorderStatus(3)"> |
|
<view :class="orderStatus==3?'xz':''">零担</view> |
|
</view> |
|
--> |
|
</view> |
|
<scroll-view scroll-y="true" class="scvew"> |
|
<view class="mabx"> |
|
<!-- 定制品 --> |
|
<view class="item" v-if="orderStatus==1" v-for="item in orderList"> |
|
<view class="toptitl"> |
|
<view class="toplft"> |
|
库位号:{{item.allocation}} |
|
</view> |
|
<view class="tis bf"> |
|
按件扫描 |
|
</view> |
|
</view> |
|
<view class="boxcontt"> |
|
<view> |
|
<view><text style="color: #90A0AF;">托盘号:</text>{{item.pallet}}</view> |
|
<view @click.stop="goorderdetail(item)"><text style="color: #90A0AF;">订单自编码:</text>{{item.orderCode}} |
|
</view> |
|
</view> |
|
<view> |
|
<view><text style="color: #90A0AF;">计划件数:</text>{{item.planNum || 0}}</view> |
|
<view><text style="color: #90A0AF;">扫描件数:</text>{{item.scanNum || 0}}</view> |
|
</view> |
|
</view> |
|
<view class="buttts"> |
|
<view class="antu" v-if="item.trayLean" @click="ckscanningCode(item)"> |
|
整托备货扫码 |
|
</view> |
|
<!-- <view class="anj" @click="godetails(item)" v-if="!item.completeStact"> --> |
|
<view class="anj" @click="godetails(item)"> |
|
{{item.completeStact?'查看明细':'按件备货扫码'}} |
|
</view> |
|
<!-- <view class="anj" @click="godetails(item)" v-else> |
|
查看明细 |
|
</view> --> |
|
</view> |
|
</view> |
|
<!-- 库存品 --> |
|
<view class="item" v-if="orderStatus==2" v-for="item in stockList"> |
|
<!-- <view class="toptitl"> |
|
<view class="toplft"> |
|
库位号:{{item.allocation}} |
|
</view> |
|
<view :class="item==3?'tis bf':'tis'"> |
|
整托备货 |
|
</view> |
|
</view> --> |
|
<view class="boxcontt"> |
|
<view> |
|
<view><text style="color: #90A0AF;">货位:</text>{{item.allocation}}</view> |
|
<view><text style="color: #90A0AF;">物品:</text>{{item.materialName}}</view> |
|
</view> |
|
<view> |
|
<view><text style="color: #90A0AF;">SKU:</text>{{item.sku}}</view> |
|
<view><text style="color: #90A0AF;">规格:</text>{{item.cargoNorms}}</view> |
|
</view> |
|
<view> |
|
<view><text style="color: #90A0AF;">计划数量:</text>{{item.planNum || 0}}</view> |
|
<view><text style="color: #90A0AF;">单位:</text>{{item.cargoUnit}}</view> |
|
</view> |
|
</view> |
|
<view class="buttts"> |
|
<view class="anj" @click="goBarCode(item)"> |
|
配置包条码 |
|
</view> |
|
<!-- <view class="anj"> |
|
拆包 |
|
</view> --> |
|
</view> |
|
</view> |
|
<!-- 零担 --> |
|
<template v-if="orderStatus==3"> |
|
<view class="item" v-for="item in zeroOrderList"> |
|
<view class="toptitl"> |
|
<view class="toplft"> |
|
库位号:{{item.allocation}} |
|
</view> |
|
<view class="tis bf"> |
|
按件扫描 |
|
</view> |
|
</view> |
|
<view class="boxcontt"> |
|
<view> |
|
<view><text style="color: #90A0AF;">托盘号:</text>{{item.pallet}}</view> |
|
<view @click.stop="goorderdetail(item)"><text |
|
style="color: #90A0AF;">订单自编码:</text>{{item.orderCode}} |
|
</view> |
|
</view> |
|
<view> |
|
<view><text style="color: #90A0AF;">计划件数:</text>{{item.planNum || 0}}</view> |
|
<view><text style="color: #90A0AF;">扫描件数:</text>{{item.scanNum || 0}}</view> |
|
</view> |
|
</view> |
|
<view class="buttts"> |
|
<view class="anj" @click="showZeroOrderDetails(item)"> |
|
{{item.completeStact?'查看明细':'去备货'}} |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
<up-button type="primary" text="确定"></up-button> |
|
</view> |
|
</scroll-view> |
|
<tiplist ref="tiplists"></tiplist> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { |
|
onLoad, |
|
onShow, |
|
onHide, |
|
onUnload |
|
} from '@dcloudio/uni-app' |
|
import { |
|
detailType, |
|
} from '@/interfaces/pagesHome/StockUplist' |
|
import { |
|
distributionStockuporderList, |
|
distributionStockupscanningCode, |
|
distributionStockuplocationSelection, |
|
postZeroStockUpData, |
|
postZeroStockUp |
|
} from '@/api/user.js' |
|
import { reactive, toRefs, ref, inject } from "vue"; |
|
const utils = inject('utils') as any |
|
const tiplists = ref(null) |
|
let details = reactive<detailType>({ |
|
reservationId: '', |
|
orderList: [], |
|
// 零担订单列表 |
|
zeroOrderList: [], |
|
orderStatus: 1, |
|
user: { |
|
consignee: '', |
|
goodsAreaName: '', |
|
planNum: '', |
|
scanNum: '', |
|
}, |
|
stockList: [], |
|
stockupId: '', |
|
items: {}, |
|
isscan: false, |
|
scancode: '', |
|
trayId: '', |
|
zeroOrderVisibi: false, |
|
}) |
|
onLoad((op) => { |
|
details.reservationId = op.id |
|
details.stockupId = op.stockupId |
|
details.items = JSON.parse(op.item) |
|
// details.user.goodsAreaName=op.stockupArea |
|
// details.reservationId='1682676882390781953' |
|
}) |
|
onShow(() => { |
|
uni.$on('scancodedate', function (code) { |
|
if (code) { |
|
console.log(code); |
|
details.scancode = code |
|
details.isscan = true |
|
if (details.isscan) scandata() |
|
} |
|
}) |
|
initpage() |
|
}) |
|
onHide(() => { |
|
uni.$off('scancodedate') |
|
details.isscan = false |
|
}) |
|
function goorderdetail(item) { |
|
uni.navigateTo({ |
|
url: '/pagesHome/pages/orderDetails/orderDetails?orderCode=' + item.orderCode |
|
}) |
|
} |
|
async function initpage() { |
|
console.log(details.items); |
|
let data = { |
|
// 零担为1, 不是零担为0 |
|
isZero: 0, |
|
orderStatus: details.orderStatus, |
|
reservationId: details.reservationId, |
|
typeService: details.items.typeService, |
|
stockupId: details.stockupId |
|
} |
|
// 当标签页为零担时, 改变isZero状态 |
|
if (details.orderStatus === 3) { |
|
data.orderStatus = 1 |
|
data.isZero = 1 |
|
} |
|
details.orderList = [] |
|
let response = await distributionStockuporderList(data) |
|
console.log('response :>> ', response); |
|
console.log('details.orderStatus :>> ', details.orderStatus); |
|
details.user.consignee = response.data?.consignee |
|
details.user.goodsAreaName = response.data?.goodsAreaName |
|
details.user.planNum = response.data?.planNum |
|
details.user.scanNum = response.data?.scanNum |
|
details.orderList = response.data?.orderList |
|
details.stockList = response.data?.stockList |
|
if (details.orderStatus === 3) details.zeroOrderList = response.data?.orderList |
|
details.isscan = false |
|
} |
|
// 库存品详情页 |
|
function godetails(item : any) { |
|
uni.navigateTo({ |
|
url: '/pagesHome/pages/StockUplistScandetails/StockUplistScandetails?stockArticleId=' |
|
+ (item.stockArticleId || '') + |
|
'&orderStatus=' + |
|
details.orderStatus + '&reservationId=' + details.reservationId + |
|
'&allocation=' + item.allocation + '&pallet=' + item.pallet + '&orderCode=' + item.orderCode |
|
+ '&stockupId=' + details.stockupId + '&allocationId=' + item.allocationId |
|
+ '&typeService=' + details.items.typeService |
|
+ '&status=' + (item.completeStact ? '1' : '0') |
|
}) |
|
} |
|
|
|
async function ckscanningCode(item : any) { |
|
details.isscan = item.taryLean |
|
details.trayId = item.trayId |
|
// let data={ |
|
// stockupId:details.stockupId, |
|
// trayId:item.trayId, |
|
// reservationId:details.reservationId, |
|
// } |
|
// let res=await distributionStockupscanningCode(data) |
|
|
|
} |
|
function setorderStatus(state : number) { |
|
details.orderStatus = state |
|
initpage() |
|
} |
|
async function goBarCode(item : any) { |
|
let data = { |
|
deliveryDetailsId: item.deliveryDetailsId |
|
} |
|
let res = await distributionStockuplocationSelection(data) |
|
let list = [] |
|
res.data.map(item => { |
|
list.push(item.positionCode + ' (' + item.num + '件)') |
|
}) |
|
if (list.length == 1) { |
|
uni.navigateTo({ |
|
url: '/pagesHome/pages/setbarcode/setbarcode?item=' + JSON.stringify(item) |
|
+ '&reservationId=' + details.reservationId |
|
+ '&goodsAreaName=' + details.user.goodsAreaName |
|
+ '&stockupId=' + details.stockupId |
|
+ '&allocationId=' + res.data[0].allocationId |
|
+ '&completeStact=' + item.completeStact |
|
}) |
|
return |
|
} |
|
tiplists.value.setdetails({ |
|
title: '请选择货位', |
|
isshow: true, |
|
tipstate: 2, |
|
list, |
|
checklist: [], |
|
inputtext: '', |
|
confirmTxt: '确认选择', |
|
isonecheck: true, |
|
success: (deta) => { |
|
if (deta.checklist.length == 0) { |
|
uni.showToast({ |
|
title: '请选择货位', |
|
icon: 'none' |
|
}) |
|
return |
|
} |
|
uni.navigateTo({ |
|
url: '/pagesHome/pages/setbarcode/setbarcode?item=' + JSON.stringify(item) |
|
+ '&reservationId=' + details.reservationId |
|
+ '&goodsAreaName=' + details.user.goodsAreaName |
|
+ '&stockupId=' + details.stockupId |
|
+ '&allocationId=' + res.data[deta.checklist[0]].allocationId |
|
+ '&completeStact=' + item.completeStact |
|
}) |
|
tiplists.value.setdetails({ isshow: false }) |
|
}, |
|
cancel: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
}, |
|
close: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
} |
|
}) |
|
} |
|
/** 扫描接口 |
|
* */ |
|
async function scandata() { |
|
let data = { |
|
trayBarCode: details.scancode, |
|
stockupId: details.stockupId, |
|
trayId: details.trayId, |
|
reservationId: details.reservationId, |
|
} |
|
let res = await distributionStockupscanningCode(data) |
|
if (res.audio) utils.ttsspke(res.audio) |
|
initpage() |
|
} |
|
|
|
/** 展示零担订单物料详情 |
|
*/ |
|
async function showZeroOrderDetails(item) { |
|
console.log('item :>> ', item); |
|
let data = { |
|
typeService: details.items.typeService, |
|
stockupId: details.stockupId, |
|
allocationId: item.allocationId, |
|
orderCode: item.orderCode, |
|
stockArticleId: item.stockArticleId |
|
} |
|
const res = await postZeroStockUpData(data) |
|
let inpList = [] |
|
const { code } = res |
|
if (code === 200) { |
|
console.log('res.data :>> ', res.data); |
|
inpList = res.data.map(val => { |
|
return { |
|
id: val.id, |
|
title: val.categoryName, |
|
value: val.quantity, |
|
maxNum: val.quantity, |
|
minNum: 0, |
|
type: 'Number', |
|
disabled: item.completeStact, |
|
allocationId: item.allocationId, |
|
orderCode: item.orderCode, |
|
stockArticleId: val.stockArticleId |
|
} |
|
}) |
|
} |
|
|
|
// 查看模式 |
|
if (item.completeStact) { |
|
return tiplists.value.setdetails({ |
|
title: '产看零担物料明细', |
|
isshow: true, |
|
tipstate: 4, |
|
inpList, |
|
inputtext: '', |
|
confirmTxt: '关闭', |
|
isonecheck: true, |
|
success: async (deta) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
}, |
|
cancel: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
}, |
|
close: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
} |
|
}) |
|
} |
|
|
|
// 提交模式 |
|
tiplists.value.setdetails({ |
|
title: '设置零担物料数量', |
|
isshow: true, |
|
tipstate: 4, |
|
inpList, |
|
inputtext: '', |
|
confirmTxt: '确认选择', |
|
isonecheck: true, |
|
success: async (deta) => { |
|
console.log('deta :>> ', deta); |
|
if (deta.inpList.length === 0 || item.completeStact) return tiplists.value.setdetails({ isshow: false }) |
|
let data = { |
|
reservationId: details.reservationId, |
|
typeService: details.items.typeService, |
|
stockupId: details.stockupId, |
|
allocationId: deta.inpList[0].allocationId, |
|
orderCode: deta.inpList[0].orderCode, |
|
stockArticleId: deta.inpList[0].stockArticleId, |
|
list: [] |
|
} |
|
data.list = deta.inpList.map(val => { |
|
console.log(val) |
|
return { |
|
firsts: val.title, |
|
id: val.id, |
|
quantity: val.value, |
|
stockArticleId: val.stockArticleId, |
|
} |
|
}) |
|
|
|
const res = await postZeroStockUp(data) |
|
console.log('res :>> ', res); |
|
|
|
/* if (deta.checklist.length == 0) { |
|
uni.showToast({ |
|
title: '请选择货位', |
|
icon: 'none' |
|
}) |
|
return |
|
} */ |
|
tiplists.value.setdetails({ isshow: false }) |
|
initpage() |
|
}, |
|
cancel: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
}, |
|
close: (details) => { |
|
tiplists.value.setdetails({ isshow: false }) |
|
} |
|
}) |
|
} |
|
const { user, orderList, orderStatus, stockList, zeroOrderList } = toRefs(details) |
|
</script> |
|
|
|
<style lang="scss"> |
|
.tabtip { |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-between; |
|
|
|
>view { |
|
width: 50%; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
background-color: #ffffff; |
|
font-size: 32upx; |
|
font-weight: 400; |
|
color: #90A0AF; |
|
|
|
>view { |
|
height: 80upx; |
|
border-bottom: 8upx solid #ffffff; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
} |
|
} |
|
|
|
.xz { |
|
color: #D3832A; |
|
border-bottom: 8upx solid #D3832A; |
|
// border-radius: 5upx; |
|
} |
|
} |
|
|
|
.scvew { |
|
width: 100%; |
|
height: 60vh; |
|
margin-top: 20upx; |
|
|
|
.mabx { |
|
width: 100%; |
|
display: flex; |
|
flex-direction: column; |
|
align-items: center; |
|
|
|
>.item { |
|
width: 686upx; |
|
// height: 378upx; |
|
background: #FFFFFF; |
|
border-radius: 8upx; |
|
display: flex; |
|
flex-direction: column; |
|
align-items: center; |
|
// padding: 10upx 20upx; |
|
box-sizing: border-box; |
|
border-bottom: 1upx solid #ebebeb; |
|
margin-bottom: 20upx; |
|
padding-bottom: 30upx; |
|
|
|
.toptitl { |
|
width: 100%; |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-between; |
|
border-bottom: 2upx solid #EEEEEE; |
|
padding: 34upx 24upx; |
|
box-sizing: border-box; |
|
|
|
.toplft { |
|
font-size: 32upx; |
|
font-weight: 400; |
|
color: #092C4D; |
|
} |
|
|
|
.tis { |
|
font-size: 32upx; |
|
font-weight: 400; |
|
color: #0086F1; |
|
} |
|
|
|
.bf { |
|
color: #D3832A; |
|
} |
|
} |
|
|
|
.boxcontt { |
|
display: flex; |
|
flex-direction: column; |
|
align-items: center; |
|
width: 100%; |
|
padding: 32upx 24upx; |
|
box-sizing: border-box; |
|
font-size: 28upx; |
|
border-bottom: 2upx solid #EEEEEE; |
|
|
|
>view { |
|
width: 100%; |
|
display: flex; |
|
align-items: flex-start; |
|
justify-content: space-between; |
|
margin-bottom: 20upx; |
|
|
|
&:nth-last-child(1) { |
|
margin-bottom: 0; |
|
} |
|
|
|
>view { |
|
flex: 1; |
|
word-wrap: break-word; |
|
word-break: break-all; |
|
|
|
&:nth-of-type(1) { |
|
margin-right: 30upx; |
|
} |
|
} |
|
} |
|
} |
|
|
|
.buttts { |
|
height: 100upx; |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-around; |
|
width: 100%; |
|
box-sizing: border-box; |
|
|
|
.antu { |
|
border: 2upx solid #0086F1; |
|
color: #0086F1; |
|
} |
|
|
|
.anj { |
|
border: 2upx solid #D3832A; |
|
color: #D3832A; |
|
} |
|
|
|
>view { |
|
width: 204upx; |
|
height: 64upx; |
|
background: #FFFFFF; |
|
border-radius: 8upx; |
|
opacity: 1; |
|
font-size: 28upx; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
|
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
.head { |
|
display: flex; |
|
flex-direction: column; |
|
align-items: center; |
|
justify-content: space-around; |
|
padding: 20upx; |
|
height: 176upx; |
|
box-sizing: border-box; |
|
// border-bottom: 1upx solid #ececec; |
|
background-color: #ffffff; |
|
|
|
>.type1 { |
|
width: 100%; |
|
height: 60upx; |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-between; |
|
font-size: 28upx; |
|
font-weight: 400; |
|
color: #092C4D; |
|
|
|
>view { |
|
width: 50%; |
|
} |
|
} |
|
} |
|
</style> |