<template>
|
<view>
|
<uni-segmented-control
|
:current="current"
|
:values="items"
|
@clickItem="onClickItem"
|
>
|
</uni-segmented-control>
|
<view class="content">
|
<view v-if="current === 0" class="headerstyle">
|
<view class="itemstyle">
|
<uni-forms label-width="180">
|
<uni-forms-item :label="label"> </uni-forms-item>
|
<uni-forms-item :label="goods_no"> </uni-forms-item>
|
<uni-forms-item :label="batch_num"> </uni-forms-item>
|
<uni-forms-item :label="order_qty"> </uni-forms-item>
|
<uni-forms-item :label="order_Inqty"> </uni-forms-item>
|
<uni-forms-item label="待扫物料编码:">
|
<uni-easyinput
|
type="text"
|
placeholder="请扫描物料编码"
|
ref="materialInput"
|
:focus="step === 1"
|
v-model="materialCode"
|
@confirm="materialCodeInput"
|
@blur="materialCodeInput"
|
/>
|
</uni-forms-item>
|
<uni-forms-item label="库位编号:">
|
<uni-easyinput
|
type="text"
|
placeholder="请扫描库位编号"
|
ref="midInput"
|
:focus="step === 2"
|
v-model="barcode"
|
@confirm="barcodeInput"
|
/>
|
</uni-forms-item>
|
<uni-forms-item label="入库数量:">
|
<uni-easyinput
|
type="text"
|
placeholder="请输入入库数量"
|
ref="midInput"
|
:focus="step === 3"
|
v-model="materSn"
|
@confirm="snInput"
|
/>
|
</uni-forms-item>
|
|
<uni-forms-item :label="Testlabel" v-if="Test">
|
<uni-easyinput
|
type="text"
|
:placeholder="Testplaceholder"
|
ref="midInput"
|
v-model="Initiallife"
|
/>
|
</uni-forms-item>
|
<!-- <uni-forms-item>
|
<checkbox checked="check">是否满盘</checkbox>
|
</uni-forms-item> -->
|
<uni-forms-item>
|
<view
|
style="
|
display: flex;
|
justify-content: space-around;
|
margin-top: 2%;
|
"
|
>
|
<!-- <button @click="reset" type="default" size="default"
|
style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button> -->
|
<button
|
@click="submit"
|
type="primary"
|
size="default"
|
style="width: 250rpx"
|
>
|
确认入库
|
</button>
|
</view>
|
</uni-forms-item>
|
</uni-forms>
|
</view>
|
</view>
|
<view v-if="current === 1" class="headerstyle">
|
<view class="itemstyle">
|
<uni-forms label-width="120">
|
<uni-forms-item label="托盘条码">
|
<uni-easyinput
|
type="text"
|
:focus="!addressFocus"
|
v-model="inboundBarcode"
|
placeholder="请扫描托盘条码"
|
ref="midInput"
|
@confirm="inputChangebarcode"
|
/>
|
</uni-forms-item>
|
<uni-forms-item label="地址条码">
|
<uni-easyinput
|
type="text"
|
v-model="address"
|
:disabled="addressdisabled"
|
placeholder="请扫描地址条码"
|
ref="midInput"
|
:focus="addressFocus"
|
/>
|
</uni-forms-item>
|
<uni-forms-item>
|
<button
|
@click="inbound"
|
type="primary"
|
size="default"
|
style="margin-top: 2%"
|
>
|
入库确认
|
</button>
|
</uni-forms-item>
|
</uni-forms>
|
</view>
|
</view>
|
<view v-if="current === 2" class="headerstyle">
|
<view class="itemstyle">
|
<uni-list :border="true">
|
<uni-list-item
|
direction="column"
|
v-for="(item, index) in orderInfo"
|
:key="index"
|
>
|
<template v-slot:body>
|
<view class="uni-list-box">
|
<view class="uni-content">
|
<view style="font-size: 18px">单据号:{{ orderNo }}</view>
|
<view style="font-size: 18px"
|
>物料编码:{{ item.materielCode }}</view
|
>
|
<view>物料名称:{{ item.materielName }}</view>
|
<view>物料规格:{{ item.materielSpec }}</view>
|
<view style="font-size: 18px"
|
>物料名称:{{ item.matName }}</view
|
>
|
<view style="font-size: 18px"
|
>数量:{{ item.orderQuantity + item.unit }}</view
|
>
|
<view style="font-size: 18px"
|
>组盘数量:{{ item.receiptQuantity }}</view
|
>
|
</view>
|
</view>
|
</template>
|
</uni-list-item>
|
</uni-list>
|
</view>
|
</view>
|
<view v-if="current === 3" class="headerstyle">
|
<view class="itemstyle">
|
<uni-forms label-width="180">
|
<uni-forms-item label="内箱标签:">
|
<uni-easyinput
|
type="text"
|
placeholder="请扫描内箱标签"
|
ref="midInput"
|
:focus="!pkfocus"
|
v-model="pkmaterSn"
|
@confirm="pksnInput"
|
/>
|
</uni-forms-item>
|
|
<uni-forms-item>
|
<view
|
style="
|
display: flex;
|
justify-content: space-around;
|
margin-top: 2%;
|
"
|
>
|
<button
|
@click="resetInPk"
|
type="default"
|
size="default"
|
style="
|
width: 160rpx;
|
border: 1rpx solid #007aff;
|
color: #007aff;
|
"
|
>
|
重置
|
</button>
|
<button
|
@click="pksubmit"
|
type="primary"
|
size="default"
|
style="margin-top: 2%"
|
>
|
入平库
|
</button>
|
</view>
|
</uni-forms-item>
|
</uni-forms>
|
<uni-list>
|
<uni-list-item
|
direction="column"
|
v-for="(item, index) in pkmatInfos"
|
:key="index"
|
>
|
<template v-slot:body>
|
<view class="uni-list-box">
|
<uni-icons
|
type="trash"
|
size="22"
|
style="position: absolute; right: 5%"
|
@click="pkdeleteList(index)"
|
>
|
</uni-icons>
|
<view class="uni-content">
|
<view class="uni-title-sub uni-ellipsis-2"
|
>采购单号:{{ item.purchaseOrderNo }}</view
|
>
|
<view class="uni-note"
|
>物料编码:{{ item.materielCode }}</view
|
>
|
<view class="uni-note">批次号:{{ item.lotNo }}</view>
|
<view class="uni-note">数量:{{ item.quantity }}</view>
|
<view class="uni-note"
|
>生产日期:{{ item.productionDate }}</view
|
>
|
<view class="uni-note"
|
>有效期:{{ item.effectiveDate }}</view
|
>
|
</view>
|
</view>
|
</template>
|
</uni-list-item>
|
</uni-list>
|
</view>
|
</view>
|
</view>
|
<u-toast ref="uToast" />
|
</view>
|
</template>
|
|
<script>
|
const innerAudioContext = uni.createInnerAudioContext();
|
export default {
|
data() {
|
return {
|
items: ["入库"], //, '解盘''组盘', , '单据信息'
|
current: 0,
|
matTotal: [],
|
matInfos: [],
|
orderNo: "",
|
batchNo: "",
|
materielCode: "",
|
orderqty: 0,
|
Inqty: 0,
|
goods_no: "",
|
batch_num: "",
|
order_qty: "",
|
order_Inqty: "",
|
label: "",
|
orderInfo: [],
|
focus: false,
|
pkfocus: false,
|
barcode: "",
|
materSn: "",
|
Initiallife: 1000,
|
sns: [],
|
pksns: [],
|
addressFocus: false,
|
inboundBarcode: "",
|
address: "",
|
check: true,
|
value: "",
|
matInfo: [],
|
value2: "",
|
matTotals: [],
|
id: "",
|
warehouseId: "",
|
Test: false,
|
Testlabel: "",
|
Testplaceholder: "",
|
Testcheck: false,
|
pkmaterSn: "",
|
pkmatInfos: [],
|
addressdisabled: false,
|
materialCode: "", // 新增:扫描的物料编码
|
materialCodeValid: false, // 新增:物料编码验证状态
|
step: 1, // 新增:1-物料编码,2-库位编号,3-入库数量
|
};
|
},
|
onShow() {},
|
onLoad(res) {
|
this.step = 1; // 初始步骤:物料编码
|
this.focus = false;
|
|
this.id = res.id;
|
this.addressFocus = false;
|
this.orderNo = res.orderNo;
|
this.Inqty = res.order_Inqty;
|
this.orderqty = res.order_qty;
|
this.batchNo = res.batchNo;
|
this.materielCode = res.goods_no;
|
this.warehouseId = res.warehouseId;
|
this.label = "单据编号:" + this.orderNo;
|
this.batch_num = "批次号:" + res.batchNo;
|
this.order_qty = "单据数量:" + res.order_qty;
|
this.order_Inqty = "已入库数量:" + this.Inqty;
|
this.goods_no = "物料编号:" + res.goods_no;
|
// this.getData();
|
},
|
methods: {
|
// voiceSpeech(src) {
|
// innerAudioContext.src = src; // '../../static/success.mp3';
|
// innerAudioContext.play();
|
// },
|
|
// 物料编码验证
|
materialCodeInput() {
|
console.log("materialCodeInput 被触发");
|
console.log("输入值:", this.materialCode);
|
this.$nextTick(() => {
|
if (this.materialCode.trim() !== "") {
|
const scannedCode = this.materialCode.trim();
|
const expectedCode = this.materielCode;
|
|
console.log("扫描编码:", scannedCode);
|
console.log("期望编码(materielCode):", expectedCode);
|
|
if (scannedCode === expectedCode) {
|
this.materialCodeValid = true;
|
console.log("✅ 物料编码验证成功");
|
|
// 验证成功后不清空值,直接切换到下一步
|
this.step = 2;
|
this.$refs.uToast.show({
|
title: "物料编码验证成功",
|
type: "success",
|
});
|
// 使用 $nextTick 确保焦点切换在 DOM 更新后执行
|
this.$nextTick(() => {
|
// 让库位编号输入框获得焦点
|
this.$refs.midInput.focus();
|
});
|
} else {
|
this.materialCodeValid = false;
|
console.log("❌ 物料编码验证失败");
|
|
this.$refs.uToast.show({
|
title: `物料编码不匹配`,
|
type: "error",
|
});
|
|
// 验证失败时清空值并保持焦点在物料编码输入框
|
setTimeout(() => {
|
this.materialCode = "";
|
this.step = 1;
|
// 确保焦点回到物料编码输入框
|
this.$nextTick(() => {
|
this.$refs.materialInput.focus();
|
});
|
}, 500);
|
}
|
}
|
});
|
},
|
|
updateFocus() {
|
debugger;
|
this.$nextTick(() => {
|
this.materSn = "";
|
if (!this.focus) {
|
this.focus = true;
|
}
|
});
|
},
|
barcodeFocus() {
|
debugger;
|
this.barcode = "";
|
if (this.focus) {
|
this.focus = false;
|
}
|
},
|
getData() {
|
var postData = {
|
MainData: {
|
orderNo: this.orderNo,
|
},
|
};
|
this.$u
|
.post("/api/InboundOrderDetail/GetInboundOrderDetails", postData)
|
.then((res) => {
|
if (res.status) {
|
this.orderInfo = res.data;
|
if (this.orderInfo.length > 3) {
|
this.loadVisible = true;
|
}
|
}
|
});
|
},
|
onClickItem(e) {
|
this.focus = false;
|
this.addressFocus = false;
|
if (this.current !== e.currentIndex) {
|
this.current = e.currentIndex;
|
if (this.current == 2) {
|
this.getData();
|
}
|
}
|
},
|
|
// barcodeInput() {
|
// this.$nextTick(function(x) {
|
// if (this.barcode.length > 0) {
|
// // 扫描库位编号后,自动切换到入库数量输入框(步骤3)
|
// setTimeout(() => {
|
// this.step = 3; // 切换到入库数量
|
// this.$refs.uToast.show({
|
// title: "库位编号扫描成功",
|
// type: "success"
|
// });
|
// }, 100);
|
// }
|
// })
|
// },
|
barcodeInput() {
|
this.$nextTick(() => {
|
if (this.barcode.length > 0) {
|
this.step = 3; // 切换到入库数量
|
this.$refs.uToast.show({
|
title: "库位编号扫描成功",
|
type: "success",
|
});
|
// 添加延时确保扫码完成
|
setTimeout(() => {
|
this.$nextTick(() => {
|
this.$refs.midInput.focus();
|
});
|
}, 100);
|
}
|
});
|
},
|
|
snInput() {
|
this.$nextTick(() => {
|
if (this.materSn != "") {
|
this.focus = false;
|
var matSn = this.materSn;
|
if (this.warehouseId == 11) {
|
matSn = matSn.replace(/,SC.*/, "");
|
}
|
//查询matSn是否存在字符
|
if (matSn.indexOf("POHA") > 0) {
|
this.$u
|
.post("/api/MaterielInfo/CodeAnalysis?serNum=" + matSn, {})
|
.then((res) => {
|
this.Testcheck = false;
|
if (res.status) {
|
this.sns.push(res.data.serialNumber);
|
|
this.matInfos.push(res.data);
|
if (res.message) {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/fail.mp3');
|
// }, 100);
|
return;
|
}
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/success.mp3');
|
// }, 100);
|
} else {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/fail.mp3');
|
// }, 100);
|
}
|
});
|
}
|
setTimeout(() => {
|
this.materSn = "";
|
}, 100);
|
}
|
});
|
},
|
pksnInput() {
|
this.$nextTick(() => {
|
if (this.pkmaterSn != "") {
|
var matSn = this.pkmaterSn;
|
|
if (matSn.indexOf("POHA") > 0) {
|
this.$u
|
.post("/api/MaterielInfo/CodeAnalysis?serNum=" + matSn, {})
|
.then((res) => {
|
if (res.status) {
|
this.pksns.push(res.data.serialNumber);
|
this.pkmatInfos.push(res.data);
|
if (!res.status) {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/fail.mp3');
|
// }, 100);
|
return;
|
}
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/success.mp3');
|
// }, 100);
|
return;
|
} else {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
// setTimeout(() => {
|
// this.voiceSpeech('../../static/fail.mp3');
|
// }, 100);
|
}
|
});
|
}
|
setTimeout(() => {
|
this.pkmaterSn = "";
|
}, 100);
|
}
|
});
|
},
|
inbound() {
|
if (this.inboundBarcode == "") {
|
this.$refs.uToast.show({
|
title: "请扫描托盘条码",
|
type: "error",
|
});
|
return;
|
}
|
if (this.address == "") {
|
this.$refs.uToast.show({
|
title: "请扫描地址条码",
|
type: "error",
|
});
|
return;
|
}
|
var postData = {
|
MainData: {
|
barcode: this.inboundBarcode,
|
startPoint: this.address,
|
warehouseId: this.warehouseId,
|
},
|
};
|
this.$u
|
.post("/api/Task/RequestInboundTask", postData)
|
.then((res) => {
|
if (res.status) {
|
this.inboundBarcode = "";
|
if (this.warehouseId != 5) this.address = "";
|
setTimeout(() => {
|
this.addressFocus = false;
|
this.$refs.uToast.show({
|
title: "成功",
|
type: "success",
|
});
|
}, 200);
|
} else {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
}
|
})
|
.catch((err) => {
|
this.$refs.uToast.show({
|
title: err.message,
|
type: "error",
|
});
|
});
|
},
|
inputChangebarcode() {
|
this.addressFocus = false;
|
this.$nextTick(function (x) {
|
if (this.inboundBarcode != "") {
|
this.addressFocus = true;
|
}
|
});
|
},
|
deleteList(res) {
|
this.matInfos.splice(res, 1);
|
this.sns.splice(res, 1);
|
},
|
pkdeleteList(res) {
|
this.pkmatInfos.splice(res, 1);
|
this.pksns.splice(res, 1);
|
},
|
reset() {
|
//重置物料编码相关状态
|
this.materialCode = "";
|
this.materialCodeValid = false;
|
this.materialFocus = false;
|
|
this.barcode = "";
|
this.matInfos = [];
|
this.sns = [];
|
this.materSn = "";
|
if ((this.warehouseId = !6)) {
|
this.Initiallife = 0;
|
}
|
},
|
resetInPk() {
|
this.pkmaterSn = "";
|
this.pkfocus = false;
|
this.pkmatInfos = [];
|
this.pksns = [];
|
},
|
pksubmit() {
|
if (this.pkmatInfos.length == 0) {
|
this.$refs.uToast.show({
|
title: "请扫描内箱标签",
|
type: "error",
|
});
|
return;
|
}
|
this.$u
|
.post(
|
"/api/InboundOrder/InPinKu?warehouseId=" +
|
this.warehouseId +
|
"&orderNo=" +
|
this.orderNo,
|
this.pksns
|
)
|
.then((res) => {
|
if (res.status) {
|
this.$refs.uToast.show({
|
title: "入库成功",
|
type: "success",
|
});
|
this.pkfocus = false;
|
this.pkmatInfos = [];
|
this.pksns = [];
|
} else {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
}
|
});
|
},
|
// submit() {
|
// if (this.barcode == "") {
|
// this.$refs.uToast.show({
|
// title: "请扫描货位编号",
|
// type: 'error'
|
// })
|
// return;
|
// }
|
// if (this.materSn.length == 0) {
|
// this.$refs.uToast.show({
|
// title: "请输入入库数量",
|
// type: 'error'
|
// })
|
// return;
|
// }
|
// uni.showLoading({
|
// title: '提交中...'
|
// });
|
// this.$u.post('/api/CabinOrder/FeedbackIn', {
|
// MainData: {
|
// "LocationCode": this.barcode,
|
// "id":this.id,
|
// "warehouseCode": this.warehouseId,
|
// "orderNo": this.orderNo,
|
// "materielCode": this.materielCode,
|
// "Inqty": this.materSn,
|
// "batchNo": this.batchNo,
|
// },
|
// DelKeys: this.sns
|
// }).then(res => {
|
// uni.hideLoading();
|
// this.Testcheck = false;
|
// if (res.status) {
|
// this.$refs.uToast.show({
|
// title: "入库成功",
|
// type: "success"
|
// })
|
// this.Inqty = parseInt(res.message);
|
// this.order_Inqty = "已入库数量:" + this.Inqty;
|
// this.barcode = "";
|
// this.materSn = "";
|
// if (this.Inqty == this.orderqty) {
|
// uni.setStorageSync('isIn', true);
|
// this.handleInboundComplete();
|
// }
|
// } else {
|
// this.$refs.uToast.show({
|
// title: res.message,
|
// type: "error"
|
// })
|
// }
|
// }).catch(err => {
|
// uni.hideLoading();
|
// this.$refs.uToast.show({
|
// title: "网络错误,请重试",
|
// type: "error"
|
// })
|
// })
|
// },
|
// 新增方法处理入库完成逻辑
|
|
submit() {
|
// 先验证物料编码
|
if (!this.materialCodeValid) {
|
this.$refs.uToast.show({
|
title: "请先扫描并验证物料编码",
|
type: "error",
|
});
|
return;
|
}
|
if (this.barcode == "") {
|
this.$refs.uToast.show({
|
title: "请扫描货位编号",
|
type: "error",
|
});
|
return;
|
}
|
if (this.materSn.length == 0) {
|
this.$refs.uToast.show({
|
title: "请输入入库数量",
|
type: "error",
|
});
|
return;
|
}
|
|
// 新增二次确认逻辑
|
uni.showModal({
|
title: "确认入库",
|
content: "您确定要提交入库信息吗?",
|
success: (res) => {
|
if (res.confirm) {
|
// 用户点击确定,执行原有的提交逻辑
|
uni.showLoading({
|
title: "提交中...",
|
});
|
this.$u
|
.post("/api/CabinOrder/FeedbackIn", {
|
MainData: {
|
LocationCode: this.barcode,
|
id: this.id,
|
warehouseCode: this.warehouseId,
|
orderNo: this.orderNo,
|
materielCode: this.materielCode,
|
Inqty: this.materSn,
|
batchNo: this.batchNo,
|
},
|
DelKeys: this.sns,
|
})
|
.then((res) => {
|
uni.hideLoading();
|
this.Testcheck = false;
|
if (res.status) {
|
this.$refs.uToast.show({
|
title: "入库成功",
|
type: "success",
|
});
|
this.Inqty = parseInt(res.message);
|
this.order_Inqty = "已入库数量:" + this.Inqty;
|
// 手动清空所有输入数据
|
this.materialCode = "";
|
this.materialCodeValid = false;
|
this.barcode = "";
|
this.materSn = "";
|
this.step = 1; // 重置步骤到第一步
|
|
// 使用 $nextTick 确保焦点设置在 DOM 更新后执行
|
this.$nextTick(() => {
|
// 确保物料编码输入框获得焦点
|
this.$refs.materialInput.focus();
|
});
|
if (this.Inqty == this.orderqty) {
|
uni.setStorageSync("isIn", true);
|
this.handleInboundComplete();
|
}
|
} else {
|
this.$refs.uToast.show({
|
title: res.message,
|
type: "error",
|
});
|
}
|
})
|
.catch((err) => {
|
uni.hideLoading();
|
this.$refs.uToast.show({
|
title: "网络错误,请重试",
|
type: "error",
|
});
|
});
|
} else {
|
// 用户点击取消,不做任何操作
|
}
|
},
|
});
|
},
|
|
handleInboundComplete() {
|
// 显示完成提示
|
// uni.showModal({
|
// title: '提示',
|
// content: '入库已完成,是否返回首页?',
|
// success: (res) => {
|
// if (res.confirm) {
|
// // 用户点击确定
|
// setTimeout(() => {
|
// // uni.redirectTo({
|
// // url: '/pages/stash/inboundorder?warehouseId='+this.warehouseId // 替换为你的目标页面路径
|
// // });
|
// uni.navigateBack({
|
// delta: 2
|
// });
|
// }, 500);
|
// } else {
|
// // 用户点击取消,可以停留在当前页面
|
// // 或者执行其他操作
|
// }
|
// }
|
// });
|
|
// 或者直接跳转(不询问用户)
|
setTimeout(() => {
|
// 方式2:跳转到指定页面
|
// uni.redirectTo({
|
// url: '/pages/order/list' // 替换为你的目标页面路径
|
// });
|
// 方式3:跳转到首页
|
// uni.switchTab({
|
// url: '/pages/index/index'
|
// });
|
// 方式1:使用uni.navigateBack返回上一页
|
uni.navigateBack({
|
delta: 1,
|
});
|
}, 600);
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss">
|
@import "@/common/uni-ui.scss";
|
|
.content {
|
display: flex;
|
height: 150px;
|
}
|
|
.content-text {
|
font-size: 14px;
|
color: #666;
|
}
|
|
.itemstyle {
|
margin-top: 30px;
|
margin-left: 5%;
|
}
|
|
.headerstyle {
|
width: 90%;
|
}
|
</style>
|