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.
362 lines
10 KiB
362 lines
10 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>
|
|
<u-line />
|
|
<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">
|
|
<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>
|
|
<u-line />
|
|
|
|
<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>
|
|
<u-line />
|
|
|
|
<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;">
|
|
(<stdPackQty :dataContent="stdPackInfo"></stdPackQty>)
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<u-line />
|
|
</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'>
|
|
</win-scan-item>
|
|
<comMessage ref="comMessage"></comMessage>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getBasicLocationByCode,
|
|
getBasicItemByCode,
|
|
getProductionlineItem,
|
|
getWorkShopLineStation
|
|
} from '@/api/request2.js';
|
|
import {
|
|
getLocationTypeName,
|
|
getListLocationTypeDesc,
|
|
checkDirectoryItemExist
|
|
} from '@/common/directory.js';
|
|
import uom from '@/mycomponents/qty/uom.vue'
|
|
import stdPackQty from '@/mycomponents/qty/stdPackQty.vue'
|
|
import balanceStatus from '@/mycomponents/status/balanceStatus.vue'
|
|
import comMessage from '@/mycomponents/common/comMessage.vue'
|
|
import winScanItem from '@/mycomponents/scan/winScanItem.vue'
|
|
|
|
|
|
export default {
|
|
components: {
|
|
uom,
|
|
balanceStatus,
|
|
comMessage,
|
|
winScanItem,
|
|
stdPackQty
|
|
},
|
|
data() {
|
|
return {
|
|
// itemCode: 'CE115F11161AG',
|
|
workshopCode: "", //车间
|
|
workShopName: "",
|
|
productionLineCode: "", //生产线
|
|
productionLineName: "",
|
|
workStationCode: "", //工位
|
|
workStationName: "",
|
|
itemCode: '请扫描物料信息',
|
|
itemName: "",
|
|
qty: 0,
|
|
rawLocationCode: "",
|
|
fgLocationCode: "",
|
|
itemCodeFocus: false,
|
|
requestInfo: null,
|
|
itemCodeList: [],
|
|
isCheckItemCode: false,
|
|
counQty: undefined,
|
|
editPosition: true,
|
|
numberFocus: false,
|
|
uom: "",
|
|
positionInfo: "请选择位置",
|
|
show: false,
|
|
isModifiedPosition: true,
|
|
positionList: [],
|
|
stdQty: 0, //标包
|
|
maxlength:10,
|
|
stdPackInfo:undefined
|
|
}
|
|
},
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
default: '需求信息'
|
|
},
|
|
},
|
|
methods: {
|
|
checkNum(e) {
|
|
let value = e.detail.value;
|
|
let dot = value.indexOf('.'); //包含小数点
|
|
let 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 => {
|
|
this.positionList = res.data
|
|
}).catch(error => {
|
|
|
|
})
|
|
}
|
|
|
|
this.editPosition = editPosition;
|
|
if (this.isModifiedPosition) {
|
|
this.isModifiedPosition = false
|
|
} else {
|
|
this.itemCode = "";
|
|
this.isCheckItemCode = false;
|
|
this.show = false
|
|
this.uom = ""
|
|
this.qty = 0;
|
|
this.stdPackInfo =undefined;
|
|
this.counQty = undefined;
|
|
this.numberFocus = false
|
|
this.itemCodeGetFocus();
|
|
}
|
|
|
|
this.$refs.popup.open('bottom')
|
|
},
|
|
initData(){
|
|
this.positionList = [];
|
|
this.itemCode = "请扫描物料信息";
|
|
this.isCheckItemCode = false;
|
|
this.rawLocationCode =""
|
|
this.positionInfo ="请选择位置"
|
|
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;
|
|
},
|
|
selectedItem(item) {
|
|
this.itemCode = item.itemCode;
|
|
this.checkItemCode();
|
|
},
|
|
|
|
confirm() {
|
|
if (this.positionInfo == "请选择位置" ) {
|
|
this.showErrorMessage("请选择位置")
|
|
return
|
|
}
|
|
|
|
if (this.itemCode == "" || !this.isCheckItemCode) {
|
|
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');
|
|
},
|
|
|
|
checkItemCode(itemCode) {
|
|
//校验物料
|
|
getBasicItemByCode(itemCode).then(res => {
|
|
uni.hideLoading();
|
|
this.$refs.scanPopup.closeScanPopup();
|
|
if (res.data != null && res.data.list.length > 0) {
|
|
this.itemCode = res.data.list[0].code;
|
|
this.itemName = res.data.list[0].name
|
|
this.isCheckItemCode = true;
|
|
this.numberFocus = true
|
|
this.uom = res.data.list[0].uom
|
|
} else {
|
|
this.showErrorMessage('未查找到物料【' + itemCode + '】', "itemCode");
|
|
}
|
|
|
|
}).catch(error => {
|
|
uni.hideLoading();
|
|
this.showErrorMessage(error, "itemCode");
|
|
})
|
|
},
|
|
|
|
|
|
callback(action) {
|
|
let 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,
|
|
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 = ""
|
|
this.isCheckItemCode = false;
|
|
}
|
|
})
|
|
},
|
|
change(value) {
|
|
this.qty = value;
|
|
},
|
|
cancel(e) {
|
|
this.closeRequestPopup();
|
|
},
|
|
showSelect() {
|
|
if (this.editPosition) {
|
|
this.show = true
|
|
}
|
|
|
|
},
|
|
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
|
|
|
|
let shop = this.positionList.find(shop => shop.value == this.workshopCode);
|
|
if (shop != undefined && shop.children != undefined) {
|
|
let prodLine = shop.children.find(line => line.value == this.productionLineCode);
|
|
if (prodLine != undefined && prodLine.children != undefined) {
|
|
let station = prodLine.children.find(r => r.value == this.workStationCode);
|
|
if (station.rawLocationCode == '' && station.rawLocationCode == null) {
|
|
this.showErrorMessage(this.workStationName + "的原材料库位为空,请重新选择")
|
|
return;
|
|
} else {
|
|
this.rawLocationCode = station.rawLocationCode;
|
|
this.fgLocationCode = station.fgLocationCode;
|
|
}
|
|
} else {
|
|
this.showErrorMessage("生产线-工位基础信息维护错误")
|
|
}
|
|
} else {
|
|
this.showErrorMessage("车间-生产线基础信息维护错误")
|
|
}
|
|
},
|
|
|
|
getItemScanResult(code, scanResult) {
|
|
if (code == "") {
|
|
this.showErrorMessage('物料号不能为空')
|
|
return;
|
|
}
|
|
this.itemCode = "";
|
|
this.checkItemCode(code)
|
|
this.stdPackInfo = scanResult.package;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.title {
|
|
font-size: 30rpx;
|
|
}
|
|
</style>
|
|
|