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.
439 lines
14 KiB
439 lines
14 KiB
7 months ago
|
<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>
|