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">采购收货(PO)</view>
<view class="right"></view>
</view>
<u-form class="form" ref="form" label-width="180rpx">
<!-- 单号 -->
<view class="single">
<view class="single-left">
<view>采购单号:</view>
<u-search placeholder="请扫描" v-model="procureCode" @search="query" :show-action="false"></u-search>
</view>
<view class="single-right">
<u-button type="primary" @click="tidan">提单</u-button>
</view>
</view>
<!-- 订单 -->
<u-form-item label="物料编码">
<!-- <u-input :border="true" v-model="materialCode" placeholder="" @confirm="query" style="overflow: hidden" /> -->
<jPicker sureColor="#ff0000" @bindpicker="bookTypeChange" showKey="value" valKey="value" :val="aimWl.value" :options="materilist" />
</u-form-item>
<view class="creatshow">
<u-button class="buttonshow" type="primary" @click="generate">生成收货单号</u-button>
<u-input border placeholder="" class="inputshow" disabled v-model="receiptNoCode" />
</view>
</u-form>
<view class="matshow">
<view v-for="item in list" :key="item.id" @dblclick="onFormDoubleClick(item)">
<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.orderStatus == 0 ? '未收货' : item.orderStatus == 1 ? '正在收货' : '收货完成' }}</view>
</view>
<view 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.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 class="scroll">
<view v-for="item in receivedlist" :key="item.id" @dblclick="onFormDoubleClick(item)">
<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">已收货</view>
</view>
<view 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.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 class="bottom-bar">
<u-row class="button-bar">
<u-col :span="6">
<u-button type="error" @click="SignIn">到货登记</u-button>
</u-col>
<!-- 确定 -->
<u-col :span="6">
<u-button @click="onSubmit" type="primary">确定</u-button>
</u-col>
<!-- 返回 -->
</u-row>
</view>
<view>
<u-popup v-model="show" mode="center" width="580rpx" height="580rpx">
<view class="form3">
<view class="poupitem">
<view class="pouptitle">批次号:</view>
<u-input class="poupcontent" :clearable="false" v-model="form3.incomeBatchNo" placeholder="" style="overflow: hidden" />
</view>
<view class="poupitem">
<view class="pouptitle">数量:</view>
<u-input class="poupcontent" :clearable="false" v-model="form3.planNumber" placeholder="" style="overflow: hidden" />
</view>
<view class="poupitem">
<view class="pouptitle">收货方式:</view>
<jPicker sureColor="#ff0000" @bindpicker="bookTypeChangeway" showKey="lable" valKey="value" :val="bimWl.value" :options="waylist" />
<!-- <u-select mode="single-column" :list="waylist" @confirm="bookTypeChangeway"></u-select> -->
</view>
<view v-show="showshow">
<view v-show="!selectway" class="poupitem">
<view class="pouptitle">物料号:</view>
<u-input disabled class="poupcontent" :clearable="false" v-model="aimWl.value" placeholder="" style="overflow: hidden" />
</view>
<view v-show="selectway" class="poupitem">
<view class="pouptitle">托盘号:</view>
<u-input class="poupcontent" :clearable="false" v-model="form3.sn" placeholder="" style="overflow: hidden" />
</view>
</view>
<view class="poupitem">
<view class="pouptitle">收货仓库:</view>
<jPicker sureColor="#ff0000" :moren="moren" @bindpicker="selectProductlocCode" showKey="label" valKey="value" :val="productCodeTypeList.value" :options="whList" />
</view>
</view>
<view class="poupbutton" style="margin-top: 10px">
<div>
<u-button style="width: 100px; height: 35px" @click="onOk" size="mini" type="primary">确定</u-button>
</div>
<div>
<u-button style="width: 100px; height: 35px" size="mini" type="error" @click="nopoup">取消</u-button>
</div>
</view>
</u-popup>
<view v-if="show" class="mask"></view>
</view>
<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 dayjs from 'dayjs';
interface OptionType {
label: string;
value: string;
}
@Component({
components: {
jPicker,
},
})
export default class receivePO extends BasePage {
model = model;
list: any = [];
receivedlist: any = [];
// receivedlist=[{
// orderStatus:'1',
// procureCode:'111',
// materialCode:'ddewcc',
// materialDesc:'ewdcxw',
// siteCode:'1061',
// planNumber:'1',
// realityNumber:'1'
// },{
// orderStatus:'1',
// procureCode:'111',
// materialCode:'ddewcc',
// materialDesc:'ewdcxw',
// siteCode:'1061',
// planNumber:'1',
// realityNumber:'1'
// },
// {
// orderStatus:'1',
// procureCode:'111',
// materialCode:'ddewcc',
// materialDesc:'ewdcxw',
// siteCode:'1061',
// planNumber:'1',
// realityNumber:'1'
// }
// ]
whList: any = [];
show = false;
form3: any = {};
aimWl = {} as OptionType;
materilist = [];
productCodeTypeList: any = {};
moren = '选择仓库';
waylist = [
{
value: '0',
lable: '',
},
{
value: '1',
lable: '',
},
];
bimWl = {} as OptionType;
selectway: boolean = null;
showshow = false;
// remove: any = {};
// async onReady() {
// await this.model.queryLocation();
// this.remove = this.model.WlList[0];
// }
// selectItem(e: any) {
// this.remove = e.pickerName;
// }
procureCode: 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 = '';
async onReady() {
await this.model.Stashlist();
this.whList = model.DictTypeList;
//this.remove = this.model.WlList[0];
}
//
generate() {
const today = dayjs().format('YYYYMMDDHHmmss');
this.receiptNoCode = `sn${today}`;
}
//
onPass(item) {
this.clickitem = item;
this.show = true;
this.form3 = {};
this.productCodeTypeList = {};
this.showshow = false;
this.bimWl = {} as OptionType;
this.selectway = null;
}
nopoup() {
this.show = false;
this.form3 = {};
this.productCodeTypeList = {};
}
//
async onOk() {
console.log(this.form3);
if (this.form3.incomeBatchNo == '' || this.form3.incomeBatchNo == undefined) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
if (this.form3.planNumber == '' || this.form3.planNumber == undefined) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
if (this.form3.sn == '' && this.selectway == true) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
if (this.productCodeTypeList.value == '' || this.productCodeTypeList.value == undefined) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
if (this.receiptNoCode == '' || this.receiptNoCode == undefined) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
console.log('1234567');
let query = this.clickitem;
// query.applyList = this.Sparepartlist;
query.workStatus = this.form3.workStatus;
if (this.selectway == true) {
query.sn = this.form3.sn;
} else {
query.sn = dayjs().format('YYYYMMDDHHmmss');
}
query.planNumber = this.form3.planNumber;
query.whCode = this.productCodeTypeList.warehouseCode;
query.factoryCode = session.FactoryCode;
query.incomeBatchNo = this.form3.incomeBatchNo;
query.receiptNoCode = this.receiptNoCode;
await this.model.PurchaseOrderdeliPda(query);
console.log(this.model.SubmitCode);
if (this.model.SubmitCode.code == 200) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
this.show = false;
this.query();
// this.ProcureOrderAlready();
} else {
(this.$refs.uToast as any).show({
title: '',
type: this.model.SubmitCode.msg,
});
}
}
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)),
});
}
//查询货单关联采购单信息
async query() {
console.log(session);
if (this.procureCode == '' || this.procureCode.length == 0) {
(this.$refs.uToast as any).show({
title: 'rfid',
type: 'default',
});
return;
}
this.aimWl = {} as OptionType;
let query = {
procureCode: this.procureCode,
materialCode: this.aimWl.value ? this.aimWl.value : '',
//this.materialCode,
factoryCode: session.FactoryCode,
};
await this.model.PurchaseOrderPda(query);
this.materilist = model.orderNoItemList;
this.list = [];
if (this.materilist.length) {
this.aimWl = this.materilist[0];
this.list.push(this.materilist[0]);
} else {
this.aimWl = {} as OptionType;
}
this.ProcureOrderAlready();
//this.list = model.orderNoItemList;
}
//
async tidan() {
if (this.procureCode == '' || this.procureCode.length == 0) {
(this.$refs.uToast as any).show({
title: 'rfid',
type: 'default',
});
return;
}
let item = {
procureCode: this.procureCode,
factoryCode: session.FactoryCode,
};
await this.model.sapPurchaseOrderSync(item);
if (model.sapPurchasecode == '200') {
let query = {
procureCode: this.procureCode,
materialCode: this.aimWl.value ? this.aimWl.value : '',
factoryCode: session.FactoryCode,
};
await this.model.PurchaseOrderPda(query);
this.materilist = model.orderNoItemList;
this.aimWl = this.materilist[0];
this.list = this.materilist[0];
}
}
//
async ProcureOrderAlready() {
let item = {
procureCode: this.procureCode,
factoryCode: session.FactoryCode,
};
await this.model.selectOdsProcureOrderAlready(item);
if (model.Alreadycode == '200') {
this.receivedlist = model.ProcureOrderAlreadylist;
}
}
histroyItem: any = {};
barcode: any = '';
async selectProductlocCode(e: any) {
console.log(e.pickerName.warehouseName);
this.productCodeTypeList = e.pickerName;
// let params = {
// factoryCode: session.FactoryCode,
// equipmentTypeCode: this.productCodeTypeList.value,
// };
// await this.model.getAllEquipmentsle(params);
// this.whList = model.DictTypeList;
}
//
async onSubmit() {
if (this.procureCode == '' || this.procureCode.length == 0) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
if (this.receiptNoCode == '' || this.receiptNoCode.length == 0) {
(this.$refs.uToast as any).show({
title: '',
type: 'default',
});
return;
}
let params = {
factoryCode: session.FactoryCode,
procureCode: this.procureCode,
receiptNoCode: this.receiptNoCode,
};
await this.model.OnSubmit(params);
if (this.model.submitcode == '200') {
(this.$refs.uToast as any).show({
title: '',
type: 'success',
});
await this.query();
this.receiptNoCode = '';
}
}
bookTypeChange(e: any) {
this.aimWl = e.pickerName;
this.list = [];
this.materilist.forEach((item) => {
if (e.pickerName.value == item.materialCode) {
this.list.push(item);
}
});
//
//this.queryinformation();
//this.getlist();
}
bookTypeChangeway(e) {
this.showshow = true;
this.bimWl.value = e.pickerName.value;
console.log(e);
if (e.pickerName.value == '0') {
this.selectway = false;
} else {
this.selectway = true;
}
}
async SignIn() {
if (this.procureCode == '' || this.procureCode.length == 0) {
(this.$refs.uToast as any).show({
title: '请输入采购单号',
type: 'default',
});
return;
}
let params = {
factoryCode: session.FactoryCode,
procureCode: this.procureCode,
};
await this.model.ArrivalRegistration(params);
if (this.model.Arrivalcode == '200') {
(this.$refs.uToast as any).show({
title: '成功',
type: 'success',
});
}
}
}
</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: 30rpx 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: 80%;
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;
}
.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 {
// margin-top: 120rpx;
// padding-left: 30rpx;
// padding-right: 16rpx;
// margin-bottom: 20rpx;
height: 370rpx;
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);
}
}
}
.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>