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.

850 lines
23 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="4">
<u-button :disabled="isdisabled" @click="onSubmit" type="primary">103暂收</u-button>
</u-col>
<u-col :span="4">
<u-button :disabled="isDisabled105" @click="handelSubmit105" type="success">105过账</u-button>
</u-col>
<!-- 返回 -->
<u-col :span="4">
<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" />
<u-modal v-model="showStatus105" :content="contentStatus150" title="105过账失败"></u-modal>
</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';
import LjListRow from '@/components/lanju/lj-list-row/index.vue';
import ljPagination from '@/components/lanju/lj-pagination/index.vue';
interface OptionType {
label: string;
value: string;
}
@Component({
components: {
ljPagination,
LjListRow,
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;
isDisabled105 = false;
showStatus105 = false;
contentStatus150 = '';
qualityStatusCo = {
Y: '检验合格',
N: '检验不合格',
};
//
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() {
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;
});
}
/**
* 105过账按钮
* **/
async handelSubmit105() {
this.isDisabled105 = true;
const list = this.list;
let params: any = [];
if (list.length > 0) {
for (const item of list) {
if (!item.orderStatus || item.orderStatus === '0') {
(this.$refs.uToast as any).show({
title: '请先完成收货!',
type: 'default',
duration: 3000,
});
this.isDisabled105 = false;
return;
}
//待检、不合格不在手持机上过账
if (!item.qualityStatus || item.qualityStatus === 'N') {
this.contentStatus150 = '采购单号:' + item.procureCode + ',物料编码:' + removeLeadingZeros(item.materialCode) + '' + (this.qualityStatusCo[item.qualityStatus] || '未检验');
this.showStatus105 = true;
this.isDisabled105 = false;
return;
}
//rawOrderInId不为空
if (item.rawOrderInId) {
params.push({ id: item.rawOrderInId });
}
}
if (params.length > 0) {
//去重
params = params.filter((item: any, index: any, self: any) => self.findIndex((t: { [x: string]: any }) => t['id'] === item['id']) === index);
await this.model.sap105temporarilyCollected(params);
this.isDisabled105 = false;
if (this.model.sap105code + '' === '200') {
(this.$refs.uToast as any).show({
title: this.model.sap105msg,
type: 'primary',
duration: 6000,
});
}
await this.query();
} else {
this.isDisabled105 = false;
(this.$refs.uToast as any).show({
title: '无可过账数据',
type: 'default',
duration: 3000,
});
}
} else {
this.isDisabled105 = false;
(this.$refs.uToast as any).show({
title: '未选择数据',
type: 'default',
duration: 3000,
});
}
}
}
</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>