You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

772 lines
21 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="page-product-receipt">
<view class="header" :style="{ backgroundColor: `rgba(250, 53, 52, ${scrollTop / 100})` }">
<view class="left">
<u-icon class="icon" name="arrow-left" @click="uni.navigateBack({})" />
</view>
<view class="title">采购收货(SRM)</view>
<view class="right"></view>
</view>
<view>
<u-form class="form" ref="form" label-width="180rpx">
<!-- 送货单 -->
<view class="single">
<view class="single-left">
<view>送货单号:</view>
<u-search placeholder="请扫描" :focus="oncefouces" v-model="userDefined5" @search="query" :show-action="false"></u-search>
</view>
<!-- <view class="single-right">
<u-button type="primary" @click="tidandelivery">提单</u-button>
</view> -->
</view>
<u-form-item label="物料编码">
<jPicker sureColor="#ff0000" @bindpicker="selectProductCodeType" showKey="value" valKey="value" :val="bimWl.value" :options="reducelist" />
</u-form-item>
<u-form-item label="物料描述">
<u-input border height="50" placeholder="" disabled v-model="bimWl.label" />
</u-form-item>
</u-form>
<view class="matshow">
<view v-for="item in list" :key="item.id" @dblclick="onFormDoubleClick(item)">
<u-form :style="{ marginTop: '10rpx', backgroundColor: item.planNumber <= item.realityNumber ? '#4eea9b59' : '#ffffff' }" class="form2">
<view class="list">
<view class="righttitle">
<!-- 0是未收货,1是正在收货,2是收货完成 -->
<view class="boder-icon-top zhuangtai" data-state="0">{{ item.orderStatus == 0 ? '未收货' : item.orderStatus == 1 ? '正在收货' : '收货完成' }}</view>
</view>
<!-- <view v-if="item.userDefined5" class="row-list">
<view class="list-item"> 送货单号: </view>
<view> {{ item.userDefined5 }} </view>
</view> -->
<view v-if="item.procureCode" class="row-list">
<view class="list-item"> 采购单号: </view>
<view> {{ item.procureCode }} </view>
</view>
<!-- <view class="row-list">
<view class="list-item"> 行项目: </view>
<view> {{ item.userDefined3 }} </view>
</view> -->
<view class="row-list">
<view class="list-item"> 物料编码: </view>
<view> {{ item.handlematerialCode }}</view>
</view>
<!-- <view class="row-list">
<view class="list-item"> 物料描述: </view>
<view>{{ item.materialDesc }}</view>
</view> -->
<!-- <view class="row-list">
<view class="list-item"> 工厂号: </view>
<view>{{ item.siteCode }}</view>
</view> -->
<view class="row-list">
<view class="list-item"> 应收/实收: </view>
<view>{{ item.planNumber }}/{{ item.realityNumber }}</view>
</view>
<!-- <view a:if="true" class="righttitle">
<view @click.stop="onPass(item)" class="boder-icon-rigth"> 收货 </view>
</view> -->
</view>
</u-form>
</view>
</view>
</view>
<view class="scroll">
<view @click="editornumber(item)" v-for="item in filterReceivedList" :key="item.id">
<u-form style="margin-top: 10rpx" class="form2">
<view class="list">
<view class="righttitle">
<!-- 0是未收货,1是正在收货,2是收货完成 -->
<view class="boder-icon-top zhuangtai" data-state="0">{{ item.userDefined10 == '0' ? '未收货' : item.userDefined10 == '1' ? '完全收货' : '部分收货' }}</view>
</view>
<view v-if="item.userDefined5" class="row-list">
<view class="list-item"> 送货单号: </view>
<view> {{ item.userDefined5 }} </view>
</view>
<view v-if="item.procureCode" class="row-list">
<view class="list-item"> 采购单号: </view>
<view> {{ item.procureCode }} </view>
</view>
<view class="row-list">
<view class="list-item"> 物料编码: </view>
<view> {{ item.materialCode }}</view>
</view>
<view class="row-list">
<view class="list-item"> 物料描述: </view>
<view>{{ item.materialDesc }}</view>
</view>
<view class="row-list">
<view class="list-item"> 标志卡: </view>
<view>{{ item.userDefined1 }}</view>
</view>
<view class="row-list">
<view class="list-item"> 供应商: </view>
<view> {{ item.supplierName }} </view>
</view>
<view class="row-list">
<view class="list-item"> 打印顺序: </view>
<view>{{ item.userDefined9 }}</view>
</view>
<view class="row-list">
<view style="display: flex; flex-direction: row">
<view class="list-item">应收数量: </view>
<view>{{ item.planNumber }}</view>
</view>
<view style="display: flex; flex-direction: row">
<view class="list-item">已收数量: </view>
<view>{{ item.realityNumber }}</view>
</view>
</view>
<view class="row-list">
<view class="list-item">操作数量: </view>
<view>{{ item.temNumber ? item.temNumber : 0 }}</view>
</view>
<view class="row-list">
<view class="list-item">仓库: </view>
<view>{{ item.whCode }}</view>
</view>
<view class="row-list">
<view class="list-item">库区: </view>
<view>{{ item.waCode }}</view>
</view>
</view>
</u-form>
</view>
</view>
<view class="bottom-bar">
<u-row class="button-bar">
<!-- 确定 -->
<u-col :span="6">
<u-button :disabled="isdisabled" @click="onSubmit" type="primary">确认收货</u-button>
</u-col>
<!-- 返回 -->
<u-col :span="6">
<u-button type="error" @click="uni.navigateBack()"></u-button>
</u-col>
</u-row>
</view>
<u-popup height="350" width="600" v-model="openeditornumber" mode="center" :closeable="true" @close="!openeditornumber">
<u-form style="padding: 40rpx">
<u-form-item label-width="150" label="操作数量"><u-input :border="true" v-model="temNumber" /></u-form-item>
</u-form>
<u-button @click="submiteditor">操作</u-button>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script lang="ts">
import { Component } from 'vue-property-decorator';
import { BasePage } from '@/components/base/page';
import jPicker from '@/components/J-Picker/jPicker.vue';
import model from './model';
import { session } from '@/store/modules/session';
import { removeLeadingZeros } from '@/utils/tool';
interface OptionType {
label: string;
value: string;
}
@Component({
components: {
jPicker,
},
})
export default class receiveSRM extends BasePage {
model = model;
list: any = [];
realityaddNumber = 0;
receivedlist: any = [];
filterReceivedList: any = [];
operationNumber = 0;
nooperationNumber = 0;
czNumber = '';
Idcard = '';
areaCode = '';
whList: any = [];
waCodeList: any = {};
show = false;
singshow = false;
form3: any = {};
aimWl = {} as OptionType;
prodobj: any = {} as OptionType;
materilist = [];
prodlist: any = [];
productCodeTypeList: any = {};
waCodeTypeList: any = {};
moren = '选择仓库';
moren1 = '选择库区';
reducelist: any = [];
oldprodlist: any = [];
zancunmatcode: any = {};
waylist = [
// {
// value: '0',
// lable: '',
// },
{
value: '1',
lable: '',
},
];
bimWl: any = {};
selectway = true;
showshow = true;
procureCode: any = '';
userDefined5: any = '';
materialCode: any = '';
border = true;
height = 100;
autoHeight = true;
imgList: any = [];
imgUrlList: any = [];
isqualified = [
{
label: '',
value: '1',
},
{
label: '',
value: '0',
},
];
clickitem: any = '';
productCodeList: any = {};
receiptNoCode = '';
oncefouces = true;
twofouces = false;
locfouces = false;
openeditornumber = false;
temNumber = '';
editoritem: any = {};
isdisabled = false;
//
async onFormDoubleClick(item) {
console.log('', item);
//await this.model.OnSubmit(item.id);
// uni.navigateTo({
// url: `/pages/equipment/Upkeep/repairing?listitem=` + encodeURIComponent(JSON.stringify(item)),
// });
this.uni.navigateTo({
url: this.page.wms.ReceivePODetail + '?listitem=' + encodeURIComponent(JSON.stringify(item)),
});
}
uniqueArray(arr) {
return arr.reduce((accumulator, current) => {
if (!accumulator.some((item) => item.materialCode === current.materialCode)) {
accumulator.push(current);
}
return accumulator;
}, []);
}
//查询货单关联采购单信息
async query() {
console.log(session);
if (this.userDefined5 == '' || this.userDefined5.length == 0) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
this.prodobj = {} as OptionType;
this.aimWl = {} as OptionType;
let query = {
materialCode: this.aimWl.value ? this.aimWl.value : '',
userDefined5: this.userDefined5,
//this.materialCode,
factoryCode: session.FactoryCode,
};
await this.model.PurchaseOrderPda(query);
let prodlist = model.orderNoItemList;
if (prodlist.length > 0) {
this.isdisabled = false;
this.reducelist = this.uniqueArray(prodlist);
this.reducelist.forEach((item) => {
item.value = item.materialCode.slice(item.materialCode.search(/[1-9]/));
item.label = item.materialDesc;
});
console.log('this.reducelist', this.reducelist);
this.bimWl = Object.keys(this.zancunmatcode).length ? this.zancunmatcode : this.reducelist[0];
this.oldprodlist = prodlist.map((item) => {
let newmaterialCode = item.materialCode.slice(item.materialCode.search(/[1-9]/));
return {
...item,
handlematerialCode: newmaterialCode,
realityaddNumber: item.realityNumber,
};
});
this.list = this.oldprodlist.filter((item) => {
return item.handlematerialCode == this.bimWl.value;
});
//查询标志卡
this.querycard();
} else {
(this.$refs.uToast as any).show({
title: '请去到货登记!',
type: 'default',
duration: 3000,
});
this.isdisabled = true;
}
}
//查询标志卡
async querycard() {
let params = {
userDefined5: this.userDefined5,
factoryCode: session.FactoryCode,
};
await this.model.selectCardList(params);
if (this.model.rfidreturncode == '200') {
this.receivedlist = this.model.rfiddata;
this.filterReceivedList = this.handelFilterReceivedList(this.model.rfiddata);
}
}
editornumber(item) {
this.openeditornumber = true;
this.editoritem = item;
}
async submiteditor() {
if (parseFloat(this.editoritem.realityNumber) + parseFloat(this.temNumber) > parseFloat(this.editoritem.planNumber)) {
(this.$refs.uToast as any).show({
title: '操作数量有误',
type: 'default',
});
return;
} else {
let params = {
userDefined1: this.editoritem.userDefined1,
temNumber: this.temNumber,
factoryCode: session.FactoryCode,
};
await this.model.upbatCardXNew(params);
if (this.model.editorcode == 200) {
(this.$refs.uToast as any).show({
title: '操作成功',
type: 'default',
});
this.openeditornumber = false;
this.temNumber = '';
this.querycard();
}
}
}
selectProductCodeType(e) {
console.log(e);
this.bimWl = e.pickerName;
this.filterReceivedList = this.handelFilterReceivedList(this.receivedlist);
this.list = this.oldprodlist.filter((item) => {
return item.handlematerialCode == this.bimWl.value;
});
}
//送货单提单
async tidandelivery() {
if (this.userDefined5 == '' || this.userDefined5.length == 0) {
(this.$refs.uToast as any).show({
title: '请输入送货单',
type: 'default',
});
return;
}
let item = {
userDefined5: this.userDefined5,
factoryCode: session.FactoryCode,
createBy: session.loginName,
};
await this.model.getDeliveryNoteDetail(item);
if (model.deliverycode == '200') {
(this.$refs.uToast as any).show({
title: '提单成功',
type: 'success',
});
this.query();
}
}
//完成送货单
async onSubmit() {
let paramsList = {
userDefined5: this.userDefined5,
factoryCode: session.FactoryCode,
};
this.isdisabled = true;
//console.log('提交数据----',paramsList);
await this.model.OnSubmit(paramsList);
this.isdisabled = false;
if (this.model.submitcode == '200') {
(this.$refs.uToast as any).show({
title: model.submitmsg,
type: 'primary',
duration: 6000,
});
this.zancunmatcode = this.bimWl;
//this.receivedlist = [];
this.list = [];
this.query();
}
}
handelFilterReceivedList(list: any) {
return list.filter((item) => {
return removeLeadingZeros(item.materialCode) == this.bimWl.value;
});
}
}
</script>
<style lang="scss" scoped>
.page-product-receipt {
background: #f2f2f2 linear-gradient(0deg, #f2f2f2 0%, #f8262c 51%, #d9001b 100%) no-repeat;
background-size: 100% 600rpx;
padding: 118rpx 30rpx 162rpx;
min-height: 100%;
.header {
position: fixed;
top: 0rpx;
left: 0;
right: 0;
z-index: 99;
display: flex;
height: 120rpx;
line-height: 88rpx;
color: #fff;
font-size: 34rpx;
font-weight: 500;
text-align: center;
padding: 45rpx 0rpx 0rpx;
.title {
flex: 3;
}
.left,
.right {
flex: 1;
}
.icon {
display: flex;
justify-content: center;
align-items: center;
width: 88rpx;
height: 88rpx;
}
}
.form {
background-color: #fff;
padding: 20rpx;
border-radius: 10rpx;
box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
.u-form-item {
padding: 10rpx 0;
line-height: 35rpx;
.Transfer {
width: 280rpx;
height: 64rpx;
background: rgb(242, 242, 242);
border-radius: 110rpx;
}
}
.single {
width: 100%;
height: 100rpx;
display: flex;
.single-left {
width: 90%;
height: 100%;
display: flex;
view {
width: 142rpx;
height: 100%;
line-height: 100rpx;
}
}
.single-right {
button {
margin-top: 15rpx;
width: 140rpx;
height: 70rpx;
background-color: #fa3534;
}
}
}
.row {
display: flex;
flex-direction: row;
justify-content: space-around;
flex: 1;
}
.creatshow {
display: flex;
margin-top: 5px;
.buttonshow {
flex: 1;
height: 60rpx;
}
.inputshow {
flex: 4;
//border: 1px solid #9f9a9a8f;
border-radius: 5px;
margin-left: 4px;
}
}
}
.matshow {
// margin-top: 120rpx;
// padding-left: 30rpx;
// padding-right: 16rpx;
// margin-bottom: 20rpx;
// overflow: scroll;
// padding-top: 20rpx;
.form2 {
background-color: #fff;
padding: 0rpx 25rpx 25rpx;
border-radius: 10rpx;
box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
color: #292c32;
.row-list {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.righttitle {
display: flex;
justify-content: flex-end;
.boder-icon-rigth {
border: 1rpx solid #fa3534;
width: 130rpx;
text-align: center;
background: #fa3534;
color: #ffffff;
margin-top: 10px;
}
.zhuangtai {
background: #a7a0a04a;
width: 224rpx;
margin-right: -25rpx;
border: 2rpx solid #a7a0a04a;
border-radius: 12rpx;
text-align: center;
margin-bottom: 10rpx;
}
.zhuangtai[data-state='1'] {
color: green;
}
.zhuangtai[data-state='0'] {
color: blue;
}
}
}
}
.scroll {
height: 590rpx;
overflow: scroll;
// padding-top: 20rpx;
.form2 {
background-color: #fff;
padding: 0rpx 25rpx 25rpx;
border-radius: 10rpx;
box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
color: #8d8989;
.row-list {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.righttitle {
display: flex;
justify-content: flex-end;
.boder-icon-rigth {
border: 1rpx solid #fa3534;
width: 130rpx;
text-align: center;
background: #fa3534;
color: #ffffff;
margin-top: 10px;
}
.zhuangtai {
background: #a7a0a04a;
width: 224rpx;
margin-right: -25rpx;
border: 2rpx solid #a7a0a04a;
border-radius: 12rpx;
text-align: center;
margin-bottom: 10rpx;
}
.zhuangtai[data-state='1'] {
color: green;
}
.zhuangtai[data-state='0'] {
color: blue;
}
}
}
}
.bottom-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 99;
background: #ffffff;
box-shadow: 0 1rpx 20rpx 0 rgba(128, 128, 128, 0.2);
padding: 20rpx;
}
.button-bar {
}
.photoList {
display: flex;
padding-top: 12rpx;
.chooseBtn {
width: 202rpx;
height: 202rpx;
background: #fafafa;
border-radius: 12rpx;
border: 2rpx dashed #e2e2e2;
display: flex;
justify-content: center;
align-items: center;
.inner {
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.desc {
font-size: 28rpx;
font-weight: 400;
color: #24252a;
line-height: 40rpx;
}
.img {
width: 50rpx;
height: 50rpx;
margin-bottom: 6rpx;
}
}
.photoBox {
width: 202rpx;
height: 202rpx;
background: #fafafa;
border-radius: 12rpx;
position: relative;
.closeBtn {
position: absolute;
top: -12rpx;
right: -12rpx;
z-index: 2;
width: 36rpx;
height: 36rpx;
.img {
width: 36rpx;
height: 36rpx;
}
}
.img {
width: 202rpx;
height: 202rpx;
border-radius: 12rpx;
}
}
.itemBox {
flex: 0 0 202rpx;
margin-right: 20rpx;
&:last-child {
margin-right: 0;
}
}
// /deep/ .remarksBox textarea {
// font-size: 24rpx;
// }
}
.form3 {
padding: 20rpx;
//border-radius: 10rpx;
//box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
.poupitem {
display: flex;
flex-direction: row;
justify-content: space-around;
margin: 20rpx;
.pouptitle {
min-width: 30%;
white-space: nowrap;
}
.poupcontent {
border: 1px solid rgba(128, 128, 128, 0.2);
}
}
}
.form4 {
padding: 20rpx;
//border-radius: 10rpx;
//box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
.poupitem {
display: flex;
flex-direction: row;
justify-content: space-around;
margin: 20rpx;
.pouptitle {
width: 40%;
white-space: nowrap;
}
.poupcontent {
border: 1px solid rgba(128, 128, 128, 0.2);
}
}
}
.poupbutton {
display: flex;
justify-content: space-around;
}
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5); /* 半透明的黑色背景 */
z-index: 9999; /* 确保遮罩层在最上层 */
}
}
</style>