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.
 
 
 
 
 

691 lines
22 KiB

<script>
import {getWareHouseList} from "../../../api/partspare/wareHouseEntity";
import {getAllBuList} from "../../../api/factory/site";
import {getInventoryStockList} from "../../../api/partspare/inventorystock";
import {saveBatchPurchaseOrder} from "../../../api/partspare/purchaseOrder";
import {Decimal} from "decimal.js";
export default {
name: "inventoryStockPurchasing",
data(){
return{
span:3,
queryParams: {
site: this.$store.state.user.site,
limit: 50,
page: 1,
partNo: '',
partDescription: '',
spec: '',
batchNo: '',
warehouseId: '',
locationId: '',
startFirstInDate: '',
endFirstInDate: '',
startQtyOnHand: '',
endQtyOnHand: '',
groupType: '0',
active: 'Y',
safetyStock: '不安全',
buNo: '',
securityMethod:'库存和在途',
searchType:'PO',
},
buList:[],
wareHouseList:[],
dataList: [],
queryLoading: false,
total:0,
columns:[
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1BuDesc',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'buDesc',
headerAlign: 'center',
align: 'center',
columnLabel: 'BU',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1PartNo',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'partNo',
headerAlign: 'center',
align: 'left',
columnLabel: '备品备件编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1PartDescription',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'partDescription',
headerAlign: 'center',
align: 'left',
columnLabel: '备品备件名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 160
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1BatchNo',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'batchNo',
headerAlign: 'center',
align: 'left',
columnLabel: '序列号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1WarehouseId',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'warehouseId',
headerAlign: 'center',
align: 'left',
columnLabel: '仓库编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1LocationId',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'locationId',
headerAlign: 'center',
align: 'left',
columnLabel: '货位编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1UmId',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'umid',
headerAlign: 'center',
align: 'left',
columnLabel: '单位',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1QtyOnHand',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'qtyOnHand',
headerAlign: 'center',
align: 'right',
columnLabel: '在库数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1MinStock',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'minStock',
headerAlign: 'center',
align: 'right',
columnLabel: '最低库存数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1QtyOfPo',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'qtyOfPo',
headerAlign: 'center',
align: 'right',
columnLabel: '在途订单数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1PartnerId',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'partnerId',
headerAlign: 'center',
align: 'left',
columnLabel: '操作员',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1FirstInDate',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'firstInDate',
headerAlign: 'center',
align: 'center',
columnLabel: '录入日期',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 150
},
],
columns2:[
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1BuDesc',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'buDesc',
headerAlign: 'center',
align: 'center',
columnLabel: 'BU',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1PartNo',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'partNo',
headerAlign: 'center',
align: 'left',
columnLabel: '备品备件编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1PartDescription',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'partDescription',
headerAlign: 'center',
align: 'left',
columnLabel: '备品备件名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 160
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1QtyOnHand',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'qtyOnHand',
headerAlign: 'center',
align: 'right',
columnLabel: '在库数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1MinStock',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'minStock',
headerAlign: 'center',
align: 'right',
columnLabel: '最低库存数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1QtyOfPo',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'qtyOfPo',
headerAlign: 'center',
align: 'right',
columnLabel: '在途订单数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
],
selectionDataList:[],
purchaseVisible:false,
purchaseLoading:false,
}
},
methods:{
handleQuery(){
this.queryLoading = true
getInventoryStockList(this.queryParams).then(({data}) => {
if (data && data.code === 0) {
this.dataList = data.page.list
this.total = data.page.totalCount
} else {
this.dataList = []
this.total = 0
}
this.queryLoading = false
}).catch((error)=>{
this.$message.error(error)
this.queryLoading = false
})
},
getWareHouseList(){
let wareHouse = {
site: this.$store.state.user.site,
active: 'Y',
warehousetype: "备品备件仓",
}
getWareHouseList(wareHouse).then(({data}) =>{
if (data && data.code === 0){
this.wareHouseList = data.data
}
})
},
getBuList() {
let tempData = {
username: this.$store.state.user.name,
}
getAllBuList(tempData).then(({data}) => {
if (data && data.code === 0) {
this.buList = data.rows
}
})
},
handleQueryBySize(val){
this.queryParams.limit = val
this.handleQuery()
},
handleQueryByPage(val){
this.queryParams.page = val
this.handleQuery()
},
rowStyle({row}){
// 当前行在库数量
let qtyOnHand = row.qtyOnHand
// 当前行最低库存数量
let minStock = row.minStock
// 在途数量
let qtyOfPo = row.qtyOfPo
// 累计数量
if (this.queryParams.securityMethod === '库存和在途'){
qtyOnHand += qtyOfPo
}
// 区分不同的样式对应不同的颜色
if (qtyOnHand <= minStock) {
return { 'background-color': '#D8ECF1', cursor: 'pointer' }
}
},
handleSelectionChange(val) {
let qty = 0;
this.selectionDataList = val.map(item => {
if (new Decimal(item.minStock).toNumber() > new Decimal(item.qtyOnHand).toNumber()){
qty = new Decimal(item.minStock).sub(new Decimal(item.qtyOnHand)).toNumber()
}
return {
...item,
purchaseQty: qty,
}
});
},
handlePurchase(){
if (this.selectionDataList.length === 0) {
this.$message.warning('请选择需要采购的备件')
return
}
this.purchaseVisible = true
},
handlePurchaseSave(){
let params = this.selectionDataList.map((item)=>{
return {
...item,
buNo:item.citemCode,
inventoryStockId: item.id,
id:null,
qty: item.purchaseQty,
}
})
this.purchaseLoading = true
saveBatchPurchaseOrder(params).then(({data})=>{
if (data && data.code === 0) {
this.handleQuery();
this.$refs.table.clearSelection();
this.purchaseVisible = false;
this.$message.success(data.msg)
}else {
this.$message.error(data.msg)
}
this.purchaseLoading = false
}).catch((error)=>{
this.$message.error(error)
this.purchaseLoading = false
})
}
},
watch:{
queryLoading(newVal, oldVal){
if (newVal === true){
setTimeout(()=>{
this.queryLoading = false
},3000)
}
},
purchaseLoading(newVal, oldVal){
if (newVal === true){
setTimeout(()=>{
this.purchaseLoading = false
},3000)
}
}
},
created() {
this.getBuList()
this.getWareHouseList()
this.handleQuery()
},
}
</script>
<template>
<div class="box-container">
<el-form label-position="top" :model="queryParams" style="max-width: 1200px">
<el-row :gutter="10">
<el-col :span="span">
<el-form-item label="备品备件编码">
<el-input v-model="queryParams.partNo" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="备品备件名称">
<el-input v-model="queryParams.partDescription" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="规格型号">
<el-input v-model="queryParams.spec" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="序列号">
<el-input v-model="queryParams.batchNo" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="仓库">
<el-select v-model="queryParams.warehouseId" style="width: 100%">
<el-option value="" label="全部"></el-option>
<el-option v-for="(item,index) in wareHouseList "
:key="item.warehouseId" :value="item.warehouseId" :label="item.warehouseName"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="汇总方式">
<el-select v-model="queryParams.groupType" style="width: 100%">
<el-option value="0" label="料号+序号"></el-option>
<el-option value="1" label="料号"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="span*2">
<el-form-item label=" ">
<el-button type="primary" @click="handleQuery">查询</el-button>
<el-button type="primary" @click="handlePurchase">采购</el-button>
</el-form-item>
</el-col>
<el-col :span="span*2">
<el-form-item label="录入日期">
<el-date-picker
style="width: 47.5%"
v-model="queryParams.startFirstInDate"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
<span style="text-align: center">-</span>
<el-date-picker
style="width: 47.5%"
v-model="queryParams.endFirstInDate"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd 23:59:59"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="span*2">
<el-form-item label="在库数量范围">
<el-input style="width: 47.5%" v-model="queryParams.startQtyOnHand" clearable></el-input>
<span style="text-align: center">-</span>
<el-input style="width: 47.5%" v-model="queryParams.endQtyOnHand" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="货位编码">
<el-input v-model="queryParams.startQtyOnHand" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="BU">
<el-select v-model="queryParams.buNo" placeholder="请选择" style="width: 100%">
<el-option label="全部" value=""> </el-option>
<el-option
v-for = "i in buList"
:key = "i.buNo"
:label = "i.buDesc"
:value = "i.buNo">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="安全库存汇总方式">
<el-select v-model="queryParams.securityMethod" style="width: 100%">
<el-option label="库存数量" value="库存"></el-option>
<el-option label="(库存+在途)数量" value="库存和在途"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label=" ">
<el-checkbox v-model="queryParams.safetyStock" true-label="不安全" false-label="" @change="handleQuery">仅显示低于安全库存的备件</el-checkbox>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="height: calc(100% - 120px)">
<el-table :data="dataList" border
height="100%" ref="table"
v-loading="queryLoading"
:row-style="rowStyle"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<el-table-column
v-for="(item,index) in columns" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed===''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
</el-table>
</div>
<el-pagination
style="margin-top: 5px"
@size-change="handleQueryBySize"
@current-change="handleQueryByPage"
:current-page="queryParams.page"
:page-sizes="[50, 100, 500, 1000]"
:page-size="queryParams.limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog :visible.sync="purchaseVisible" title="待创建采购订单备件清单" :close-on-click-modal="false" width="1000px" v-drag>
<div class="rq">
<el-table :data="selectionDataList" border height="400px">
<el-table-column
v-for="(item,index) in columns2" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed===''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
<el-table-column label="采购数量" align="center" min-width="100">
<template slot-scope="{row,$index}">
<el-input-number style="width: 100%;" :min="0" :controls="false" :step="0" v-model="selectionDataList[$index].purchaseQty"></el-input-number>
</template>
</el-table-column>
</el-table>
</div>
<el-footer style="text-align: center;line-height: 1;height: 30px;margin-top: 10px">
<el-button type="primary" :loading="purchaseLoading" @click="handlePurchaseSave">保存</el-button>
<el-button type="primary" @click="purchaseVisible = false">关闭</el-button>
</el-footer>
</el-dialog>
</div>
</template>
<style scoped>
</style>