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

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