You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
8.4 KiB
216 lines
8.4 KiB
<template> |
|
<el-dialog title="出库" append-to-body :modelValue="openShow" width="80%" @close="closeDialog"> |
|
<el-table :data="tableData"> |
|
<el-table-column label="提请物料" prop="goodsCode" align="center"></el-table-column> |
|
<el-table-column label="材料名称" prop="goodsName" align="center"></el-table-column> |
|
<el-table-column label="规格" prop="specifications" align="center"></el-table-column> |
|
<el-table-column label="库房" prop="shId" align="center"> |
|
<template #default="scope"> |
|
<el-select v-model="scope.row.shId" @change="(val) => changeWare(val,scope.$index)"> |
|
<el-option v-for="item in wareList" :key="item.id" :label="item.shName" :value="item.id"></el-option> |
|
</el-select> |
|
</template> |
|
</el-table-column> |
|
<el-table-column label="出库库位" prop="slId" align="center"> |
|
<template #default="scope"> |
|
<el-select v-model="scope.row.slId" @change="(val) => changeLocation(val,scope.$index)"> |
|
<el-option v-for="item in locationList" :key="item.id" :label="item.location" :value="item.slId"></el-option> |
|
</el-select> |
|
</template> |
|
</el-table-column> |
|
<el-table-column label="批次号" prop="piNo" align="center"> |
|
<template #default="scope"> |
|
<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-select> |
|
</template> |
|
</el-table-column> |
|
<el-table-column label="可出库数量" prop="availableQty" align="center"></el-table-column> |
|
<el-table-column label="出库数量" prop="currentOutQty" align="center"> |
|
<template #default="scope"> |
|
<el-input-number controls-position="right" :max="scope.row.availableQty" v-model="scope.row.currentOutQty"></el-input-number> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
<template #footer> |
|
<span class="dialog-footer"> |
|
<el-button @click="closeDialog">取 消</el-button> |
|
<el-button type="primary" @click="submit">确 定</el-button> |
|
</span> |
|
</template> |
|
</el-dialog> |
|
</template> |
|
|
|
<script> |
|
import {getLocationData,editIssue,getWarehouseList,batchIssue} from "@/api/storeManagement/materialIssuing" |
|
export default { |
|
props:{ |
|
showDialog: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
row:{ |
|
type: Object, |
|
default: {} |
|
}, |
|
list:{ |
|
type: Array, |
|
default: [] |
|
} |
|
}, |
|
data() { |
|
return { |
|
openShow: false, |
|
tableData:[], |
|
locationList:[], |
|
piNoList:[], |
|
wareList:[] |
|
} |
|
}, |
|
mounted(){ |
|
this.openShow = this.showDialog |
|
if(JSON.stringify(this.row) != '{}'){ |
|
this.tableData = [{ |
|
...this.row, |
|
shId:this.row.shId == -1 ? '':this.row.shId, |
|
slId:this.row.slId == -1 ? '':this.row.slId, |
|
piNo:this.row.piNo == -1 ? '':this.row.piNo, |
|
availableQty:this.row.availableQty == -1 ? '':this.row.availableQty, |
|
currentOutQty:this.row.currentOutQty == -1 ? '':this.row.currentOutQty, |
|
rlsId:this.row.rlsId == -1 ? '':this.row.rlsId, |
|
}] |
|
this.getWare() |
|
this.getLocation() |
|
}else if(this.list.length > 0){ |
|
this.tableData = this.list |
|
this.tableData.map(item =>{ |
|
item.shId = item.shId == -1 ? '':item.shId |
|
item.slId = item.slId == -1 ? '':item.slId |
|
item.piNo = item.piNo == -1 ? '':item.piNo |
|
item.availableQty = item.availableQty == -1 ? '': item.availableQty, |
|
item.currentOutQty = item.currentOutQty == -1 ? '': item.currentOutQty, |
|
this.getWare(item.goodsCode) |
|
if(item.shId != '' && item.goodsId != '' && item.slId != ''){ |
|
this.getLocation(item.shId,item.goodsId,item.slId) |
|
} |
|
}) |
|
} |
|
console.log('tableData============',this.tableData) |
|
|
|
}, |
|
methods:{ |
|
closeDialog(val){ |
|
this.openShow = false |
|
this.$emit('closeDialog',val) |
|
}, |
|
getWare(val){ |
|
getWarehouseList({ |
|
goodsCode:val ? val : this.row.goodsCode |
|
}).then(res =>{ |
|
console.log('res-----------',res) |
|
this.wareList = res.data.data |
|
}) |
|
}, |
|
uniqueById(arr) { |
|
const seen = new Map(); |
|
for (const item of arr) { |
|
if (!seen.has(item.slId)) { |
|
seen.set(item.slId, item); |
|
} |
|
} |
|
return Array.from(seen.values()); |
|
}, |
|
getLocation(shId,goodsId,slId){ |
|
getLocationData({ |
|
shId:shId ? shId : this.row.shId, |
|
goodsId:goodsId ? goodsId : this.row.goodsId |
|
}).then(res =>{ |
|
let data = this.uniqueById(res.data.data.records) |
|
this.locationList = data |
|
|
|
getLocationData({ |
|
shId:shId ? shId : this.row.shId, |
|
goodsId:goodsId ? goodsId : this.row.goodsId, |
|
slId:slId ? slId : this.row.slId |
|
}).then(res =>{ |
|
this.tableData[0].piNoList = res.data.data.records |
|
}) |
|
}) |
|
}, |
|
changeWare(val,index){ |
|
this.tableData[index].slId = '' |
|
this.tableData[index].piNo = '' |
|
this.tableData[index].availableQty = null |
|
getLocationData({ |
|
shId:val, |
|
goodsId:this.tableData[index].goodsId |
|
}).then(res =>{ |
|
let data = this.uniqueById(res.data.data.records) |
|
this.locationList = data |
|
}) |
|
}, |
|
// 切换库位 |
|
changeLocation(val,index){ |
|
// let tmp = this.locationList.find(item => item.location == val) |
|
// this.tableData[index].currentStock = tmp.currentStock |
|
this.tableData[index].piNo = "" |
|
this.tableData[index].availableQty = null |
|
getLocationData({ |
|
shId:this.tableData[index].shId, |
|
goodsId:this.tableData[index].goodsId, |
|
slId:val |
|
}).then(res =>{ |
|
this.tableData[index].piNoList = res.data.data.records |
|
}) |
|
}, |
|
// 切换批号 |
|
changePiNo(val,index){ |
|
this.tableData[index].availableQty = null |
|
let tmp = this.tableData[index].piNoList.find(item => item.piNo == val) |
|
this.tableData[index].availableQty = tmp.quantity |
|
this.tableData[index].rlsId = tmp.id |
|
}, |
|
submit(){ |
|
// this.tableData.map(item =>{ |
|
// if(item.outQuantity > item.availableQty){ |
|
// this.$message.error('出库数量不可大于可出库数量') |
|
// return |
|
// } |
|
// }) |
|
|
|
// 校验通过:准备提交数据(过滤无用字段) |
|
const submitData = this.tableData.map(row => { |
|
const { piNoList, ...validData } = row; // 剔除选择状态字段 |
|
return validData; |
|
}); |
|
console.log(submitData) |
|
let data = [] |
|
submitData.map(item =>{ |
|
data.push({ |
|
crId:item.id, |
|
currentOutQty:item.currentOutQty, |
|
rlsId:item.rlsId |
|
}) |
|
}) |
|
console.log('data-----------',data) |
|
|
|
batchIssue(data).then(res =>{ |
|
if(res.data.code === 200){ |
|
this.$message.success('出库成功') |
|
this.closeDialog(true) |
|
} |
|
}) |
|
// editIssue(submitData).then(res =>{ |
|
// if(res.data.code === 200){ |
|
// this.$message.success('修改成功') |
|
// this.closeDialog(true) |
|
// } |
|
// }) |
|
}, |
|
} |
|
} |
|
</script> |
|
|
|
<style> |
|
|
|
</style> |