仓库问题修改

dev-scheduling
zhangdi 1 month ago
parent 30e730e61b
commit e182b977e3
  1. 309
      src/views/inboundOutboundManagement/glassCakeOutbound/components/outboundDialog.vue
  2. 4
      src/views/inboundOutboundManagement/glassCakeOutbound/index.vue

@ -1,37 +1,88 @@
<template> <template>
<el-dialog :title="rowItem.isBatch ? '批量出库' : '出库'" append-to-body :modelValue="openShow" width="90%" @close="closeDialog" fullscreen> <el-dialog
<div style="height: 50px;"> :title="rowItem.isBatch ? '批量出库' : '出库'"
<el-input v-model="formInline.orderId" placeholder="扫描出库单号条形码" @keyup.enter.native="changeCode" style="width: 200px;float: left;"></el-input> append-to-body
<el-button type="danger" @click="delFn" style="float: right;">删除</el-button> :modelValue="openShow"
width="90%"
@close="closeDialog"
fullscreen
>
<div style="height: 50px">
<el-input
v-model="formInline.orderId"
placeholder="扫描出库单号条形码"
@keyup.enter.native="changeCode"
style="width: 200px; float: left"
></el-input>
<el-button type="danger" @click="delFn" style="float: right">删除</el-button>
</div> </div>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud" <avue-crud
@search-change="searchChange" @search-reset="searchReset" :before-open="beforeOpen" :option="option"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" :table-loading="loading"
@refresh-change="refreshChange" @on-load="onLoad" @row-save="rowSave" :data="data"
@cell-click="cellClick"> v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
:before-open="beforeOpen"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
@row-save="rowSave"
@cell-click="cellClick"
>
<template #goodsCode="scope"> <template #goodsCode="scope">
<el-select v-model="scope.row.goodsCode" @change="val => changeGoods(val, scope.index)"> <el-select v-model="scope.row.goodsCode" @change="val => changeGoods(val, scope.index)">
<el-option v-for="item in goodsList" :key="item.id" :label="item.goodsCode" :value="item.goodsCode"></el-option> <el-option
v-for="item in goodsList"
:key="item.id"
:label="item.goodsCode"
:value="item.goodsCode"
></el-option>
</el-select> </el-select>
</template> </template>
<template #shId="scope"> <template #shId="scope">
<el-select v-model="scope.row.shId" @change="val => changeWare(val, scope.index)"> <el-select v-model="scope.row.shId" @change="val => changeWare(val, scope.index)">
<el-option v-for="item in scope.row.shList" :key="item.id" :label="item.shName" :value="item.id"></el-option> <el-option
v-for="item in scope.row.shList"
:key="item.id"
:label="item.shName"
:value="item.id"
></el-option>
</el-select> </el-select>
</template> </template>
<template #slId="scope"> <template #slId="scope">
<el-select v-model="scope.row.slId" @change="val => changeLocation(val, scope.index)"> <el-select v-model="scope.row.slId" @change="val => changeLocation(val, scope.index)">
<el-option v-for="item in scope.row.slList" :key="item.id" :label="item.location" :value="item.slId"></el-option> <el-option
v-for="item in scope.row.slList"
:key="item.id"
:label="item.location"
:value="item.slId"
></el-option>
</el-select> </el-select>
</template> </template>
<template #piNo="scope"> <template #piNo="scope">
<el-select v-model="scope.row.piNo" @change="val => changePiNo(val, scope.index)"> <el-select v-model="scope.row.piNo" @change="val => changePiNo(val, scope.index)">
<el-option v-for="item in scope.row.piNoList" :key="item.id" :label="item.piNo" :value="item.piNo"></el-option> <el-option
v-for="item in scope.row.piNoList"
:key="item.id"
:label="item.piNo"
:value="item.piNo"
></el-option>
</el-select> </el-select>
</template> </template>
<template #outQty="scope"> <template #outQty="scope">
<el-input-number v-model="scope.row.outQty" :min="1" :max="scope.row.stockQty" style="width:90%;" controls-position="right"></el-input-number> <el-input-number
v-model="scope.row.outQty"
:min="1"
:max="scope.row.stockQty"
style="width: 90%"
controls-position="right"
></el-input-number>
</template> </template>
</avue-crud> </avue-crud>
@ -44,24 +95,30 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import {getGoodsList,getWarehouseList,getLocationData,scanIssue,batchIssue,} from "@/api/storeManagement/glassCakeOutbound" import {
getGoodsList,
getWarehouseList,
getLocationData,
scanIssue,
batchIssue,
} from '@/api/storeManagement/glassCakeOutbound';
export default { export default {
props: { props: {
showDialog: { showDialog: {
type: Boolean, type: Boolean,
default: false default: false,
}, },
rowItem: { rowItem: {
type: Object, type: Object,
default: () => ({}) default: () => ({}),
} },
}, },
data() { data() {
return { return {
openShow: false, openShow: false,
formInline: { formInline: {
orderId: '', orderId: '',
number2: '' number2: '',
}, },
goodsList: [], goodsList: [],
option: { option: {
@ -133,14 +190,14 @@ export default {
search: false, search: false,
}, },
{ {
label: "流程卡号", label: '流程卡号',
prop: "cardNo", prop: 'cardNo',
width: 150, width: 150,
search: false, search: false,
}, },
{ {
label: "生产数量", label: '生产数量',
prop: "quantity", prop: 'quantity',
search: false, search: false,
width: 120, width: 120,
}, },
@ -183,7 +240,7 @@ export default {
dicData: [ dicData: [
{ label: '是', value: true }, { label: '是', value: true },
{ label: '否', value: false }, { label: '否', value: false },
] ],
}, },
{ {
label: '粉重', label: '粉重',
@ -192,8 +249,8 @@ export default {
search: false, search: false,
}, },
{ {
label: "材料号", label: '材料号',
prop: "materialNo", prop: 'materialNo',
search: false, search: false,
width: 120, width: 120,
}, },
@ -204,8 +261,8 @@ export default {
search: false, search: false,
}, },
{ {
label: "炉批号", label: '炉批号',
prop: "stovePiNo", prop: 'stovePiNo',
search: false, search: false,
width: 120, width: 120,
}, },
@ -215,25 +272,24 @@ export default {
// width:150, // width:150,
// }, // },
{ {
label:"库存数量", label: '库存数量',
prop: "stockQty", prop: 'stockQty',
width: 120, width: 120,
}, },
{ {
label:"出库数量", label: '出库数量',
prop: "outQty", prop: 'outQty',
width: 150, width: 150,
} },
] ],
}, },
data: [], data: [],
selectionList:[] selectionList: [],
};
}
}, },
mounted() { mounted() {
this.openShow = this.showDialog; this.openShow = this.showDialog;
this.getGoods() this.getGoods();
this.onLoad(); this.onLoad();
}, },
watch: { watch: {
@ -249,14 +305,14 @@ export default {
this.onLoad(); this.onLoad();
} }
}, },
deep: true deep: true,
} },
}, },
methods: { methods: {
getGoods() { getGoods() {
getGoodsList().then(res => { getGoodsList().then(res => {
this.goodsList = res.data.data.records this.goodsList = res.data.data.records;
}) });
}, },
selectionChange(list) { selectionChange(list) {
this.selectionList = list; this.selectionList = list;
@ -275,52 +331,59 @@ export default {
}, },
changeCode() { changeCode() {
scanIssue({ scanIssue({
cardNo:this.formInline.orderId cardNo: this.formInline.orderId,
}).then(res => { }).then(res => {
console.log('res------------',res) console.log('res------------', res);
let data = [...res.data.data,...this.data] let data_ = res.data.data;
this.data = this.uniqueByKeys(data,['id', 'cardNo']) // data_[0].outQty =data_.requireQty
data_.forEach(item => {
item.outQty = item.requireQty;
});
let data = [...res.data.data, ...this.data];
this.data = this.uniqueByKeys(data, ['id', 'cardNo']);
if (this.data.length > 0) { if (this.data.length > 0) {
this.data.map(item => { this.data.map(item => {
getWarehouseList({ getWarehouseList({
goodsCode:item.goodsCode goodsCode: item.goodsCode,
}).then(res => { }).then(res => {
item.shList = res.data.data item.shList = res.data.data;
}) });
getLocationData({ getLocationData({
goodsId: item.goodsId, goodsId: item.goodsId,
shId:item.shId shId: item.shId,
}).then(res => { }).then(res => {
let data = this.uniqueById(res.data.data.records) let data = this.uniqueById(res.data.data.records);
item.slList = data item.slList = data;
}) });
getLocationData({ getLocationData({
goodsId: item.goodsId, goodsId: item.goodsId,
shId: item.shId, shId: item.shId,
slId:item.slId slId: item.slId,
}).then(res => { }).then(res => {
item.piNoList = res.data.data.records item.piNoList = res.data.data.records;
}) });
}) });
} }
}) });
}, },
changeGoods(val, index) { changeGoods(val, index) {
let tmp = this.goodsList.find(item => item.goodsCode == val) let tmp = this.goodsList.find(item => item.goodsCode == val);
console.log('tmp------------',tmp) console.log('tmp------------', tmp);
console.log('index------------',index) console.log('index------------', index);
this.data[index].goodsName = tmp.goodsName this.data[index].goodsName = tmp.goodsName;
this.data[index].goodsId = tmp.id this.data[index].goodsId = tmp.id;
this.data[index].shId = '' this.data[index].shId = '';
this.data[index].slId = '' this.data[index].slId = '';
this.data[index].stockQty = '' this.data[index].stockQty = '';
this.data[index].outQty = '' this.data[index].outQty = '';
getWarehouseList({ getWarehouseList({
goodsCode:val goodsCode: val,
}).then(res => { }).then(res => {
this.data[index].shList = res.data.data this.data[index].shList = res.data.data;
}) });
}, },
uniqueById(arr) { uniqueById(arr) {
const seen = new Map(); const seen = new Map();
@ -332,60 +395,90 @@ export default {
return Array.from(seen.values()); return Array.from(seen.values());
}, },
changeWare(val, index) { changeWare(val, index) {
this.data[index].stockQty = '' this.data[index].stockQty = '';
this.data[index].slId = '' this.data[index].slId = '';
getLocationData({ getLocationData({
goodsId: this.data[index].goodsId, goodsId: this.data[index].goodsId,
shId:val shId: val,
}).then(res => { }).then(res => {
let data = this.uniqueById(res.data.data.records) let data = this.uniqueById(res.data.data.records);
this.data[index].slList = data this.data[index].slList = data;
}) });
}, },
changeLocation(val, index) { changeLocation(val, index) {
console.log('val',val) console.log('val', val);
this.data[index].piNo = '' this.data[index].piNo = '';
this.data[index].stockQty = '' this.data[index].stockQty = '';
getLocationData({ getLocationData({
goodsId: this.data[index].goodsId, goodsId: this.data[index].goodsId,
shId: this.data[index].shId, shId: this.data[index].shId,
slId:val slId: val,
}).then(res => { }).then(res => {
this.data[index].piNoList = res.data.data.records this.data[index].piNoList = res.data.data.records;
}) });
}, },
changePiNo(val, index) { changePiNo(val, index) {
console.log('val',val) console.log('val', val);
console.log('index',index) console.log('index', index);
let tmp = this.data[index].piNoList.find(item => item.piNo == val) let tmp = this.data[index].piNoList.find(item => item.piNo == val);
console.log('tmp=======',tmp) console.log('tmp=======', tmp);
this.data[index].stockQty = tmp.usableQuantity this.data[index].stockQty = tmp.usableQuantity;
this.data[index].rlsId = tmp.id this.data[index].rlsId = tmp.id;
}, },
closeDialog(val) { closeDialog(val) {
this.openShow = false this.openShow = false;
this.$emit('closeDialog', val); this.$emit('closeDialog', val);
}, },
submit() { submit() {
// 1.
const invalidRow = this.data.filter(row => {
// 0undefined
const requireQty = row.requireQty || 0;
// 0
const outQty = row.outQty || 0;
// ( + 20%)
const maxAllowedQty = requireQty + requireQty * 0.2;
//
return outQty > maxAllowedQty;
});
console.log(898989898,invalidRow)
// 2.
if (invalidRow) {
//
const requireQty = invalidRow[0].requireQty;
const maxAllowedQty = requireQty + (requireQty * 0.2);
//
const identifier = invalidRow[0].cardNo;
this.$message.error(
`流程卡/零件 [${identifier}] 的出库数量超过允许最大值 (${maxAllowedQty.toFixed(0)}),请调整后重试!`
);
return;
}
// //
const submitData = this.data.map(row => { const submitData = this.data.map(row => {
const { _select, shList, slList, piNoList, ...validData } = row; // const { _select, shList, slList, piNoList, ...validData } = row; //
return validData; return validData;
}); });
console.log('submitData',submitData) console.log('submitData', submitData);
batchIssue(submitData).then(res => { batchIssue(submitData).then(res => {
if (res.data.code === 200) { if (res.data.code === 200) {
this.$message.success("出库成功") this.$message.success('出库成功');
this.closeDialog(true) this.closeDialog(true);
} }
}) });
// this.$message.success('') // this.$message.success('')
// this.openShow = false // this.openShow = false
}, },
delFn() { delFn() {
if (this.selectionList.length == 0) { if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据') this.$message.error('请至少选择一条数据');
return return;
} }
this.$confirm('确定将选择数据删除?', { this.$confirm('确定将选择数据删除?', {
@ -398,9 +491,9 @@ export default {
// 2. arr1 id arr2Ids // 2. arr1 id arr2Ids
const result = this.data.filter(item => !arr2Ids.has(item.id)); const result = this.data.filter(item => !arr2Ids.has(item.id));
this.data = result this.data = result;
// return removeApiScope(this.scopeIds); // return removeApiScope(this.scopeIds);
}) });
}, },
cellClick(row, column, cell, event) { cellClick(row, column, cell, event) {
if (column.property === 'actualPartCode' || column.property === 'goodsKuwei') { if (column.property === 'actualPartCode' || column.property === 'goodsKuwei') {
@ -409,22 +502,22 @@ export default {
}, },
onLoad() { onLoad() {
if (JSON.stringify(this.rowItem) !== '{}') { if (JSON.stringify(this.rowItem) !== '{}') {
this.data = [{...this.rowItem}] this.data = [{ ...this.rowItem }];
getWarehouseList({ getWarehouseList({
goodsCode:this.rowItem.goodsCode goodsCode: this.rowItem.goodsCode,
}).then(res => { }).then(res => {
this.data[0].shList = res.data.data this.data[0].shList = res.data.data;
}) });
getLocationData({ getLocationData({
goodsId: this.data[0].goodsId, goodsId: this.data[0].goodsId,
shId:this.data[0].shId shId: this.data[0].shId,
}).then(res => { }).then(res => {
let data = this.uniqueById(res.data.data.records) let data = this.uniqueById(res.data.data.records);
this.data[0].slList = data this.data[0].slList = data;
}) });
}
}
}
} }
},
},
};
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

@ -143,8 +143,8 @@ export default {
width: 150, width: 150,
}, },
{ {
label: "车间订单号", label: "生产单号",
prop: "woCode", prop: "yoCode",
search: true, search: true,
order:2, order:2,
width: 150, width: 150,

Loading…
Cancel
Save