@@ -48,6 +48,10 @@
< / template >
< view v-else class = "count-unavailable" > 托盘码未准备完成 , 当前不能开始箱码清点 。 < / view >
< / view >
< view v-if = "task.taskStatus === 'CLAIMED' && task.totalCartons > 0 && task.boundCartons === task.totalCartons" class="continue-strip" >
< text > 本票已全部归托 。 托盘未装满时先继续装其他票 , 实物装满后再封托 。 < / text >
< button class = "secondary-button" @tap ="continueOtherTask" > 继续装其他入仓单 < / button >
< / view >
< view class = "section-card" >
< view class = "section-heading" > < view > < text class = "section-title" > 2. 托盘码 < / text > < text class = "section-desc" > 打开 A4 托盘信息单 , 装完后封托 < / text > < / view > < button class = "text-button" :disabled = "loading" @tap ="loadTask" > 刷新 < / button > < / view >
@@ -75,14 +79,14 @@
export default {
components : { PortalHeader , ScanTargetInput } ,
data ( ) { return { user : session . currentUser , taskId : '' , warehouseId : '' , task : null , palletCode : '' , selectedPalletId : '' , boxCode : '' , carton : null , skuCounts : [ ] , activeScan : 'boxCode' , loading : false , submitting : false , printing : false , error : '' , notice : '' } } ,
data ( ) { return { user : session . currentUser , taskId : '' , warehouseId : '' , task : null , palletCode : '' , selectedPalletId : '' , selectedPalletNo : '' , boxCode : '' , carton : null , skuCounts : [ ] , activeScan : 'boxCode' , loading : false , submitting : false , printing : false , error : '' , notice : '' } } ,
computed : {
statusLabel ( ) { return this . task ? . taskStatus === 'COMPLETED' ? '已完成' : ( this . task ? . taskStatus === 'CLAIMED' ? '作业中' : '待领取' ) } ,
palletSetupReady ( ) { return this . task ? . palletSetupReady === true } ,
palletSetupMessage ( ) { return this . task ? . palletSetupMessage || ` 预计 ${ this . task ? . expectedPalletCount || 0 } 托,当前仅生成 ${ this . task ? . generatedPalletCount || 0 } 个托盘码,请联系后台处理后刷新 ` } ,
canResolveCarton ( ) { return Boolean ( this . palletSetupReady && this . task ? . taskStatus === 'CLAIMED' && String ( this . boxCode || '' ) . trim ( ) && ! this . loading && ! this . submitting ) } ,
canCount ( ) { return Boolean ( this . carton ? . canCount && this . skuCounts . length && this . skuCounts . every ( ( line ) => Number . isInteger ( Number ( line . actualQuantity ) ) && Number ( line . actualQuantity ) >= 0 && ( ! this . lineDiffers ( line ) || String ( line . discrepancyRemark || '' ) . trim ( ) ) ) ) } ,
currentPallet ( ) { return ( this . task ? . pallets || [ ] ) . find ( ( item ) => String ( item . palletId ) === String ( this . selectedPalletId ) && item . status === 'OPEN' ) || null }
currentPallet ( ) { return ( this . task ? . pallets || [ ] ) . find ( ( item ) => item . palletNo === this . selectedPalletNo && item . status === 'OPEN' ) || ( this . selectedPalletNo ? { palletNo : this . selectedPalletNo , status : 'OPEN' } : null ) }
} ,
onLoad ( options ) { this . taskId = String ( options . taskId || '' ) ; this . warehouseId = String ( options . warehouseId || '' ) } ,
onShow ( ) { if ( ! requireSession ( ) ) return ; this . user = session . currentUser ; this . startScanner ( ) ; this . loadTask ( ) } ,
@@ -118,13 +122,13 @@
async selectPallet ( value ) {
if ( ! this . palletSetupReady ) { this . error = this . palletSetupMessage ; return }
const code = String ( value || this . palletCode || '' ) . trim ( ) . toUpperCase ( ) ; const pallet = ( this . task ? . pallets || [ ] ) . find ( ( item ) => item . palletNo === code )
if ( ! pallet ) { this . error = '托盘码不属于当前一件代发任务 ' ; return }
if ( pallet . status !== 'OPEN ') { this . error = '托盘已封托,不能继续归托' ; return }
this . palletCode = code ; this . selectedPalletId = String ( pallet . palletId ) ; this . activeScan = 'boxCode'
if ( pallet && pallet . status !== 'OPEN' ) { this . error = '托盘已封托,不能继续归托 ' ; return }
this . palletCode = code ; this . selectedPalletId = pallet ? String ( pallet . palletId ) : ' '; this . selectedPalletNo = code ; this . activeScan = 'boxCode'
if ( Number ( this . task ? . unboundCartons || 0 ) > 0 ) await this . runMutation ( ( ) => bindDropshipPendingCartons ( this . taskId , this . warehouseId , code ) , ` 待归托箱已绑定至 ${ code } ` )
else this . notice = ` 当前托盘: ${ code } `
else this . notice = pallet ? ` 当前托盘: ${ code } ` : ` 已选择仓库开放托盘 ${ code } ,清点箱码时将校验并归托 `
} ,
async sealPallet ( pallet ) { const result = await this . runMutation ( ( ) => sealDropshipPallet ( this . taskId , this . warehouseId , pallet ) , ` ${ pallet . palletNo } 已封托 ` ) ; if ( result && String ( this . selectedPalletId ) === String ( pallet . palletId ) ) { this . selectedPalletId = '' ; this . palletCode = '' } } ,
continueOtherTask ( ) { uni . redirectTo ( { url : ` /pages/dropship-tasks/dropship-tasks?warehouseId= ${ encodeURIComponent ( this . warehouseId ) } ` } ) } ,
async sealPallet ( pallet ) { const result = await this . runMutation ( ( ) => sealDropshipPallet ( this . taskId , this . warehouseId , pallet ) , ` ${ pallet . palletNo } 已封托 ` ) ; if ( result && this . selectedPalletNo === pallet . palletNo ) { this . selectedPalletId = '' ; this . selectedPalletNo = '' ; this . palletCode = '' } } ,
async printPallet ( pallet ) {
if ( this . printing ) return
this . printing = true ; this . resetMessages ( )
@@ -163,6 +167,7 @@
. state , . message { margin - bottom : 10 px ; padding : 12 px ; border - radius : 9 px ; color : # 667085 ; font - size : 12 px ; line - height : 18 px ; text - align : center ; background : # fff ; }
. message . error { color : # b42318 ; background : # fff1f0 ; } . message . success { color : # 067647 ; background : # ecfdf3 ; }
. task - summary - card , . section - card { margin : 0 ; padding : 11 px 12 px ; border : 0 ; border - bottom : 6 px solid # eef2f7 ; border - radius : 0 ; background : # fff ; box - shadow : none ; }
. continue - strip { padding : 10 px 12 px 12 px ; border - bottom : 6 px solid # eef2f7 ; color : # 475467 ; font - size : 13 px ; line - height : 19 px ; background : # f8fbff ; } . continue - strip . secondary - button { margin - top : 7 px ; }
. task - summary - card { display : block ; }
. summary - head , . section - heading , . pallet - head , . carton - head { display : flex ; align - items : flex - start ; justify - content : space - between ; gap : 10 px ; }
. inbound - code { min - width : 0 ; color : # 12233 f ; font - size : 17 px ; font - weight : 700 ; overflow - wrap : anywhere ; }