Browse Source

修改制品直接上架及物料变更 2024/8/1 17:29:13

pull/1/head
张立 5 months ago
parent
commit
d275bbf7f4
  1. 6
      src/api/request2.js
  2. 14
      src/mycomponents/print/print.vue
  3. 8
      src/mycomponents/scan/winScanPackage.vue
  4. 51
      src/pages/fg/coms/comReceiptPopup.vue
  5. 61
      src/pages/fg/fgChange.vue
  6. 14
      src/pages/issue/coms/comIssueRequestPopup.vue
  7. 8
      src/pages/package/job/overPackageJobDetail.vue
  8. 16
      src/pages/package/record/overPackageRecord.vue
  9. 763
      src/pages/productPutaway/record/productPutawayRecord.vue
  10. 6
      src/pages/productReceipt/job/ccProductReceiptDetail.vue
  11. 5
      src/pages/productReceipt/job/productReceiptDetail.vue
  12. 2
      src/pages/productionReceipt/coms/comProductionRecord.vue

6
src/api/request2.js

@ -2728,4 +2728,10 @@ export function getSpareitemcode(params) {
//获取物料变更信息
export function getProductreceiptDetailbByPackingNumber(packingNumber ) {
return http.get("/wms/productreceipt-detailb/getProductreceiptDetailbByPackingNumber?packingNumber="+packingNumber)
}
/**
* 物料变更
*/
export function fgChangeCommit(data) {
return http.post("/wms/relegate-request-main/bind",data)
}

14
src/mycomponents/print/print.vue

@ -93,10 +93,13 @@ export default {
await getPrintList()
.then((res) => {
this.printList = res.data
this.showPrintSelect = true
uni.hideLoading()
})
.catch((error) => {})
this.showPrintSelect = true
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
confirmSelectPrint(e) {
console.log(e)
@ -113,9 +116,12 @@ export default {
.then((res) => {
this.templateList = res.data
uni.hideLoading()
this.showTemplateSelect = true
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
.catch((error) => {})
this.showTemplateSelect = true
},
confirmSelectTemplate(e) {
this.templateCode = e[0].value

8
src/mycomponents/scan/winScanPackage.vue

@ -134,7 +134,7 @@ const getBalance = (result, callback) => {
}
getBalanceByFilter(params)
.then((res) => {
if (res.length == 0) {
if (res.data.list.length == 0) {
showErrorMessage('未查找到该包装的库存余额', (res) => {
packGetFocus()
})
@ -161,6 +161,12 @@ const losefocus = () => {
const showMessage = (message) => {
comMessageRef.value.showMessage(message)
}
const showErrorMessage = (message) => {
comMessageRef.value.showErrorMessage(message, (res) => {
if (res) {
}
})
}
//
const emit = defineEmits(['getResult'])
</script>

51
src/pages/fg/coms/comReceiptPopup.vue

@ -44,7 +44,7 @@
<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="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectItemCode"> </image>
<image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showItemList"> </image>
</view>
</view>
@ -78,8 +78,6 @@
<image src="" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectLine"> </image>
</view>
</view>
<view class="split_line"></view>
</view>
</view>
</view>
@ -157,9 +155,11 @@ export default {
openRequestPopup() {
this.initData()
this.planDate = getCurrDate()
this.batch = getBatch8()
// this.batch = getBatch8()
this.batch = this.planDate.replace('-', '')
this.$refs.popup.open('bottom')
},
initData() {
this.itemCode = '请选择物料信息'
this.uom = ''
@ -190,6 +190,7 @@ export default {
closeRequestPopup() {
this.$refs.popup.close()
},
itemCodeLoseFocus() {
this.itemCodeFocus = false
},
@ -261,9 +262,12 @@ export default {
const parent = this.productLineList.filter((res) => res.value == this.productionLineCode)
const fgLocation = parent[0].children.filter((children) => children.value == this.workStationCode)
this.fgLocationCode = fgLocation[0].fgLocationCode
this.clearItemCode()
this.clearPackUnit()
// this.clearItemCode()
// this.clearPackUnit()
this.showProductLineSelect = false
this.showSelectItemCode()
},
clearItemCode() {
this.planDate = getCurrDate()
this.itemCode = '请选择物料信息'
@ -271,10 +275,14 @@ export default {
this.planQty = 0
this.goodQty = 0
this.planNumber = ''
this.packUnit = ''
this.packQty = 0
},
confirmSelectDate(data) {
this.planDate = data[0].label
this.batch = this.planDate.replace('-', '')
this.afterSelectPlanData()
},
showSelectDate() {
@ -313,6 +321,27 @@ export default {
this.showProductLineSelect = true
}
},
afterSelectPlanData() {
this.itemCode = '请选择物料信息'
this.packUnit = ''
this.packQty = 0
this.planQty = 0
this.itemCode = '请选择物料信息'
this.uom = ''
this.packUnitName = '请选择包装规格'
this.packUnit = ''
this.packQtyHint = ''
// this.packUnitList = []
this.itemCodeList = []
this.showSelectItemCode()
},
showItemList() {
this.showItemCodeSelect = true
},
showSelectItemCode() {
if (!this.planDate) {
this.showErrorMessage('请先选择计划日期')
@ -336,8 +365,14 @@ export default {
})
this.itemCodeList = res.data
this.showItemCodeSelect = true
if (this.itemCodeList.length == 1) {
this.itemCode = this.itemCodeList[0].itemCode
} else {
this.showItemCodeSelect = true
}
} else {
this.showErrorMessage('未查找到物料信息')
this.showErrorMessage(`未查找到该生产线在【${this.planDate}】日期的生产计划`)
}
})
.catch((error) => {
@ -345,6 +380,7 @@ export default {
this.showErrorMessage(error)
})
},
confirmSelectItem(data) {
const productionPlan = data[0].value
this.itemCode = productionPlan.itemCode
@ -422,6 +458,7 @@ export default {
this.packQtyHint = `${pack[0].packQty}(${this.getUomInfo(pack[0].uom)})`
this.packQty = pack[0].packQty
},
getUomInfo(uom) {
const item = getUomInfo(uom)
if (item == '') {

61
src/pages/fg/fgChange.vue

@ -71,7 +71,7 @@
<script>
import { Decimal } from 'decimal.js' //
import { getSpareitemcode, getProductreceiptDetailbByPackingNumber } from '@/api/request2.js'
import { getSpareitemcode, getProductreceiptDetailbByPackingNumber, fgChangeCommit } from '@/api/request2.js'
import { getPrecisionStrategyList } from '@/common/balance.js'
import { goHome, getPackingNumberAndBatchByList, deepCopyData, getRemoveOption } from '@/common/basic.js'
@ -110,6 +110,7 @@ export default {
businessType: {},
show: false,
toItemCode: '请选择变更后物料',
toItemInfo: {},
toItemList: [],
fgList: [],
currentPackage: null,
@ -262,28 +263,69 @@ export default {
if (this.currentPackage.handleQty == null) {
this.$refs.comMessage.showQuestionMessage('是否要将全部灯码进行变更?', (res) => {
if (res) {
this.commitRecord()
this.commitChange()
}
})
} else {
this.$refs.comMessage.showQuestionMessage(`是否要将已扫描的【${this.currentPackage.handleQty}】个灯码进行变更?`, (res) => {
if (res) {
this.commitRecord()
this.commitChange()
}
})
}
},
commitRecord() {
// this.showCommitSuccessMessage('')
commitChange() {
uni.showLoading({
title: '提交中...',
mask: true
})
const params = this.setParams()
console.log('params', JSON.stringify(params))
fgChangeCommit(params)
.then((res) => {
const ss = res
})
.catch((err) => {
this.showErrorMessage(err.message)
})
},
setParams() {
let scanedList = this.fgList.filter((r) => r.scaned == true)
if (this.currentPackage.handleQty > 0) {
scanedList = this.fgList.filter((r) => r.scaned == true)
const creator = this.$store.state.user.id
let subList = this.fgList.filter((r) => r.scaned == true)
if (this.currentPackage.handleQty == undefined) {
subList = this.fgList
}
const creator = this.$store.state.user.id
// var item = deepCopyData(this.currentPackage);
const item = {}
item.fromItemCode = this.currentPackage.itemCode
item.fromItemName = this.currentPackage.itemName
item.fromItemDesc1 = this.currentPackage.itemDesc1
item.fromItemDesc2 = this.currentPackage.itemDesc2
item.toItemCode = this.toItemCode
item.toItemName = this.toItemInfo.itemName
item.toItemDesc1 = this.toItemInfo.itemDesc1
item.toItemDesc2 = this.toItemInfo.itemDesc2
item.fromInventoryStatus = this.currentPackage.inventoryStatus
item.fromQty = this.currentPackage.handleQty
item.fromParentPackingNumber = this.currentPackage.parentNumber
item.fromPackingNumber = this.currentPackage.packingNumber
item.fromBatch = this.currentPackage.batch
item.fromLocationCode = this.currentPackage.locationCode
item.fromPackUnit = this.currentPackage.packUnit
item.fromPackQty = this.currentPackage.packQty
item.toPackQty = this.currentPackage.packUnit
item.toPackUnit = this.currentPackage.packUnit
item.subList = subList
item.creator = creator
return item
},
showMessage(message) {
@ -357,6 +399,7 @@ export default {
},
confirmSelect(e) {
this.toItemCode = e[0].value
this.toItemInfo = e[0]
}
}
}

14
src/pages/issue/coms/comIssueRequestPopup.vue

@ -12,7 +12,7 @@
<view class="split_line"></view>
<view class="uni-flex uni-column" style="background-color: white">
<view class="uni-flex uni-column">
<view class="uni-flex uni-row padding title u-col-center">
<!-- <view class="uni-flex uni-row padding title u-col-center">
<text>从仓库代码</text>
<view class="uni-flex u-col-center uni-row" @click="showWarseHouseSelect">
<view class="" style="margin-left: 20rpx; width: 100%">
@ -20,8 +20,8 @@
</view>
<u-select v-model="showWareHouse" mode="single-column" :list="wareHouseList" @confirm="confirmWareHouse"></u-select>
</view>
</view>
<view class="split_line"></view>
</view> -->
<!-- <view class="split_line"></view> -->
<view class="uni-flex uni-row" style="align-items: center; background-color: #fff; margin-right: 20rpx; border-radius: 8rpx">
<view class="uni-center" style="width: 25%; font-size: 32rpx"> 优先级 </view>
<view style="width: 100%">
@ -250,10 +250,10 @@ const confirm = () => {
return
}
if (fromWarehouseCode.value == '请选择仓库代码') {
showErrorMessage('请选择仓库代码')
return
}
// if (fromWarehouseCode.value == '') {
// showErrorMessage('')
// return
// }
if (itemCode.value == '请扫描物料信息') {
showErrorMessage('请输入物料', 'itemCode')

8
src/pages/package/job/overPackageJobDetail.vue

@ -199,6 +199,14 @@ const closeScan = () => {
resizeCollapse()
}
const submit = () => {
if (!jobContent.value.printerUuid) {
showErrorMessage('请选择打印机')
return
}
if (!jobContent.value.modelCode) {
showErrorMessage('请选择打印模板')
return
}
//
const itemCodes = []
const locationCode = detailSource.value[0].toLocationCode

16
src/pages/package/record/overPackageRecord.vue

@ -115,8 +115,12 @@ const printService = ref()
onLoad(() => {
getBusinessType()
nextTick(() => {
const overPackageRecordPointParams = uni.getStorageSync('overPackageRecordPointParams')
printService.value.setDefaultData(overPackageRecordPointParams.printDeafult, overPackageRecordPointParams.templateDeafult)
if (uni.getStorageSync('overPackageRecordPointParams')) {
const overPackageRecordPointParams = uni.getStorageSync('overPackageRecordPointParams')
dataContent.value.printerUuid = overPackageRecordPointParams.printDeafult.value
dataContent.value.modelCode = overPackageRecordPointParams.templateDeafult.value
printService.value.setDefaultData(overPackageRecordPointParams.printDeafult, overPackageRecordPointParams.templateDeafult)
}
})
})
onLoad((option) => {
@ -291,6 +295,14 @@ const scanPopupGetFocus = () => {
}
}
const commit = () => {
if (!dataContent.value.printerUuid) {
showErrorMessage('请选择打印机')
return
}
if (!dataContent.value.modelCode) {
showErrorMessage('请选择打印模板')
return
}
if (detailSource.value.length > 0 && detailSource.value[0].subList.length > 0) {
if (toPackUnit.value || toPackUnit.value == '包装规格') {
showErrorMessage('请选择目标包装规格')

763
src/pages/productPutaway/record/productPutawayRecord.vue

@ -1,388 +1,391 @@
<template>
<view class="page-wraper">
<view class="">
<com-blank-view @goScan="showFromLocationPopup" v-if="detailSource.length == 0"></com-blank-view>
</view>
<view class="page-wraper" v-if="detailSource.length > 0">
<view class="page-main">
<scroll-view scroll-y="true" class="page-main-scroll">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<record-com-detail-card :dataContent="item" :index="index" :settingParam="dataContent" :isShowStatus="false" @removeItem="removeItem(index, item)" @updateData="updateData" @removePack="removePack"> </record-com-detail-card>
</view>
<view class="split_line"></view>
</view>
</scroll-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="">
<requiredLocation title="目标库位" :locationCode="toLocationCode" @getLocation="getToLocationCode" :locationAreaTypeList="tolocationTypeList"></requiredLocation>
</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-scan-pack-and-location :balanceFromInventoryStatuses="false" ref="scanPopup" @getResult="getScanResult"></win-scan-pack-and-location>
<win-scan-location ref="scanLocationCode" title="来源库位" @getLocation="getLocation" :locationAreaTypeList="fromLocationAreaTypeList"></win-scan-location>
<com-message ref="comMessageRef" />
</view>
<view class="page-wraper">
<view class="">
<com-blank-view @goScan="openScanPopup" v-if="detailSource.length == 0"></com-blank-view>
</view>
<view class="page-wraper" v-if="detailSource.length > 0">
<view class="page-main">
<scroll-view scroll-y="true" class="page-main-scroll">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<record-com-detail-card :dataContent="item" :index="index" :settingParam="dataContent"
:isShowStatus="false" @removeItem="removeItem(index,item)" @updateData="updateData"
@removePack="removePack">
</view>
<view class="split_line"></view>
</view>
</scroll-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="">
<requiredLocation title="目标库位" :locationCode="toLocationCode" @getLocation="getToLocationCode"
:locationAreaTypeList="tolocationTypeList"></requiredLocation>
</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-scan-package ref="scanPopup" @getResult='getScanResult'></win-scan-package>
<com-message ref="comMessageRef" />
</view>
</template>
<script setup lang="ts">
import { ref, getCurrentInstance, nextTick } from 'vue'
import { onLoad, onNavigationBarButtonTap, onReady, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app'
import { productPutawayRecordSubmit } from '@/api/request2.js'
import { goHome, getPackingNumberAndBatchByList, deepCopyData, updateTitle } from '@/common/basic.js'
import { getPrecisionStrategyList } from '@/common/balance.js'
import { getInventoryStatusDesc, getDirectoryItemArray } from '@/common/directory.js'
import { getBusinessType, createItemInfo, createDetailInfo, calcHandleQty } from '@/common/record.js'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPack from '@/mycomponents/scan/winScanPack.vue'
import requiredLocation from '@/mycomponents/location/requiredLocation.vue'
import comProductionRecord from '@/pages/productionReceipt/coms/comProductionRecord.vue'
import comBlankView from '@/mycomponents/common/comBlankView.vue'
import winScanLocation from '@/mycomponents/scan/winScanLocation.vue'
import winScanPackAndLocation from '@/mycomponents/scan/winScanPackAndLocation.vue'
import recordComDetailCard from '@/mycomponents/record/recordComDetailCard.vue'
import { useCountStore } from '@/store'
// store
const store = useCountStore()
const { proxy } = getCurrentInstance()
const id = ref('')
const scanCount = ref(0)
const dataContent = ref({}) //
const subList = ref([]) // subList
const detailSource = ref([]) //
const fromLocationCode = ref('')
const toLocationCode = ref('')
const fromLocationAreaTypeList = ref([])
const tolocationTypeList = ref([])
const inInventoryStatus = ref('') //
const outInventoryStatus = ref('') //
const businessType = ref({})
const managementList = ref([])
const scanLocationCode = ref()
const scanPopup = ref()
const comMessageRef = ref()
const type = ref('')
onLoad((option) => {
uni.setNavigationBarTitle({
title: option.title
})
type.value = option.type
if (type.value == 'predict') {
updateTitle('制品上架记录')
} else if (type.value == 'assemble') {
updateTitle('装配上架记录')
}
const typeCode = 'ProductPutaway'
getBusinessType(typeCode, (res) => {
if (res.success) {
businessType.value = res.businessType
fromLocationAreaTypeList.value = res.fromLocationAreaTypeList
tolocationTypeList.value = res.tolocationTypeList
showFromLocationPopup()
} else {
showErrorMessage(res.message)
}
})
})
//
onNavigationBarButtonTap((e) => {
if (e.index === 0) {
goHome()
}
})
const getScanResult = (result) => {
const { balance } = result
const { label } = result
const pack = result.package
const item = detailSource.value.find((res) => {
if (res.itemCode == balance.itemCode) {
return res
}
})
if (item == undefined) {
const itemp = createItemInfo(balance, pack)
const newDetail = createDetailInfo(balance, pack) //
newDetail.fromInventoryStatus = balance.inventoryStatus
itemp.subList.push(newDetail)
detailSource.value.push(itemp)
} else {
const detail = item.subList.find((r) => {
if (r.packingNumber == balance.packingNumber && r.batch == balance.batch && r.locationCode == balance.locationCode && r.inventoryStatus == balance.inventoryStatus) {
return r
}
})
if (detail == undefined) {
const newDetail = createDetailInfo(balance, pack)
newDetail.fromInventoryStatus = balance.inventoryStatus
item.subList.push(newDetail)
} else if (detail.scaned == true) {
showErrorMessage(`箱码[${balance.packingNumber}批次[${balance.batch}]已经在列表中`)
}
}
handleCalcHandleQty()
}
const handleCalcHandleQty = () => {
calcHandleQty(detailSource.value)
}
const removeItem = (index, item) => {
detailSource.value.splice(index, 1)
}
const removePack = () => {
for (let i = 0; i < detailSource.value.length; i++) {
const item = detailSource.value[i]
if (item.subList.length == 0) {
detailSource.value.splice(i, 1)
}
}
updateData()
}
const openScanPopup = () => {
if (fromLocationCode.value == '') {
showFromLocationPopup()
return
}
scanPopup.value.openScanPopupForType(fromLocationCode.value, businessType.value)
}
const showFromLocationPopup = () => {
nextTick(() => {
scanLocationCode.value.openScanPopup()
})
}
const closeScanPopup = () => {
if (scanPopup.value != undefined) {
scanPopup.value.closeScanPopup()
}
}
const scanPopupGetFocus = () => {
if (scanPopup.value != undefined) {
scanPopup.value.getfocus()
}
}
// const scanLocationCode = (location, code) => {
// toLocationCode.value = code
// detailSource.value.forEach((item) => {
// item.subList.forEach((detail) => {
// detail.toLocationCode = code
// })
// })
// }
const commit = () => {
if (detailSource.value.length > 0 && detailSource.value[0].subList.length > 0) {
//
proxy.$modal.loading('提交中....')
managementList.value = []
const precisionStrategParams = setPrecisionStrategParams()
getPrecisionStrategyList(precisionStrategParams, (res) => {
if (res.success) {
managementList.value = res.list
const params = setParams()
productPutawayRecordSubmit(params)
.then((res) => {
uni.hideLoading()
if (res.data) {
showCommitSuccessMessage(`提交成功<br>生成制品上架记录<br>${res.data}`)
} else {
showErrorMessage(`提交失败[${res.msg}]`)
}
})
.catch((error) => {
uni.hideLoading()
showErrorMessage(error)
})
} else {
uni.hideLoading()
showErrorMessage(res.message)
}
})
} else {
showErrorMessage('没有要提交的数据,请先扫描')
}
}
const setPrecisionStrategParams = () => {
const itemList = []
detailSource.value.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
detail.toLocationCode = toLocationCode.value
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
}
const setParams = () => {
const subList = []
const creator = store.id
detailSource.value.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
const submitItem = deepCopyData(detail)
const info = getPackingNumberAndBatchByList(managementList.value, 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.qty = detail.handleQty
submitItem.package = ''
subList.push(submitItem)
}
})
})
dataContent.value.subList = subList
dataContent.value.type = type.value
dataContent.value.creator = creator
return dataContent.value
}
const showMessage = (message) => {
comMessageRef.value.showMessage(message, (res) => {
if (res) {
}
})
}
const showErrorMessage = (message) => {
comMessageRef.value.showErrorMessage(message, (res) => {
if (res) {
}
})
}
const showScanMessage = (message) => {
comMessageRef.value.showScanMessage(message)
}
const afterCloseMessage = () => {
scanPopupGetFocus()
}
const closeScanMessage = () => {
scanPopupGetFocus()
}
const getLocation = (location, code) => {
getFromLocationCode(location, code)
}
const getFromLocationCode = (location, code) => {
fromLocationCode.value = code
openScanPopup()
}
const getToLocationCode = (location, code) => {
console.log(code)
toLocationCode.value = code
// detailSource.value.forEach((item) => {
// item.subList.forEach((detail) => {
// detail.toLocationCode = toLocationCode.value
// })
// })
}
const showCommitSuccessMessage = (hint) => {
comMessageRef.value.showSuccessMessage(hint, (res) => {
if (res) {
clearData()
}
})
}
const clearData = () => {
fromLocationCode.value = ''
subList.value = []
detailSource.value = []
toLocationCode.value = ''
dataContent.value = {}
}
const updateData = () => {
handleCalcHandleQty()
for (let i = 0; i < detailSource.value.length; i++) {
const item = detailSource.value[i]
if (item.qty == 0) {
detailSource.value.splice(i, 1)
}
}
}
import { ref, getCurrentInstance, nextTick } from 'vue'
import { onLoad, onNavigationBarButtonTap, onReady, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app'
import { productPutawayRecordSubmit } from '@/api/request2.js'
import { goHome, getPackingNumberAndBatchByList, deepCopyData, updateTitle } from '@/common/basic.js'
import { getPrecisionStrategyList } from '@/common/balance.js'
import { getInventoryStatusDesc, getDirectoryItemArray } from '@/common/directory.js'
import { getBusinessType, createItemInfo, createDetailInfo, calcHandleQty } from '@/common/record.js'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPack from '@/mycomponents/scan/winScanPack.vue'
import requiredLocation from '@/mycomponents/location/requiredLocation.vue'
import comProductionRecord from '@/pages/productionReceipt/coms/comProductionRecord.vue'
import comBlankView from '@/mycomponents/common/comBlankView.vue'
import winScanLocation from '@/mycomponents/scan/winScanLocation.vue'
import winScanPackAndLocation from '@/mycomponents/scan/winScanPackAndLocation.vue'
import recordComDetailCard from '@/mycomponents/record/recordComDetailCard.vue'
import winScanPackage from '@/mycomponents/scan/winScanPackage.vue'
import { useCountStore } from '@/store'
// store
const store = useCountStore()
const { proxy } = getCurrentInstance()
const id = ref('')
const scanCount = ref(0)
const dataContent = ref({}) //
const subList = ref([]) // subList
const detailSource = ref([]) //
const fromLocationCode = ref('')
const toLocationCode = ref('')
const fromLocationAreaTypeList = ref([])
const tolocationTypeList = ref([])
const inInventoryStatus = ref('') //
const outInventoryStatus = ref('') //
const bussinessCode = ref('ProductPutaway')
const businessType = ref({})
const managementList = ref([])
const scanLocationCode = ref()
const scanPopup = ref()
const comMessageRef = ref()
const type = ref('')
onLoad((option) => {
uni.setNavigationBarTitle({
title: option.title
})
type.value = option.type
if (type.value == 'predict') {
updateTitle('制品上架记录')
} else if (type.value == 'assemble') {
updateTitle('装配上架记录')
}
getBusinessType(bussinessCode.value, (res) => {
if (res.success) {
businessType.value = res.businessType
fromLocationAreaTypeList.value = res.fromLocationAreaTypeList
tolocationTypeList.value = res.tolocationTypeList
openScanPopup()
} else {
showErrorMessage(res.message)
}
})
})
//
onNavigationBarButtonTap((e) => {
if (e.index === 0) {
goHome()
}
})
const getScanResult = (result) => {
const { balance } = result
const { label } = result
const pack = result.package
const item = detailSource.value.find((res) => {
if (res.itemCode == balance.itemCode) {
return res
}
})
if (item == undefined) {
const itemp = createItemInfo(balance, pack)
const newDetail = createDetailInfo(balance, pack) //
newDetail.fromInventoryStatus = balance.inventoryStatus
itemp.subList.push(newDetail)
detailSource.value.push(itemp)
} else {
const detail = item.subList.find((r) => {
if (r.packingNumber == balance.packingNumber && r.batch == balance.batch && r.locationCode == balance.locationCode && r.inventoryStatus == balance.inventoryStatus) {
return r
}
})
if (detail == undefined) {
const newDetail = createDetailInfo(balance, pack)
newDetail.fromInventoryStatus = balance.inventoryStatus
item.subList.push(newDetail)
} else if (detail.scaned == true) {
showErrorMessage(`箱码[${balance.packingNumber}批次[${balance.batch}]已经在列表中`)
}
}
handleCalcHandleQty()
}
const handleCalcHandleQty = () => {
calcHandleQty(detailSource.value)
}
const removeItem = (index, item) => {
detailSource.value.splice(index, 1)
}
const removePack = () => {
for (let i = 0; i < detailSource.value.length; i++) {
const item = detailSource.value[i]
if (item.subList.length == 0) {
detailSource.value.splice(i, 1)
}
}
updateData()
}
const openScanPopup = () => {
setTimeout(r => {
scanPopup.value.openScanPopupByBusinessType(businessType.value)
})
}
const showFromLocationPopup = () => {
nextTick(() => {
scanLocationCode.value.openScanPopup()
})
}
const closeScanPopup = () => {
if (scanPopup.value != undefined) {
scanPopup.value.closeScanPopup()
}
}
const scanPopupGetFocus = () => {
if (scanPopup.value != undefined) {
scanPopup.value.getfocus()
}
}
// const scanLocationCode = (location, code) => {
// toLocationCode.value = code
// detailSource.value.forEach((item) => {
// item.subList.forEach((detail) => {
// detail.toLocationCode = code
// })
// })
// }
const commit = () => {
if (detailSource.value.length > 0 && detailSource.value[0].subList.length > 0) {
//
proxy.$modal.loading('提交中....')
managementList.value = []
const precisionStrategParams = setPrecisionStrategParams()
getPrecisionStrategyList(precisionStrategParams, (res) => {
if (res.success) {
managementList.value = res.list
const params = setParams()
productPutawayRecordSubmit(params)
.then((res) => {
uni.hideLoading()
if (res.data) {
showCommitSuccessMessage(`提交成功<br>生成制品上架记录<br>${res.data}`)
} else {
showErrorMessage(`提交失败[${res.msg}]`)
}
})
.catch((error) => {
uni.hideLoading()
showErrorMessage(error)
})
} else {
uni.hideLoading()
showErrorMessage(res.message)
}
})
} else {
showErrorMessage('没有要提交的数据,请先扫描')
}
}
const setPrecisionStrategParams = () => {
const itemList = []
detailSource.value.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
detail.toLocationCode = toLocationCode.value
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
}
const setParams = () => {
const subList = []
const creator = store.id
detailSource.value.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
const submitItem = deepCopyData(detail)
const info = getPackingNumberAndBatchByList(managementList.value, 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.qty = detail.handleQty
submitItem.package = ''
subList.push(submitItem)
}
})
})
dataContent.value.subList = subList
dataContent.value.type = type.value
dataContent.value.creator = creator
return dataContent.value
}
const showMessage = (message) => {
comMessageRef.value.showMessage(message, (res) => {
if (res) {
}
})
}
const showErrorMessage = (message) => {
comMessageRef.value.showErrorMessage(message, (res) => {
if (res) {
}
})
}
const showScanMessage = (message) => {
comMessageRef.value.showScanMessage(message)
}
const afterCloseMessage = () => {
scanPopupGetFocus()
}
const closeScanMessage = () => {
scanPopupGetFocus()
}
const getLocation = (location, code) => {
getFromLocationCode(location, code)
}
const getFromLocationCode = (location, code) => {
fromLocationCode.value = code
openScanPopup()
}
const getToLocationCode = (location, code) => {
console.log(code)
toLocationCode.value = code
// detailSource.value.forEach((item) => {
// item.subList.forEach((detail) => {
// detail.toLocationCode = toLocationCode.value
// })
// })
}
const showCommitSuccessMessage = (hint) => {
comMessageRef.value.showSuccessMessage(hint, (res) => {
if (res) {
clearData()
}
})
}
const clearData = () => {
fromLocationCode.value = ''
subList.value = []
detailSource.value = []
toLocationCode.value = ''
dataContent.value = {}
}
const updateData = () => {
handleCalcHandleQty()
for (let i = 0; i < detailSource.value.length; i++) {
const item = detailSource.value[i]
if (item.qty == 0) {
detailSource.value.splice(i, 1)
}
}
}
</script>
<style scoped lang="scss">
page {
width: 100%;
height: 100%;
background-color: #fff;
}
.page-wraper {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
}
.page-main {
flex: 1;
position: relative;
}
.page-main-scroll {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.page-main-list {
/* height: 80rpx;
page {
width: 100%;
height: 100%;
background-color: #fff;
}
.page-wraper {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
}
.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;
}
</style>
text-align: center;
background: #e0e0e0;
}
</style>

6
src/pages/productReceipt/job/ccProductReceiptDetail.vue

@ -14,9 +14,9 @@
</view>
<view class="cell_info">
<view class="text_lightblue">生产线</view>
<view>
{{jobContent.subList[0].productionLineCode}}
</view>
<view v-if="jobContent&&jobContent.subList&&jobContent.subList[0]">
{{jobContent.subList[0].productionLineCode}}
</view>
</view>
<view class="cell_info">
<view class="text_lightblue">班组</view>

5
src/pages/productReceipt/job/productReceiptDetail.vue

@ -19,7 +19,7 @@
<view class="cell_info">
<view class="text_lightblue">生产线</view>
<view>
{{ jobContent.subList[0].productionLineCode }}
{{ productionLineCode }}
</view>
</view>
<view class="cell_info">
@ -99,6 +99,7 @@ const managementList = ref([])
const jobStatus = ref('')
const jobToLocationCode = ref('')
const status = ref('')
const productionLineCode = ref('')
const scanMessage = ref('')
const scanPopup = ref()
const comScanLocation = ref()
@ -176,6 +177,8 @@ const getDetail = () => {
subList.value = res.data.subList
jobStatus.value = res.data.status
jobToLocationCode.value = subList.value[0].toLocationCode
productionLineCode.value = jobContent.value.subList[0].productionLineCode
if (jobContent.value.allowModifyLocation == 'FALSE') {
toLocationCode.value = subList.value[0].toLocationCode
}

2
src/pages/productionReceipt/coms/comProductionRecord.vue

@ -24,7 +24,7 @@
<view class='split_line'></view>
</view> -->
<u-swipe-action :show="detail.show" :index="index" v-for="(detail, index) in dataContent.subList" :key="index" :options="detail.scaned ? scanOptions : detailOptions" bg-color="rgba(255,255,255,0)" class="u-m-b-20" @click="(...event) => swipeClick(event, detail)">
<production-label :dataContent="item" :packageContent="item.package" :isShowStdPack="false"></production-label>
<production-label :dataContent="item" :packageContent="item.package" :isShowStdPack="false" :isShowLocation="false"></production-label>
</u-swipe-action>
</u-collapse-item>
</u-collapse>

Loading…
Cancel
Save