原材料盘点

master
hou 3 years ago
parent 3a81af56be
commit 89d4867fe2

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

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

@ -7,33 +7,35 @@
<view class="title">{{ $t('message.raw_Inventory') }}</view> <view class="title">{{ $t('message.raw_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="productItem" label-width="180rpx">
<!-- 单号 --> <!-- 单号 -->
<u-form-item :required="true" :label="$t('message.InventoryOrderNo')" prop="pddNo"> <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>
<!-- 物料号 -->
<!-- <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-form-item :label="$t('message.CommissionedLocation')" prop="spQty">
<u-input v-model="originWl.locCode" type="select" @click="originWlSelect = true" :placeholder="$t('message.po_PleaseInput')" /> <u-input v-model="productItem.locCode" placeholder=" " :disabled="true" type="number" />
<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> </u-form-item>
<!-- 物料号 --> <!-- 物料号 -->
<u-form-item :label="$t('message.po_MaterielNo')" prop="productDescZh"> <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="productItem.productCode" type="select" @click="originWlSelect = true" :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="model.InventoryItemList" @confirm="onchange"></u-select>
<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> </u-form-item>
<!-- 总数 --> <!-- 物料名 -->
<u-form-item :label="$t('message.Warehouse_TotalNumber')" prop="spQty"> <u-form-item :label="$t('message.InventoryMateriel')" prop="productDescZh">
<u-input v-model="form.spQty" :placeholder="$t('message.po_PleaseInput')" type="number" /> <u-input v-model="productItem.productDescZh" placeholder=" " :disabled="true" type="text" />
</u-form-item> </u-form-item>
<!-- 盘点数 --> <!-- 物料已扫 -->
<u-form-item :label="$t('message.Inventory_count')" prop="spQty"> <u-form-item :label="$t('message.product_Swept')" prop="productDescZh">
<u-input v-model="form.spQty" :placeholder="$t('message.po_PleaseInput')" type="number" /> <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-item>
</u-form> </u-form>
<view class="bottom-bar"> <view class="bottom-bar">
@ -57,12 +59,6 @@ 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';
// interface OptionType {
// label: string;
// value: string;
// }
@Component @Component
export default class rawMaterialInventory extends BasePage { export default class rawMaterialInventory extends BasePage {
@Ref('form') readonly $form!: VForm; @Ref('form') readonly $form!: VForm;
@ -70,75 +66,83 @@ export default class rawMaterialInventory extends BasePage {
index() { index() {
this.toPage(this.page.raw.index); this.toPage(this.page.raw.index);
} }
status = false; pddNo: any = '';
form = { spQty: any = '';
// productItem: any = {};
pddNo: null, allNum: number = 0;
//
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;
originWlSelect = false; 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() { onReady() {
this.$form.setRules(this.rules); this.empty();
//this.model.queryLocation(); }
// empty() {
this.$form.resetFields();
this.model.orderInInfo.carNo = ''; this.model.orderInInfo.carNo = '';
this.model.orderInInfo.bookingTime = ''; this.model.orderInInfo.bookingTime = '';
this.model.orderInInfo.supplyCode = ''; this.model.orderInInfo.supplyCode = '';
this.model.orderInInfo.poType = ''; this.model.orderInInfo.poType = '';
this.model.orderInInfo.location = ''; this.model.orderInInfo.location = '';
this.spQty = '';
this.productItem = {};
this.allNum = 0;
} }
back() { //
uni.navigateBack({ delta: 1 }); async rawMaterialInventoryCheckRaw() {
} if (!this.pddNo) {
async onSubmit() { uni.showToast({ title: this.$t('message.Commission_tips1') as any });
this.$form.validate((valid: boolean) => {
if (!valid) return;
if (!this.model.hasDnInfo) {
this.customToast(this.$t('message.dn_PleaseScan') as string);
return; return;
} }
// sessionStorage.setItem( await this.model.rawMaterialInventoryCheckRaw(this.pddNo);
// "dnNo", this.allNum = 0;
// JSON.stringify(this.form.pddNo) as any if (this.model.InventoryList.length != 0) {
// ); this.model.InventoryList.forEach((item: any) => {
this.allNum += parseFloat(item.spQty);
// this.toPage(this.page.raw.ingoods.dnReceipt.detail);
}); });
await this.model.submitOrderInEnter(); 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 });
} }
} }
</script> </script>

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

Loading…
Cancel
Save