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.

407 lines
11 KiB

1 year 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>
<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="showWarseHouseSelect">
<view class="" style="margin-left: 20rpx;width: 100% ">
{{fromWarehouseCode}}
</view>
<u-select v-model="showWareHouse" mode="single-column" :list="wareHouseList"
@confirm="confirmWareHouse"></u-select>
</view>
</view>
<u-line />
1 year ago
<view class="uni-flex uni-row padding title u-col-center">
11 months ago
<text>位置</text>
1 year ago
<view class="uni-flex u-col-center uni-row" @click="showSelect">
1 year ago
<view class="" style="margin-left: 20rpx;">
1 year ago
{{positionInfo}}
</view>
<u-select v-model="show" mode="mutil-column-auto" :list="positionList"
1 year ago
@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="">
1 year ago
<image src="/static/search.svg" mode=""
12 months ago
style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" @click="itemCodeClick">
1 year ago
</image>
1 year ago
</view>
</view>
1 year ago
<u-line />
<view class="uni-flex uni-row padding title u-col-center">
11 months ago
<text>数量 </text>
1 year ago
<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" />
1 year ago
<uom :uom="uom"></uom>
<view class="" v-if="stdPackInfo!=undefined"
style="display: flex;flex-direction: row;margin-left: 10rpx;">
(<stdPackQty :dataContent="stdPackInfo"></stdPackQty>)
</view>
1 year ago
</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'
:itemCodeTypeList="itemCodeTypeList">
</win-scan-item>
1 year ago
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import {
getBasicLocationByCode,
1 year ago
getBasicItemByCode,
getProductionlineItem,
getWorkShopLineStation,
getWarehouseCodeList
1 year ago
} 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'
1 year ago
import balanceStatus from '@/mycomponents/status/balanceStatus.vue'
import comMessage from '@/mycomponents/common/comMessage.vue'
import winScanItem from '@/mycomponents/scan/winScanItem.vue'
1 year ago
1 year ago
export default {
components: {
uom,
balanceStatus,
1 year ago
comMessage,
winScanItem,
stdPackQty,
1 year ago
},
data() {
return {
workshopCode: "", //车间
workShopName: "",
productionLineCode: "", //生产线
productionLineName: "",
workStationCode: "", //工位
workStationName: "",
itemCode: '请扫描物料信息',
fromWarehouseCode: "请选择仓库代码",
1 year ago
itemName: "",
1 year ago
qty: 0,
12 months ago
rawLocationCode: "",
fgLocationCode: "",
1 year ago
itemCodeFocus: false,
requestInfo: null,
1 year ago
itemCodeList: [],
counQty: undefined,
1 year ago
editPosition: true,
1 year ago
numberFocus: false,
uom: "",
positionInfo: "请选择位置",
show: false,
1 year ago
isModifiedPosition: true,
positionList: [],
11 months ago
stdQty: 0, //标包
maxlength: 10,
stdPackInfo: undefined,
wareHouseList: [],
showWareHouse: false
1 year ago
}
},
props: {
title: {
type: String,
default: '需求信息'
},
itemCodeTypeList: {
type: Array,
default: []
},
1 year ago
},
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)
},
1 year ago
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);
})
}
1 year ago
this.editPosition = editPosition;
if (this.isModifiedPosition) {
this.isModifiedPosition = false
1 year ago
} else {
this.itemCode = "请扫描物料信息";
this.show = false
this.showWareHouse = false
1 year ago
this.uom = ""
this.qty = 0;
this.stdPackInfo = undefined;
this.counQty = undefined;
this.numberFocus = false
1 year ago
this.itemCodeGetFocus();
1 year ago
}
1 year ago
1 year ago
this.$refs.popup.open('bottom')
},
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
},
1 year ago
closeRequestPopup() {
this.$refs.popup.close()
},
locationConfirm() {
//查询库位信息
this.checkLocatioCode();
},
1 year ago
itemCodeClick() {
this.$refs.scanPopup.openScanPopup();
1 year ago
},
1 year ago
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")
1 year ago
return
}
if (this.counQty == undefined) {
this.showErrorMessage("请输入数量")
return
}
1 year ago
if (this.qty == 0) {
this.showErrorMessage("数量必须大于0")
return
1 year ago
}
12 months ago
if (this.rawLocationCode == '') {
this.showErrorMessage(this.workStationName + "的原材料库位为空")
return
}
1 year ago
this.callback('add');
1 year ago
},
callback(action) {
let item = {
1 year ago
positionInfo: this.positionInfo,
workshopCode: this.workshopCode, //车间
workShopName: this.workShopName,
productionLineCode: this.productionLineCode, //生产线
productionLineName: this.productionLineName,
workStationCode: this.workStationCode, //工位
workStationName: this.workStationName,
12 months ago
rawLocationCode: this.rawLocationCode,
fgLocationCode: this.fgLocationCode,
fromWarehouseCode: this.fromWarehouseCode,
toWarehouseCode: this.fromWarehouseCode,
1 year ago
itemCode: this.itemCode,
1 year ago
itemName: this.itemName,
uom: this.uom,
1 year ago
qty: this.qty
};
this.closeRequestPopup();
this.$emit("confirm", action, item);
},
showErrorMessage(message, type) {
setTimeout(r => {
this.$refs.comMessage.showErrorMessage(message, res => {
1 year ago
if (type == "itemCode") {
1 year ago
this.itemCodeGetFocus();
} else {
this.numberFocus = true;
}
})
1 year ago
if (type == "itemCode") {
this.itemCode = "请扫描物料信息"
1 year ago
}
})
},
change(value) {
this.qty = value;
},
cancel(e) {
1 year ago
this.closeRequestPopup();
1 year ago
},
showSelect() {
1 year ago
if (this.editPosition) {
this.show = true
}
},
1 year ago
showWarseHouseSelect() {
if (this.editPosition) {
this.wareHouseClick();
}
1 year ago
},
1 year ago
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
1 year ago
12 months ago
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("车间-生产线基础信息维护错误")
}
1 year ago
},
1 year ago
11 months ago
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;
},
1 year ago
}
}
</script>
<style lang="scss">
.title {
font-size: 30rpx;
}
</style>