原材料盘点

master
hou 3 years ago
parent 3a81af56be
commit 89d4867fe2

@ -422,6 +422,7 @@ export default {
Warehouse_Tip7: '盘点未完成,确定继续吗',
selectCode: '请先选择编码',
standard: '条码长度必须是20位',
Total_scanned:'已扫总数',
Warehouse_Tip8: '请输入成本中心',
barCodeLength:'条码长度不足20位',
Warehouse_Tip9: '操作成功',

@ -84,6 +84,7 @@ export default {
materials: 'Please return all materials',
po_OddNumbers: 'PO No',
po_Supplier: 'Supplier',
Total_scanned:'Total',
po_OrderType: 'Order type',
po_Location: 'Inventory',
po_PleaseScan: 'Please scan PO',

@ -7,33 +7,35 @@
<view class="title">{{ $t('message.raw_Inventory') }}</view>
<view class="right"></view>
</view>
<u-form class="form" ref="form" :model="form" label-width="180rpx">
<u-form class="form" ref="form" :model="productItem" label-width="180rpx">
<!-- 单号 -->
<u-form-item :required="true" :label="$t('message.InventoryOrderNo')" prop="pddNo">
<u-search :placeholder="$t('message.InventoryPleaseScan')" v-model.trim="form.pddNo" @search="model.rawMaterialInventoryCheckRaw" :show-action="false"></u-search>
<u-search :placeholder="$t('message.InventoryPleaseScan')" v-model.trim="pddNo" @search="rawMaterialInventoryCheckRaw" :show-action="false"></u-search>
</u-form-item>
<!-- 已扫总数 -->
<u-form-item :label="$t('message.Total_scanned')" prop="spQty">
<u-input v-model="allNum" placeholder=" " :disabled="true" type="number" />
</u-form-item>
<!-- 物料号 -->
<!-- <u-form-item :label="$t('message.InventoryMaterielNo')" prop="productCode">
<u-search :placeholder="$t('message.po_PleaseInput')" v-model="form.productCode" @search="checkRawProductCode" :show-action="false"></u-search>
</u-form-item> -->
<!-- 库位 -->
<u-form-item :required="true" :label="$t('message.product_Location')">
<u-input v-model="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="list" @confirm="onchange"></u-select>
<u-form-item :label="$t('message.CommissionedLocation')" prop="spQty">
<u-input v-model="productItem.locCode" placeholder=" " :disabled="true" type="number" />
</u-form-item>
<!-- 物料号 -->
<u-form-item :label="$t('message.po_MaterielNo')" prop="productDescZh">
<!-- <u-input v-model="form.productDescZh" :placeholder="$t('message.po_PleaseInput')" /> -->
<u-input v-model="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="list" @confirm="onchange"></u-select>
<u-input v-model="productItem.productCode" 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.InventoryItemList" @confirm="onchange"></u-select>
</u-form-item>
<!-- 总数 -->
<u-form-item :label="$t('message.Warehouse_TotalNumber')" prop="spQty">
<u-input v-model="form.spQty" :placeholder="$t('message.po_PleaseInput')" type="number" />
<!-- 物料名 -->
<u-form-item :label="$t('message.InventoryMateriel')" prop="productDescZh">
<u-input v-model="productItem.productDescZh" placeholder=" " :disabled="true" type="text" />
</u-form-item>
<!-- 盘点数 -->
<u-form-item :label="$t('message.Inventory_count')" prop="spQty">
<u-input v-model="form.spQty" :placeholder="$t('message.po_PleaseInput')" type="number" />
<!-- 物料已扫 -->
<u-form-item :label="$t('message.product_Swept')" prop="productDescZh">
<u-input v-model="productItem.spQty" placeholder=" " :disabled="true" type="number" />
</u-form-item>
<!-- 数量 -->
<u-form-item :label="$t('message.dn_Number')" prop="spQty">
<u-input v-model="spQty" :placeholder="$t('message.PleaseQuantity')" type="number" />
</u-form-item>
</u-form>
<view class="bottom-bar">
@ -57,12 +59,6 @@ import { Component, Ref } from 'vue-property-decorator';
import { BasePage } from '@/components/base/page';
import { VForm, VFormRules } from 'vue/types/form';
import model from './model';
// interface OptionType {
// label: string;
// value: string;
// }
@Component
export default class rawMaterialInventory extends BasePage {
@Ref('form') readonly $form!: VForm;
@ -70,76 +66,84 @@ export default class rawMaterialInventory extends BasePage {
index() {
this.toPage(this.page.raw.index);
}
status = false;
form = {
//
pddNo: null,
//
productCode: null,
productDescZh: null,
//
spQty: null,
};
originWl: any = {};
list: any = [];
cboPlaceSelect = false;
rules: VFormRules<any> = {
pddNo: [{ required: true, message: this.$t('message.dn_PleaseScan') as string }],
// cboPlace: [{ required: true, message: this.$t('message.Warehouse_Tip10') as string }],
};
value = '';
show = false;
pddNo: any = '';
spQty: any = '';
productItem: any = {};
allNum: number = 0;
originWlSelect = false;
//
async checkRawProductCode(productCode: string) {
let result = await model.checkRawProductCode({
productCode,
pddNo: this.form.pddNo,
});
console.log('result:::', result);
this.status = result.isState;
}
checkRawCreateInfo() {
if (this.status) {
model.checkRawProductComplete(this.form);
} else {
model.checkRawCreateInfo(this.form);
}
}
async checkRawOrderComplete() {
await model.checkRawOrderComplete(this.form.pddNo);
}
// onReadyonLoad
//
onReady() {
this.$form.setRules(this.rules);
//this.model.queryLocation();
//
this.$form.resetFields();
this.empty();
}
empty() {
this.model.orderInInfo.carNo = '';
this.model.orderInInfo.bookingTime = '';
this.model.orderInInfo.supplyCode = '';
this.model.orderInInfo.poType = '';
this.model.orderInInfo.location = '';
this.spQty = '';
this.productItem = {};
this.allNum = 0;
}
//
async rawMaterialInventoryCheckRaw() {
if (!this.pddNo) {
uni.showToast({ title: this.$t('message.Commission_tips1') as any });
return;
}
await this.model.rawMaterialInventoryCheckRaw(this.pddNo);
this.allNum = 0;
if (this.model.InventoryList.length != 0) {
this.model.InventoryList.forEach((item: any) => {
this.allNum += parseFloat(item.spQty);
});
this.productItem = this.model.InventoryList[0];
}
}
//
onchange(e: any) {
this.model.InventoryList.forEach((item: any) => {
if (item.productCode == e[0].label) {
this.productItem = item;
}
});
}
//
async checkRawCreateInfo() {
if (!this.spQty) {
uni.showToast({ title: this.$t('message.Summary_PleaseInputNumber') as any });
return;
}
if (!this.pddNo) {
uni.showToast({ title: this.$t('message.Commission_tips1') as any });
return;
}
let params = {
factoryCode: this.session.factoryCode,
loginName: this.session.loginName,
pddNo: this.pddNo,
productCode: this.productItem.productCode,
productDescZh: this.productItem.productDescZh,
spQty: this.spQty,
};
await model.checkRawProductComplete(params);
if (this.model.code == '1') {
this.empty();
await this.rawMaterialInventoryCheckRaw();
}
}
//
async checkRawOrderComplete() {
await model.checkRawOrderComplete(this.pddNo);
if (this.model.code == '1') {
this.empty();
this.pddNo = '';
}
}
//
back() {
uni.navigateBack({ delta: 1 });
}
async onSubmit() {
this.$form.validate((valid: boolean) => {
if (!valid) return;
if (!this.model.hasDnInfo) {
this.customToast(this.$t('message.dn_PleaseScan') as string);
return;
}
// sessionStorage.setItem(
// "dnNo",
// JSON.stringify(this.form.pddNo) as any
// );
// this.toPage(this.page.raw.ingoods.dnReceipt.detail);
});
await this.model.submitOrderInEnter();
}
}
</script>

@ -1,16 +1,9 @@
import {
Action,
getModule,
Module,
Mutation,
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 httpjson from "@/utils/location";
import { Action, getModule, Module, Mutation, 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 httpjson from '@/utils/location';
class OrderInInfo {
checked?: boolean;
@ -29,12 +22,13 @@ class OrderInInfo {
namespaced: true,
dynamic: true,
store,
name: "raw.ingoods.dnReceipt",
name: 'raw.ingoods.dnReceipt',
})
export class ReceiptModule extends VuexModule {
// 是否有
isState = true;
sendSpot = "";
sendSpot = '';
code: any = '';
/**
* sap
*/
@ -42,7 +36,7 @@ export class ReceiptModule extends VuexModule {
/**
*
*/
dnNo = "";
dnNo = '';
/**
*
*/
@ -55,6 +49,8 @@ export class ReceiptModule extends VuexModule {
*
*/
orderInInfoListEx: OrderInInfo[] = [];
InventoryList: any = [];
InventoryItemList: any = [];
/**
*
@ -129,7 +125,7 @@ export class ReceiptModule extends VuexModule {
loginName: session.loginName,
userDefined3: 1,
});
console.log("result", result);
console.log('result', result);
const cboPlaceList = result.data.records.map((_: any) => ({
label: _.sendSpot,
value: _.sendSpot,
@ -150,16 +146,12 @@ export class ReceiptModule extends VuexModule {
loginName: session.loginName,
});
const orderInInfo = list[0] || {};
const orderInInfoList = list.filter(
(_: OrderInInfo) => _.userDefined10 === "1"
);
const orderInInfoListEx = list.filter(
(_: OrderInInfo) => _.userDefined10 === "0"
);
const orderInInfoList = list.filter((_: OrderInInfo) => _.userDefined10 === '1');
const orderInInfoListEx = list.filter((_: OrderInInfo) => _.userDefined10 === '0');
// orderInInfoList.forEach((item: any) => {
// item.receiptAmount = item.requestAmount;
// });
localStorage.setItem("sendSpot", JSON.stringify(list[0].sendSpot) as any);
localStorage.setItem('sendSpot', JSON.stringify(list[0].sendSpot) as any);
return { dnNo, orderInInfo, orderInInfoList, orderInInfoListEx };
}
@ -168,20 +160,27 @@ export class ReceiptModule extends VuexModule {
*
* @param pddNo
*/
@Action
@MutationAction
async rawMaterialInventoryCheckRaw(pddNo: string) {
const { msg }: any = await http.post(
url.material.rawMaterialInventory.checkRaw,
{
pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
}
);
uni.showToast({
icon: "none",
title: msg,
const res: any = await http.post(url.material.rawMaterialInventory.checkRaw, {
pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
});
const InventoryList = res.data;
const InventoryItemList = [];
InventoryList.forEach((item: any) => {
let arr = {
value: item.productCode,
label: item.productCode,
};
InventoryItemList.push(arr);
});
return { InventoryList, InventoryItemList };
// uni.showToast({
// icon: "none",
// title: msg,
// });
}
/**
@ -193,20 +192,17 @@ export class ReceiptModule extends VuexModule {
*/
@Action
async checkRawProductCode(form: any) {
const { code, msg }: any = await http.post(
url.material.rawMaterialInventory.productCode,
{
productCode: form.productCode,
pddNo: form.pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
}
);
const { code, msg }: any = await http.post(url.material.rawMaterialInventory.productCode, {
productCode: form.productCode,
pddNo: form.pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
});
uni.showToast({
icon: "none",
icon: 'none',
title: msg,
});
console.log("code:::", code, msg);
console.log('code:::', code, msg);
const isState = !!+code;
return { isState };
}
@ -219,16 +215,13 @@ export class ReceiptModule extends VuexModule {
*/
@Action
async checkRawCreateInfo(form: any) {
const { msg }: any = await http.post(
url.material.rawMaterialInventory.createInfo,
{
...form,
factoryCode: session.factoryCode,
loginName: session.loginName,
}
);
const { msg }: any = await http.post(url.material.rawMaterialInventory.createInfo, {
...form,
factoryCode: session.factoryCode,
loginName: session.loginName,
});
uni.showToast({
icon: "none",
icon: 'none',
title: msg,
});
}
@ -240,20 +233,15 @@ export class ReceiptModule extends VuexModule {
* @param {string} pddNo
* @memberof ReceiptModule
*/
@Action
@MutationAction
async checkRawProductComplete(form: any) {
const { msg }: any = await http.post(
url.material.rawMaterialInventory.productComplete,
{
...form,
factoryCode: session.factoryCode,
loginName: session.loginName,
}
);
uni.showToast({
icon: "none",
title: msg,
const res: any = await http.post(url.material.rawMaterialInventory.productComplete, {
...form,
factoryCode: session.factoryCode,
loginName: session.loginName,
});
const code = res.code;
return { code };
}
/**
@ -263,20 +251,15 @@ export class ReceiptModule extends VuexModule {
* @param {string} pddNo
* @memberof ReceiptModule
*/
@Action
@MutationAction
async checkRawOrderComplete(pddNo?: string | null) {
const { msg }: any = await http.post(
url.material.rawMaterialInventory.orderComplete,
{
pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
}
);
uni.showToast({
icon: "none",
title: msg,
const res: any = await http.post(url.material.rawMaterialInventory.orderComplete, {
pddNo,
factoryCode: session.factoryCode,
loginName: session.loginName,
});
const code = res.code;
return { code };
}
/**
@ -285,7 +268,7 @@ export class ReceiptModule extends VuexModule {
@MutationAction
async submitOrderInEnter() {
const list = (this.state as any).orderInInfoList.map((item: any) => {
item.orderStatus = item.checked ? "2" : "1";
item.orderStatus = item.checked ? '2' : '1';
return item;
});
const result: any = await http.post(url.material.DNorderin.enter, {
@ -295,22 +278,19 @@ export class ReceiptModule extends VuexModule {
list,
});
uni.showToast({
icon: "none",
icon: 'none',
title: result.msg,
});
const orderInInfoList = result.list.sort(
(a: any, b: any) =>
Number(a.accountingStatus) - Number(b.accountingStatus)
);
const orderInInfoList = result.list.sort((a: any, b: any) => Number(a.accountingStatus) - Number(b.accountingStatus));
return { orderInInfoList };
}
/**
*
*/
@Action({ commit: "updateCheckedOrderInInfoListKw" })
@Action({ commit: 'updateCheckedOrderInInfoListKw' })
async changeOrderInLocation(kw: string) {
await http.post("/wmspda/material/orderin/enter", {
await http.post('/wmspda/material/orderin/enter', {
warehouseCode: session.warehouseCode,
factoryCode: session.factoryCode,
loginName: session.loginName,
@ -318,12 +298,9 @@ export class ReceiptModule extends VuexModule {
});
return kw;
}
@Action({ commit: "updateCheckedOrderInInfoListKw" })
@Action({ commit: 'updateCheckedOrderInInfoListKw' })
async queryByFactoryCodeAndWorkAreaCode(content: any) {
let res = await http.post(
"/wmspda/fg/queryByFactoryCodeAndWorkAreaCode",
content
);
let res = await http.post('/wmspda/fg/queryByFactoryCodeAndWorkAreaCode', content);
return res;
}
}

Loading…
Cancel
Save