退货页面重构 其他问题修复

master
hou 3 years ago
parent f6f0688b05
commit aba39bab83

@ -73,6 +73,7 @@ export default {
po_PleaseScanMATcode: '请扫描物料条码',
PleaseScan: '请扫描',
po_PleaseInput: '请输入内容',
materials:'请全部退料',
po_PleaseInputcar: '请输入周转车',
po_PleaseSlect: '请选择库存地点',
po_Detailed: 'PO单明细',
@ -88,6 +89,7 @@ export default {
Materiel: '物料',
po_MaterielDes: '物料描述',
returned: '应退货数量',
returneds: '应退数量',
quantity: '累计退货数量',
po_DemandQuantity: '需求数量',
DemandQuantity: '需求',

@ -68,7 +68,9 @@ export default {
po_ReceivingGoods: 'PO receive',
po_ReturnGoods: 'DN return',
returned: 'Quantity to be returned',
returneds: 'Quantity to be returned',
quantity: 'Cumulative return quantity',
materials:'Please return all materials',
po_OddNumbers: 'PO No',
po_Supplier: 'Supplier',
po_OrderType: 'Order type',

@ -148,7 +148,7 @@ export default class stoOutboundDom extends BasePage {
model.queryReturningTypeList();
this.form.orderNo = JSON.parse(sessionStorage.getItem('SweepCode'));
sessionStorage.removeItem('SweepCode');
if (!this.form.orderNo) {
if (this.form.orderNo == null) {
return;
} else {
this.query();

@ -2,57 +2,90 @@
<view class="page-picking-order">
<view class="header">
<view class="left">
<u-icon class="icon" name="arrow-left" @click="index" />
<u-icon class="icon" name="arrow-left" @click="uni.navigateBack({delta:1})" />
</view>
<view class="title">{{ $t('message.rawMenu_ReturnGoods') }}</view>
<view class="right"></view>
</view>
<view class="table-wrapper">
<wyb-table class="table" ref="table" width="100%" enable-check="single" show-left-and-right-border :headers="headers" :contents="model.dnReturnList" :show-vert-border="false" @onCheck="handleRow"></wyb-table>
</view>
<!-- 列表展示数据 -->
<view class="Exhibition">
<view class="Exhibition-left">
<view class="Exhibition-left-title">{{ $t('message.return_Type') }}:</view>
<view class="Exhibition-left-data">{{ some.poType }}</view>
<view class="content">
<!-- 单号 -->
<view class="single">
<view class="single-left">
<view>{{ $t('message.InventoryOrderNo') }}:</view>
<u-search :placeholder="$t('message.InventoryPleaseScan')" v-model="form.documentNo" @search="query" :show-action="false"></u-search>
</view>
<view class="single-right">
<u-button type="primary" @click="query">{{ $t('message.Query') }}</u-button>
</view>
</view>
<view class="Exhibition-right">
<view class="Exhibition-right-title">{{ $t('message.po_ReturnGoodsQuantity') }}:</view>
<view class="Exhibition-right-data">{{ some.poAmount }}</view>
<!-- 物料 -->
<view class="material">
<view class="material-left">
<view>{{ $t('message.CommissionedMaterielNo') }}:</view>
<jPicker sureColor="#ff0000" style="width: 260rpx" @bindpicker="materialChoice" showKey="value" valKey="value" :val="wl.value" class="search" :options="materialList" />
</view>
</view>
</view>
<!-- 添加库位 -->
<view class="library">
<view class="library-left">
<view>{{ $t('message.CommissionedLocation') }}:</view>
<jPicker sureColor="#ff0000" style="width: 230rpx" @bindpicker="LocationChoice" showKey="value" valKey="value" :val="wlCode" class="search" :options="Location" />
<!-- 物料描述 -->
<view class="material">
<view class="material-right">
<view class="material-right-title">{{ $t('message.CommissionedMaterielDesc') }}:</view>
<view class="material-right-code" style="overflow: hidden">{{ some.materialDesc }}</view>
</view>
</view>
<view class="library-right">
<view class="library-right-title">{{ $t('message.CommissionedThisNumber') }}</view>
<u-input v-model="qty" :type="type" :border="border" class="input" />
<!-- 应退数量 -->
<view class="material">
<view class="material-right">
<view class="material-right-title">{{ $t('message.returneds') }}:</view>
<view class="material-right-code" style="overflow: hidden">{{ some.poAmount }}</view>
</view>
</view>
<!-- 订单类型 -->
<view class="material">
<view class="material-right">
<view class="material-right-title">{{ $t('message.po_OrderType') }}:</view>
<view class="material-right-code" style="overflow: hidden">{{ some.poType }}</view>
</view>
</view>
<!-- 供应商 -->
<view class="material">
<view class="material-right">
<view class="material-right-title">{{ $t('message.po_Supplier') }}:</view>
<view class="material-right-code" style="overflow: hidden">{{ some.supplyCode }}</view>
</view>
</view>
<!-- 列表展示数据 -->
<view class="number">
<!-- 库存地点 -->
<view class="number-left">
<view class="number-left-title">{{ $t('message.po_Location') }}:</view>
<u-input v-model="some.wlCode" placeholder=" " :type="type" :border="border" class="input" disabled style="padding:'0';"/>
</view>
<!-- 累计 -->
<view class="number-right">
<view class="number-right-title">{{ $t('message.total') }}:</view>
<u-input placeholder=" " v-model="some.receiptAmount" :type="type" :border="border" class="input" style="padding:'0';" disabled />
</view>
</view>
<!-- 库位 -->
<view class="library">
<!-- 库位 -->
<view class="library-left">
<view style="text-align:left">{{ $t('message.CommissionedLocation') }}:</view>
<jPicker sureColor="#ff0000" style="width: 230rpx" @bindpicker="LocationChoice" showKey="value" valKey="value" :val="wlCode.value" class="search" :options="Location" />
</view>
<!-- 本次 -->
<view class="library-right">
<view class="library-right-title">{{ $t('message.CommissionedThisNumber') }}:</view>
<u-input :placeholder="$t('message.po_PleaseInput')" v-model="qty" type="number" :border="border" class="input" />
</view>
</view>
<!-- 添加 -->
<view class="add">
<u-button type="primary" @click="Add">{{ $t('message.product_add') }}</u-button>
</view>
<!-- 表格 -->
<wyb-table class="table" ref="table" width="100%" show-left-and-right-border :headers="headers" :contents="LocationList" :show-vert-border="false" @onCellClick="deleteItem($event)"></wyb-table>
</view>
<!-- 添加 -->
<view class="add">
<u-button type="primary" @click="Add">{{ $t('message.product_add') }}</u-button>
</view>
<!-- 表格 -->
<u-table class="library-table">
<u-tr class="u-tr">
<u-th class="u-th">{{ $t('message.product_Location') }}</u-th>
<u-th class="u-th">{{ $t('message.product_Number') }}</u-th>
<u-th class="u-th">{{ $t('message.operation') }}</u-th>
</u-tr>
<u-tr class="u-tr" v-for="(item, index) in LocationList" :key="index">
<u-td class="u-td">{{ item.wlCode }}</u-td>
<u-td class="u-td">{{ item.qty }}</u-td>
<u-td class="u-td">
<div class="u-td" @click="deleteItem(index)">
{{ $t('message.product_Delete') }}
</div>
</u-td>
</u-tr>
</u-table>
<view class="bottom-bar">
<div class="extra">
<u-form ref="form" :model="form" :error-type="['toast']">
@ -61,14 +94,17 @@
</div>
<div class="container">
<u-row>
<!-- 明细 -->
<u-col :span="4">
<u-button type="primary" class="appoint" @click="appoint">{{ $t('message.detailed') }}</u-button>
</u-col>
<!-- 提交 -->
<u-col :span="4">
<u-button type="success" @click="onSubmit">
{{ $t('message.po_Submit') }}
</u-button>
</u-col>
<!-- 返回 -->
<u-col :span="4">
<u-button type="error" @click="onUpload">
{{ $t('message.po_Return') }}
@ -108,14 +144,17 @@ export default class RawReceiptDetail extends BasePage {
* 页面Module
*/
model = model;
materialList:any = []
type = 'text';
wlCode: any = '';
wl:any = {}
border = true;
//
LocationList: any = [];
//
Location: any = [];
some: any = {};
someIndex:any = 0
qty: any = '';
/**
* 表单数据
@ -124,36 +163,21 @@ export default class RawReceiptDetail extends BasePage {
// locationCode: null,
amount: null,
};
index() {
this.toPage(this.page.raw.ingoods.dnReturnGoods.index);
}
/**
* 表单校验
*/
rules: VFormRules<any> = {
// locationCode: [{ required: true, message: '' }],
amount: [
{ required: true, message: this.$t('message.Pi_tip1') as string },
// { type: 'integer', min: 1, transform: Number, message: this.$t('message.Pi_tip2') as string },
],
};
/**
* 库存地点选择
*/
locationCodeSelect = false;
/**
* 表头
*/
headers = headers;
//
async onReady() {
let means: any = JSON.parse(localStorage.getItem('__GWMS_APP_STATE_DATA__') as any);
let user: any = session.user;
await this.GetLocation()
}
async GetLocation(){
let content = {
loginName: means.session.user.loginName,
factoryCode: means.session.user.factoryCode,
loginName: session.loginName,
factoryCode: session.factoryCode,
workArea: session.workareaCode,
};
let res: any = await this.model.queryByFactory(content);
@ -165,20 +189,50 @@ export default class RawReceiptDetail extends BasePage {
this.Location.push(pickerName);
});
}
onUpload(){
uni.navigateBack({delta:1})
}
async query(){
if(!this.form.documentNo){
this.customToast(this.$t('message.Commission_tips1') as any);
return
}
await this.model.queryOrder(this.form.documentNo).then(() =>{
if(this.model.code == '1'){
this.model.dnReturnList.forEach((item:any) =>{
let arr = {
label:item.materialCode,
value:item.materialCode + '(' + item.poLine + ')',
Line:item.poLine,
poNo:item.poNo,
}
this.materialList.push(arr)
})
this.wl = this.materialList[0]
this.some = this.model.dnReturnList[0]
console.log('this.some',this.some)
}
})
}
materialChoice(e:any){
console.log('e',e)
this.model.dnReturnList.forEach((item:any,index:any) =>{
if(item.poLine == e.pickerName.Line && item.materialCode == e.pickerName.label && item.poNo == e.pickerName.poNo){
this.some = item
this.someIndex = index
}
})
console.log('this.some',this.some)
console.log('this.someIndex',this.someIndex)
}
//
LocationChoice(e: any) {
this.wlCode = e.pickerName;
}
//
handleRow({ data }: any) {
this.LocationList = [];
this.qty = '';
this.some = data[0].lineData;
}
//
Add() {
if (this.qty == '' || this.wlCode == '') {
this.customToast(this.$t('message.Commission_tips2') as any);
this.customToast(this.$t('message.Commission_tips2') as any);
return;
}
if (parseFloat(this.qty) <= 0) {
@ -193,67 +247,86 @@ export default class RawReceiptDetail extends BasePage {
this.customToast(this.$t('message.Commission_tips6') as any);
return;
}
let num: number = parseFloat(this.qty);
this.LocationList.forEach((item: any) => {
num += parseFloat(item.qty);
});
let num: number = parseFloat(this.qty) + parseFloat(this.some.receiptAmount)
if (num > parseFloat(this.some.poAmount)) {
this.customToast(this.$t('message.dn_Tip2') as any);
return;
}
let arr = {
wlCode: this.wlCode.label,
qty: this.qty,
Code: this.wlCode.sendSpot,
poNo:this.some.poNo,
poLine:this.some.poLine,
materialCode:this.some.materialCode,
loginName:this.session.loginName,
factoryCode:this.session.factoryCode,
wlCode:this.wlCode.label,
nowAmount:this.qty,
};
this.model.dnReturnList[this.someIndex].receiptAmount += parseFloat(this.qty)
console.log('this.model.dnReturnList',this.model.dnReturnList)
this.LocationList.push(arr);
let TEM = {
wlCode: this.wlCode.label,
nowAmount: this.qty,
};
this.some.list.push(TEM);
this.qty = '';
}
//
deleteItem(index: any) {
this.LocationList.splice(index, 1);
this.some.list.splice(index, 1);
deleteItem(e: any) {
console.log('e',e.contentIndex)
console.log('eeeee',e)
uni.showModal({
content:this.$t('message.product_Delete') as any,
cancelText:this.$t('message.Cancel') as any,
confirmText:this.$t('message.workArea_Confirm') as any,
success:(res) =>{
if(res.confirm){
this.LocationList.splice(e.contentIndex,1)
this.model.dnReturnList.forEach((item:any) =>{
if(item.materialCode == e.lineData.materialCode && item.poLine == e.lineData.poLine && item.poNo == e.lineData.poNo){
item.receiptAmount -= parseFloat(e.lineData.nowAmount)
}
})
} else if(res.cancel){
return
}
}
})
}
appoint() {
this.redirectTo(this.page.raw.ingoods.dnReturnGoods.Local);
}
/**
* 提交
*/
async onSubmit() {
let num = 0;
this.some.list.forEach((item: any) => {
num += parseFloat(item.nowAmount);
});
if (num != parseFloat(this.some.poAmount)) {
this.customToast(this.$t('message.actual') as any);
return;
let isTrue = true
this.model.dnReturnList.forEach((item:any) =>{
if(item.receiptAmount != null || item.receiptAmount != 0){
if(item.receiptAmount != item.poAmount){
this.customToast(this.$t('message.materials') as any);
return isTrue = false
}
}
})
if(isTrue){
await this.model.submit(this.LocationList).then(() =>{
if(this.model.code == '1'){
this.materialList = []
this.some = {}
this.someIndex = 0
this.LocationList = []
this.qty = ''
this.Location = []
this.wl = {}
this.wlCode = ''
this.query()
this.GetLocation()
}
})
}
await this.model.submit({
poNo: this.some.poNo,
loginName: session.loginName,
factoryCode: session.factoryCode,
materialCode: this.some.materialCode,
poLine: this.some.poLine,
list: this.some.list,
});
}
}
</script>
<style lang="scss" scoped>
.page-picking-order {
background: #f2f2f2 linear-gradient(0deg, #311818 0%, #4a78ea 51%, #1753ea 100%) no-repeat;
background: #f2f2f2 linear-gradient(0deg, #f2f2f2 0%, #4a78ea 51%, #1753ea 100%) no-repeat;
background-size: 100% 600rpx;
padding: 30rpx;
padding: 118rpx 30rpx 162rpx;
min-height: 100%;
padding-top: 118rpx;
padding-bottom: 222rpx;
.header {
position: fixed;
@ -282,7 +355,156 @@ export default class RawReceiptDetail extends BasePage {
height: 88rpx;
}
}
.content {
width: 100%;
background: white;
border-radius: 15rpx;
padding: 10rpx;
.single {
width: 100%;
height: 100rpx;
display: flex;
.single-left {
width: 80%;
height: 100%;
display: flex;
view {
width: 110rpx;
height: 100%;
line-height: 100rpx;
}
}
.single-right {
button {
margin-top: 15rpx;
width: 150rpx;
height: 70rpx;
}
}
}
.material {
width: 100%;
height: 100rpx;
display: flex;
.material-left {
width: 100%;
height: 100%;
display: flex;
view {
width: 100rpx;
line-height: 100rpx;
}
.search{
padding-left: 19px;
}
}
}
.material {
width: 100%;
height: 100rpx;
display: flex;
.material-right {
width: 100%;
height: 100%;
display: flex;
.material-right-title {
width: 120rpx;
height: 100%;
line-height: 100rpx;
}
.material-right-code {
width: 80%;
height: 100%;
line-height: 100rpx;
text-align: left;
padding-left: 10px;
// line-height: 100rpx;
}
}
}
.number {
height: 100rpx;
display: flex;
.number-left {
width: 50%;
height: 100%;
display: flex;
.number-left-title {
width: 120rpx;
height: 100%;
line-height: 100rpx;
}
.input {
width: 200rpx;
height: 70rpx;
margin-top: 15rpx;
margin-left: 15rpx;
}
}
.number-right {
width: 50%;
height: 100%;
display: flex;
.number-right-title {
width: 120rpx;
height: 100%;
line-height: 100rpx;
text-align: center;
}
.input {
width: 200rpx;
height: 70rpx;
margin-top: 15rpx;
margin-left: 15rpx;
}
}
}
.library {
width: 100%;
height: 100rpx;
display: flex;
.library-left {
width: 50%;
height: 100%;
display: flex;
view {
width: 100rpx;
line-height: 100rpx;
}
.search {
padding-left: 19px;
text-align: left;
}
}
.library-right {
width: 50%;
height: 100%;
display: flex;
.library-right-title {
width: 120rpx;
height: 100%;
line-height: 100rpx;
text-align: center;
}
.input {
width: 200rpx;
height: 70rpx;
margin-top: 15rpx;
margin-left: 15rpx;
}
}
}
.add {
width: 100%;
height: 100rpx;
position: relative;
button {
position: absolute;
top: 10rpx;
right: 20rpx;
}
}
}
.table-wrapper {
background-color: #fff;
height: 500rpx;

@ -5,31 +5,47 @@ import vm from "@/main";
export const headers = [
{
label: vm.$t("message.po_MaterielNo"),
key: "materialCode",
key: "materialCode",//物料号
width:204,
},
{
label: vm.$t("message.po_MaterielDes"),
key: "materialDesc",
width: 350,
label: vm.$t("message.Line"),
key: "poLine",//行项目
width:156,
},
{
label: vm.$t("message.returned"),
key: "poAmount",
label: vm.$t("message.CommissionedLocation"),
key: "wlCode",//库位
width:156,
},
{
label: vm.$t("message.quantity"),
key: "receiptAmount",
},
{
label: vm.$t("message.po_Supplier"),
key: "supplyCode",
},
{
label: vm.$t("message.po_OrderType"),
key: "poType",
},
{
label: vm.$t("message.po_Location"),
key: "wlCode",
label: vm.$t("message.product_Number"),
key: "nowAmount",//数量
width:156,
},
// {
// label: vm.$t("message.po_MaterielDes"),
// key: "materialDesc",//物料描述
// width: 350,
// },
// {
// label: vm.$t("message.returned"),
// key: "poAmount",//应退货数量
// },
// {
// label: vm.$t("message.quantity"),
// key: "receiptAmount",//累计退货数量
// },
// {
// label: vm.$t("message.po_Supplier"),
// key: "supplyCode",//供应商
// },
// {
// label: vm.$t("message.po_OrderType"),
// key: "poType",//订单类型
// },
// {
// label: vm.$t("message.po_Location"),
// key: "wlCode",//库存地点
// },
];

@ -40,6 +40,7 @@ export class ReceiptModule extends VuexModule {
*/
dnNo = "";
dnReturnList = [];
code:any = ''
/**
*
*/
@ -169,8 +170,9 @@ export class ReceiptModule extends VuexModule {
item.list = [];
});
const orderInInfo: any = res.data[0] || {};
const code = res.code
console.log("orderInInfo", orderInInfo);
return { orderInInfo, orderInInfoListEx, dnReturnList };
return { orderInInfo, orderInInfoListEx, dnReturnList ,code };
}
/**
*
@ -230,13 +232,14 @@ export class ReceiptModule extends VuexModule {
);
return res;
}
@Action({ commit: "updateCheckedOrderInInfoListKw" })
@MutationAction
async submit(content: any) {
let res = await http.post(
const res:any = await http.post(
"/wmspda/material/poReturn/materialComplete",
content
);
return res;
const code = res.code
return {code};
}
@MutationAction
async querydetaildlist(content: any) {

Loading…
Cancel
Save