<template>
|
<view class="page">
|
<view class="packing-registration-bg" />
|
<u-navbar
|
title="库存盘点"
|
:background="background"
|
:border-bottom="false"
|
:title-bold="true"
|
title-color="#000"
|
back-icon-color="#000"
|
>
|
<template #right>
|
<text
|
style="font-size: 14px; margin-right: 14px; font-weight: bold"
|
@click="goSubmit"
|
>提交</text
|
>
|
</template>
|
</u-navbar>
|
<view class="packing-registration-param">
|
<view class="packing-registration-param-view">
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">盘点报告号</text>
|
</view>
|
<view class="packing-registration-param-item-right">
|
<text class="item-one item-two" @click="seaRchPersonnelNo()">{{
|
registerInfo.invListNo == "" ? "点击选择" : registerInfo.invListNo
|
}}</text>
|
<u-icon
|
name="arrow-right"
|
color="#687792"
|
size="28"
|
@click="seaRchPersonnelNo()"
|
v-show="registerInfo.invListNo == ''"
|
></u-icon>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">仓库</text>
|
</view>
|
<view class="packing-registration-param-item-right">
|
<text class="item-one item-two">{{
|
registerInfo.warehouseId
|
}}</text>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">零件号</text>
|
</view>
|
<view class="packing-registration-param-item-right">
|
<view class="item-one item-two" @click="openPN()">
|
<text>{{
|
registerInfo.partNo == "" ? "点击输入" : registerInfo.partNo
|
}}</text>
|
</view>
|
<u-icon
|
name="arrow-right"
|
color="#687792"
|
size="28"
|
v-show="registerInfo.partNo == ''"
|
></u-icon>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">批次号</text>
|
</view>
|
<view
|
class="packing-registration-param-item-right"
|
@click="openBatch()"
|
>
|
<text class="item-one item-two">{{
|
registerInfo.ifsBatchNo == ""
|
? "点击输入"
|
: registerInfo.ifsBatchNo
|
}}</text>
|
<u-icon
|
name="arrow-right"
|
color="#687792"
|
size="28"
|
v-show="registerInfo.ifsBatchNo == ''"
|
></u-icon>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">库位号</text>
|
</view>
|
<view
|
class="packing-registration-param-item-right"
|
@click="openLocation()"
|
>
|
<view class="item-one item-two">
|
<text>{{
|
registerInfo.locationNo == ""
|
? "点击输入"
|
: registerInfo.locationNo
|
}}</text>
|
</view>
|
<u-icon
|
name="arrow-right"
|
color="#687792"
|
size="28"
|
v-show="registerInfo.locationNo == ''"
|
></u-icon>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">盘点数量</text>
|
</view>
|
<view
|
class="packing-registration-param-item-right"
|
@click="openPhysicalInventory()"
|
>
|
<view class="item-one item-two">
|
<text>{{
|
registerInfo.qtyAvailable == ""
|
? "点击输入"
|
: registerInfo.qtyAvailable
|
}}</text>
|
</view>
|
<u-icon
|
name="arrow-right"
|
color="#687792"
|
size="28"
|
v-show="registerInfo.qtyAvailable == ''"
|
></u-icon>
|
</view>
|
</view>
|
<view class="packing-registration-param-item param-extra">
|
<view class="packing-registration-param-item-left">
|
<text class="item-one">盘点记录:</text>
|
</view>
|
</view>
|
</view>
|
</view>
|
<view class="wrap">
|
<scroll-view class="packing-registration-scroll-list" scroll-y="true">
|
<u-cell-group
|
class="packing-registration-scroll-list-group"
|
:border="false"
|
>
|
<!-- <div class="tip" style="text-align: center;" v-if="hasScanSnList.length==0">-请扫码-</div> -->
|
<view
|
class="content"
|
v-for="(item, index) in hasScanSnList"
|
:key="index"
|
:index="index"
|
>
|
<view class="content-header">
|
<view class="content-header-title">{{
|
hasScanSnList.length - index
|
}}</view>
|
</view>
|
<view class="content-body">
|
<view class="row-list">
|
<view class="_label">
|
<view class="_label-name">零件号:</view>
|
</view>
|
<view class="_content">
|
{{ item.partNo }}
|
</view>
|
</view>
|
<view class="row-list">
|
<view class="_label">
|
<view class="_label-name">批次号:</view>
|
</view>
|
<view class="_content">
|
{{ item.ifsBatchNo }}
|
</view>
|
</view>
|
<view class="row-list">
|
<view class="_label">
|
<view class="_label-name">库位号:</view>
|
</view>
|
<view class="_content">
|
{{ item.locationNo }}
|
</view>
|
</view>
|
<view class="row-list">
|
<view class="_label">
|
<view class="_label-name">盘点数量:</view>
|
</view>
|
<view class="_content">
|
{{ item.qtyAvailable }}
|
</view>
|
</view>
|
</view>
|
</view>
|
</u-cell-group>
|
</scroll-view>
|
<scan></scan>
|
<!-- 零件号 -->
|
<modalBg ref="openPN" :confirm="confirmPN">
|
<u-field
|
v-model="registerInfo.partNo"
|
label="零件号:"
|
placeholder="请输入"
|
:border-bottom="false"
|
>
|
</u-field>
|
</modalBg>
|
<!-- 批次号 -->
|
<modalBg ref="openBatch" :confirm="confirmBatch">
|
<u-field
|
v-model="registerInfo.ifsBatchNo"
|
label="批次号:"
|
placeholder="请输入"
|
:border-bottom="false"
|
>
|
</u-field>
|
</modalBg>
|
<!-- 库位号 -->
|
<modalBg ref="openLocation" :confirm="confirmLocation">
|
<u-field
|
v-model="registerInfo.locationNo"
|
label="库位号:"
|
placeholder="请输入"
|
:border-bottom="false"
|
>
|
</u-field>
|
</modalBg>
|
<!-- 盘点数量 -->
|
<modalBg ref="openPhysicalInventory" :confirm="confirmPhysicalInventory">
|
<u-field
|
v-model="registerInfo.qtyAvailable"
|
label="盘点数量:"
|
label-width="140"
|
placeholder="请输入"
|
:border-bottom="false"
|
>
|
</u-field>
|
</modalBg>
|
</view>
|
</view>
|
</template>
|
<script>
|
import modalBg from "@/components/modal/modal-bg.vue";
|
import scan from "@/components/scan/scan.vue";
|
import content_bg from "@/static/custom/packing/backBg.png";
|
export default {
|
components: {
|
scan,
|
modalBg,
|
},
|
data() {
|
return {
|
background: {
|
backgroundImage: `url(${content_bg})`,
|
backgroundAttachment: "fixed",
|
backgroundSize: "100% auto",
|
backgroundRepeat: "no-repeat",
|
},
|
labelStyle: {
|
fontSize: "32rpx",
|
whiteSpace: "nowrap",
|
},
|
registerInfo: {
|
invListNo: "",
|
warehouseId: "",
|
partNo: "",
|
ifsBatchNo: "",
|
locationNo: "",
|
qtyAvailable: "",
|
},
|
hasScanSnList: [],
|
delContent: null,
|
staffList: [],
|
submitList: {},
|
scanHandleList: {},
|
};
|
},
|
onLoad(option) {},
|
onShow() {
|
let that = this;
|
|
uni.$off("scan"); // 每次进来先 移除全局自定义事件监听器
|
|
uni.$on("scan", function (data) {
|
if (that.registerInfo.invListNo == "") {
|
uni.showToast({
|
title: "请先选择盘点报告号",
|
icon: "none",
|
});
|
return;
|
}
|
console.log("onscan");
|
//扫码成功后的回调,你可以写自己的逻辑代码在这里
|
console.log("扫码结果:", data.code);
|
if (data.code) {
|
let codeInfo = JSON.parse(data.code);
|
// if (codeInfo.BN) {
|
// 扫描报工单二维码
|
that.scanHandleList = codeInfo;
|
that.scanHandle(codeInfo);
|
// that.$forceUpdate();
|
// }
|
}
|
});
|
},
|
// onNavigationBarButtonTap() {
|
// this.goScan();
|
// },
|
onReady() {},
|
methods: {
|
//零件号
|
openPN() {
|
this.$refs.openPN.open();
|
},
|
// 弹框保存
|
confirmPN() {
|
console.log("保存", this.registerInfo.partNo);
|
// 请求接口,根据工单号查询其他信息并赋值
|
},
|
//批次号
|
openBatch() {
|
this.$refs.openBatch.open();
|
},
|
// 弹框保存
|
confirmBatch() {
|
console.log("保存", this.registerInfo.ifsBatchNo);
|
// 请求接口,根据工单号查询其他信息并赋值
|
},
|
//库位号
|
openLocation() {
|
this.$refs.openLocation.open();
|
},
|
// 弹框保存
|
confirmLocation() {
|
console.log("保存", this.registerInfo.locationNo);
|
// 请求接口,根据工单号查询其他信息并赋值
|
},
|
//盘点数量
|
openPhysicalInventory() {
|
this.$refs.openPhysicalInventory.open();
|
},
|
// 弹框保存
|
confirmPhysicalInventory() {
|
console.log("保存", this.registerInfo.qtyAvailable);
|
// this.registerInfo.qtyAvailable = Number(this.registerInfo.qtyAvailable);
|
// 请求接口,根据工单号查询其他信息并赋值
|
},
|
|
setNo(val) {
|
console.log("val", val);
|
this.registerInfo.invListNo = val.INV_LIST_NO;
|
this.registerInfo.warehouseId = val.WAREHOUSE_ID;
|
},
|
//盘点报告号
|
seaRchPersonnelNo() {
|
uni.navigateTo({
|
url: "/pages/wareHouse/inventory/orderList",
|
});
|
},
|
scanHandle(val) {
|
this.submitList = {};
|
const { PN, BN, NW } = val;
|
this.$u.api.shiftingParking
|
.selPartInfoPDA({ outBatchNo: BN })
|
.then((res) => {
|
console.log("res", res);
|
this.submitList = res.data;
|
// 检查是否已盘点
|
if (this.hasScanSnList && this.hasScanSnList.length > 0) {
|
// 查找是否已存在相同的 ifsBatchNo
|
const isAlreadyScanned = this.hasScanSnList.some(
|
(item) => item.ifsBatchNo === this.submitList.ifsBatchNo
|
);
|
|
if (isAlreadyScanned) {
|
uni.showModal({
|
title: "提示",
|
content: "当前库存已盘点,请勿重复盘点",
|
showCancel: false,
|
confirmText: "确定",
|
});
|
return;
|
}
|
}
|
this.registerInfo = {
|
...this.registerInfo,
|
partNo: this.submitList.partNo,
|
ifsBatchNo: this.submitList.ifsBatchNo,
|
// locationNo: this.registerInfo.locationNo,
|
qtyAvailable: this.submitList.qtyAvailable,
|
};
|
|
this.goSubmit();
|
})
|
.catch((err) => {
|
console.log("err", err);
|
uni.showModal({
|
title: "提示",
|
content: err.message || "网络异常,请重试",
|
showCancel: true,
|
success: function (res) {},
|
});
|
return;
|
});
|
},
|
getDifferentFields(obj1, obj2, mapping) {
|
const differences = {};
|
|
for (const [key1, mapRule] of Object.entries(mapping)) {
|
let value2;
|
|
if (typeof mapRule === "string") {
|
value2 = obj2[mapRule];
|
} else if (
|
mapRule &&
|
typeof mapRule === "object" &&
|
"fixed" in mapRule
|
) {
|
value2 = mapRule.fixed;
|
} else {
|
continue;
|
}
|
|
if (obj1[key1] !== value2) {
|
differences[key1] = {
|
value1: obj1[key1],
|
value2,
|
};
|
}
|
}
|
|
return differences;
|
},
|
// 点击提交按钮的事件处理函数
|
goSubmit() {
|
if (!this.registerInfo.invListNo) {
|
this.$u.toast("请选择盘点报告号");
|
return;
|
}
|
const diff = this.getDifferentFields(
|
this.registerInfo,
|
this.scanHandleList,
|
{
|
partNo: { fixed: this.scanHandleList.PN },
|
// qtyAvailable: { fixed: Number(this.scanHandleList.NW) },
|
ifsBatchNo: { fixed: this.scanHandleList.BN },
|
}
|
);
|
console.log("差异字段:", diff);
|
console.log("是否有差异:", Object.keys(diff).length > 0);
|
if (this.registerInfo.locationNo !== this.submitList.locationNo) {
|
uni.showModal({
|
title: "提示",
|
content: "扫描库位号与系统数据不一致",
|
showCancel: true,
|
success: function (res) {},
|
});
|
return;
|
}
|
if (Object.keys(diff).length > 0) {
|
if (diff.partNo) {
|
uni.showModal({
|
title: "提示",
|
content: "扫描零件号与系统数据不一致",
|
showCancel: true,
|
success: function (res) {},
|
});
|
return;
|
}
|
if (diff.ifsBatchNo) {
|
uni.showModal({
|
title: "提示",
|
content: "扫描批次号与系统数据不一致",
|
showCancel: true,
|
success: function (res) {},
|
});
|
return;
|
}
|
if (diff.qtyAvailable) {
|
uni.showModal({
|
title: "提示",
|
content: "扫描盘点数量与系统数据不一致",
|
showCancel: true,
|
success: function (res) {},
|
});
|
return;
|
}
|
}
|
uni.showLoading({
|
mask: true,
|
title: "提交中...",
|
});
|
console.log("提交的数据", this.submitList);
|
// 处理提交逻辑
|
this.$u.api.inventoryVerification
|
.erpInventorySubmit({
|
...this.submitList,
|
invListNo: this.registerInfo.invListNo,
|
})
|
.then((res) => {
|
// uni.hideLoading();
|
this.$u.toast("提交成功");
|
!this.hasScanSnList.some(
|
(item) => item.ifsBatchNo === this.registerInfo.ifsBatchNo
|
) && this.hasScanSnList.unshift(this.registerInfo);
|
// this.registerInfo = {};
|
})
|
.catch((err) => {
|
console.log("err", err);
|
// uni.hideLoading();
|
uni.showModal({
|
title: "提示",
|
content: err.message || "网络异常,请重试",
|
showCancel: true,
|
success: function (res) {},
|
});
|
});
|
},
|
},
|
};
|
</script>
|
<style lang="scss" scoped>
|
.transparent-border {
|
border: none;
|
}
|
.packing-registration-bg {
|
background-color: #f6f9ff;
|
background-image: url("~@/static/custom/packing/backBg.png");
|
padding: 0 20rpx;
|
background-attachment: fixed;
|
background-size: 100% auto;
|
background-repeat: no-repeat;
|
position: fixed;
|
top: 0;
|
bottom: 0;
|
width: 100%;
|
z-index: -1;
|
}
|
|
.packing-registration-param {
|
padding: 40rpx 30rpx 10rpx 30rpx;
|
|
.packing-registration-param-title {
|
display: flex;
|
flex-direction: row;
|
align-items: center;
|
margin-bottom: 30rpx;
|
|
.title-label {
|
margin-left: 14rpx;
|
font-size: 34rpx;
|
font-weight: bold;
|
color: #283e65;
|
}
|
}
|
|
.packing-registration-param-view {
|
height: 615rpx;
|
background-color: #fff;
|
border-radius: 10rpx;
|
padding: 0rpx 23rpx;
|
margin-bottom: 30rpx;
|
|
.packing-registration-param-item {
|
height: 90rpx;
|
border: 1px solid #adc8e4;
|
line-height: 90rpx;
|
display: flex;
|
justify-content: space-between;
|
border: none;
|
|
.packing-registration-param-item-left {
|
.item-one {
|
font-size: 30rpx;
|
color: #666666;
|
}
|
}
|
|
.packing-registration-param-item-right {
|
display: flex;
|
justify-content: space-between;
|
|
.item-one {
|
font-size: 30rpx;
|
color: #333333;
|
margin-right: 6rpx;
|
}
|
|
.item-two {
|
font-size: 30rpx;
|
color: #a6b4cc;
|
margin-right: 6rpx;
|
}
|
|
.item-three {
|
font-size: 30rpx;
|
color: #214ded;
|
margin-right: 6rpx;
|
}
|
}
|
}
|
|
.param-extra {
|
border-bottom: 1px solid #ededed;
|
}
|
}
|
}
|
|
.wrap .packing-registration-scroll-list {
|
height: calc(100vh - var(--window-top) - var(--window-bottom) - 930rpx);
|
width: 100%;
|
}
|
|
.packing-registration-scroll-list-group {
|
::v-deep .u-cell-item-box {
|
background-color: rgba(250, 252, 255, 0.36) !important;
|
padding: 0rpx 30rpx;
|
}
|
|
.content {
|
font-size: 12px;
|
background-color: #ffffff;
|
box-sizing: border-box;
|
border-radius: 10rpx;
|
margin: 0rpx 0rpx 16rpx;
|
padding: 20rpx 8rpx;
|
box-shadow: none;
|
display: flex;
|
align-items: center;
|
|
.content-header {
|
height: 90rpx;
|
display: flex;
|
align-items: center;
|
max-width: 300rpx;
|
|
.content-header-icon {
|
background-image: url("~@/static/custom/moveWareHouse/header_icon.png");
|
background-size: 100% auto;
|
background-repeat: no-repeat;
|
height: 28rpx;
|
width: 28rpx;
|
flex-shrink: 0;
|
}
|
|
.content-header-title {
|
flex: 1;
|
min-width: 0;
|
white-space: pre-wrap;
|
margin-left: 11rpx;
|
font-size: 20rpx;
|
font-weight: bold;
|
color: #626369;
|
word-wrap: break-word;
|
overflow-wrap: break-word;
|
}
|
}
|
|
.content-body {
|
flex: 1;
|
background-color: #ffffff;
|
border-radius: 10rpx;
|
padding: 0rpx 23rpx;
|
|
.row-list {
|
height: 60rpx;
|
display: flex;
|
flex-direction: row;
|
padding: 0px;
|
align-items: center;
|
}
|
|
.row-list ._label {
|
display: flex;
|
flex: 0.8;
|
color: #909399;
|
align-items: center;
|
|
._label-name {
|
margin-left: 11rpx;
|
font-size: 26rpx;
|
font-weight: 500;
|
color: #666666;
|
}
|
}
|
|
.row-list ._content {
|
flex: 1.5;
|
text-align: right;
|
color: #909399;
|
font-size: 24rpx;
|
}
|
|
.row-list .s1 {
|
color: #d35651;
|
}
|
}
|
}
|
}
|
|
.registration-form-footer {
|
display: flex;
|
margin-top: 10rpx;
|
margin-bottom: 10rpx;
|
margin-left: 20rpx;
|
margin-right: 20rpx;
|
padding-bottom: 14rpx;
|
|
.btn {
|
flex: 1;
|
margin: 10rpx;
|
background: #214ded;
|
box-shadow: 0rpx 6rpx 8rpx 0rpx rgba(4, 49, 212, 0.3);
|
font-weight: bold;
|
color: #fefefe;
|
font-family: PingFang SC;
|
}
|
}
|
</style>
|