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

<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>