fix:成品盘点时扫描单号,总数累计不准确;逻辑代码优化;

master
zhoulei 4 years ago
parent 4c929c23b6
commit 51304553a5

@ -1,97 +1,57 @@
<template>
<view class="page-product-receipt">
<view
class="header"
:style="{ backgroundColor: `rgba(23, 83, 234, ${scrollTop / 100})` }"
>
<view class="header" :style="{ backgroundColor: `rgba(23, 83, 234, ${scrollTop / 100})` }">
<view class="left">
<u-icon class="icon" name="arrow-left" @click="uni.navigateBack()" />
<u-icon class="icon" name="arrow-left" @click="uni.navigateBack({})" />
</view>
<view class="title">{{ $t("message.Inventory") }}</view>
<view class="title">{{ $t('message.Inventory') }}</view>
<view class="right"></view>
</view>
<u-form class="form" ref="form" :model="form" label-width="180rpx">
<u-form-item
:required="true"
:label="$t('message.Warehouse_OrderNo')"
prop="pddNo"
>
<u-search
:placeholder="$t('message.po_PleaseInput')"
v-model="form.pddNo"
@search="model.getProductCode"
:show-action="false"
></u-search>
<!-- 单号 -->
<u-form-item :required="true" :label="$t('message.Warehouse_OrderNo')" prop="pddNo">
<u-search :placeholder="$t('message.po_PleaseInput')" v-model="form.pddNo" @search="model.getProductCode" :show-action="false"></u-search>
</u-form-item>
<!-- 库位 -->
<u-form-item :required="true" :label="$t('message.product_Location')">
<u-input
v-model="form.originWl.locCode"
type="select"
@click="originWlSelect = true"
:placeholder="$t('message.po_PleaseInput')"
/>
<u-select
:confirm-text="$t('message.product_Confirm')"
:cancel-text="$t('message.product_Cancel')"
v-model="originWlSelect"
:list="model.WlList"
@confirm="onchange"
></u-select>
<u-input v-model="form.originWl.locCode" type="select" @click="originWlSelect = true" :placeholder="$t('message.po_PleaseInput')" />
<u-select :confirm-text="$t('message.product_Confirm')" :cancel-text="$t('message.product_Cancel')" v-model="originWlSelect" :list="model.WlList" @confirm="onchange"></u-select>
</u-form-item>
<!-- 扫码 -->
<u-form-item :label="$t('message.Warehouse_ScanCode')">
<u-search
v-model="form.code"
:placeholder="$t('message.po_PleaseInput')"
@search="scanCode"
:show-action="false"
></u-search>
<u-search v-model="form.code" :placeholder="$t('message.po_PleaseInput')" @search="scanCode" :show-action="false"></u-search>
</u-form-item>
<u-row>
<!-- 已扫 -->
<u-col :span="6">
<u-form-item :label="$t('message.product_Swept')" label-width="80rpx">
<u-input
:disabled="true"
v-model="aaa"
placeholder=""
/>
<u-input :disabled="true" v-model="form.spQty" placeholder="" />
</u-form-item>
</u-col>
<!-- 总数 -->
<u-col :span="6">
<u-form-item
:label="$t('message.Warehouse_TotalNumber')"
label-width="80rpx"
>
<u-input
v-model="bbb"
:placeholder="$t('message.po_PleaseInput')"
/>
<u-form-item :label="$t('message.Warehouse_TotalNumber')" label-width="80rpx">
<u-input v-model="form.ypQty" :placeholder="$t('message.po_PleaseInput')" />
</u-form-item>
</u-col>
</u-row>
<!-- 成品描述 -->
<u-form-item :label="$t('message.product_FGDes')">
<u-input
v-model="productDescZh"
:placeholder="$t('message.po_PleaseInput')"
/>
<u-input v-model="productDescZh" :placeholder="$t('message.po_PleaseInput')" />
</u-form-item>
<!-- 成品编码 -->
<u-form-item :label="$t('message.product_FGCode')">
<u-input
v-model="productCode"
:placeholder="$t('message.po_PleaseInput')"
/>
<u-input v-model="productCode" :placeholder="$t('message.po_PleaseInput')" />
</u-form-item>
</u-form>
<!-- 底部Button -->
<view class="bottom-bar">
<u-row class="button-bar">
<u-col :span="6">
<u-button type="primary" @click="onSubmit">{{
$t("message.workArea_Confirm")
}}</u-button>
<u-button type="primary" @click="onSubmit">{{ $t('message.workArea_Confirm') }}</u-button>
</u-col>
<u-col :span="6">
<u-button type="error" @click="uni.navigateBack()">{{
$t("message.po_Return")
}}</u-button>
<u-button type="error" @click="uni.navigateBack({})">{{ $t('message.po_Return') }}</u-button>
</u-col>
</u-row>
</view>
@ -99,11 +59,11 @@
</template>
<script lang="ts">
import { Component, Ref } from "vue-property-decorator";
import { BasePage } from "@/components/base/page";
import { VForm, VFormRules } from "vue/types/form";
import model from "./model";
import { session } from "@/store/modules/session";
import { Component, Ref } from 'vue-property-decorator';
import { BasePage } from '@/components/base/page';
import { VForm, VFormRules } from 'vue/types/form';
import model from './model';
import { session } from '@/store/modules/session';
interface OptionType {
label: string;
@ -121,7 +81,7 @@ export default class productCheckReceipt extends BasePage {
/**
* 表单引用
*/
@Ref("form") readonly $form!: VForm;
@Ref('form') readonly $form!: VForm;
/**
* 页面Module
@ -134,21 +94,25 @@ export default class productCheckReceipt extends BasePage {
*/
form = {
originWl: {} as OptionType,
pddNo: "",
code: "",
pdMode: "",
pddNo: '',
code: '',
pdMode: '',
//
spQty: null,
//
ypQty: null,
};
productCode: any = ""; //
productDescZh: any = ""; //
// aaa: any = "";
// bbb: any = "";
productCode: any = ''; //
productDescZh: any = ''; //
// select
originWlSelect = false;
aimWlSelect = false;
cboPlaceSelect = false;
rules: VFormRules<any> = {
originWl: [
{ required: true, message: this.$t("message.Warehouse_Tip2") as string }, //
{ required: true, message: this.$t('message.Warehouse_Tip2') as string }, //
],
};
show = false;
@ -156,24 +120,31 @@ export default class productCheckReceipt extends BasePage {
this.$form.setRules(this.rules);
}
onchange(e: any) {
console.log("e", e);
this.model.WlListaa.forEach((item: any) => {
if (item.locCode == e[0].value) {
this.form.originWl = item;
// aaa += item.spQty;
this.aaa += item.spQty;
this.bbb += item.ypQty;
return;
}
//
const storeList = this.model.WlListaa.filter((item) => item.locCode === e[0].value);
// spQtyypQty
const total = storeList.reduce(
(total, item) => {
return {
spQty: total.spQty + item.spQty,
ypQty: total.ypQty + item.ypQty,
};
},
{ spQty: 0, ypQty: 0 },
);
const originWl = this.model.WlListaa.find((item) => item.locCode === e[0].value);
// form
Object.assign(this.form, {
originWl: originWl,
...total,
});
console.log("this.form.originwl",this.form.originWl);
}
// +1
async scanCode(e: any) {
if (!this.form.pddNo) {
uni.showToast({
icon: "none",
title: this.$t("message.Warehouse_Tip5") as string, //
icon: 'none',
title: this.$t('message.Warehouse_Tip5') as string, //
});
return;
}
@ -191,8 +162,8 @@ export default class productCheckReceipt extends BasePage {
qty: 1,
};
await this.model.toScanCode(list);
if (this.model.records.code == "1") {
this.aaa += 1;
if (this.model.records.code == '1') {
this.form.spQty = this.form.spQty + 1;
this.productCode = this.model.productCode;
this.productDescZh = this.model.productDescZh;
}
@ -202,15 +173,15 @@ export default class productCheckReceipt extends BasePage {
if (!valid) return;
if (!this.form.pddNo) {
uni.showToast({
icon: "none",
title: this.$t("message.Warehouse_Tip5") as string, //
icon: 'none',
title: this.$t('message.Warehouse_Tip5') as string, //
});
return;
}
if (!this.form.originWl.productCode) {
uni.showToast({
icon: "none",
title: this.$t("message.Warehouse_Tip6") as string, //
icon: 'none',
title: this.$t('message.Warehouse_Tip6') as string, //
});
return;
}
@ -218,10 +189,10 @@ export default class productCheckReceipt extends BasePage {
this.commit();
} else {
uni.showModal({
title: "Tip",
content: this.$t("message.Warehouse_Tip7") as string, //
confirmText: this.$t("message.workArea_Confirm") as string, //
cancelText: this.$t("message.Cancel") as string, //
title: 'Tip',
content: this.$t('message.Warehouse_Tip7') as string, //
confirmText: this.$t('message.workArea_Confirm') as string, //
cancelText: this.$t('message.Cancel') as string, //
showCancel: true,
success: (res) => {
if (res.confirm) {
@ -248,7 +219,6 @@ export default class productCheckReceipt extends BasePage {
sn: this.form.code,
spQty: this.aaa,
};
console.log("orderlist", list);
await this.model.onTakeoutConfirm(list);
}
}
@ -256,8 +226,7 @@ export default class productCheckReceipt extends BasePage {
<style lang="scss" scoped>
.page-product-receipt {
background: #f2f2f2
linear-gradient(0deg, #f2f2f2 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: 118rpx 30rpx 162rpx;
min-height: 100%;

@ -1,16 +1,11 @@
import {
Action,
getModule,
Module,
MutationAction,
VuexModule,
} from "vuex-module-decorators";
import store from "@/store";
import http from "@/utils/request";
import { url } from "@/utils/url";
import { session } from "@/store/modules/session";
import { Action, getModule, Module, MutationAction, VuexModule } from 'vuex-module-decorators';
import store from '@/store';
import http from '@/utils/request';
import { url } from '@/utils/url';
import { session } from '@/store/modules/session';
// import { page } from '@/utils/page';
import vm from "@/main";
import vm from '@/main';
import { removeDuplicates } from '@/utils/filter';
class OrderInInfo {
productDescZh?: string;
@ -22,7 +17,7 @@ class OrderInInfo {
namespaced: true,
dynamic: true,
store,
name: "product.warehouse.wholeLnventory",
name: 'product.warehouse.wholeLnventory',
})
export class wholeLnventory extends VuexModule {
/**
@ -30,8 +25,8 @@ export class wholeLnventory extends VuexModule {
*/
WlList = [];
WlListaa = [];
productCode: any = "";
productDescZh: any = "";
productCode: any = '';
productDescZh: any = '';
/**
*
*/
@ -44,46 +39,14 @@ export class wholeLnventory extends VuexModule {
/**
*
*/
dnNo = "";
dnNo = '';
records = {
code: "",
code: '',
};
/**
*
*/
orderInInfo: OrderInInfo = new OrderInInfo();
// /**
// * 更新看单明细库位
// * @param kw 库位
// */
// @Mutation
// updateOrderInInfoListKw(kw: string) {
// this.orderInInfoList = this.orderInInfoList.map((item) => {
// item.kw = kw;
// return item;
// });
// }
/**
*
*/
// @MutationAction
// async queryLocation() {
// const result: any = await http.get(url.warehouse.wholeTransfer.list, {
// params: {
// factoryCode: '1999',
// loginName: '1999',
// },
// });
// // console.log('库位数据',result)
// const WlList = result.data.map((_: any) => ({
// label: _.locationCode,
// value: _.locationCode,
// }));
// return { WlList };
// }
/**
*
* DN
@ -100,28 +63,24 @@ export class wholeLnventory extends VuexModule {
});
const WlListaa = res.data;
let arr: any = [];
res.data.forEach((item: any) => {
arr.push(item.locCode);
});
let newArr = Array.from(new Set(arr));
const WlList = newArr.map((item: any) => ({
label: item,
value: item,
// 去重
arr = removeDuplicates([...res.data], 'locCode');
const WlList = arr.map((item: any) => ({
label: item.locCode,
value: item.locCode,
}));
console.log("WlList", WlList);
// WlList select结构只有lbael,value
// WlListaa 原始结构
return { WlList, WlListaa };
}
@MutationAction
async onTakeoutConfirm(list: any) {
const records: any = await http.post(
url.warehouse.wholeLnventory.commit,
list
);
const records: any = await http.post(url.warehouse.wholeLnventory.commit, list);
if (records.code == 1) {
uni.showToast({
icon: "success",
title: "success",
icon: 'success',
title: 'success',
});
// uni.navigateTo({ url: page.product.warehouse.index });
}
@ -130,15 +89,12 @@ export class wholeLnventory extends VuexModule {
@MutationAction
async toScanCode(list: any) {
const records: any = await http.post(
url.warehouse.wholeLnventory.scanCode,
list
);
const records: any = await http.post(url.warehouse.wholeLnventory.scanCode, list);
if (records.code == 1) {
console.log("数据啊啊啊", records);
console.log('数据啊啊啊', records);
uni.showToast({
icon: "none",
title: vm.$t("message.Warehouse_Tip9") as any,
icon: 'none',
title: vm.$t('message.Warehouse_Tip9') as any,
});
this.productCode = records.data.productCode;
this.productDescZh = records.data.productDescZh;
@ -152,12 +108,12 @@ export class wholeLnventory extends VuexModule {
/**
*
*/
@Action({ commit: "updateCheckedOrderInInfoListKw" })
@Action({ commit: 'updateCheckedOrderInInfoListKw' })
async changeOrderInLocation(kw: string) {
await http.post("/wmspda/material/orderin/enter", {
await http.post('/wmspda/material/orderin/enter', {
// loginName: '1999',
loginName: session.loginName,
warehouseCode: "",
warehouseCode: '',
// factoryCode: '1999',
factoryCode: session.factoryCode,
locationCode: kw,

@ -5,12 +5,29 @@ export const PATTERN_DATETIME = 'YYYY-MM-DD HH:mm:ss';
export const PATTERN_DATE = 'YYYY-MM-DD';
export const PATTERN_TIME = 'HH:mm:ss';
/**
*
* list
* @param list
* @param valueKey valueKey
*/
export const removeDuplicates = (list: any, valueKey: string) => {
const temp = {};
let arr = [];
arr = list.reduce(function (item, next) {
temp[next[valueKey]] ? '' : (temp[next[valueKey]] = true && item.push(next));
return item;
}, []);
return arr;
};
/**
* NULL
* @param object
* @param path objectpath a.b.c
* @param defaultValue
*/
export const optional = (object: any, path: any, defaultValue: any) => {
try {
if (defaultValue === undefined) {

Loading…
Cancel
Save