<template>
|
<div class="mod-config">
|
<basic-container>
|
<div style="margin-left: 15px;">
|
<el-row>
|
<el-col :span="1">
|
<div>
|
<el-divider direction="vertical"></el-divider>
|
<div
|
style="float: left;height: 18px;font-size: 14px;line-height: 18px;font-weight: bold"
|
>
|
<span>零件</span>
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="3">
|
<div>
|
<el-input
|
class="change-stock-input"
|
v-model="partNoStock"
|
placeholder="零件"
|
style="width: 100%"
|
disabled
|
>
|
<el-button
|
slot="append"
|
icon="el-icon-search"
|
@click="openPartDialog()"
|
></el-button>
|
</el-input>
|
</div>
|
</el-col>
|
<el-col :span="1" :offset="1">
|
<div>
|
<el-divider direction="vertical"></el-divider>
|
<div
|
style="float: left;height: 18px;font-size: 14px;line-height: 18px;font-weight: bold"
|
>
|
<span>库位</span>
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="3">
|
<div>
|
<el-input
|
class="change-stock-input"
|
v-model="locationNoStock"
|
placeholder="库位号"
|
@focus="openPicker(locationNoStock)"
|
style="width: 100%"
|
disabled
|
>
|
<i
|
slot="suffix"
|
v-show="locationNoStock"
|
@click="clearForm(locationNoStock)"
|
class="el-input__icon el-icon-error err-style"
|
></i>
|
<el-button
|
slot="append"
|
icon="el-icon-search"
|
@click="openLocationDialog()"
|
></el-button>
|
</el-input>
|
</div>
|
</el-col>
|
<el-col :span="2">
|
<div style="display:flex;justify-content:flex-end;">
|
<div
|
style="height: 18px;font-size: 14px;line-height: 18px;font-weight: bold;width:60px;"
|
>
|
<span>批次号</span>
|
</div>
|
<div>
|
<el-divider direction="vertical"></el-divider>
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="3">
|
<div>
|
<el-input
|
class="change-stock-input"
|
v-model="partBatchNoStock"
|
placeholder="批次号"
|
@focus="openPicker(partBatchNoStock)"
|
style="width: 100%"
|
disabled
|
>
|
<i
|
slot="suffix"
|
v-show="partBatchNoStock"
|
@click="clearStock(partBatchNoStock)"
|
class="el-input__icon el-icon-error err-style"
|
></i>
|
<el-button
|
slot="append"
|
icon="el-icon-search"
|
@click="openStockDialog()"
|
></el-button>
|
</el-input>
|
</div>
|
</el-col>
|
<el-col :span="2">
|
<div style="display:flex;justify-content:flex-end;">
|
<div
|
style="height: 18px;font-size: 14px;line-height: 18px;font-weight: bold;width:60px;"
|
>
|
<span>可用数量</span>
|
</div>
|
<div>
|
<el-divider direction="vertical"></el-divider>
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="3">
|
<div>
|
<el-select
|
v-model="stockList.condition"
|
placeholder="请选择"
|
@change="conditionChange"
|
>
|
<el-option
|
v-for="item in conditionOptions"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select>
|
</div>
|
</el-col>
|
<el-col :span="3">
|
<div style="text-align:center;">
|
<el-button @click="clearConditions">清空</el-button
|
><el-button
|
@click="queryByConditions"
|
:disabled="isSubmit"
|
type="primary"
|
>查询</el-button
|
>
|
</div>
|
</el-col>
|
</el-row>
|
<div style="margin-top: 15px;">
|
<el-divider direction="vertical"></el-divider>
|
<div
|
style="float: left;height: 30px;font-size: 14px;line-height: 30px;font-weight: bold"
|
>
|
<span>实时库存</span>
|
</div>
|
<el-button type="primary" @click="addOrUpdateHandle()"
|
>新增</el-button
|
>
|
<el-button type="primary" @click="addStockSubmit()">接收</el-button>
|
<el-button type="primary" @click="deleteStockSubmit()"
|
>发放</el-button
|
>
|
|
<el-table
|
:data="dataForm.dataList"
|
style="width: 100%"
|
class="mps-table"
|
height="500px"
|
>
|
<el-table-column
|
prop="availableStockQuantityMove"
|
header-align="center"
|
align="center"
|
label="变更库存数量"
|
>
|
<template scope="scope">
|
<el-input
|
v-model="scope.row.availableStockQuantityMove"
|
placeholder=""
|
>
|
</el-input>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="可用库存数量"
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.availableStockQuantity }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column header-align="center" align="center" label="工厂">
|
<template slot-scope="scope">
|
<span>{{ scope.row.factoryName }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="零件号"
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.partNo }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="零件名称"
|
show-overflow-tooltip
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.partName }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="仓库"
|
show-overflow-tooltip
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.warehouseName }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column header-align="center" align="center" label="SN号">
|
<template slot-scope="scope">
|
<span>{{ scope.row.partBatchNo }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="IFS批次号"
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.ifsBatchNo }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="locationNo"
|
header-align="center"
|
align="center"
|
label="库位号"
|
>
|
<template slot-scope="scope">
|
<span>{{ scope.row.locationNo }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
header-align="center"
|
align="center"
|
label="是否工序库存"
|
>
|
<template slot-scope="scope">
|
<span>{{
|
scope.row.operationStockStatus == null
|
? ''
|
: scope.row.operationStockStatus
|
? '是'
|
: '否'
|
}}</span>
|
</template>
|
</el-table-column>
|
<el-table-column header-align="center" align="center" label="单位">
|
<template slot-scope="scope">
|
<span>{{ scope.row.unit }}</span>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
<table-form
|
v-if="addOrUpdateVisible"
|
ref="stock"
|
@refreshDataList="getData"
|
></table-form>
|
<part-dialog
|
:currshowlist.sync="showPart"
|
@listenToPartEvent="selectPart"
|
/>
|
<locationDialog
|
:currshowlist.sync="showLocation"
|
:paramObj="paramObj"
|
@listenToLocationEvent="selectLocation"
|
/>
|
<Stock
|
:currshowlist.sync="showStock"
|
:paramObj="paramObj"
|
@listenToPartEvent="selectStock"
|
/>
|
</div>
|
</basic-container>
|
</div>
|
</template>
|
|
<script>
|
import { mapGetters } from 'vuex'
|
import locationDialog from '@/views/common/location.vue'
|
import PartDialog from '@/views/common/part'
|
import Stock from '@/views/common/stock'
|
import {
|
addStockNumber,
|
checkWdr,
|
deleteStockNumber,
|
getStock,
|
getStockCount
|
} from '../../../api/warehouse/stock'
|
import TableForm from './stock-form'
|
import { validateQtyStockNull } from '../../../util/validate'
|
|
export default {
|
data() {
|
return {
|
stockList: {
|
condition: '>0',
|
locationNo: null,
|
locationId: null,
|
partBatchNo: null,
|
partName: null,
|
partNo: null,
|
partId: null
|
},
|
dataForm: {
|
dataList: []
|
},
|
paramObj: {},
|
dataRule: {},
|
addOrUpdateVisible: false,
|
partNoStock: null,
|
locationNoStock: null,
|
partBatchNoStock: null,
|
showPart: false,
|
showLocation: false,
|
showStock: false,
|
conditionOptions: [
|
{ label: '大于0', value: '>0' },
|
{ label: '大于等于0', value: '>=0' },
|
{ label: '等于0', value: '=0' },
|
{ label: '小于0', value: '<0' },
|
{ label: '小于等于0', value: '<=0' }
|
],
|
isSubmit: false
|
}
|
},
|
components: {
|
locationDialog,
|
PartDialog,
|
Stock,
|
TableForm
|
},
|
computed: {
|
...mapGetters(['permissions']),
|
rules: function() {
|
return {
|
availableStockQuantityMove: [
|
{ validator: validateQtyStockNull, trigger: 'blur' }
|
]
|
}
|
}
|
},
|
watch: {
|
partNoStock: {
|
handler(newValue, oldValue) {
|
if (newValue != null && newValue != undefined) {
|
// this.getData()
|
}
|
},
|
deep: true,
|
immediate: true
|
},
|
locationNoStock: {
|
handler(newValue, oldValue) {
|
if (newValue != null && newValue != undefined) {
|
// this.getData()
|
}
|
},
|
deep: true,
|
immediate: true
|
},
|
partBatchNoStock: {
|
handler(newValue, oldValue) {
|
if (newValue != null && newValue != undefined) {
|
// this.getData()
|
}
|
},
|
deep: true,
|
immediate: true
|
}
|
},
|
methods: {
|
// 清空所有查询条件
|
clearConditions() {
|
this.partNoStock = null
|
this.stockList.partNo = null
|
this.paramObj.partId = null
|
this.stockList.partName = null
|
this.stockList.partId = null
|
this.locationNoStock = null
|
this.stockList.locationNo = null
|
this.stockList.locationId = null
|
this.paramObj.locationId = null
|
this.partBatchNoStock = null
|
this.stockList.partBatchNo = null
|
},
|
// 根据查询条件,搜索
|
queryByConditions() {
|
this.getData()
|
},
|
// 可用数量条件变更后,触发查询
|
conditionChange() {
|
// this.getData()
|
},
|
// 零件
|
openPartDialog() {
|
this.showPart = true
|
},
|
getData() {
|
if (this.partNoStock != null) {
|
getStockCount(this.stockList).then((resp) => {
|
const respData = resp.data.data
|
if (respData && respData > 100) {
|
this.dataForm.dataList = []
|
this.$message.error('请填入批次号进行筛选查询')
|
} else {
|
this.isSubmit = true
|
getStock(this.stockList)
|
.then((response) => {
|
this.dataForm.dataList = response.data.data
|
this.isSubmit = false
|
})
|
.catch(() => {
|
this.isSubmit = false
|
})
|
}
|
})
|
} else {
|
this.$message.error('请先选择一个零件')
|
}
|
},
|
openPicker() {
|
document.activeElement.blur() // 主动触发onblur事件,是原生的js哟
|
},
|
clearForm() {
|
this.locationNoStock = null
|
this.stockList.locationNo = this.locationNoStock
|
this.stockList.locationId = null
|
this.paramObj.locationId = null
|
// this.getData()
|
},
|
clearStock() {
|
this.partBatchNoStock = null
|
this.stockList.partBatchNo = this.partBatchNoStock
|
this.locationNoStock = null
|
this.stockList.locationNo = this.locationNoStock
|
this.stockList.locationId = null
|
this.paramObj.locationId = null
|
// this.getData()
|
},
|
selectPart(param) {
|
if (param) {
|
this.partNoStock = param.partNo
|
this.stockList.partNo = this.partNoStock
|
this.paramObj.partId = param.id
|
this.stockList.partName = param.partName
|
this.stockList.partId = param.id
|
}
|
},
|
openLocationDialog() {
|
// if (this.partNoStock != null) {
|
this.showLocation = true
|
// } else {
|
// this.$message.error('请先选择一个零件')
|
// }
|
},
|
selectLocation(param) {
|
if (param) {
|
this.locationNoStock = param.locNo
|
this.stockList.locationNo = this.locationNoStock
|
this.stockList.locationId = param.id
|
this.paramObj.locationId = param.id
|
} else {
|
this.locationNoStock = null
|
this.stockList.locationNo = this.locationNoStock
|
this.stockList.locationId = null
|
this.paramObj.locationId = null
|
// this.getData()
|
}
|
},
|
openStockDialog() {
|
// if (this.partNoStock != null) {
|
this.showStock = true
|
// } else {
|
// this.$message.error('请先选择一个零件')
|
// }
|
},
|
dataFormSubmit() {},
|
selectStock(param) {
|
if (param) {
|
this.partBatchNoStock = param.partBatchNo
|
this.stockList.partBatchNo = this.partBatchNoStock
|
this.stockList.locationNo = param.locationNo
|
this.locationNoStock = param.locationNo
|
this.stockList.locationId = param.locationId
|
this.paramObj.locationId = param.locationId
|
this.partNoStock = param.partNo
|
this.stockList.partNo = this.partNoStock
|
this.paramObj.partId = param.partId
|
this.stockList.partName = param.partName
|
this.stockList.partId = param.partId
|
} else {
|
this.partBatchNoStock = null
|
this.stockList.partBatchNo = this.partBatchNoStock
|
this.locationNoStock = null
|
this.stockList.locationNo = this.locationNoStock
|
this.stockList.locationId = null
|
this.paramObj.locationId = null
|
this.partNoStock = null
|
this.stockList.partNo = null
|
this.paramObj.partId = null
|
this.stockList.partName = null
|
this.stockList.partId = null
|
// this.getData()
|
}
|
},
|
addOrUpdateHandle() {
|
// if (this.partNoStock != null) {
|
this.addOrUpdateVisible = true
|
this.$nextTick(() => {
|
this.$refs.stock.init(this.stockList)
|
})
|
// } else {
|
// this.$message.error('请先选择一个零件')
|
// }
|
},
|
|
addStockSubmit() {
|
if (this.dataForm.dataList.length > 0) {
|
this.$confirm('是否同步ERP?', '确认', {
|
confirmButtonText: '同步',
|
cancelButtonText: '不同步',
|
type: 'warning',
|
showClose: false,
|
closeOnPressEscape: false,
|
closeOnClickModal: false
|
})
|
.then(() => {
|
for (let i = 0; i < this.dataForm.dataList.length; i++) {
|
this.dataForm.dataList[i].synIfs = true
|
}
|
console.log(this.dataForm.dataList)
|
checkWdr(this.dataForm.dataList).then((res1) => {
|
addStockNumber(this.dataForm.dataList).then((res) => {
|
this.$message.success('入库成功')
|
this.getData()
|
})
|
})
|
})
|
.catch(() => {
|
for (let i = 0; i < this.dataForm.dataList.length; i++) {
|
this.dataForm.dataList[i].synIfs = false
|
}
|
checkWdr(this.dataForm.dataList).then((res1) => {
|
addStockNumber(this.dataForm.dataList).then((res) => {
|
this.$message.success('入库成功')
|
this.getData()
|
})
|
})
|
})
|
} else {
|
this.$message.error('不存在实时库存,无法操作')
|
}
|
},
|
deleteStockSubmit() {
|
if (this.dataForm.dataList.length > 0) {
|
var validateFlag = true
|
for (var i = 0; i < this.dataForm.dataList.length; i++) {
|
if (
|
this.dataForm.dataList[i].availableStockQuantityMove >
|
this.dataForm.dataList[i].availableStockQuantity
|
) {
|
validateFlag = false
|
this.$message.error(
|
'第' + (i + 1) + '行' + '发放的变更数量超过可用数量'
|
)
|
break
|
}
|
}
|
if (validateFlag) {
|
this.$confirm('是否同步ERP?', '确认', {
|
confirmButtonText: '同步',
|
cancelButtonText: '不同步',
|
type: 'warning',
|
showClose: false,
|
closeOnPressEscape: false,
|
closeOnClickModal: false
|
})
|
.then(() => {
|
for (let i = 0; i < this.dataForm.dataList.length; i++) {
|
this.dataForm.dataList[i].synIfs = true
|
}
|
deleteStockNumber(this.dataForm.dataList).then((res) => {
|
this.$message.success('发放成功')
|
this.getData()
|
})
|
})
|
.catch(() => {
|
for (let i = 0; i < this.dataForm.dataList.length; i++) {
|
this.dataForm.dataList[i].synIfs = false
|
}
|
deleteStockNumber(this.dataForm.dataList).then((res) => {
|
this.$message.success('发放成功')
|
this.getData()
|
})
|
})
|
}
|
} else {
|
this.$message.error('不存在实时库存,无法操作')
|
}
|
}
|
}
|
}
|
</script>
|
<style lang="scss" scoped>
|
.change-stock-input >>> .el-input__inner {
|
background-color: #fff;
|
}
|
</style>
|