|
|
@ -5,28 +5,23 @@ |
|
|
|
</view> |
|
|
|
<view class="page-wraper" v-if="detailSource.length > 0"> |
|
|
|
<view class="page-header"> |
|
|
|
<view class="header_item"> 来源库位 : {{ fromLocationCode }} </view> |
|
|
|
<view class="split_line"></view> |
|
|
|
<view class="page-header-box"> |
|
|
|
<view class="header_item u-p-t-20"> 来源库位 : {{ fromLocationCode }} </view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<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=""> |
|
|
|
<recordDetailCard :dataContent="item" :index="index" :settingParam="dataContent" :isShowFromLocation="false" @removeItem="removeItem(index, item)" @updateData="updateData" @removePack="removePack"> </recordDetailCard> |
|
|
|
<record-com-detail-card :dataContent="item" :index="index" :settingParam="dataContent" :isShowFromLocation="false" @removeItem="removeItem(index, item)" :isShowToLocation="false" @updateData="updateData" @removePack="removePack"> </record-com-detail-card> |
|
|
|
</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="uni-row uni-flex"> |
|
|
|
<text>生产线:</text> |
|
|
|
<view class="uni-flex u-col-center uni-row" @click="showSelect"> |
|
|
|
<view class="" style="margin-left: 20rpx"> |
|
|
|
{{ positionInfo }} |
|
|
|
</view> |
|
|
|
<u-select v-model="show" mode="mutil-column-auto" :list="positionList" @confirm="confirmSelect"></u-select> |
|
|
|
</view> |
|
|
|
<view class=""> |
|
|
|
<requiredLocation v-if="showToLoaction" title="目标库位" :locationCode="toLocationCode" @getLocation="getToLocationCode" :locationAreaTypeList="toLocationAreaTypeList"> </requiredLocation> |
|
|
|
</view> |
|
|
|
<view class="uni-flex uni-row"> |
|
|
|
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button> |
|
|
@ -44,15 +39,15 @@ |
|
|
|
<script setup lang="ts"> |
|
|
|
import { ref, getCurrentInstance, nextTick } from 'vue' |
|
|
|
import { onLoad, onNavigationBarButtonTap, onReady, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app' |
|
|
|
import { repleinshRecordSubmit, getWorkShopLineStation } from '@/api/request2.js' |
|
|
|
import { repleinshRecordSubmit, validateItemAndLocation, getPutawayRecommendLocation } from '@/api/request2.js' |
|
|
|
|
|
|
|
import { goHome, getPackingNumberAndBatchByList, deepCopyData } from '@/common/basic.js' |
|
|
|
import { goHome, updateTitle, getCurrDateTime, getPackingNumberAndBatchByList, deepCopyData } from '@/common/basic.js' |
|
|
|
|
|
|
|
import { calc } from '@/common/calc.js' |
|
|
|
|
|
|
|
import { getInventoryStatusDesc, getDirectoryItemArray } from '@/common/directory.js' |
|
|
|
|
|
|
|
import { getBusinessType, createItemInfo, createDetailInfo, calcTreeHandleQty } from '@/common/record.js' |
|
|
|
import { getBusinessType, createItemInfo, createDetailInfo, calcHandleQty } from '@/common/record.js' |
|
|
|
|
|
|
|
import { getManagementPrecisions, getPrecisionStrategyList, getPrecisionStrategyParams } from '@/common/balance.js' |
|
|
|
|
|
|
@ -71,7 +66,7 @@ const { proxy } = getCurrentInstance() |
|
|
|
const id = ref('') |
|
|
|
const dataContent = ref({}) |
|
|
|
const detailSource = ref([]) // 绑定在页面上的数据源 |
|
|
|
const fromLocationInfo = ref({}) |
|
|
|
// const fromLocationInfo = ref({}) |
|
|
|
const fromLocationCode = ref('') |
|
|
|
const fromLocationAreaTypeList = ref([]) |
|
|
|
const toLocationAreaTypeList = ref([]) |
|
|
@ -82,16 +77,18 @@ const showToLoaction = ref(true) |
|
|
|
const recommendLocationList = ref([]) // 推荐库位列表 |
|
|
|
const fromWarehouseCode = ref('') // 来源仓库 |
|
|
|
const businessTypeCode = ref('Repleinment') |
|
|
|
const positionList = ref([]) |
|
|
|
const show = ref(false) |
|
|
|
const positionInfo = ref('请选择生产线') |
|
|
|
const toLocationCode = ref('') |
|
|
|
const managementList = ref([]) |
|
|
|
// const positionList = ref([]) |
|
|
|
// const show = ref(false) |
|
|
|
// const positionInfo = ref('请选择生产线') |
|
|
|
const comMessageRef = ref() |
|
|
|
const show = ref(false) |
|
|
|
const scanPopup = ref() |
|
|
|
const scanLocationCode = ref() |
|
|
|
onLoad((option) => { |
|
|
|
clearData() |
|
|
|
getBusinessType(typeCode, (res) => { |
|
|
|
clear() |
|
|
|
getBusinessType(businessTypeCode.value, (res) => { |
|
|
|
if (res.success) { |
|
|
|
businessType.value = res.businessType |
|
|
|
fromLocationAreaTypeList.value = res.fromLocationAreaTypeList |
|
|
@ -101,17 +98,6 @@ onLoad((option) => { |
|
|
|
showErrorMessage(res.message) |
|
|
|
} |
|
|
|
}) |
|
|
|
getWorkShopLineStation() |
|
|
|
.then((res) => { |
|
|
|
if (res.data != null && res.data.length > 0) { |
|
|
|
positionList.value = res.data |
|
|
|
} else { |
|
|
|
showErrorMessage('未查找到位置信息') |
|
|
|
} |
|
|
|
}) |
|
|
|
.catch((error) => { |
|
|
|
showErrorMessage(error) |
|
|
|
}) |
|
|
|
}) |
|
|
|
// 返回首页 |
|
|
|
onNavigationBarButtonTap((e) => { |
|
|
@ -124,6 +110,8 @@ const getScanResult = (result) => { |
|
|
|
const { balance } = result |
|
|
|
const { label } = result |
|
|
|
const pack = result.package |
|
|
|
const { packUnit } = pack |
|
|
|
const { packQty } = pack |
|
|
|
const item = detailSource.value.find((res) => { |
|
|
|
if (res.itemCode == balance.itemCode) { |
|
|
|
return res |
|
|
@ -133,134 +121,45 @@ const getScanResult = (result) => { |
|
|
|
fromWarehouseCode.value = balance.warehouseCode |
|
|
|
} |
|
|
|
if (item == undefined) { |
|
|
|
// 获取推荐库位 |
|
|
|
// this.getRecommendLocation(balance, pack, toLocation => { |
|
|
|
const itemp = createItemInfo(balance, pack) |
|
|
|
const newDetail = createDetailInfo(balance, pack) // |
|
|
|
// newDetail.toLocationCode = toLocation.code; |
|
|
|
// newDetail.toWarehouseCode = toLocation.warehouseCode; |
|
|
|
const newDetail = createDetailInfo(balance, pack) |
|
|
|
newDetail.packUnit = packUnit || '' |
|
|
|
newDetail.packQty = packQty |
|
|
|
itemp.subList.push(newDetail) |
|
|
|
const dataList = pack.subList |
|
|
|
detailSource.value.push(itemp) |
|
|
|
detailSource.value.forEach((res) => { |
|
|
|
res.subList.forEach((pack) => { |
|
|
|
pack.packList = dataList.filter((c) => c.parentNumber == pack.packingNumber) |
|
|
|
pack.packList.forEach((pac) => { |
|
|
|
pac.parentPackingNumber = pac.parentNumber |
|
|
|
pac.packingNumber = pac.number |
|
|
|
pac.inventoryStatus = 'OK' |
|
|
|
pac.scaned = true |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
// }) |
|
|
|
calcHandleQty(detailSource.value) |
|
|
|
} else { |
|
|
|
const itemDetail = item.subList.find((r) => r.packingNumber == balance.packingNumber && r.batch == balance.batch) |
|
|
|
if (itemDetail != undefined) { |
|
|
|
showErrorMessage(`箱码[${balance.packingNumber}批次[${balance.batch}]已经在列表中`) |
|
|
|
} |
|
|
|
} |
|
|
|
// calcTreeHandleQty(this.detailSource); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取推荐库位 |
|
|
|
const getRecommendLocation = (balance, pack, callback) => { |
|
|
|
uni.showLoading({ |
|
|
|
title: '扫描中...', |
|
|
|
mask: true |
|
|
|
}) |
|
|
|
const recommend = recommendLocationList.value.find((r) => r.itemCode == balance.itemCode) |
|
|
|
if (recommend == undefined) { |
|
|
|
const param = { |
|
|
|
itemCode: balance.itemCode, |
|
|
|
batch: balance.batch, |
|
|
|
inventoryStatus: balance.inventoryStatus, |
|
|
|
supplierCode: pack.supplierCode, |
|
|
|
businessCode: businessTypeCode.value |
|
|
|
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 |
|
|
|
} |
|
|
|
getPutawayRecommendLocation(param) |
|
|
|
.then((res) => { |
|
|
|
recommendLocationList.value.push({ |
|
|
|
itemCode: balance.itemCode, |
|
|
|
locationCode: res.data.code |
|
|
|
}) |
|
|
|
callback(res.data) |
|
|
|
uni.hideLoading() |
|
|
|
}) |
|
|
|
.catch((error) => { |
|
|
|
uni.hideLoading() |
|
|
|
showErrorMessage(error) |
|
|
|
}) |
|
|
|
} else { |
|
|
|
callback(recommend) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const calcTreeHandleQty = () => { |
|
|
|
for (const item of detailSource.value) { |
|
|
|
item.qty = 0 |
|
|
|
for (const detail of item.subList) { |
|
|
|
if (detail != undefined) { |
|
|
|
item.qty = calc.add(item.qty, detail.qty) |
|
|
|
} |
|
|
|
if (detail == undefined) { |
|
|
|
const newDetail = createDetailInfo(balance, pack) |
|
|
|
newDetail.packUnit = packUnit |
|
|
|
newDetail.packQty = packQty |
|
|
|
item.subList.push(newDetail) |
|
|
|
calcHandleQty(detailSource.value) |
|
|
|
} else if (detail.scaned == true) { |
|
|
|
showErrorMessage(`箱码[${balance.packingNumber}批次[${balance.batch}]已经在列表中`) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const showSelect = () => { |
|
|
|
// if (this.editPosition) { |
|
|
|
show.value = true |
|
|
|
// } |
|
|
|
} |
|
|
|
|
|
|
|
const confirmSelect = (e) => { |
|
|
|
positionInfo.value = `${e[0].label}-${e[1].label}-${e[2].label}` |
|
|
|
workshopCode.value = e[0].value |
|
|
|
productionLineCode.value = e[1].value |
|
|
|
workStationCode.value = e[2].value |
|
|
|
workShopName.value = e[0].label |
|
|
|
productionLineName.value = e[1].label |
|
|
|
workStationName.value = e[2].label |
|
|
|
|
|
|
|
const shop = positionList.value.find((shop) => shop.value == workshopCode.value) |
|
|
|
if (shop != undefined && shop.children != undefined) { |
|
|
|
const prodLine = shop.children.find((line) => line.value == productionLineCode.value) |
|
|
|
if (prodLine != undefined && prodLine.children != undefined) { |
|
|
|
const station = prodLine.children.find((r) => r.value == workStationCode.value) |
|
|
|
if (station.rawLocationCode == '' && station.rawLocationCode == null) { |
|
|
|
showErrorMessage(`${workStationName.value}的原材料库位为空,请重新选择`) |
|
|
|
return |
|
|
|
} |
|
|
|
rawLocationCode.value = station.rawLocationCode |
|
|
|
fgLocationCode.value = station.fgLocationCode |
|
|
|
} else { |
|
|
|
showErrorMessage('生产线-工位基础信息维护错误') |
|
|
|
} |
|
|
|
} else { |
|
|
|
showErrorMessage('车间-生产线基础信息维护错误') |
|
|
|
} |
|
|
|
|
|
|
|
// 赋值到库位代码 |
|
|
|
let toLocationCode = '' |
|
|
|
positionList.value.forEach((item) => { |
|
|
|
if (workshopCode.value == item.value) { |
|
|
|
// 车间 |
|
|
|
item.children.find((child) => { |
|
|
|
if (productionLineCode.value == child.value) { |
|
|
|
toLocationCode = child.children.find((subChild) => workStationCode.value == subChild.value).rawLocationCode |
|
|
|
const updateData = () => { |
|
|
|
calcHandleQty(detailSource.value) |
|
|
|
for (let i = 0; i < detailSource.value.length; i++) { |
|
|
|
const item = detailSource.value[i] |
|
|
|
if (item.qty == 0) { |
|
|
|
detailSource.value.splice(i, 1) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
detailSource.value.forEach((item) => { |
|
|
|
item.subList.forEach((detail) => { |
|
|
|
detail.toLocationCode = toLocationCode |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
const removeItem = (index, item) => { |
|
|
|
detailSource.value.splice(index, 1) |
|
|
|
updateData() |
|
|
|
} |
|
|
|
|
|
|
|
const removePack = () => { |
|
|
@ -299,6 +198,18 @@ const scanPopupGetFocus = () => { |
|
|
|
} |
|
|
|
|
|
|
|
const commit = () => { |
|
|
|
if (toLocationCode.value == '') { |
|
|
|
showMessage('请输入目标库位') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
detailSource.value.forEach((item) => { |
|
|
|
item.subList.forEach((detail) => { |
|
|
|
detail.toLocationCode = toLocationCode.value |
|
|
|
detail.fromLocation = fromLocationCode.value |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
uni.showLoading({ |
|
|
|
title: '提交中....', |
|
|
|
mask: true |
|
|
@ -310,7 +221,7 @@ const commit = () => { |
|
|
|
getPrecisionStrategyList(precisionStrategyParams, (res) => { |
|
|
|
if (res.success) { |
|
|
|
managementList.value = res.list |
|
|
|
const params = { ...setRecordParams() } |
|
|
|
const params = setRecordParams() |
|
|
|
|
|
|
|
repleinshRecordSubmit(params) |
|
|
|
.then((res) => { |
|
|
@ -332,40 +243,13 @@ const commit = () => { |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
const getItemAndLocationRelations = () => { |
|
|
|
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 && res.locationCode == detail.toLocationCode && res.batch == detail.batch && res.inventoryStatus == detail.inventoryStatus) { |
|
|
|
return res |
|
|
|
} |
|
|
|
}) |
|
|
|
// 去掉重复元素 |
|
|
|
if (filterResult.length == 0) { |
|
|
|
const result = { |
|
|
|
itemCode: item.itemCode, |
|
|
|
locationCode: detail.toLocationCode, |
|
|
|
batch: detail.batch, |
|
|
|
inventoryStatus: detail.inventoryStatus |
|
|
|
} |
|
|
|
itemList.push(result) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
return itemList |
|
|
|
} |
|
|
|
|
|
|
|
const setRecordParams = () => { |
|
|
|
const subList1 = [] |
|
|
|
const creator = store.id |
|
|
|
detailSource.value.forEach((item) => { |
|
|
|
item.subList.forEach((detail) => { |
|
|
|
if (detail.scaned) { |
|
|
|
const info = getPackingNumberAndBatchByList(managementL.valueist, detail.itemCode, detail.packingNumber, detail.toLocationCode, detail.batch) |
|
|
|
const info = getPackingNumberAndBatchByList(managementList.value, detail.itemCode, detail.packingNumber, detail.toLocationCode, detail.batch) |
|
|
|
const submitItem = deepCopyData(detail) |
|
|
|
submitItem.toPackingNumber = info.packingNumber |
|
|
|
submitItem.toBatch = info.batch |
|
|
@ -391,7 +275,11 @@ const setRecordParams = () => { |
|
|
|
toBatch: info.batch, |
|
|
|
fromLocationCode: detail.locationCode, |
|
|
|
toLocationCode: detail.toLocationCode, |
|
|
|
handleQty: detail.handleQty |
|
|
|
handleQty: detail.handleQty, |
|
|
|
fromPackUnit: detail.packUnit, |
|
|
|
toPackUnit: detail.packUnit, |
|
|
|
fromPackQty: detail.packQty, |
|
|
|
toPackQty: detail.packQty |
|
|
|
} |
|
|
|
] |
|
|
|
subList1.push(submitItem) |
|
|
@ -434,7 +322,6 @@ const getLocation = (location, code) => { |
|
|
|
} |
|
|
|
|
|
|
|
const getFromLocationCode = (location, code) => { |
|
|
|
fromLocationInfo.value = location |
|
|
|
fromLocationCode.value = code |
|
|
|
openScanPopup() |
|
|
|
} |
|
|
@ -451,23 +338,14 @@ const getToLocationCode = (location, code) => { |
|
|
|
|
|
|
|
const showCommitSuccessMessage = (hint) => { |
|
|
|
comMessageRef.value.showSuccessMessage(hint, (res) => { |
|
|
|
clearData() |
|
|
|
clear() |
|
|
|
}) |
|
|
|
} |
|
|
|
const updateData = () => { |
|
|
|
for (let i = 0; i < detailSource.value.length; i++) { |
|
|
|
const item = detailSource.value[i] |
|
|
|
if (item.qty == 0) { |
|
|
|
detailSource.value.splice(i, 1) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
const clearData = () => { |
|
|
|
fromLocationInfo.value = {} |
|
|
|
const clear = () => { |
|
|
|
fromLocationCode.value = '' |
|
|
|
fromWarehouseCode.value = '' |
|
|
|
toWarehouseCode.value = '' |
|
|
|
detailSource.value = [] |
|
|
|
toLocationCode.value = '' |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|