编码盘点入库

This commit is contained in:
binbin_pan 2024-03-29 15:18:28 +08:00
parent b032265b84
commit 191d5d3e00
2 changed files with 361 additions and 176 deletions

View File

@ -55,6 +55,14 @@ export function getDeviceTypeTree(params = {}){
})
}
// 提交编码入库
export function inputByCode(data) {
return request({
url: '/material/inventoryAndWarehousing/addList',
method: 'post',
data: data
})
}

View File

@ -56,7 +56,7 @@
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="success" icon="el-icon-plus" size="mini" @click="handleNumberAdd">数量盘点</el-button>
<el-button type="success" icon="el-icon-plus" size="mini" @click="handleCodeAdd">盘点</el-button>
<el-button type="success" icon="el-icon-plus" size="mini" @click="handleCodeAdd">盘点</el-button>
</el-form-item>
</el-form>
@ -157,142 +157,178 @@
<el-dialog
:title="title"
:visible.sync="codeOpen"
width="95%"
width="1450px"
append-to-body
:show-close="false"
:close-on-click-modal="false"
>
<el-form :model="codeForm" :rules="codeFormRules" ref="codeForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="入库来源" label-width="150px" prop="codeInStoreSource">
<!-- <el-input
v-model="queryParams.dictName"
placeholder="请输入关键字"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/> -->
<el-select
v-model="codeForm.codeInStoreSource"
placeholder="请选择入库来源"
clearable filterable
style="width: 260px"
>
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="设备/物资类型" label-width="150px" prop="codeDeviceType">
<!-- <el-input
v-model="codeForm.codeDeviceType"
placeholder="请输入设备/物资类型"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/> -->
<el-cascader
placeholder="请输入物品类型"
:options="deviceTypeTree"
:props="deviceTypeTreeProps"
v-model="deviceType"
@change="deviceTypeChange"
ref="deviceTypeCascader"
style="width: 320px;"
filterable
:disabled="cascaderDisabled"
></el-cascader>
</el-form-item>
<el-form-item label="待入库总数" label-width="150px" prop="codeWaitInSum">
<el-input
v-model="codeForm.codeWaitInSum"
placeholder="请输入待入库总数"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="前缀" label-width="150px" prop="codePrefix">
<el-input
v-model="codeForm.codePrefix"
placeholder="请输入前缀"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="后缀范围" label-width="150px" prop="codeSuffixStart">
<el-input
v-model="codeForm.codeSuffixStart"
clearable
style="width: 320px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="~" label-width="auto" prop="codeSuffixEnd">
<el-input
v-model="codeForm.codeSuffixEnd"
clearable
style="width: 320px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单价" label-width="150px" prop="codeSinglePrice">
<el-input
v-model="codeForm.codeSinglePrice"
placeholder="请输入单价"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="选择厂家" label-width="150px" prop="codeFactory">
<el-select
v-model="codeForm.codeFactory"
placeholder="请选择厂家"
clearable filterable
style="width: 320px"
>
<el-option
v-for="item in supplierList"
:key="item.supplierId"
:label="item.supplier"
:value="item.supplierId"
/>
</el-select>
</el-form-item>
<el-form-item label="检修时间" label-width="150px" prop="codeCheckFixTime">
<el-input
v-model="codeForm.codeCheckFixTime"
placeholder="请输入检修时间"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="下次检修时间" label-width="150px" prop="codeNextCheckFixTime">
<el-input
v-model="codeForm.codeNextCheckFixTime"
placeholder="请输入下次检修时间"
clearable
style="width: 260px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备注" label-width="150px" prop="codeNote">
<el-input
v-model="codeForm.codeNote"
type="textarea"
style="width: 320px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item style="margin-left: 200px;">
<el-button type="primary" icon="el-icon-edit" size="mini" @click="fillCodeForm">点击填充</el-button>
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> -->
</el-form-item>
<el-form :model="codeForm" :rules="codeFormRules" ref="codeForm" size="small" :inline="true" v-show="showSearch">
<el-row :gutter="20">
<el-col :span="7">
<el-form-item label="入库来源" label-width="130px" prop="putInType">
<el-select
v-model="codeForm.putInType"
placeholder="请选择入库来源"
clearable filterable
style="width: 220px"
>
<el-option
v-for="item in codeInStoreOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="设备/物资类型" label-width="130px" prop="typeId">
<el-cascader
placeholder="请选择物品类型"
:options="deviceTypeTree"
:props="deviceTypeTreeProps"
v-model="deviceType"
@change="deviceTypeChange"
ref="deviceTypeCascader"
style="width: 400px;"
clearable filterable
:disabled="cascaderDisabled"
></el-cascader>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="待入库总数" label-width="130px" prop="num">
<el-input-number
v-model="codeForm.num"
placeholder="请输入待入库总数"
clearable
:min="1"
:max="99"
:controls="false"
style="width: 220px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="7">
<el-form-item label="前缀" label-width="130px" prop="codePrefix">
<el-input
v-model="codeForm.codePrefix"
placeholder="请输入前缀"
clearable
style="width: 220px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="后缀范围" label-width="130px" prop="codeSuffixStart">
<el-input
v-model="codeForm.codeSuffixStart"
clearable
placeholder="请输入后缀范围"
style="width: 185px"
@keyup.enter.native="handleQuery"
@input="changeInput(codeForm.codeSuffixStart)"
/>
</el-form-item>
<el-form-item label="~" label-width="auto" prop="codeSuffixEnd">
<el-input
v-model="codeForm.codeSuffixEnd"
clearable
placeholder="请输入后缀范围"
style="width: 185px"
@keyup.enter.native="handleQuery"
@input="changeInput(codeForm.codeSuffixEnd)"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="单价" label-width="130px" prop="buyPrice">
<el-input-number
v-model="codeForm.buyPrice"
:precision="2"
placeholder="请输入单价"
clearable
:min="0"
:controls="false"
style="width: 220px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="7">
<el-form-item label="选择厂家" label-width="130px" prop="codeFactory">
<el-select
v-model="codeForm.codeFactory"
placeholder="请选择厂家"
clearable filterable
style="width: 220px"
>
<el-option
v-for="item in supplierList"
:key="item.supplierId"
:label="item.supplier"
:value="item.supplierId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="检修时间" label-width="130px" prop="thisCheckFixTime">
<el-date-picker
v-model="codeForm.thisCheckFixTime"
type="date"
placeholder="请输入检修时间"
style="width: 400px"
@keyup.enter.native="handleQuery">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="下次检修时间" label-width="130px" prop="nextCheckFixTime">
<el-date-picker
v-model="codeForm.nextCheckFixTime"
type="date"
placeholder="请输入检修时间"
style="width: 220px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="7">
<el-form-item label="备注" label-width="130px" prop="remarks">
<el-input
v-model="codeForm.remarks"
type="textarea"
placeholder="请输入备注"
maxlength="200"
rows="4"
show-word-limit
style="width: 220px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item style="margin-left: 200px;">
<el-button type="primary" icon="el-icon-edit" size="mini" @click="fillCodeForm">点击填充</el-button>
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> -->
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
@ -324,15 +360,67 @@
>导出</el-button>
</el-col>
</el-row> -->
<el-table v-loading="loading" :data="returnList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="dictId" />
<el-table-column label="设备编码" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="出厂编码" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="生产厂家" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="检修日期" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="下次检修日期" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="单价" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table v-loading="loading" :data="codeTableList" @selection-change="handleSelectionChange" :stripe="true" :border="true">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" type="index" />
<el-table-column label="设备编码" align="center" prop="maCode" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-input v-model="row.maCode" placeholder="请输入设备编码"></el-input>
</template>
</el-table-column>
<el-table-column label="出厂编码" align="center" prop="outFacCode" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-input v-model="row.outFacCode" placeholder="请输入设备编码"></el-input>
</template>
</el-table-column>
<el-table-column label="生产厂家" align="center" prop="maVender" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-select v-model="row.maVender" placeholder="请选择生产厂家" clearable filterable>
<el-option
v-for="item in supplierList"
:key="item.supplierId"
:label="item.supplier"
:value="item.supplierId"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="检修日期" align="center" prop="thisCheckFixTime" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-date-picker
v-model="row.thisCheckFixTime"
type="date"
placeholder="请输入检修时间"
style="width: 160px"
@keyup.enter.native="handleQuery"
></el-date-picker>
</template>
</el-table-column>
<el-table-column label="下次检修日期" align="center" prop="nextCheckFixTime" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-date-picker
v-model="row.nextCheckFixTime"
type="date"
placeholder="请输入下次检修时间"
style="width: 160px"
@keyup.enter.native="handleQuery"
></el-date-picker>
</template>
</el-table-column>
<el-table-column label="单价" align="center" prop="buyPrice" :show-overflow-tooltip="true">
<template v-slot:default="{ row }">
<el-input-number
v-model="row.buyPrice"
:precision="2"
placeholder="请输入单价"
:min="0"
:controls="false"
clearable
style="width: 160px"
@keyup.enter.native="handleQuery"
/>
</template>
</el-table-column>
<!-- <el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
@ -340,18 +428,19 @@
</el-table-column> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<template v-slot:default="{ row }">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
>通过</el-button>
<el-button
icon="el-icon-edit"
@click="handleResetRow(row)"
>重置</el-button>
<!-- <el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>不通过</el-button>
>不通过</el-button> -->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
@ -386,14 +475,15 @@ import { listType, getType, delType, addType, updateType, refreshCache } from "@
import {
getReturnOfMaterialsInfoAll,
getTypeList,
getDeviceTypeTree
getDeviceTypeTree,
inputByCode
} from "@/api/store/putInStore";
import { getInfo } from '@/api/login'
import { supplierInfoList } from "@/api/store/tools";
export default {
name: "DevicesWarehousing",
dicts: ['sys_normal_disable'],
// dicts: ['sys_normal_disable'],
data() {
return {
//
@ -414,8 +504,15 @@ export default {
modelList: [],
//
returnList: [],
//
codeTableList: [],
//
title: "",
//
codeInStoreOptions: [
{ label: "库存盘点入库", value: "库存盘点入库" },
{ label: "退料入库", value: "退料入库" },
],
//
numberOpen: false,
codeOpen: false,
@ -459,17 +556,17 @@ export default {
// /
numberForm: {},
codeForm: {
codeInStoreSource: undefined,
codeNote: undefined,
codeDeviceType: undefined,
codeWaitInSum: undefined,
putInType: undefined,
remarks: undefined,
typeId: undefined,
num: undefined,
codePrefix: undefined,
codeSuffixStart: undefined,
codeSuffixEnd: undefined,
codeSinglePrice: undefined,
buyPrice: undefined,
codeFactory: undefined,
codeCheckFixTime: undefined,
codeNextCheckFixTime: undefined,
thisCheckFixTime: undefined,
nextCheckFixTime: undefined,
pageNum: 1,
pageSize: 10,
},
@ -483,13 +580,13 @@ export default {
]
},
codeFormRules: {
codeInStoreSource: [
putInType: [
{ required: true, message: "入库来源不能为空", trigger: "blur" }
],
codeDeviceType: [
typeId: [
{ required: true, message: "设备/物资类型不能为空", trigger: "blur" }
],
codeWaitInSum: [
num: [
{ required: true, message: "待入库总数不能为空", trigger: "blur" }
],
}
@ -538,6 +635,8 @@ export default {
this.resetCodeForm();
this.deviceType = {}
this.reset();
this.codeTableList = []
this.$refs['codeForm'].clearValidate()
},
//
reset() {
@ -553,17 +652,17 @@ export default {
//
resetCodeForm() {
this.codeForm = {
codeInStoreSource: undefined,
codeNote: undefined,
codeDeviceType: undefined,
codeWaitInSum: undefined,
putInType: undefined,
remarks: undefined,
typeId: undefined,
num: undefined,
codePrefix: undefined,
codeSuffixStart: undefined,
codeSuffixEnd: undefined,
codeSinglePrice: undefined,
buyPrice: undefined,
codeFactory: undefined,
codeCheckFixTime: undefined,
codeNextCheckFixTime: undefined,
thisCheckFixTime: undefined,
nextCheckFixTime: undefined,
pageNum: 1,
pageSize: 10,
}
@ -575,7 +674,59 @@ export default {
},
/** 填充编码盘点表单 */
fillCodeForm() {
console.log(this.codeForm)
//
this.$refs['codeForm'].validate(valid => {
if (!valid) return
console.log('🚀 ~ fillCodeForm ~ this.codeForm:', this.codeForm);
// this.codeTableList
this.codeTableList = []
// this.codeForm.num, this.codeTableListthis.codeForm
for (let i = 0; i < this.codeForm.num; i++) {
// :
let suffix = (parseInt(this.codeForm.codeSuffixStart) + i).toString().padStart(this.codeForm.codeSuffixStart?.length, '0')
console.log('🚀 ~ fillCodeForm ~ suffix:', suffix);
suffix = isNaN(suffix) ? '' : suffix
const maCode = `${this.codeForm.codePrefix || ''}${suffix}`
//
const outFacCode = ''
//
const maVender = this.supplierList.find(item => item.supplierId == this.codeForm.codeFactory)?.supplier || ''
// : codeForm.thisCheckFixTime, yyyy-MM-dd
let thisCheckFixTime = new Date(this.codeForm.thisCheckFixTime).toLocaleDateString('zh-CN', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/\//g, '-')
if (thisCheckFixTime == 'Invalid Date') thisCheckFixTime = ''
// : codeForm.nextCheckFixTime
let nextCheckFixTime = new Date(this.codeForm.nextCheckFixTime).toLocaleDateString('zh-CN', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/\//g, '-')
if (nextCheckFixTime == 'Invalid Date') nextCheckFixTime = ''
// : codeForm.buyPrice
const buyPrice = this.codeForm.buyPrice || 0
this.codeTableList.push({
maCode,
outFacCode,
maVender,
thisCheckFixTime,
nextCheckFixTime,
buyPrice
})
}
})
},
/** 输入框改变 */
changeInput(num) {
if (isNaN(num)) {
this.$message.error('请输入数字类型')
this.codeForm.codeSuffixStart = this.codeForm.codeSuffixStart.replace(/[^\d]/g, '')
}
},
handleResetRow(row) {
//
row.maCode = ''
row.outFacCode = ''
row.maVender = ''
row.thisCheckFixTime = ''
row.nextCheckFixTime = ''
row.buyPrice = 0
},
/** 重置按钮操作 */
resetQuery() {
@ -615,7 +766,34 @@ export default {
submitForm: function() {
this.$refs['codeForm'].validate(valid => {
if (valid) {
console.log(this.codeForm)
console.log('🚀 ~ this.codeForm:', this.codeForm);
console.log('🚀 ~ this.codeTableList:', this.codeTableList);
//
const SavePutInfoDto = {
isCode: true, //
putInType: this.codeForm.putInType,
typeId: this.codeForm.typeId,
num: this.codeForm.num,
remarks: this.codeForm.remarks || '',
machIneDtoList: this.codeTableList
}
console.log('🚀 ~ submitForm: ~ SavePutInfoDto', SavePutInfoDto)
if (this.codeTableList.length == 0) {
this.$message.error('请点击填充按钮, 填充数据')
return
}
//
inputByCode(SavePutInfoDto).then(response => {
this.$message.success('入库成功')
this.codeOpen = false
this.getList()
this.resetCodeForm()
this.reset()
this.codeTableList = []
this.deviceType = {}
})
}
})
/* this.$refs["form"].validate(valid => {
@ -670,14 +848,14 @@ export default {
},
///////
deviceTypeChange(val){
console.log(val)
this.cascaderDisabled = true
console.log('🚀 ~ deviceTypeChange ~ val:', val);
// this.cascaderDisabled = true
let nodes = null;
nodes = this.$refs.deviceTypeCascader.getCheckedNodes().length > 0 ? this.$refs.deviceTypeCascader.getCheckedNodes() : [this.$refs.deviceTypeCascader.panel.getNodeByValue(val)]
if(nodes[0].level != 4){
return
}
console.log(nodes[0])
console.log('🚀 ~ deviceTypeChange ~ nodes[0]:', nodes[0]);
for(let i = 0; i < this.leaseApplyDetails.length; i++) {
if (this.leaseApplyDetails[i].typeId == nodes[0].data.id) {
this.leaseApplyDetails.splice(i,1)
@ -687,15 +865,15 @@ export default {
this.leaseApplyDetails.push(
this.handelTableItemData(nodes[0])
)
console.log(this.leaseApplyDetails)
console.log('🚀 ~ deviceTypeChange ~ this.leaseApplyDetails:', this.leaseApplyDetails);
// this.deviceType = {}
},
////
handelTableItemData(node){
const template = JSON.parse(JSON.stringify(this.leaseApplyDetailsItem))
// template.createBy = this.user.name
console.log(node.data, node.data.id)
this.codeForm.codeDeviceType = node.data.id
console.log('🚀 ~ handelTableItemData ~ node.data, node.data.id:', node.data, node.data.id);
this.codeForm.typeId = node.data.id
template.num = node.data.num
template.companyId = node.data.companyId
template.typeId = node.data.id
@ -707,8 +885,7 @@ export default {
const index = this.leaseApplyInfoList.find(key => key.companyId == node.data.companyId)
template.parentId = index ? index.id : ''
}
console.log(template)
console.log('🚀 ~ handelTableItemData ~ template:', template);
return template
},