niexiting
4 months ago
2 changed files with 1002 additions and 14 deletions
@ -0,0 +1,483 @@ |
|||||
|
<template> |
||||
|
<view class=""> |
||||
|
<uni-popup ref="popup" :maskClick="false"> |
||||
|
<view class="uni-flex uni-column pop_customer"> |
||||
|
<view class="" style="padding:10rpx"> |
||||
|
<view class="uni-flex u-col-center uni-row space-between" style="padding: 10rpx 10rpx 20rpx 10rpx"> |
||||
|
<view class="" style="font-size: 35rpx;"> |
||||
|
{{title}} |
||||
|
</view> |
||||
|
<image style="width: 35rpx;height: 35rpx;" src="/static/icons/icons_close.svg" |
||||
|
@click="closeRequestPopup()"></image> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
<view class="uni-flex uni-column" style="background-color: white; "> |
||||
|
<view class="uni-flex uni-column"> |
||||
|
|
||||
|
<view class="title " style="display: flex; align-items: center;padding: 10rpx;"> |
||||
|
<text style=" flex-shrink: 0;width: 25%;">生产线:</text> |
||||
|
<view class="customerBorder" @click="showSelectLine"> |
||||
|
{{productionLineName}} |
||||
|
</view> |
||||
|
<u-select v-model="showProductLineSelect" mode="mutil-column-auto" |
||||
|
:list="productLineList" @confirm="confirmSelectLine"></u-select> |
||||
|
|
||||
|
<view class=""> |
||||
|
<image src="/static/icons/down.svg" mode="" |
||||
|
style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" @click="showSelectLine"> |
||||
|
</image> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
<view class="title " style="display: flex; align-items: center;padding: 10rpx;"> |
||||
|
<text style=" flex-shrink: 0;width: 25%;">计划日期:</text> |
||||
|
<view class="customerBorder" @click="showSelectDate"> |
||||
|
{{planDate}} |
||||
|
</view> |
||||
|
<u-select v-model="showDateSelect" mode="mutil-column-auto" |
||||
|
:list="planDateList" @confirm="confirmSelectDate"></u-select> |
||||
|
|
||||
|
<view class=""> |
||||
|
<image src="/static/icons/down.svg" mode="" |
||||
|
style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" @click="showSelectDate"> |
||||
|
</image> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
<view class="title " style="display: flex;align-items: center;padding: 10rpx;"> |
||||
|
<text style=" flex-shrink: 0; width: 25%;">物料代码:</text> |
||||
|
<view class="customerBorder"> |
||||
|
{{itemCode}} |
||||
|
</view> |
||||
|
<view v-if="planQty>0">{{planQty}}({{getUomInfo(uom)}})</view> |
||||
|
<u-select v-model="showItemCodeSelect" mode="single-column" :list="itemCodeList" |
||||
|
@confirm="confirmSelectItem"></u-select> |
||||
|
<view class="" > |
||||
|
|
||||
|
<image src="" mode="" |
||||
|
style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" |
||||
|
> |
||||
|
</image> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class='split_line'></view> |
||||
|
<view class="title " style="display: flex;align-items: center;padding: 10rpx;"> |
||||
|
<text style=" flex-shrink: 0; width: 25%;">包装规格:</text> |
||||
|
<view class="customerBorder"> |
||||
|
{{packUnitName}} |
||||
|
</view> |
||||
|
<u-select v-model="showPackUnitSelect" mode="single-column" :list="packUnitList" |
||||
|
@confirm="confirmSelectPackUnit"></u-select> |
||||
|
<view class=""> |
||||
|
<image src="/static/icons/down.svg" mode="" |
||||
|
style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" |
||||
|
@click="showSelectPackUnit"> |
||||
|
</image> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
|
||||
|
<view class="title " style="display: flex;align-items: center;padding: 10rpx;"> |
||||
|
<text style=" flex-shrink: 0; width: 25%;">批次:</text> |
||||
|
<uni-easyinput v-model="batch"></uni-easyinput> |
||||
|
<view class=""> |
||||
|
<image src="" mode="" style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" |
||||
|
@click="showSelectLine"> |
||||
|
</image> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class='split_line'></view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="uni-flex uni-row hide_border"> |
||||
|
<button class="btn_edit_big_cancle" hover-class="btn_edit_big_after" @click="cancel()">取消</button> |
||||
|
<button class="btn_edit_big_confirm" hover-class="btn_edit_big_after" @click="confirm()">确认</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</uni-popup> |
||||
|
<comMessage ref="comMessage"></comMessage> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { |
||||
|
getIssueJobByProductionline, |
||||
|
getPlaneInfoByproductLine, |
||||
|
getPackUnitByItemCode, |
||||
|
getProductionlineAndWorkStation |
||||
|
} from '@/api/request2.js'; |
||||
|
import { |
||||
|
getPackUnitName, |
||||
|
getUomInfo |
||||
|
} from '@/common/directory.js'; |
||||
|
|
||||
|
import { |
||||
|
getCurrDate, |
||||
|
getBatch8, |
||||
|
dateFormatData, |
||||
|
lastThreeDays |
||||
|
} from '@/common/basic.js'; |
||||
|
|
||||
|
import { |
||||
|
calc |
||||
|
} from '@/common/calc.js'; |
||||
|
|
||||
|
import uom from '@/mycomponents/qty/uom.vue' |
||||
|
import packQty from '@/mycomponents/qty/packQty.vue' |
||||
|
import balanceStatus from '@/mycomponents/status/balanceStatus.vue' |
||||
|
import winScanItem from '@/mycomponents/scan/winScanItem.vue' |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
uom, |
||||
|
balanceStatus, |
||||
|
winScanItem, |
||||
|
packQty, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
itemCode: '请选择物料信息', |
||||
|
uom: "", |
||||
|
qty: null, |
||||
|
planQty: 0, |
||||
|
goodQty: 0, |
||||
|
planNumber: "", |
||||
|
productLineCode: "", |
||||
|
showProductLineSelect: false, |
||||
|
productLineList: [], |
||||
|
productionLineName: "请选择生产线", |
||||
|
productionLineCode: "", |
||||
|
batch: "", |
||||
|
packUnitName: "请选择包装规格", |
||||
|
packUnit: "", |
||||
|
packUnitList: [], |
||||
|
packQtyHint: "", |
||||
|
packQty: 0, |
||||
|
showPackUnitSelect: false, |
||||
|
itemCodeList: [], |
||||
|
showItemCodeSelect: false, |
||||
|
workStationCode: "", |
||||
|
planDate: '', |
||||
|
showDateSelect:false, |
||||
|
planDateList:[], |
||||
|
fgLocationCode:"", |
||||
|
rawLocationCode:"" |
||||
|
} |
||||
|
}, |
||||
|
props: { |
||||
|
title: { |
||||
|
type: String, |
||||
|
default: '开工阶段' |
||||
|
}, |
||||
|
itemCodeTypeList: { |
||||
|
type: Array, |
||||
|
default: [] |
||||
|
}, |
||||
|
}, |
||||
|
methods: { |
||||
|
|
||||
|
openRequestPopup() { |
||||
|
this.initData(); |
||||
|
this.planDate =getCurrDate() |
||||
|
this.batch = getBatch8() |
||||
|
this.$refs.popup.open('bottom') |
||||
|
}, |
||||
|
initData() { |
||||
|
this.itemCode = '请选择物料信息'; |
||||
|
this.uom = "" |
||||
|
this.planQty = 0 |
||||
|
this.goodQty = 0; |
||||
|
this.packQty = 0; |
||||
|
this.planNumber = "" |
||||
|
this.productLineCode = "" |
||||
|
this.showProductLineSelect = false |
||||
|
this.productLineList = [] |
||||
|
this.productionLineName = "请选择生产线" |
||||
|
this.productionLineCode = "" |
||||
|
this.batch = "" |
||||
|
this.packUnitName = "请选择包装规格" |
||||
|
this.packUnit = "", |
||||
|
this.packQtyHint = "" |
||||
|
this.showPackUnitSelect = false |
||||
|
// this.packUnitList = [] |
||||
|
this.itemCodeList = [] |
||||
|
this.showItemCodeSelect = false |
||||
|
this.workStationCode = "" |
||||
|
this.planDate="" |
||||
|
this.showDateSelect =false |
||||
|
this.planDateList=[] |
||||
|
this.fgLocationCode="" |
||||
|
this.rawLocationCode="" |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
closeRequestPopup() { |
||||
|
this.$refs.popup.close() |
||||
|
}, |
||||
|
itemCodeLoseFocus() { |
||||
|
this.itemCodeFocus = false; |
||||
|
}, |
||||
|
|
||||
|
confirm() { |
||||
|
if (!this.planDate) { |
||||
|
this.showErrorMessage('请先选择计划日期'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (this.productionLineName == "请选择生产线") { |
||||
|
this.showErrorMessage("请选择生产线") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
if (!this.batch) { |
||||
|
this.showErrorMessage("请输入批次例如:20200101") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
if (this.itemCode == "请选择物料信息") { |
||||
|
this.showErrorMessage("请选择物料信息") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
if (this.packUnitName == "请选择包装规格") { |
||||
|
this.showErrorMessage("请选择包装规格") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
this.callback(); |
||||
|
}, |
||||
|
|
||||
|
callback() { |
||||
|
let item = { |
||||
|
productionLineName: this.productionLineName, |
||||
|
productionLineCode: this.productionLineCode, //生产线 |
||||
|
itemCode: this.itemCode, |
||||
|
uom: this.getUomInfo(this.uom), |
||||
|
batch: this.batch, |
||||
|
packUnitName: this.packUnitName, |
||||
|
packUnit: this.packUnit, |
||||
|
packQtyHint: this.packQtyHint, |
||||
|
packQty: this.packQty, |
||||
|
planQty: this.planQty, |
||||
|
goodQty: this.goodQty, |
||||
|
planNumber: this.planNumber, |
||||
|
workStationCode: this.workStationCode, |
||||
|
fgLocationCode:this.fgLocationCode, |
||||
|
rawLocationCode:this.rawLocationCode |
||||
|
}; |
||||
|
this.closeRequestPopup(); |
||||
|
this.$emit("confirm", item); |
||||
|
}, |
||||
|
|
||||
|
showErrorMessage(message, type) { |
||||
|
setTimeout(r => { |
||||
|
this.$refs.comMessage.showErrorMessage(message, res => {}) |
||||
|
}) |
||||
|
}, |
||||
|
cancel(e) { |
||||
|
this.closeRequestPopup(); |
||||
|
}, |
||||
|
|
||||
|
confirmSelectLine(data) { |
||||
|
this.productionLineName = data[0].label + "—" + data[1].label |
||||
|
this.productionLineCode = data[0].value |
||||
|
this.workStationCode = data[1].value |
||||
|
var parent =this.productLineList.filter(res=>res.value==this.productionLineCode) |
||||
|
var fgLocation =parent[0].children.filter(children=>children.value==this.workStationCode) |
||||
|
this.fgLocationCode= fgLocation[0].fgLocationCode; |
||||
|
this.clearItemCode() |
||||
|
this.clearPackUnit() |
||||
|
|
||||
|
}, |
||||
|
clearItemCode(){ |
||||
|
this.planDate =getCurrDate() |
||||
|
this.itemCode ="请选择物料信息" |
||||
|
this.uom = "" |
||||
|
this.planQty = 0; |
||||
|
this.goodQty = 0 |
||||
|
this.planNumber = "" |
||||
|
}, |
||||
|
|
||||
|
confirmSelectDate(data) { |
||||
|
this.planDate=data[0].label |
||||
|
}, |
||||
|
|
||||
|
showSelectDate(){ |
||||
|
this.showDateSelect =true; |
||||
|
var list =lastThreeDays(3); |
||||
|
this.planDateList=[] |
||||
|
list.forEach(res=>{ |
||||
|
this.planDateList.push({ |
||||
|
label :res, |
||||
|
value:"" |
||||
|
}) |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
showSelectLine() { |
||||
|
if (this.productLineList.length == 0) { |
||||
|
uni.showLoading({ |
||||
|
title: "加载中", |
||||
|
mask: true |
||||
|
}) |
||||
|
getProductionlineAndWorkStation().then(res => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data && res.data.length > 0) { |
||||
|
this.productLineList = res.data |
||||
|
this.showProductLineSelect = true |
||||
|
} else { |
||||
|
this.showErrorMessage('未查找到生产线信息'); |
||||
|
} |
||||
|
|
||||
|
}).catch(error => { |
||||
|
uni.hideLoading() |
||||
|
this.showErrorMessage(error); |
||||
|
}) |
||||
|
} else { |
||||
|
this.showProductLineSelect = true |
||||
|
} |
||||
|
|
||||
|
|
||||
|
}, |
||||
|
showSelectItemCode() { |
||||
|
if (!this.planDate) { |
||||
|
this.showErrorMessage('请先选择计划日期'); |
||||
|
return; |
||||
|
} |
||||
|
if (!this.productionLineCode) { |
||||
|
this.showErrorMessage('请先选择生产线'); |
||||
|
return; |
||||
|
} |
||||
|
uni.showLoading({ |
||||
|
title: "加载中", |
||||
|
mask: true |
||||
|
}) |
||||
|
getPlaneInfoByproductLine(this.productionLineCode, this.planDate).then(res => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data && res.data.length > 0) { |
||||
|
res.data.forEach(item => { |
||||
|
item.label = item.itemCode + "(" + item.planQty + this.getUomInfo(item.uom) + ")" |
||||
|
item.value = item |
||||
|
}) |
||||
|
this.itemCodeList = res.data |
||||
|
this.showItemCodeSelect = true |
||||
|
} else { |
||||
|
this.showErrorMessage('未查找到物料信息'); |
||||
|
} |
||||
|
|
||||
|
}).catch(error => { |
||||
|
uni.hideLoading() |
||||
|
this.showErrorMessage(error); |
||||
|
}) |
||||
|
}, |
||||
|
confirmSelectItem(data) { |
||||
|
let productionPlan = data[0].value; |
||||
|
this.itemCode = productionPlan.itemCode; |
||||
|
this.uom = productionPlan.uom |
||||
|
this.planQty = productionPlan.planQty; |
||||
|
this.goodQty = productionPlan.goodQty |
||||
|
this.planNumber = productionPlan.number |
||||
|
|
||||
|
//清除其他数据 |
||||
|
this.clearPackUnit(); |
||||
|
uni.showLoading({ |
||||
|
title: "加载中", |
||||
|
mask: true |
||||
|
}) |
||||
|
getPackUnitByItemCode(this.itemCode).then(res => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data && res.data.list.length > 0) { |
||||
|
res.data.list.forEach(item => { |
||||
|
item.value = item.packUnit |
||||
|
item.label = getPackUnitName(item.packUnit) + "(" + item.packQty + this |
||||
|
.getUomInfo(item.uom) + ")"; |
||||
|
}) |
||||
|
this.packUnitList = res.data.list |
||||
|
var defaultData =res.data.list.filter(item=>item.defaultPackageunit=="TRUE") |
||||
|
this.confirmSelectPackUnit(defaultData) |
||||
|
} |
||||
|
|
||||
|
}).catch(error => { |
||||
|
uni.hideLoading() |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
clearPackUnit(){ |
||||
|
this.packUnitName = "请选择包装规格" |
||||
|
this.packUnit = "" |
||||
|
let pack = this.packUnitList.filter(r => r.packUnit == this.packUnit); |
||||
|
this.packQtyHint = ""; |
||||
|
this.packQty = 0 |
||||
|
}, |
||||
|
|
||||
|
showSelectPackUnit() { |
||||
|
if (this.itemCode == "请选择物料信息") { |
||||
|
this.showErrorMessage('请先选择物料'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
uni.showLoading({ |
||||
|
title: "加载中", |
||||
|
mask: true |
||||
|
}) |
||||
|
getPackUnitByItemCode(this.itemCode).then(res => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data && res.data.list.length > 0) { |
||||
|
res.data.list.forEach(item => { |
||||
|
item.value = item.packUnit |
||||
|
item.label = getPackUnitName(item.packUnit) + "(" + item.packQty + this |
||||
|
.getUomInfo(item.uom) + ")"; |
||||
|
}) |
||||
|
this.packUnitList = res.data.list |
||||
|
this.showPackUnitSelect = true |
||||
|
} else { |
||||
|
this.showErrorMessage('未查找到包装信息'); |
||||
|
} |
||||
|
|
||||
|
}).catch(error => { |
||||
|
uni.hideLoading() |
||||
|
this.showErrorMessage(error); |
||||
|
}) |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
confirmSelectPackUnit(data) { |
||||
|
this.packUnitName = data[0].label |
||||
|
this.packUnit = data[0].value |
||||
|
let pack = this.packUnitList.filter(r => r.packUnit == this.packUnit); |
||||
|
this.packQtyHint = pack[0].packQty + "(" + this |
||||
|
.getUomInfo(pack[0].uom) + ")"; |
||||
|
this.packQty = pack[0].packQty |
||||
|
}, |
||||
|
getUomInfo(uom) { |
||||
|
let item = getUomInfo(uom); |
||||
|
if (item == '') { |
||||
|
return uom; |
||||
|
} else { |
||||
|
return item.label |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.title { |
||||
|
font-size: 30rpx; |
||||
|
} |
||||
|
|
||||
|
.customerBorder { |
||||
|
width: 100%; |
||||
|
border: 1rpx solid lightgray; |
||||
|
border-radius: 5rpx; |
||||
|
padding: 15rpx; |
||||
|
} |
||||
|
</style> |
@ -1,37 +1,542 @@ |
|||||
<template> |
<template> |
||||
<view class=""> |
<view class="page-wraper" style="background-color: #fff;"> |
||||
<view class=""> |
|
||||
<com-blank-view @goScan='openFg' v-if="detailSource.length==0"></com-blank-view> |
<view class="header"> |
||||
|
<view class=""> |
||||
|
<com-blank-view @goScan='openFg' v-if="!dataContent"></com-blank-view> |
||||
|
</view> |
||||
|
<view class="" v-if="dataContent"> |
||||
|
<view class="" style="font-size: 35rpx;padding: 10rpx; padding-left: 15rpx;"> |
||||
|
生产计划:{{dataContent.planNumber}} |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
|
||||
|
<view class="cell_box uni-flex uni-row"> |
||||
|
<view class="cell_info"> |
||||
|
<view class="text_lightblue">完工库位</view> |
||||
|
<view style="font-size: 30rpx; margin-top: 13rpx;" >{{dataContent.fgLocationCode}} |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
<view class="cell_info"> |
||||
|
<view class="text_lightblue">计划数</view> |
||||
|
<view>{{dataContent.planQty}}{{dataContent.uom}}</view> |
||||
|
</view> |
||||
|
<view class="cell_info"> |
||||
|
<view class="text_lightblue">已完工</view> |
||||
|
<view>{{ dataContent.goodQty }}{{dataContent.uom}}</view> |
||||
|
</view> |
||||
|
<view class="cell_info"> |
||||
|
<view class="text_lightblue">未完工</view> |
||||
|
<view>{{dataContent.noGoodQty}}{{dataContent.uom}}</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
|
||||
|
<view class="" style="padding-top: 10rpx; padding-bottom: 10rpx; margin-left: 10rpx;"> |
||||
|
<item :dataContent="dataContent"></item> |
||||
|
</view> |
||||
|
<view class='split_line'></view> |
||||
|
<view class="uni-flex uni-row space-between" style="align-items: center"> |
||||
|
<view style="word-break: break-all;"> |
||||
|
<batch :batch="dataContent.batch"></batch> |
||||
|
<view class="card_view "> |
||||
|
<text style="color: #FFA500;padding: 5px;font-size: 30rpx;">包装规格</text> |
||||
|
<text class="card_content ">{{dataContent.packUnit}} </text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view style="word-break: break-all; font-size: 35rpx; font-weight: bold;"> |
||||
|
<text v-if="dataContent.handleQty>0" style="color: #FFA500;">{{dataContent.handleQty}}/</text> |
||||
|
{{dataContent.packQtyHint}} |
||||
|
</view> |
||||
|
|
||||
|
|
||||
|
</view> |
||||
|
<view class='split_line' v-if="dataContent"></view> |
||||
|
|
||||
|
</view> |
||||
|
|
||||
|
|
||||
</view> |
</view> |
||||
|
|
||||
|
|
||||
|
<view style="margin-top: 480rpx; padding-bottom: 160rpx;" v-if="dataContent"> |
||||
|
|
||||
|
<scroll-view scroll-y="true" class=""> |
||||
|
<view class="scan_view" v-for="(item, index) in showList" :key="index"> |
||||
|
<uni-swipe-action> |
||||
|
<uni-swipe-action-item :right-options="options" @click="swipeClick($event,item,index)"> |
||||
|
<view class="uni-flex uni-row " |
||||
|
style="margin-left: 50rpx; padding-top: 10rpx; padding-bottom: 10rpx;"> |
||||
|
<view class="auto-wrap" style="font-size: 35rpx;font-weight: bold; width: 100%;"> |
||||
|
<text style="font-size: 30rpx;color: #B66463;">唯一码 </text> |
||||
|
{{item.content}} |
||||
|
</view> |
||||
|
</view> |
||||
|
</uni-swipe-action-item> |
||||
|
</uni-swipe-action> |
||||
|
<u-line color="#D8D8D8"></u-line> |
||||
|
</view> |
||||
|
|
||||
|
</scroll-view> |
||||
|
<uni-load-more :status="loadingType" v-if="showList.length>0" /> |
||||
|
|
||||
|
</view> |
||||
|
<view class="page-footer" v-if="dataContent"> |
||||
|
<view class="uni-flex u-col-center space-between " style="background-color:ghostwhite; width: 100%; "> |
||||
|
<view class=""> |
||||
|
<view class="uni-flex uni-row"> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
<view class=" uni-flex uni-row"> |
||||
|
<button class="btn_single_clear" hover-class="btn_commit_after" style="margin-right: 50rpx;" |
||||
|
@click="clear">清空</button> |
||||
|
<button class="btn_single_commit" hover-class="btn_commit_after" @click="submit">提交</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<comNoReceiptPopup ref="comNoReceiptPopup" @confirm='requestConfirm'></comNoReceiptPopup> |
||||
|
<win-scan-button v-if="dataContent" @goScan='openScanPopup'></win-scan-button> |
||||
|
<win-scan-fg-label ref="scanPopup" @getResult='getScanResult' title='制品标签'></win-scan-fg-label> |
||||
|
<comMessage ref="comMessage"></comMessage> |
||||
</view> |
</view> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
|
import { |
||||
|
isCheckMesCode, |
||||
|
planReceiptSubmit, |
||||
|
createPutawayRequestByPlan, |
||||
|
createInspectRequestByPlan, |
||||
|
getPlanByNumber |
||||
|
} from '@/api/request2.js'; |
||||
|
import { |
||||
|
calc |
||||
|
} from '@/common/calc.js'; |
||||
|
|
||||
|
import { |
||||
|
getRemoveOption, |
||||
|
deepCopyData, |
||||
|
getCurrDateTime, |
||||
|
compare |
||||
|
} from '@/common/basic.js'; |
||||
|
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
||||
import comBlankView from '@/mycomponents/common/comBlankView.vue' |
import comBlankView from '@/mycomponents/common/comBlankView.vue' |
||||
|
import comNoReceiptPopup from '@/pages/fg/coms/comNoReceiptPopup.vue' |
||||
|
import item from '@/mycomponents/item/item.vue' |
||||
|
import batch from '@/mycomponents/balance/batch.vue' |
||||
|
import pack from '@/mycomponents/balance/pack.vue' |
||||
|
import winScanFgLabel from "@/mycomponents/scan/winScanFgLabel.vue" |
||||
|
import comFgCard from "@/pages/productReceipt/coms/comFgCard.vue" |
||||
|
import { |
||||
|
Exception |
||||
|
} from 'sass'; |
||||
|
|
||||
export default { |
export default { |
||||
components: { |
components: { |
||||
comBlankView |
comBlankView, |
||||
|
comNoReceiptPopup, |
||||
|
item, |
||||
|
batch, |
||||
|
pack, |
||||
|
winScanButton, |
||||
|
winScanFgLabel, |
||||
|
comFgCard |
||||
}, |
}, |
||||
data() { |
data() { |
||||
return { |
return { |
||||
detailSource:[] |
dataContent: null, |
||||
|
options: [], |
||||
|
showList: [], |
||||
|
allList: [], |
||||
|
index: 1, |
||||
|
loadingType: "", |
||||
|
pageSize: 20 |
||||
|
|
||||
}; |
}; |
||||
}, |
}, |
||||
|
|
||||
onShow() { |
onShow() {}, |
||||
|
onLoad() { |
||||
|
this.options = getRemoveOption() |
||||
|
this.openFg(); |
||||
|
}, |
||||
|
onReachBottom() { |
||||
|
console.log("onReachBottom") |
||||
|
//避免多次触发 |
||||
|
if (this.loadingType == 'nomore') { |
||||
|
return; |
||||
|
} |
||||
|
this.index++; |
||||
|
var list = this.getDataPage(this.index, this.pageSize) |
||||
|
if (list.length > 0) { |
||||
|
// this.showList=list |
||||
|
this.showList = this.showList.concat(list) |
||||
|
} else { |
||||
|
//没有更多了 |
||||
|
this.loadingType = "nomore"; |
||||
|
} |
||||
|
|
||||
}, |
}, |
||||
|
|
||||
mounted() { |
mounted() { |
||||
|
|
||||
}, |
}, |
||||
methods: { |
methods: { |
||||
openFg(){ |
|
||||
|
openFg() { |
||||
} |
setTimeout(res => { |
||||
|
if (this.$refs.comNoReceiptPopup) { |
||||
|
this.$refs.comNoReceiptPopup.openRequestPopup(); |
||||
|
} |
||||
|
}, 600) |
||||
|
|
||||
|
}, |
||||
|
requestConfirm(result) { |
||||
|
this.dataContent = { |
||||
|
itemCode: result.itemCode, |
||||
|
planNumber: result.planNumber, //计划单号 |
||||
|
handleQty: 0, |
||||
|
qty: 0, |
||||
|
planQty: result.planQty, |
||||
|
goodQty: result.goodQty, |
||||
|
noGoodQty: calc.sub(result.planQty, result.goodQty), |
||||
|
packQtyHint: result.packQtyHint, |
||||
|
packQty: result.packQty, |
||||
|
uom: result.uom, |
||||
|
batch: result.batch, |
||||
|
packUnit: result.packUnit, |
||||
|
workStationCode: result.workStationCode, |
||||
|
fgLocationCode:result.fgLocationCode, |
||||
|
subList: [] |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
initList() { |
||||
|
this.index = 1; |
||||
|
this.showList = [] |
||||
|
this.loadingType = ""; |
||||
|
this.showList = this.getDataPage(this.index, this.pageSize) |
||||
|
}, |
||||
|
|
||||
|
getDataPage(pageNo, pageSize) { |
||||
|
//计算总页数 |
||||
|
var totalPages = Math.ceil(this.allList.length / pageSize); |
||||
|
//当前页起始索引 |
||||
|
const start = (pageNo - 1) * pageSize; |
||||
|
const end = start + pageSize; //当前页结束索引 |
||||
|
return this.allList.slice(start, end) |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
swipeClick(e, dataContent, index) { |
||||
|
if (e.content.text == "移除") { |
||||
|
this.$refs.comMessage.showQuestionMessage("是否要移除", res => { |
||||
|
if (res) { |
||||
|
this.allList.splice(index, 1); |
||||
|
this.initList() |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
submit() { |
||||
|
if (this.allList.length == 0) { |
||||
|
this.showErrorMessage("请先扫描唯一码") |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (this.allList.length < this.dataContent.packQty) { |
||||
|
this.$refs.comMessage.showQuestionMessage("扫描数量小于包装规格数量,是否提交?", res => { |
||||
|
if (res) { |
||||
|
this.commit() |
||||
|
} |
||||
|
}); |
||||
|
} else { |
||||
|
this.commit(); |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
async commit() { |
||||
|
|
||||
|
try { |
||||
|
uni.showLoading({ |
||||
|
title: "提交中...", |
||||
|
mask: true |
||||
|
}) |
||||
|
let params = this.setParams() |
||||
|
console.log(JSON.stringify(params)) |
||||
|
|
||||
|
let list = [] |
||||
|
var planData = await planReceiptSubmit(params) |
||||
|
if (planData.data) { |
||||
|
|
||||
|
planData.data.forEach(item => { |
||||
|
list.push({ |
||||
|
itemCode: item.itemCode, // 物品代码 |
||||
|
itemName: item.itemName, // 物品名称 |
||||
|
packName: item.packName, // 包装名称 |
||||
|
packageCode: item.toPackingNumber, // 包装号 |
||||
|
batch: item.toBatch, //批次 |
||||
|
parentNumber: item.parentNumber, //父包装号 |
||||
|
itemType: item.itemType, //物料类型 |
||||
|
asnNumber: item.asnNumber, //ASN |
||||
|
supplierCode: item.supplierCode, // 供应商 |
||||
|
qty: item.qty, // 数量 |
||||
|
printTimes: getCurrDateTime(), // 打印时间 |
||||
|
productionLineCode: item.productionLineCode, //生产线 |
||||
|
barcodeString: item.barcodeString, // 标签信息 |
||||
|
barcodeBase64: '', |
||||
|
requestNumber: item.requestNumber |
||||
|
}) |
||||
|
}) |
||||
|
} else { |
||||
|
throw new Error("提交失败") |
||||
|
} |
||||
|
|
||||
|
createPutawayRequestByPlan(list[0].requestNumber).then(res => { |
||||
|
createInspectRequestByPlan(list[0].requestNumber) |
||||
|
}) |
||||
|
|
||||
|
var queryParams = { |
||||
|
filters: [{ |
||||
|
column: "plan_type", |
||||
|
action: "==", |
||||
|
value: "assemble" |
||||
|
}, |
||||
|
{ |
||||
|
column: "number", |
||||
|
action: "==", |
||||
|
value: this.dataContent.planNumber |
||||
|
} |
||||
|
], |
||||
|
pageNo: 1, |
||||
|
pageSize: 100, |
||||
|
} |
||||
|
|
||||
|
var planeInfo = await getPlanByNumber(queryParams); |
||||
|
if (planeInfo.data && planeInfo.data.list.length > 0) { |
||||
|
if (planeInfo.data.list[0].goodQty >= planeInfo.data.list[0].planQty) { |
||||
|
this.clear(); |
||||
|
} else { |
||||
|
this.dataContent.planNumber = planeInfo.data.list[0].number; |
||||
|
this.dataContent.handleQty = 0; |
||||
|
this.dataContent.planQty = planeInfo.data.list[0].planQty |
||||
|
this.dataContent.goodQty = planeInfo.data.list[0].goodQty |
||||
|
this.dataContent.noGoodQty = calc.sub(planeInfo.data.list[0].planQty, planeInfo.data.list[ |
||||
|
0].goodQty), |
||||
|
this.dataContent.subList = [] |
||||
|
this.showList = []; |
||||
|
this.allList = [] |
||||
|
this.index = 1 |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
throw new Error("未查找到单据信息") |
||||
|
} |
||||
|
uni.hideLoading() |
||||
|
this.showCommitSuccessMessage("提交成功<br>生成装配收货记录<br>"+list[0].requestNumber, list) |
||||
|
|
||||
|
} catch (error) { |
||||
|
uni.hideLoading() |
||||
|
var hint = error.message ? error.message : error |
||||
|
this.showErrorMessage(hint) |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
setParams() { |
||||
|
this.allList.forEach(res => { |
||||
|
res.outsideItemCode = res.itemCode |
||||
|
res.outsideProduceDate = null |
||||
|
res.outsideSerialNumber = res.order |
||||
|
}) |
||||
|
this.dataContent.subList = this.allList |
||||
|
|
||||
|
return this.dataContent |
||||
|
}, |
||||
|
|
||||
|
clear() { |
||||
|
this.$refs.comMessage.showQuestionMessage("是否要清空?", res => { |
||||
|
if (res) { |
||||
|
this.clearData() |
||||
|
this.openFg(); |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
clearData() { |
||||
|
this.dataContent = null |
||||
|
this.showList = [] |
||||
|
this.allList = [] |
||||
|
this.index = 1; |
||||
|
}, |
||||
|
|
||||
|
openScanPopup() { |
||||
|
var itemCode = this.dataContent.itemCode |
||||
|
console.log("物料", itemCode) |
||||
|
this.$refs.scanPopup.openScanPopup(itemCode); |
||||
|
}, |
||||
|
getScanResult(result) { |
||||
|
let that = this; |
||||
|
//TODO缺少零件号的对应关系 |
||||
|
//查询mes码是否完工 |
||||
|
isCheckMesCode(result.content).then(res => { |
||||
|
if (res.data) { |
||||
|
if (that.dataContent) { |
||||
|
|
||||
|
var itemIndex = this.allList.findIndex(r => |
||||
|
r.itemCode == result.itemCode && |
||||
|
r.order == result.order); |
||||
|
//不存在 |
||||
|
if (itemIndex == -1) { |
||||
|
// if (this.allList.length > this.dataContent.packQty) { |
||||
|
// this.showErrorMessage("唯一码数量不能大于计划数量") |
||||
|
// return; |
||||
|
// } |
||||
|
result.countTime = new Date(); |
||||
|
this.allList.push(result); |
||||
|
this.allList.sort(compare('countTime')); //按扫描信息排序 |
||||
|
this.initList() |
||||
|
this.scanPopupGetFocus(); |
||||
|
this.calcFgQty(); |
||||
|
} else { |
||||
|
this.$refs.comMessage.showQuestionMessage("唯一码【" + result.content + |
||||
|
'】已经扫描,是否移除', |
||||
|
res => { |
||||
|
if (res) { |
||||
|
this.allList.splice(itemIndex, 1) |
||||
|
this.allList.sort(compare('countTime')); //按扫描信息排序 |
||||
|
this.initList() |
||||
|
that.calcFgQty(); |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}).catch(error => { |
||||
|
this.showErrorMessage(error) |
||||
|
}) |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
calcFgQty() { |
||||
|
this.dataContent.handleQty = this.allList.length; |
||||
|
if (this.dataContent.handleQty == this.dataContent.packQty) { |
||||
|
if (this.$refs.scanPopup) { |
||||
|
this.$refs.scanPopup.closeScanPopup(); |
||||
|
} |
||||
|
this.commit() |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
scanPopupGetFocus() { |
||||
|
if (this.$refs.scanPopup) { |
||||
|
this.$refs.scanPopup.getfocus(); |
||||
|
} |
||||
|
}, |
||||
|
scanPopupLoseFocus() { |
||||
|
if (this.$refs.scanPopup) { |
||||
|
this.$refs.scanPopup.losefocus(); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
showCommitSuccessMessage(hint, pointData) { |
||||
|
this.$refs.comMessage.showSuccessMessage(hint, res => { |
||||
|
if (pointData.length > 0) { |
||||
|
uni.navigateTo({ |
||||
|
url: `/pages/point/index?points=${JSON.stringify(pointData)}` |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
showErrorMessage(message) { |
||||
|
this.$refs.comMessage.showErrorMessage(message, res => { |
||||
|
if (res) { |
||||
|
this.scanPopupGetFocus() |
||||
|
} |
||||
|
}); |
||||
} |
} |
||||
|
} |
||||
|
|
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style> |
<style scoped lang="scss"> |
||||
|
page { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
.page-wraper { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
.header { |
||||
|
position: fixed; |
||||
|
/* #ifdef H5 */ |
||||
|
top: 88rpx; |
||||
|
/* #endif */ |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
background-color: #fff; |
||||
|
z-index: 10; |
||||
|
padding: 10rpx; |
||||
|
/* 确保头部在内容之上 */ |
||||
|
} |
||||
|
|
||||
|
.page-footer { |
||||
|
position: fixed; |
||||
|
bottom: 0; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.page-main { |
||||
|
flex: 1; |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.page-main-scroll { |
||||
|
position: absolute; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
top: 0; |
||||
|
bottom: 0; |
||||
|
} |
||||
|
|
||||
|
.page-main-list { |
||||
|
/* height: 80rpx; |
||||
|
line-height: 80rpx; */ |
||||
|
text-align: center; |
||||
|
background: #e0e0e0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.item { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
.item_scaned { |
||||
|
background-color: antiquewhite; |
||||
|
} |
||||
|
|
||||
|
.auto-wrap { |
||||
|
white-space: normal; |
||||
|
word-break: break-all; |
||||
|
overflow-wrap: break-word; |
||||
|
/* 对于兼容性更好的情况 */ |
||||
|
} |
||||
</style> |
</style> |
Loading…
Reference in new issue