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

master
zhoulei 4 years ago
parent 4c929c23b6
commit 51304553a5

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

@ -1,16 +1,11 @@
import { import { Action, getModule, Module, MutationAction, VuexModule } from 'vuex-module-decorators';
Action, import store from '@/store';
getModule, import http from '@/utils/request';
Module, import { url } from '@/utils/url';
MutationAction, import { session } from '@/store/modules/session';
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 { page } from '@/utils/page';
import vm from "@/main"; import vm from '@/main';
import { removeDuplicates } from '@/utils/filter';
class OrderInInfo { class OrderInInfo {
productDescZh?: string; productDescZh?: string;
@ -22,7 +17,7 @@ class OrderInInfo {
namespaced: true, namespaced: true,
dynamic: true, dynamic: true,
store, store,
name: "product.warehouse.wholeLnventory", name: 'product.warehouse.wholeLnventory',
}) })
export class wholeLnventory extends VuexModule { export class wholeLnventory extends VuexModule {
/** /**
@ -30,8 +25,8 @@ export class wholeLnventory extends VuexModule {
*/ */
WlList = []; WlList = [];
WlListaa = []; WlListaa = [];
productCode: any = ""; productCode: any = '';
productDescZh: any = ""; productDescZh: any = '';
/** /**
* *
*/ */
@ -44,46 +39,14 @@ export class wholeLnventory extends VuexModule {
/** /**
* *
*/ */
dnNo = ""; dnNo = '';
records = { records = {
code: "", code: '',
}; };
/** /**
* *
*/ */
orderInInfo: OrderInInfo = new OrderInInfo(); 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 * DN
@ -100,28 +63,24 @@ export class wholeLnventory extends VuexModule {
}); });
const WlListaa = res.data; const WlListaa = res.data;
let arr: any = []; let arr: any = [];
res.data.forEach((item: any) => { // 去重
arr.push(item.locCode); arr = removeDuplicates([...res.data], 'locCode');
}); const WlList = arr.map((item: any) => ({
let newArr = Array.from(new Set(arr)); label: item.locCode,
const WlList = newArr.map((item: any) => ({ value: item.locCode,
label: item,
value: item,
})); }));
console.log("WlList", WlList); // WlList select结构只有lbael,value
// WlListaa 原始结构
return { WlList, WlListaa }; return { WlList, WlListaa };
} }
@MutationAction @MutationAction
async onTakeoutConfirm(list: any) { async onTakeoutConfirm(list: any) {
const records: any = await http.post( const records: any = await http.post(url.warehouse.wholeLnventory.commit, list);
url.warehouse.wholeLnventory.commit,
list
);
if (records.code == 1) { if (records.code == 1) {
uni.showToast({ uni.showToast({
icon: "success", icon: 'success',
title: "success", title: 'success',
}); });
// uni.navigateTo({ url: page.product.warehouse.index }); // uni.navigateTo({ url: page.product.warehouse.index });
} }
@ -130,15 +89,12 @@ export class wholeLnventory extends VuexModule {
@MutationAction @MutationAction
async toScanCode(list: any) { async toScanCode(list: any) {
const records: any = await http.post( const records: any = await http.post(url.warehouse.wholeLnventory.scanCode, list);
url.warehouse.wholeLnventory.scanCode,
list
);
if (records.code == 1) { if (records.code == 1) {
console.log("数据啊啊啊", records); console.log('数据啊啊啊', records);
uni.showToast({ uni.showToast({
icon: "none", icon: 'none',
title: vm.$t("message.Warehouse_Tip9") as any, title: vm.$t('message.Warehouse_Tip9') as any,
}); });
this.productCode = records.data.productCode; this.productCode = records.data.productCode;
this.productDescZh = records.data.productDescZh; this.productDescZh = records.data.productDescZh;
@ -152,12 +108,12 @@ export class wholeLnventory extends VuexModule {
/** /**
* *
*/ */
@Action({ commit: "updateCheckedOrderInInfoListKw" }) @Action({ commit: 'updateCheckedOrderInInfoListKw' })
async changeOrderInLocation(kw: string) { async changeOrderInLocation(kw: string) {
await http.post("/wmspda/material/orderin/enter", { await http.post('/wmspda/material/orderin/enter', {
// loginName: '1999', // loginName: '1999',
loginName: session.loginName, loginName: session.loginName,
warehouseCode: "", warehouseCode: '',
// factoryCode: '1999', // factoryCode: '1999',
factoryCode: session.factoryCode, factoryCode: session.factoryCode,
locationCode: kw, 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_DATE = 'YYYY-MM-DD';
export const PATTERN_TIME = 'HH:mm:ss'; 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 * NULL
* @param object * @param object
* @param path objectpath a.b.c * @param path objectpath a.b.c
* @param defaultValue * @param defaultValue
*/ */
export const optional = (object: any, path: any, defaultValue: any) => { export const optional = (object: any, path: any, defaultValue: any) => {
try { try {
if (defaultValue === undefined) { if (defaultValue === undefined) {

Loading…
Cancel
Save