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.
370 lines
12 KiB
370 lines
12 KiB
11 months ago
|
<template>
|
||
|
<view class="">
|
||
|
<uni-popup ref="popup" :maskClick="false">
|
||
|
<view class="uni-flex uni-column pop_customer">
|
||
|
<view class="" style="padding: 10rpx">
|
||
|
<view class="uni-flex u-col-center uni-row space-between" style="padding: 10rpx 10rpx 20rpx 10rpx">
|
||
|
<view class="" style="font-size: 35rpx">
|
||
|
{{ title }}
|
||
|
</view>
|
||
|
<image style="width: 35rpx; height: 35rpx" src="/static/icons/icons_close.svg" @click="closeRequestPopup()"></image>
|
||
|
</view>
|
||
|
<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" style="width: 100%">
|
||
|
<view class="" style="width: 25%">
|
||
|
<text>生产线:</text>
|
||
|
</view>
|
||
|
|
||
|
<view class="">
|
||
|
<uni-combox :candidates="productLineList" v-model="productLineCode" placeholder="请扫描来源库位" @confirm="handleConfirm" style="height: 30rpx; border: 1px solid #fff"></uni-combox>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<view class="split_line"></view>
|
||
|
|
||
|
<view class="title padding" style="display: flex">
|
||
|
<text style="flex-shrink: 0">物料:</text>
|
||
|
<view class="" style="width: 100%">
|
||
|
{{ itemCode }}
|
||
|
</view>
|
||
|
<view class="">
|
||
|
<image src="/static/search.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="itemCodeClick"> </image>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<view class="split_line"></view>
|
||
|
<view class="uni-flex uni-row padding title u-col-center">
|
||
|
<text>数量: </text>
|
||
|
<view class="uni-flex uni-row uni-center" style="display: flex; align-items: center; margin-left: 20rpx; justify-content: center">
|
||
|
<input style="text-align: center" class="qty_input" v-model="counQty" type="number" @confirm="confirm()" :focus="numberFocus" @input="checkNum" :maxlength="maxlength" />
|
||
|
|
||
|
<uom :uom="uom"></uom>
|
||
|
<view class="" v-if="stdPackInfo != undefined" style="display: flex; flex-direction: row; margin-left: 10rpx"> (<packQty :dataContent="stdPackInfo"></packQty>) </view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="split_line"></view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="uni-flex uni-row hide_border">
|
||
|
<button class="btn_edit_big_cancle" hover-class="btn_edit_big_after" @click="cancel()">取消</button>
|
||
|
<button class="btn_edit_big_confirm" hover-class="btn_edit_big_after" @click="confirm()">确认</button>
|
||
|
</view>
|
||
|
</view>
|
||
|
</uni-popup>
|
||
|
<win-scan-item ref="scanPopup" title="物料代码" @getScanResult="getItemScanResult" :itemCodeTypeList="itemCodeTypeList"> </win-scan-item>
|
||
|
<comMessage ref="comMessage"></comMessage>
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import { getBasicItemByCode, getProductionlineItem, getWorkShopLineStation, getWarehouseCodeList } from '@/api/request2.js'
|
||
|
import { getLocationTypeName, getListLocationTypeDesc, checkDirectoryItemExist } from '@/common/directory.js'
|
||
|
import uom from '@/mycomponents/qty/uom.vue'
|
||
|
import packQty from '@/mycomponents/qty/packQty.vue'
|
||
|
import balanceStatus from '@/mycomponents/status/balanceStatus.vue'
|
||
|
import winScanItem from '@/mycomponents/scan/winScanItem.vue'
|
||
|
|
||
|
export default {
|
||
|
components: {
|
||
|
uom,
|
||
|
balanceStatus,
|
||
|
winScanItem,
|
||
|
packQty
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
workshopCode: '', // 车间
|
||
|
workShopName: '',
|
||
|
productionLineCode: '', // 生产线
|
||
|
productionLineName: '',
|
||
|
workStationCode: '', // 工位
|
||
|
workStationName: '',
|
||
|
itemCode: '请扫描物料信息',
|
||
|
fromWarehouseCode: '请选择仓库代码',
|
||
|
itemName: '',
|
||
|
qty: 0,
|
||
|
rawLocationCode: '',
|
||
|
fgLocationCode: '',
|
||
|
itemCodeFocus: false,
|
||
|
requestInfo: null,
|
||
|
itemCodeList: [],
|
||
|
counQty: undefined,
|
||
|
editPosition: true,
|
||
|
numberFocus: false,
|
||
|
uom: '',
|
||
|
positionInfo: '请选择位置',
|
||
|
show: false,
|
||
|
isModifiedPosition: true,
|
||
|
positionList: [],
|
||
|
stdQty: 0, // 标包
|
||
|
maxlength: 10,
|
||
|
stdPackInfo: undefined,
|
||
|
wareHouseList: [],
|
||
|
showWareHouse: false,
|
||
|
productLineList: [],
|
||
|
productLineCode: ''
|
||
|
}
|
||
|
},
|
||
|
props: {
|
||
|
title: {
|
||
|
type: String,
|
||
|
default: '完工信息'
|
||
|
},
|
||
|
itemCodeTypeList: {
|
||
|
type: Array,
|
||
|
default: []
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
checkNum(e) {
|
||
|
const { value } = e.detail
|
||
|
const dot = value.indexOf('.') // 包含小数点
|
||
|
const reg = /^[0-9]+$/ // 正整数
|
||
|
if (dot > -1) {
|
||
|
this.maxlength = dot + 7 // 长度是小数点后两位
|
||
|
if (value.length > dot + 7) {
|
||
|
}
|
||
|
}
|
||
|
if (reg.test(value)) {
|
||
|
// 如果是正整数不包含小数点
|
||
|
this.maxlength = 10
|
||
|
}
|
||
|
this.change(value)
|
||
|
},
|
||
|
openRequestPopup(editPosition) {
|
||
|
if (this.positionList.length == 0) {
|
||
|
getWorkShopLineStation()
|
||
|
.then((res) => {
|
||
|
if (res.data != null && res.data.length > 0) {
|
||
|
this.positionList = res.data
|
||
|
} else {
|
||
|
this.showErrorMessage('未查找到位置信息')
|
||
|
}
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
this.showErrorMessage(error)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
this.editPosition = editPosition
|
||
|
if (this.isModifiedPosition) {
|
||
|
this.isModifiedPosition = false
|
||
|
} else {
|
||
|
this.itemCode = '请扫描物料信息'
|
||
|
this.show = false
|
||
|
this.showWareHouse = false
|
||
|
this.uom = ''
|
||
|
this.qty = 0
|
||
|
this.stdPackInfo = undefined
|
||
|
this.counQty = undefined
|
||
|
this.numberFocus = false
|
||
|
this.itemCodeGetFocus()
|
||
|
}
|
||
|
|
||
|
setTimeout((res) => {
|
||
|
this.$refs.popup.open('bottom')
|
||
|
}, 500)
|
||
|
},
|
||
|
initData() {
|
||
|
this.positionList = []
|
||
|
;(this.wareHouseList = []), (this.showWareHouse = false)
|
||
|
this.editPosition = true
|
||
|
this.itemCode = '请扫描物料信息'
|
||
|
this.rawLocationCode = ''
|
||
|
this.positionInfo = '请选择位置'
|
||
|
this.fromWarehouseCode = '请选择仓库代码'
|
||
|
this.workshopCode = '' // 车间
|
||
|
this.workShopName = ''
|
||
|
this.productionLineCode = '' // 生产线
|
||
|
this.productionLineName = ''
|
||
|
this.workStationCode = '' // 工位
|
||
|
this.workStationName = ''
|
||
|
this.show = false
|
||
|
this.uom = ''
|
||
|
this.qty = 0
|
||
|
this.stdPackInfo = undefined
|
||
|
this.counQty = undefined
|
||
|
this.numberFocus = false
|
||
|
},
|
||
|
|
||
|
closeRequestPopup() {
|
||
|
this.$refs.popup.close()
|
||
|
},
|
||
|
locationConfirm() {
|
||
|
// 查询库位信息
|
||
|
this.checkLocatioCode()
|
||
|
},
|
||
|
itemCodeClick() {
|
||
|
this.$refs.scanPopup.openScanPopup()
|
||
|
},
|
||
|
|
||
|
itemCodeGetFocus() {
|
||
|
this.itemCodeFocus = true
|
||
|
},
|
||
|
itemCodeLoseFocus() {
|
||
|
this.itemCodeFocus = false
|
||
|
},
|
||
|
|
||
|
confirm() {
|
||
|
if (this.positionInfo == '请选择位置') {
|
||
|
this.showErrorMessage('请选择位置')
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (this.fromWarehouseCode == '请选择仓库代码') {
|
||
|
this.showErrorMessage('请选择仓库代码')
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (this.itemCode == '请扫描物料信息') {
|
||
|
this.showErrorMessage('请输入物料', 'itemCode')
|
||
|
return
|
||
|
}
|
||
|
if (this.counQty == undefined) {
|
||
|
this.showErrorMessage('请输入数量')
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (this.qty == 0) {
|
||
|
this.showErrorMessage('数量必须大于0')
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (this.rawLocationCode == '') {
|
||
|
this.showErrorMessage(`${this.workStationName}的原材料库位为空`)
|
||
|
return
|
||
|
}
|
||
|
this.callback('add')
|
||
|
},
|
||
|
|
||
|
callback(action) {
|
||
|
const item = {
|
||
|
positionInfo: this.positionInfo,
|
||
|
workshopCode: this.workshopCode, // 车间
|
||
|
workShopName: this.workShopName,
|
||
|
productionLineCode: this.productionLineCode, // 生产线
|
||
|
productionLineName: this.productionLineName,
|
||
|
workStationCode: this.workStationCode, // 工位
|
||
|
workStationName: this.workStationName,
|
||
|
rawLocationCode: this.rawLocationCode,
|
||
|
fgLocationCode: this.fgLocationCode,
|
||
|
fromWarehouseCode: this.fromWarehouseCode,
|
||
|
toWarehouseCode: this.fromWarehouseCode,
|
||
|
itemCode: this.itemCode,
|
||
|
itemName: this.itemName,
|
||
|
uom: this.uom,
|
||
|
qty: this.qty
|
||
|
}
|
||
|
this.closeRequestPopup()
|
||
|
this.$emit('confirm', action, item)
|
||
|
},
|
||
|
|
||
|
showErrorMessage(message, type) {
|
||
|
setTimeout((r) => {
|
||
|
this.$refs.comMessage.showErrorMessage(message, (res) => {
|
||
|
if (type == 'itemCode') {
|
||
|
this.itemCodeGetFocus()
|
||
|
} else {
|
||
|
this.numberFocus = true
|
||
|
}
|
||
|
})
|
||
|
if (type == 'itemCode') {
|
||
|
this.itemCode = '请扫描物料信息'
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
change(value) {
|
||
|
this.qty = value
|
||
|
},
|
||
|
cancel(e) {
|
||
|
this.closeRequestPopup()
|
||
|
},
|
||
|
showSelect() {
|
||
|
if (this.editPosition) {
|
||
|
this.show = true
|
||
|
}
|
||
|
},
|
||
|
|
||
|
showWarseHouseSelect() {
|
||
|
if (this.editPosition) {
|
||
|
this.wareHouseClick()
|
||
|
}
|
||
|
},
|
||
|
|
||
|
confirmSelect(e) {
|
||
|
this.positionInfo = `${e[0].label}-${e[1].label}-${e[2].label}`
|
||
|
console.log('位置', this.positionInfo)
|
||
|
this.workshopCode = e[0].value
|
||
|
this.productionLineCode = e[1].value
|
||
|
this.workStationCode = e[2].value
|
||
|
this.workShopName = e[0].label
|
||
|
this.productionLineName = e[1].label
|
||
|
this.workStationName = e[2].label
|
||
|
|
||
|
const shop = this.positionList.find((shop) => shop.value == this.workshopCode)
|
||
|
if (shop != undefined && shop.children != undefined) {
|
||
|
const prodLine = shop.children.find((line) => line.value == this.productionLineCode)
|
||
|
if (prodLine != undefined && prodLine.children != undefined) {
|
||
|
const station = prodLine.children.find((r) => r.value == this.workStationCode)
|
||
|
if (station.rawLocationCode == '' && station.rawLocationCode == null) {
|
||
|
this.showErrorMessage(`${this.workStationName}的原材料库位为空,请重新选择`)
|
||
|
} else {
|
||
|
this.rawLocationCode = station.rawLocationCode
|
||
|
this.fgLocationCode = station.fgLocationCode
|
||
|
}
|
||
|
} else {
|
||
|
this.showErrorMessage('生产线-工位基础信息维护错误')
|
||
|
}
|
||
|
} else {
|
||
|
this.showErrorMessage('车间-生产线基础信息维护错误')
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getItemScanResult(code, scanResult) {
|
||
|
this.itemCode = code
|
||
|
this.itemName = scanResult.name
|
||
|
this.uom = scanResult.uom
|
||
|
this.stdPackInfo = scanResult.package
|
||
|
this.numberFocus = true
|
||
|
},
|
||
|
wareHouseClick() {
|
||
|
uni.showLoading({
|
||
|
title: '查询中....',
|
||
|
mask: true
|
||
|
})
|
||
|
getWarehouseCodeList(1, 100)
|
||
|
.then((res) => {
|
||
|
uni.hideLoading()
|
||
|
if (res.data != null && res.data.list.length > 0) {
|
||
|
res.data.list.forEach((item) => {
|
||
|
item.value = item.code
|
||
|
item.label = item.name
|
||
|
})
|
||
|
this.wareHouseList = res.data.list
|
||
|
this.showWareHouse = true
|
||
|
} else {
|
||
|
this.showErrorMessage('未查找到仓库代码')
|
||
|
}
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
uni.hideLoading()
|
||
|
this.showErrorMessage(error)
|
||
|
})
|
||
|
},
|
||
|
|
||
|
confirmWareHouse(e) {
|
||
|
this.fromWarehouseCode = e[0].value
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss">
|
||
|
.title {
|
||
|
font-size: 30rpx;
|
||
|
}
|
||
|
</style>
|