You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
518 lines
15 KiB
518 lines
15 KiB
<template>
|
|
<view>
|
|
<view class="goodsNumber">
|
|
<span class="goodsNumberCode">商品条码</span>
|
|
<u-input v-model="barCode" border placeholder="请输入或扫描商品条码" @input="searchByGoodNo"></u-input>
|
|
</view>
|
|
<view v-if="data">
|
|
<view class="goodsInfo">
|
|
<view class="goodsInfoItem">
|
|
<span class="goodsItemLabel">单据编号</span>
|
|
<span class="goodsItemValue">{{data.orderNo}}</span>
|
|
</view>
|
|
<view class="itemsContend">
|
|
<view class="items">
|
|
<span class="itemsLabel">业主名称</span>
|
|
<span class="itemsValue">{{data.consignorName}}</span>
|
|
</view>
|
|
<view class="items">
|
|
<span class="itemsLabel">供货单位</span>
|
|
<span class="itemsValue">{{data.companyName}}</span>
|
|
</view>
|
|
</view>
|
|
<view class="itemsContend">
|
|
<view class="items">
|
|
<span class="itemsLabel">待收品规</span>
|
|
<span class="itemsValue">{{data.specificationsQty}}</span>
|
|
</view>
|
|
<view class="items">
|
|
<span class="itemsLabel">待收条目</span>
|
|
<span class="itemsValue">{{data.itemQty}}</span>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">商品编号:</span>
|
|
<span class="value">{{data.businInOrderDVo.bgGoodNo || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">商品名称:</span>
|
|
<span class="value">{{data.businInOrderDVo.bgGoodName || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">规格:</span>
|
|
<span class="value">{{data.businInOrderDVo.bgSpecifications || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">件装量:</span>
|
|
<u-input v-model="dataForm.packageQty" border placeholder="请输入件装量" @click="choosePackage" disabled>
|
|
</u-input>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">单 位:</span>
|
|
<span class="value">{{ transUnit(data.businInOrderDVo.bpUnit) || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">厂 家:</span>
|
|
<span class="value">{{data.businInOrderDVo.bpFactory || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">产 地:</span>
|
|
<span class="value">{{data.businInOrderDVo.bpWaster || '-'}}</span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">未收数量:</span>
|
|
<span class="itemsValue" v-if="data">{{data.businInOrderDVo.ableQty}}</span>
|
|
<span class="itemsValue" v-else></span>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">件 数:</span>
|
|
<u-input v-model="dataForm.actualCaseQty" border placeholder="请输入件数" @input="sumActualQty"></u-input>
|
|
</view>
|
|
<!--
|
|
<view class="titleValue">
|
|
<span class="title">零散数:</span>
|
|
<u-input v-model="dataForm.actualPieceQty" border placeholder="请输入零散数" @input="changePiece"></u-input>
|
|
</view> -->
|
|
<view class="titleValue">
|
|
<span class="title">收货数量:</span>
|
|
<u-input v-model="dataForm.actualQty" border placeholder="请输入收货数量" disabled></u-input>
|
|
</view>
|
|
<!-- <view class="titleValue">
|
|
<span class="title">批 号:</span>
|
|
<u-input v-model="dataForm.batchNo" border placeholder="请输入批号"></u-input>
|
|
</view> -->
|
|
<!-- <view class="titleValue">
|
|
<span class="title">生产日期:</span>
|
|
<span @click="choosedStartDate">{{ dataForm.productionDate }}</span>
|
|
<u-calendar v-model="starttime" max-date="2050-12-31" :mode="'date'" @change="changeProduct">
|
|
</u-calendar>
|
|
</view> -->
|
|
<!-- <view class="titleValue">
|
|
<span class="title">有效期至:</span>
|
|
<span @click="choosedDate">{{ dataForm.expiredDate }}</span>
|
|
<u-calendar v-model="endtime" max-date="2050-12-31" :mode="'date'" @change="changeExpire">
|
|
</u-calendar>
|
|
</view> -->
|
|
<!-- <view class="titleValue">
|
|
<span class="title">库别:</span>
|
|
<u-input v-model="storageName" type="select" placeholder="请选择库别" class="u-input"
|
|
placeholder-style="color:#000000" @click="kube = true" />
|
|
<u-select v-model="kube" :list="storageList" @confirm="confirmKube"></u-select>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">收货结论:</span>
|
|
<u-input v-model="receivingStatusValue" type="select" placeholder="请选择收货结论" class="u-input"
|
|
placeholder-style="color:#000000" @click="receonclusion = true" />
|
|
<u-select v-model="receonclusion" :list="recelist" @confirm="confirmClusion"></u-select>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">处理原因:</span>
|
|
<u-input v-model="reasonValue" type="select" placeholder="请选择处理原因" class="u-input"
|
|
placeholder-style="color:#000000" @click="resust = true" />
|
|
<u-select v-model="resust" :list="resustlist" @confirm="confirmResult"></u-select>
|
|
</view>
|
|
<view class="titleValue">
|
|
<span class="title">容器:</span>
|
|
<u-input v-model="dataForm.containerCode" border placeholder="请输入或扫描容器"></u-input>
|
|
</view> -->
|
|
<view class="footer">
|
|
<u-button type="primary" @click="confirmSave">确认收货</u-button>
|
|
</view>
|
|
</view>
|
|
<u-modal v-model="showNearFuture" :show-cancel-button="true" :mask-close-able="true" content="该商品为近效期商品,请确认是否继续收货">
|
|
|
|
</u-modal>
|
|
<u-modal v-model="showOverdue" :show-cancel-button="true" :mask-close-able="true" content="该商品已过期,请确认是否继续收货">
|
|
|
|
</u-modal>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
showNearFuture: false,
|
|
showOverdue: false,
|
|
barCode: '',
|
|
receivingStatusValue: '',
|
|
reasonValue: '',
|
|
dataForm: {
|
|
packageQty: 0, //件装量
|
|
actualQty: 0, //收货数量
|
|
actualCaseQty: 0, //整件数量
|
|
batchNo: "", //批号
|
|
actualPieceQty: 0, //零散数
|
|
containerCode: "", //容器
|
|
productionDate: "请选择生产日期",
|
|
expiredDate: "请选择有效期",
|
|
storageId: null, //库别id
|
|
reason: "", //处理原因
|
|
receivingStatus: "", //收货结论
|
|
},
|
|
goodId: "",
|
|
storageName: "", //库别名称
|
|
resust: false,
|
|
receonclusion: false,
|
|
kube: false,
|
|
starttime: false,
|
|
endtime: false,
|
|
data: {
|
|
businInOrderDVo: {
|
|
ableQty: '',
|
|
}
|
|
}, //数据
|
|
test: "",
|
|
storageList: [], //库别下拉
|
|
stockBasic: "", //库存基础信息
|
|
dicOptions: [],
|
|
packages: "", //包装数量
|
|
recelist: [],
|
|
resustlist: [],
|
|
sid: '',
|
|
detailId: '',
|
|
toDay: null,
|
|
dicOptions: []
|
|
};
|
|
},
|
|
onLoad: function(option) {
|
|
if (JSON.stringify(option) !== "{}") {
|
|
if (option.packageQty !== null && option.packageQty !== undefined) {
|
|
this.dataForm.packageQty = option.packageQty;
|
|
} else {
|
|
this.$u.vuex("vuex_sid", option.sid); //汇总id
|
|
this.$u.vuex("vuex_detailId", option.detailId); //明细id
|
|
}
|
|
}
|
|
this.sid = option?.sid
|
|
this.detailId = option?.detailId
|
|
if (option.packageId) {
|
|
this.dataForm.packageId = option.packageId
|
|
}
|
|
this.loadList();
|
|
this.loadStorageList(); //加载库别列表
|
|
this.getDic(); //获取字典
|
|
// 收货结论
|
|
this.getByDicReceivingStatus()
|
|
// 处理原因
|
|
this.getByDicAcceptanceReason()
|
|
|
|
},
|
|
methods: {
|
|
getDays(strDateStart, strDateEnd) {
|
|
var strSeparator = "-";
|
|
//日期分隔符
|
|
var oDate1; var oDate2;
|
|
var iDays;
|
|
oDate1 = strDateStart.split(strSeparator);
|
|
oDate2 = strDateEnd.split(strSeparator);
|
|
var strDateS = new Date(oDate1[0], oDate1[1] - 1, oDate1[2]);
|
|
var strDateE = new Date(oDate2[0], oDate2[1] - 1, oDate2[2]);
|
|
iDays = parseInt(Math.abs(strDateS - strDateE) / 1000 / 60 / 60 / 24)
|
|
//把相差的毫秒数转换为天数
|
|
return iDays;
|
|
},
|
|
//收货结论
|
|
getByDicReceivingStatus() {
|
|
this.$u.api.getByDicReceivingStatus().then(res => {
|
|
if (res.code === 200) {
|
|
this.recelist = res.data.map((item) => ({
|
|
label: item.dictLabel,
|
|
value: item.dictValue
|
|
}))
|
|
} else {
|
|
this.$u.toast(res.msg);
|
|
}
|
|
});
|
|
},
|
|
//处理原因
|
|
getByDicAcceptanceReason() {
|
|
this.$u.api.getByDicAcceptanceReason().then(res => {
|
|
if (res.code === 200) {
|
|
this.resustlist = res.data.map((item) => ({
|
|
label: item.dictLabel,
|
|
value: item.dictValue
|
|
}))
|
|
} else {
|
|
this.$u.toast(res.msg);
|
|
}
|
|
});
|
|
},
|
|
|
|
loadList() {
|
|
this.$u.api.recevie.getOrder({
|
|
sid: this.vuex_sid || this.sid,
|
|
did: this.vuex_detailId || this.detailId,
|
|
barCode: this.barCode
|
|
}).then(res => {
|
|
if(res.code===200) {
|
|
this.data = res.data;
|
|
this.test = res.data;
|
|
if (res.data !== null) {
|
|
// //加载包装资料,如果只有一条,直接加载件装量数据,如果有多条,需要点击件装量,从多条包装资料中选取一条
|
|
this.goodId = this.data.businInOrderDVo.goodId;
|
|
// 包装id
|
|
this.dataForm.packageId = this.data.businInOrderDVo.packageId
|
|
// 件装量
|
|
this.dataForm.packageQty = this.data.businInOrderDVo.packageQty
|
|
this.loadPackage();
|
|
}
|
|
} else {
|
|
this.$u.toast(res.msg)
|
|
}
|
|
|
|
});
|
|
},
|
|
loadPackage() {
|
|
this.$u.api.recevie.queryBasPackageByGoodId({
|
|
goodId: this.goodId
|
|
}).then(res => {
|
|
if(res.code===200) {
|
|
this.packages = res.data.length;
|
|
} else {
|
|
this.$u.toast(res.msg)
|
|
}
|
|
});
|
|
},
|
|
loadStorageList() {
|
|
this.storageList = [];
|
|
this.$u.api.storageList().then(res => {
|
|
let dataArry = res.data;
|
|
for (var i = 0; i < dataArry.length; i++) {
|
|
var obj = {
|
|
value: dataArry[i].id,
|
|
label: dataArry[i].storageName,
|
|
};
|
|
this.storageList.push(obj);
|
|
}
|
|
});
|
|
},
|
|
//点击件装量
|
|
choosePackage() {
|
|
if (this.packages >= 2) {
|
|
this.$u.route({
|
|
url: 'pages/receive/choosePackaging/choosePackaging',
|
|
type: 'navigateTo',
|
|
params: {
|
|
goodId: this.goodId
|
|
}
|
|
})
|
|
} else {
|
|
this.$u.toast('只有一个包装!')
|
|
}
|
|
},
|
|
//计算收货数量 = 件装量 * 件数 + 零散量
|
|
sumActualQty(val) {
|
|
this.dataForm.actualQty = val * this.dataForm.packageQty + Number(this.dataForm.actualPieceQty ? this.dataForm.actualPieceQty : 0)
|
|
},
|
|
// 零散数改变
|
|
changePiece(val) {
|
|
this.dataForm.actualQty = this.dataForm.packageQty * this.dataForm.actualCaseQty + Number(val)
|
|
},
|
|
//输入或扫描商品条码
|
|
searchByGoodNo(val) {
|
|
this.loadList();
|
|
},
|
|
choosedStartDate() {
|
|
this.starttime = true
|
|
},
|
|
//生产日期
|
|
changeProduct(e) {
|
|
this.dataForm.productionDate = e.result
|
|
this.starttime = false
|
|
},
|
|
choosedDate() {
|
|
this.endtime = true
|
|
},
|
|
//有效期
|
|
changeExpire(e) {
|
|
this.dataForm.expiredDate = e.result
|
|
this.endtime = false
|
|
const date = new Date()
|
|
const year = date.getFullYear()
|
|
const month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
|
|
const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
|
|
this.toDay = year + '-' + month + '-' + day
|
|
const days = this.getDays(this.toDay, e.result)
|
|
if (this.toDay > e.result) {
|
|
this.showOverdue = true
|
|
return
|
|
}
|
|
if(days<180) {
|
|
this.showNearFuture = true
|
|
}
|
|
|
|
},
|
|
confirmKube(e) {
|
|
this.kube = false
|
|
this.storageName = e[0].label;
|
|
this.dataForm.storageId = e[0].value
|
|
},
|
|
confirmClusion(e) {
|
|
this.receonclusion = false
|
|
this.dataForm.receivingStatus = e[0].value
|
|
this.receivingStatusValue = e[0].label
|
|
},
|
|
confirmResult(e) {
|
|
this.resust = false
|
|
this.reasonValue = e[0].label
|
|
this.dataForm.reason = e[0].value
|
|
},
|
|
getDic() {
|
|
this.$u.api.getByDicType().then(res => {
|
|
this.dicOptions = res.data;
|
|
});
|
|
},
|
|
transUnit(unit) {
|
|
for (let dic in this.dicOptions) {
|
|
if (this.dicOptions[dic].dictValue === unit) {
|
|
return this.dicOptions[dic].dictLabel;
|
|
}
|
|
}
|
|
},
|
|
//确认保存数据
|
|
confirmSave() {
|
|
// 0整散分开 1整散合一
|
|
if(!this.dataForm.actualQty) {
|
|
this.dataForm.actualQty = 0
|
|
}
|
|
if(!this.dataForm.pieceQty) {
|
|
this.dataForm.pieceQty = 0
|
|
}
|
|
// if (this.data.storageClassify === 1 && this.dataForm.actualQty === 0 && this.dataForm.pieceQty === 0) {
|
|
// this.$u.toast("整件和零散数不能同时为0");
|
|
// return;
|
|
// }
|
|
// if (this.data.storageClassify === 0 && this.dataForm.actualQty && this.dataForm.pieceQty) {
|
|
// this.$u.toast("整件和零散数不能同时录入");
|
|
// return;
|
|
// }
|
|
// 生产日期
|
|
// if (this.dataForm.productionDate === '请选择生产日期') {
|
|
// this.$u.toast("请选择生产日期");
|
|
// return
|
|
// }
|
|
// 有效期至
|
|
// if (this.dataForm.productionDate === '请选择有效期') {
|
|
// this.$u.toast("请选择有效期");
|
|
// return
|
|
// }
|
|
// 库别
|
|
// if (!this.dataForm.storageId) {
|
|
// this.$u.toast("请选择库别");
|
|
// return
|
|
// }
|
|
|
|
// 收货结论
|
|
// if (this.receivingStatusValue === '拒收' && !this.dataForm.reason) {
|
|
// this.$u.toast("请选择处理原因");
|
|
// return
|
|
// }
|
|
// if (!this.dataForm.containerCode) {
|
|
// this.$u.toast("请扫码或输入容器编号");
|
|
// return
|
|
// }
|
|
|
|
this.$u.api.recevie.confirmReceiving({
|
|
id: this.sid || this.vuex_sid,
|
|
businInOrderDetailTransBo: {
|
|
id: this.detailId || this.vuex_detailId,
|
|
...this.dataForm
|
|
}
|
|
}).then((res) => {
|
|
if (res.code === 200) {
|
|
this.$u.toast('收货成功!');
|
|
this.$u.route({
|
|
url: 'pages/receive/index',
|
|
type: 'navigateTo'
|
|
})
|
|
} else {
|
|
this.$u.toast(res.msg);
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.goodsNumber {
|
|
padding: 20rpx 50rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.goodsNumberCode {
|
|
color: #333333;
|
|
font-size: 36rpx;
|
|
margin-right: 20rpx;
|
|
}
|
|
}
|
|
|
|
.goodsInfo {
|
|
width: 95%;
|
|
margin: 0 auto;
|
|
background-color: #f2f2f2;
|
|
padding: 20rpx 30rpx;
|
|
line-height: 40rpx;
|
|
margin-bottom: 20rpx;
|
|
|
|
.goodsInfoItem {
|
|
display: flex;
|
|
align-items: center;
|
|
color: #333333;
|
|
|
|
.goodsItemLabel {
|
|
width: 120rpx;
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.goodsItemValue {
|
|
font-size: 28rpx;
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.itemsContend {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
|
|
.items {
|
|
width: 50%;
|
|
display: flex;
|
|
font-size: 24rpx;
|
|
color: #555555;
|
|
|
|
.itemsLabel {
|
|
width: 120rpx;
|
|
}
|
|
|
|
.itemsValue {}
|
|
}
|
|
}
|
|
}
|
|
|
|
.titleValue {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 28rpx;
|
|
padding: 0 50rpx;
|
|
margin-bottom: 20rpx;
|
|
|
|
.title {
|
|
color: #555555;
|
|
width: 160rpx;
|
|
text-align: left;
|
|
}
|
|
|
|
.value {
|
|
color: #666666;
|
|
}
|
|
}
|
|
|
|
.footer {
|
|
padding: 20rpx 40rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
</style>
|
|
|