zhang_li
2 months ago
7 changed files with 468 additions and 16 deletions
@ -0,0 +1,438 @@ |
|||||
|
<template> |
||||
|
<view class="page-wraper"> |
||||
|
<view class=""> |
||||
|
<com-blank-view @goScan="openScanPopup" v-if="currentPackage == null"></com-blank-view> |
||||
|
</view> |
||||
|
<view class="page-wraper" v-if="currentPackage != null"> |
||||
|
<view class="page-main"> |
||||
|
<uni-collapse> |
||||
|
<uni-collapse-item> |
||||
|
<template v-slot:title> |
||||
|
<view class="card_itemName" style="padding: 3px 5px; font-size: 28rpx"> 变更前包装信息 </view> |
||||
|
</template> |
||||
|
<PackageAndItemCard :dataContent="currentPackage"></PackageAndItemCard> |
||||
|
</uni-collapse-item> |
||||
|
</uni-collapse> |
||||
|
|
||||
|
<view> |
||||
|
<scroll-view scroll-y="true" class=""> |
||||
|
<view class="" v-for="(item, index) in fgList" :key="index"> |
||||
|
<uni-swipe-action> |
||||
|
<uni-swipe-action-item :right-options="options"> |
||||
|
<view class="uni-flex uni-row" style="margin-left: 50rpx; padding-top: 10rpx; padding-bottom: 10rpx"> |
||||
|
<!-- scan_view --> |
||||
|
<view class="auto-wrap" style="font-size: 35rpx; font-weight: bold; width: 100%"> |
||||
|
<text style="font-size: 30rpx; color: #b66463">唯一码 </text> |
||||
|
{{ item.remark }} |
||||
|
</view> |
||||
|
</view> |
||||
|
</uni-swipe-action-item> |
||||
|
</uni-swipe-action> |
||||
|
<u-line color="#D8D8D8"></u-line> |
||||
|
</view> |
||||
|
</scroll-view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="page-footer"> |
||||
|
<view class="uni-flex u-col-center space-between padding_10" style="background-color: ghostwhite; width: 100%"> |
||||
|
<view class=""> |
||||
|
<view class="uni-flex uni-row u-col-center"> |
||||
|
<text style="font-size: 28rpx">变更后物料</text> |
||||
|
<view class="uni-flex u-col-center uni-row" @click="showSelect"> |
||||
|
<view class="card_itemCode" style="margin-left: 20rpx; color: blue"> |
||||
|
{{ toItemCode }} |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
<image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelect"> </image> |
||||
|
</view> |
||||
|
<u-select v-model="show" mode="single-column" :list="toItemList" @confirm="confirmSelect"></u-select> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="uni-flex uni-row"> |
||||
|
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<win-scan-button @goScan="openScanPopup"></win-scan-button> |
||||
|
</view> |
||||
|
|
||||
|
<win-com-scan-balance ref="scanPopup" @getBalance="getPackScanResult" :bussinessCode="bussinessCode"> </win-com-scan-balance> |
||||
|
|
||||
|
<win-scan-fg-label ref="scanPopup" @getResult="getFgScanResult" title="制品标签"></win-scan-fg-label> |
||||
|
<!-- <win-scan-pack ref="scanPopup" @getResult='getScanResult' title="制品标签" headerType="HMQ"></win-scan-pack> --> |
||||
|
<comMessage ref="comMessage"></comMessage> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { Decimal } from 'decimal.js' // 引入 |
||||
|
import { getSpareitemcode, getProductreceiptDetailbByPackingNumber } from '@/api/request2.js' |
||||
|
|
||||
|
import { getPrecisionStrategyList } from '@/common/balance.js' |
||||
|
import { goHome, getPackingNumberAndBatchByList, deepCopyData, getRemoveOption } from '@/common/basic.js' |
||||
|
|
||||
|
import { calc } from '@/common/calc.js' |
||||
|
|
||||
|
import { getInventoryStatusDesc, getDirectoryItemArray } from '@/common/directory.js' |
||||
|
|
||||
|
import { getBusinessType } from '@/common/record.js' |
||||
|
|
||||
|
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
||||
|
import winScanPack from '@/mycomponents/scan/winScanPack.vue' |
||||
|
import comProductRecord from '@/pages/productReceipt/coms/comProductRecord.vue' |
||||
|
import comBlankView from '@/mycomponents/common/comBlankView.vue' |
||||
|
import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue' |
||||
|
import winComScanBalance from '@/mycomponents/scan/winComScanBalance.vue' |
||||
|
import winScanFgLabel from '@/mycomponents/scan/winScanFgLabel.vue' |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
winScanButton, |
||||
|
winScanPack, |
||||
|
comProductRecord, |
||||
|
comBlankView, |
||||
|
PackageAndItemCard, |
||||
|
winComScanBalance, |
||||
|
winScanFgLabel |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
detailSource: [], // 绑定在页面上的数据源 |
||||
|
toLocationCode: '', |
||||
|
fromLocationTypeList: [], |
||||
|
fromLocationCode: '', |
||||
|
businessType: {}, |
||||
|
dataContent: {}, |
||||
|
managementList: [], |
||||
|
show: false, |
||||
|
toItemCode: '请选择变更后物料', |
||||
|
toItemList: [], |
||||
|
fgList: [], |
||||
|
options: [], |
||||
|
currentPackage: null, |
||||
|
bussinessCode: 'Relegate' |
||||
|
} |
||||
|
}, |
||||
|
mounted() {}, |
||||
|
onLoad(option) { |
||||
|
uni.setNavigationBarTitle({ |
||||
|
title: option.title |
||||
|
}) |
||||
|
this.getBusinessType() |
||||
|
this.options = getRemoveOption() |
||||
|
}, |
||||
|
// 返回首页 |
||||
|
onNavigationBarButtonTap(e) { |
||||
|
if (e.index === 0) { |
||||
|
goHome() |
||||
|
} |
||||
|
}, |
||||
|
// 拦截返回按钮事件 |
||||
|
onBackPress(e) {}, |
||||
|
|
||||
|
onPullDownRefresh() {}, |
||||
|
|
||||
|
mounted() {}, |
||||
|
methods: { |
||||
|
getBusinessType() { |
||||
|
getBusinessType(this.bussinessCode, (res) => { |
||||
|
if (res.success) { |
||||
|
this.businessType = res.businessType |
||||
|
this.fromInventoryStatuses = getDirectoryItemArray(res.fromInventoryStatuses) |
||||
|
this.fromLocationAreaTypeList = res.fromLocationAreaTypeList |
||||
|
this.openScanPopup() |
||||
|
} else { |
||||
|
this.showErrorMessage(res.message) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
getPackScanResult(result) { |
||||
|
const { label } = result |
||||
|
const pack = result.package |
||||
|
uni.showLoading({ |
||||
|
title: '加载中...', |
||||
|
mask: true |
||||
|
}) |
||||
|
const params = { |
||||
|
available: 'TRUE', |
||||
|
changeBeforeCode: pack.itemCode, |
||||
|
pageSize: 20, |
||||
|
pageNo: 1 |
||||
|
} |
||||
|
|
||||
|
getSpareitemcode(params) |
||||
|
.then((res) => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data.list.length == 0) { |
||||
|
this.showErrorMessage('未查找到变更后的物料,请在《量产件备件关系中进行配置》') |
||||
|
} else { |
||||
|
this.closeScanPopup() |
||||
|
|
||||
|
res.data.list.forEach((r) => { |
||||
|
r.value = r.code |
||||
|
r.label = `${r.code}(${r.name})` |
||||
|
}) |
||||
|
|
||||
|
this.toItemList = res.data.list |
||||
|
if (res.data.list.length == 1) { |
||||
|
this.toItemCode = res.data.list[0].code |
||||
|
} else { |
||||
|
this.show = true |
||||
|
} |
||||
|
|
||||
|
// 查询唯一码 |
||||
|
getProductreceiptDetailbByPackingNumber(pack.number) |
||||
|
.then((res) => { |
||||
|
if (res.data.length > 0) { |
||||
|
this.fgList = res.data |
||||
|
const pack = result.package |
||||
|
const { balance } = result |
||||
|
this.currentPackage = result.package |
||||
|
this.currentPackage.packingNumber = pack.number |
||||
|
this.currentPackage.locationCode = balance.locationCode |
||||
|
this.currentPackage.inventoryStatus = balance.inventoryStatus |
||||
|
// this.getDataSource(result); |
||||
|
} else { |
||||
|
this.showErrorMessage(`箱码【${pack.number}】未查找到绑定的灯码信息`) |
||||
|
} |
||||
|
}) |
||||
|
.catch((res) => { |
||||
|
this.showErrorMessage(res.message) |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
.catch((res) => { |
||||
|
this.showErrorMessage(res.message) |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
getFgScanResult(result) { |
||||
|
const that = this |
||||
|
const itemIndex = this.allList.findIndex((r) => r.content == result.content) |
||||
|
// 不存在 |
||||
|
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() |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
openScanPopup() { |
||||
|
setTimeout((r) => { |
||||
|
this.$refs.scanPopup.openScanPopup(this.businessType) |
||||
|
this.scanPopupGetFocus() |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
commit() { |
||||
|
if (this.positionInfo == '请选择位置') { |
||||
|
this.showMessage('请先选择位置') |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
if (this.detailSource.length > 0 && this.detailSource[0].subList.length > 0) { |
||||
|
// 查询管理模式 |
||||
|
uni.showLoading({ |
||||
|
title: '提交中....', |
||||
|
mask: true |
||||
|
}) |
||||
|
this.managementList = [] |
||||
|
const precisionStrategParams = this.setPrecisionStrategParams() |
||||
|
|
||||
|
getPrecisionStrategyList(precisionStrategParams, (res) => { |
||||
|
if (res.success) { |
||||
|
this.managementList = res.list |
||||
|
const params = this.setParams() |
||||
|
console.log(`提交${JSON.stringify(params)}`) |
||||
|
productionReceiptRecordSubmit(params) |
||||
|
.then((res) => { |
||||
|
uni.hideLoading() |
||||
|
if (res.data) { |
||||
|
this.showCommitSuccessMessage(`提交成功<br>生成制品收货记录<br>${res.data}`) |
||||
|
} else { |
||||
|
this.showErrorMessage(`提交失败[${res.msg}]`) |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
uni.hideLoading() |
||||
|
this.showErrorMessage(error) |
||||
|
}) |
||||
|
} else { |
||||
|
uni.hideLoading() |
||||
|
this.showErrorMessage(res.message) |
||||
|
} |
||||
|
}) |
||||
|
} else { |
||||
|
this.showErrorMessage('没有要提交的数据,请先扫描') |
||||
|
} |
||||
|
}, |
||||
|
setPrecisionStrategParams() { |
||||
|
const itemList = [] |
||||
|
this.detailSource.forEach((item) => { |
||||
|
item.subList.forEach((detail) => { |
||||
|
if (detail.scaned) { |
||||
|
detail.toLocationCode = this.fgLocationCode |
||||
|
const filterResult = itemList.filter((res) => { |
||||
|
if (res.itemCode == item.itemCode && detail.toLocationCode == res.locationCode) { |
||||
|
return res |
||||
|
} |
||||
|
}) |
||||
|
// 去掉重复元素 |
||||
|
if (filterResult.length == 0) { |
||||
|
const result = { |
||||
|
itemCode: item.itemCode, |
||||
|
locationCode: detail.toLocationCode |
||||
|
} |
||||
|
itemList.push(result) |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
return itemList |
||||
|
}, |
||||
|
|
||||
|
setParams() { |
||||
|
const subList = [] |
||||
|
const creator = this.$store.state.user.id |
||||
|
this.detailSource.forEach((item) => { |
||||
|
item.subList.forEach((detail) => { |
||||
|
if (detail.scaned) { |
||||
|
const submitItem = deepCopyData(detail) |
||||
|
const info = getPackingNumberAndBatchByList(this.managementList, detail.itemCode, detail.packingNumber, detail.toLocationCode, detail.batch) |
||||
|
submitItem.itemCode = detail.itemCode |
||||
|
submitItem.itemName = detail.package.itemName |
||||
|
submitItem.itemDesc1 = detail.package.itemDesc1 |
||||
|
submitItem.itemDesc2 = detail.package.itemDesc2 |
||||
|
|
||||
|
submitItem.inventoryStatus = detail.inventoryStatus |
||||
|
|
||||
|
submitItem.fromPackingNumber = info.packingNumber |
||||
|
submitItem.toPackingNumber = info.packingNumber |
||||
|
|
||||
|
submitItem.fromContainerNumber = detail.containerNumber |
||||
|
submitItem.toContainerNumber = detail.containerNumber |
||||
|
|
||||
|
submitItem.fromBatch = info.batch |
||||
|
submitItem.toBatch = info.batch |
||||
|
|
||||
|
submitItem.fromLocationCode = detail.locationCode |
||||
|
submitItem.toLocationCode = detail.toLocationCode |
||||
|
|
||||
|
submitItem.productionlineCode = this.productionLineCode |
||||
|
submitItem.workStationCode = this.workStationCode |
||||
|
|
||||
|
submitItem.qty = detail.handleQty |
||||
|
submitItem.package = '' |
||||
|
|
||||
|
subList.push(submitItem) |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
this.dataContent.subList = subList |
||||
|
this.dataContent.creator = creator |
||||
|
this.dataContent.workshopCode = this.workshopCode |
||||
|
return this.dataContent |
||||
|
}, |
||||
|
|
||||
|
showMessage(message) { |
||||
|
setTimeout((r) => { |
||||
|
this.scanPopupLoseFocus() |
||||
|
this.$refs.comMessage.showMessage(message, (res) => { |
||||
|
if (res) { |
||||
|
this.scanPopupGetFocus() |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
showErrorMessage(message) { |
||||
|
setTimeout((r) => { |
||||
|
this.scanPopupLoseFocus() |
||||
|
this.$refs.comMessage.showErrorMessage(message, (res) => { |
||||
|
if (res) { |
||||
|
this.scanPopupGetFocus() |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
closeScanPopup() { |
||||
|
this.$refs.scanPopup.closeScanPopup() |
||||
|
}, |
||||
|
|
||||
|
scanPopupGetFocus() { |
||||
|
if (this.$refs.scanPopup != undefined) { |
||||
|
this.$refs.scanPopup.getfocus() |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
scanPopupLoseFocus() { |
||||
|
if (this.$refs.scanPopup != undefined) { |
||||
|
this.$refs.scanPopup.losefocus() |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
afterCloseMessage() { |
||||
|
this.scanPopupGetFocus() |
||||
|
}, |
||||
|
|
||||
|
closeScanMessage() { |
||||
|
this.scanPopupGetFocus() |
||||
|
}, |
||||
|
|
||||
|
showCommitSuccessMessage(hint) { |
||||
|
this.$refs.comMessage.showSuccessMessage(hint, (res) => { |
||||
|
this.clearData() |
||||
|
}) |
||||
|
}, |
||||
|
clearData() { |
||||
|
this.subList = [] |
||||
|
this.detailSource = [] |
||||
|
this.toLocationCode = '' |
||||
|
this.dataContent = {} |
||||
|
this.positionInfo = '请选择位置' |
||||
|
this.fgLocationCode = '' |
||||
|
}, |
||||
|
removePack() { |
||||
|
for (let i = 0; i < this.detailSource.length; i++) { |
||||
|
const item = this.detailSource[i] |
||||
|
if (item.subList.length == 0) { |
||||
|
this.detailSource.splice(i, 1) |
||||
|
} |
||||
|
} |
||||
|
this.updateData() |
||||
|
}, |
||||
|
|
||||
|
removeItem(index, item) { |
||||
|
this.detailSource.splice(index, 1) |
||||
|
}, |
||||
|
|
||||
|
showSelect() { |
||||
|
this.show = !this.show |
||||
|
}, |
||||
|
confirmSelect(e) { |
||||
|
this.toItemCode = e[0].value |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped lang="scss"></style> |
Loading…
Reference in new issue