入库列表和新建

入库列表和新建
pull/1/head
siontion 9 months ago
parent b265286370
commit 4bfbbcfe87

@ -2,23 +2,18 @@ import request from '@/config/axios'
export interface StorageVO {
id: number
stockType: boolean
stockType: number
stockInType: number
stockOutType: number
stockNo: string
headerNo: number
materialId: number
lotNo: string
whId: number
rgId: number
pnId: number
storageOkQty: number
storageNgQty: number
storageSpQty: number
description: string
status: boolean
status: number
whId: number
keeper: number
keeperTime: Date
outer: number
outerTime: Date
outbound: number
outboundTime: Date
cancel: number
cancelTime: Date
}

@ -217,6 +217,10 @@ export enum DICT_TYPE {
HELI_MATERIAL_ORIGINAL = 'heli_material_original', // 物料主要来源
HELI_COMMON_IS_OR_NOT = 'heli_common_is_or_not', // 是否数字类型
HELI_PROCEDURE_TYPE = 'heli_procedure_type' // 工序类型
HELI_PROCEDURE_TYPE = 'heli_procedure_type', // 工序类型
HELI_STORAGE_IN_TYPE = 'heli_storage_in_type', // 入库类型
HELI_STORAGE_OUT_TYPE = 'heli_storage_out_type',//出库类型
HELI_STORAGE_STATUS = 'heli_storage_status',//入库出库状态
}

@ -96,7 +96,8 @@ const open = async (type: string, id?: number) => {
const queryParamsWh = reactive({
pageNo: 1,
pageSize: 99
pageSize: 99,
whStatus : 1
})
const dataWh = await WarehouseApi.getWarehousePage(queryParamsWh)
@ -107,7 +108,13 @@ const open = async (type: string, id?: number) => {
whList.value = dataWh.list
const dataRg = await RgApi.getRgPage(queryParamsWh)
const queryParamsRg = reactive({
pageNo: 1,
pageSize: 99,
rgStatus : 1
})
const dataRg = await RgApi.getRgPage(queryParamsRg)
dataRg.list.forEach(element => {
element.label = element.rgName

@ -199,7 +199,8 @@ onMounted(async () => {
const queryParamsWh = reactive({
pageNo: 1,
pageSize: 99
pageSize: 99,
whStatus: 1
})
const dataWh = await WarehouseApi.getWarehousePage(queryParamsWh)

@ -69,7 +69,8 @@ const open = async (type: string, id?: number) => {
const queryParamsWarehouse = reactive({
pageNo: 1,
pageSize: 99
pageSize: 99,
whStatus : 1
})
const data = await WarehouseApi.getWarehousePage(queryParamsWarehouse)

@ -177,7 +177,8 @@ onMounted(async () => {
const queryParamsWarehouse = reactive({
pageNo: 1,
pageSize: 99
pageSize: 99,
whStatus :1
})
const data = await WarehouseApi.getWarehousePage(queryParamsWarehouse)

@ -1,5 +1,8 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-card class="hl-card">
<template #header>
<span>新建</span>
</template>
<el-form
ref="formRef"
:model="formData"
@ -7,91 +10,328 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="入库出库类型1为入库2为出库" prop="stockType">
<el-radio-group v-model="formData.stockType">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="入/出库单号" prop="stockNo">
<el-input v-model="formData.stockNo" placeholder="请输入入/出库单号" />
</el-form-item>
<el-form-item label="上游单号" prop="headerNo">
<el-input v-model="formData.headerNo" placeholder="请输入上游单号" />
</el-form-item>
<el-form-item label="物料 Id,对应 base_material表中的 Id 列" prop="materialId">
<el-input v-model="formData.materialId" placeholder="请输入物料 Id,对应 base_material表中的 Id 列" />
</el-form-item>
<el-form-item label="批次号" prop="lotNo">
<el-input v-model="formData.lotNo" placeholder="请输入批次号" />
</el-form-item>
<el-form-item label="仓库 Id对应 wms_wh 表中的Id" prop="whId">
<el-input v-model="formData.whId" placeholder="请输入仓库 Id对应 wms_wh 表中的Id" />
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="name" label="入库单号" required>
<el-input v-model="formData.name" disabled />
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="rgId">
<el-input v-model="formData.rgId" placeholder="请输入库区 Id对应 wms_rg 表中的Id" />
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="level" label="入库类型">
<el-select v-model="formData.level" clearable style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_CUSTOMER_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="pnId">
<el-input v-model="formData.pnId" placeholder="请输入库区 Id对应 wms_rg 表中的Id" />
</el-col>
</el-row>
</el-col>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="name" label="单号日期" required>
<el-input v-model="formData.name" disabled />
</el-form-item>
<el-form-item label="库存良品数量" prop="storageOkQty">
<el-input v-model="formData.storageOkQty" placeholder="请输入库存良品数量" />
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="code" label="上游单号">
<el-input v-model="formData.code" />
</el-form-item>
<el-form-item label="库存不良品数量" prop="storageNgQty">
<el-input v-model="formData.storageNgQty" placeholder="请输入库存不良品数量" />
</el-col>
</el-row>
</el-col>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="industry" label="单据状态">
<el-input v-model="formData.industry" disabled />
</el-form-item>
<el-form-item label="库存报废数量" prop="storageSpQty">
<el-input v-model="formData.storageSpQty" placeholder="请输入库存报废数量" />
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="level" label="入库仓库">
<el-select v-model="formData.level" clearable style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_CUSTOMER_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="description">
<el-input v-model="formData.description" type="textarea" placeholder="请输入备注" />
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200"/>
</el-form-item>
<el-form-item label="状态1为保存2为提交3为作废" prop="status">
<el-radio-group v-model="formData.status">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="入库人" prop="keeper">
<el-input v-model="formData.keeper" placeholder="请输入入库人" />
</el-form-item>
<el-form-item label="入库时间" prop="keeperTime">
<el-date-picker
v-model="formData.keeperTime"
type="date"
value-format="x"
placeholder="选择入库时间"
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">物料信息</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"
>新增</el-button
>
</el-col>
<el-table
:data="formData.productBomItemDOList"
class="hl-table"
@cell-click="handleCellClick"
@cell-blur="handleCellBlur"
>
<el-table-column prop="" label="序号" />
<el-table-column prop="projectName" label="物料编码">
<template #default="scope">
<el-input v-model="scope.row.projectName" :disabled="!scope.row.editable" />
</template>
</el-table-column>
<el-table-column prop="name" label="物料名称">
<template #default="scope">
<el-input
v-model="scope.row.name"
@click="openshoopname(scope.$index)"
:disabled="!scope.row.editable"
/>
</template>
</el-table-column>
<el-table-column prop="inventoryType" label="物料类型">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.PRODUCT_SAVE_TYPE"
:value="scope.row.inventoryType"
/>
</template>
</el-table-column>
<el-table-column prop="spec" label="规格/型号" />
<el-table-column prop="inventoryUnitId" label="系统单位">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID"
:value="scope.row.inventoryUnitId"
/>
</template>
</el-table-column>
<el-table-column prop="unit" width="120" label="入库库区">
<template #default="scope">
<el-select v-model="scope.row.unit" placeholder="" style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID)"
:key="dict.value"
:label="dict.label"
:value="dict.value.toString()"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="unit" width="120" label="入库库位">
<template #default="scope">
<el-select v-model="scope.row.unit" placeholder="" style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID)"
:key="dict.value"
:label="dict.label"
:value="dict.value.toString()"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="proportionNum" width="120" label="本次入库数量">
<template #default="scope">
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
</template>
</el-table-column>
<el-table-column prop="proportionNum" width="120" label="批次号">
<template #default="scope">
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
</template>
</el-table-column>
<el-table-column prop="proportionNum" width="150" label="备注">
<template #default="scope">
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
v-if="!scope.row.editable"
type="primary"
size="small"
link
@click="handleEdit(scope.$index)"
>
编辑
</el-button>
<el-button
link
v-else
type="success"
size="small"
@click="handleSave(scope.$index)"
>
保存
</el-button>
<el-button link type="primary" @click="handlefuke(scope.$index, scope.row)"
>复制</el-button
>
<el-button
link
type="danger"
size="small"
@click.prevent="handleDelete2(scope.$index)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-upload
v-model:file-list="fileList"
:show-file-list="false"
class="upload-demo"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
multiple
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:limit="3"
:on-exceed="handleExceed"
@before-upload="handleBeforeUpload"
>
<el-button type="primary" size="large" class="hl-addbutton">上传</el-button>
</el-upload>
</el-col>
<el-table :data="fileList" class="hl-table">
<el-table-column prop="name" label="文件名称" align="center">
<template #default="scope">
<!-- <div></div> -->
<a :href="scope.row.url" style="color: #409eff">{{ scope.row.name }} </a>
</template>
</el-table-column>
<el-table-column prop="uploadTimestamp" align="center" label="上传日期" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button link type="danger" size="small" @click="handleDelete(scope.$index)">
删除
</el-button>
<el-button link type="primary" size="small"> 下载 </el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">系统信息</span>
</template>
<el-row justify="center">
<el-col :span="8">
<el-form-item prop="level" label="创建人">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
<el-form-item label="出库人" prop="outer">
<el-input v-model="formData.outer" placeholder="请输入出库人" />
</el-col>
<el-col :span="8">
<el-form-item prop="level" label="创建时间">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
<el-form-item label="出库时间" prop="outerTime">
<el-date-picker
v-model="formData.outerTime"
type="date"
value-format="x"
placeholder="选择出库时间"
/>
</el-col>
</el-row>
<el-row justify="center">
<el-col :span="8">
<el-form-item prop="level" label="入库人">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
<el-form-item label="作废人" prop="cancel">
<el-input v-model="formData.cancel" placeholder="请输入作废人" />
</el-col>
<el-col :span="8">
<el-form-item prop="level" label="入库时间">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
<el-form-item label="作废时间" prop="cancelTime">
<el-date-picker
v-model="formData.cancelTime"
type="date"
value-format="x"
placeholder="选择作废时间"
/>
</el-col>
</el-row>
<el-row justify="center">
<el-col :span="8">
<el-form-item prop="level" label="作废人">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="level" label="作废时间">
<el-input v-model="formData.level" class="!w-300px" disabled />
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
<div class="text-center hl-footer">
<el-button @click="goback" size="large"> </el-button>
<el-button @click="submitForm" type="success" :disabled="formLoading" size="large"
> </el-button
>
<el-button @click="submitForm" type="primary" :disabled="formLoading" size="large"
> </el-button
>
<el-button @click="submitForm" type="danger" :disabled="formLoading" size="large"
> </el-button
>
</div>
</el-card>
</template>
<script setup lang="ts">
import * as StorageApi from '@/api/heli/storage'
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { UploadProps, UploadUserFile } from 'element-plus'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import * as MouldTypeApi from '@/api/heli/mouldtype'
const { t } = useI18n() //
const message = useMessage() //
@ -102,33 +342,13 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
stockType: undefined,
stockNo: undefined,
headerNo: undefined,
materialId: undefined,
lotNo: undefined,
whId: undefined,
rgId: undefined,
pnId: undefined,
storageOkQty: undefined,
storageNgQty: undefined,
storageSpQty: undefined,
description: undefined,
status: undefined,
keeper: undefined,
keeperTime: undefined,
outer: undefined,
outerTime: undefined,
cancel: undefined,
cancelTime: undefined,
name: undefined,
status: 1,
productBomItemDOList: []
})
const formRules = reactive({
stockType: [{ required: true, message: '入库出库类型1为入库2为出库不能为空', trigger: 'blur' }],
stockNo: [{ required: true, message: '入/出库单号不能为空', trigger: 'blur' }],
materialId: [{ required: true, message: '物料 Id,对应 base_material表中的 Id 列不能为空', trigger: 'blur' }],
whId: [{ required: true, message: '仓库 Id对应 wms_wh 表中的Id不能为空', trigger: 'blur' }],
rgId: [{ required: true, message: '库区 Id对应 wms_rg 表中的Id不能为空', trigger: 'blur' }],
pnId: [{ required: true, message: '库区 Id对应 wms_rg 表中的Id不能为空', trigger: 'blur' }],
name: [{ required: true, message: '模具类型不能为空', trigger: 'blur' }],
status: [{ required: true, message: '启用状态不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
@ -142,7 +362,7 @@ const open = async (type: string, id?: number) => {
if (id) {
formLoading.value = true
try {
formData.value = await StorageApi.getStorage(id)
formData.value = await MouldTypeApi.getMouldType(id)
} finally {
formLoading.value = false
}
@ -158,46 +378,167 @@ const submitForm = async () => {
//
formLoading.value = true
try {
const data = formData.value as unknown as StorageApi.StorageVO
const data = formData.value as unknown as MouldTypeApi.MouldTypeVO
if (formType.value === 'create') {
await StorageApi.createStorage(data)
await MouldTypeApi.createMouldType(data)
message.success(t('common.createSuccess'))
} else {
await StorageApi.updateStorage(data)
await MouldTypeApi.updateMouldType(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
goback()
emit('success')
} finally {
formLoading.value = false
}
}
const goback = () => {
resetForm()
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
stockType: undefined,
stockNo: undefined,
headerNo: undefined,
materialId: undefined,
lotNo: undefined,
whId: undefined,
rgId: undefined,
pnId: undefined,
storageOkQty: undefined,
storageNgQty: undefined,
storageSpQty: undefined,
description: undefined,
status: undefined,
keeper: undefined,
keeperTime: undefined,
outer: undefined,
outerTime: undefined,
cancel: undefined,
cancelTime: undefined,
name: undefined,
status: 1,
productBomItemDOList: []
}
formRef.value?.resetFields()
}
const onAddItem = () => {
const newData = {
//
projectName: '',
name: '',
productStatus: '',
spec: '',
inventoryUnitId: '',
inventoryType: '',
barCode: '',
productTypeId: '',
unit: [],
editable: true,
productBomItemValueDOList: []
}
formData.value.productBomItemDOList.push(newData)
}
//
const handlefuke = (index, item) => {
const data: any = formData.value.productBomItemDOList[index]
//
const newData: any = {
...data,
projectName: item.projectName,
name: item.name,
productStatus: item.productStatus,
spec: item.spec,
inventoryUnitId: item.inventoryUnitId,
inventoryType: item.spec,
barCode: item.spec,
productTypeId: item.spec,
unit: [],
editable: true,
productBomItemValueDOList: []
}
//
formData.value.productBomItemDOList.splice(index + 1, 0, newData)
}
// / input
const handleEdit = (index) => {
formData.value.productBomItemDOList[index].editable = true
}
const handleSave = (index) => {
formData.value.productBomItemDOList[index].editable = false
}
const handleCellClick = (row, column, event) => {
if (row.editable) {
column.el.querySelector('input').focus()
}
}
const handleCellBlur = (row, column, event) => {
if (row.editable) {
column.el.querySelector('input').blur()
}
}
//
const handleDelete2 = (index: number) => {
formData.value.productBomItemDOList.splice(index, 1)
}
//
const fileList = ref([
{
name: 'element-plus-logo.svg',
url: 'https://element-plus.org/images/element-plus-logo.svg',
uploadTimestamp: '2024-1-12 1606'
},
{
name: 'element-plus-logo2.svg',
url: 'https://element-plus.org/images/element-plus-logo.svg',
uploadTimestamp: '2024-1-12 1606'
}
])
const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {
console.log(file, uploadFiles, '11')
}
const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
console.log(uploadFile, '222')
}
const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => {
ElMessage.warning(
`The limit is 3, you selected ${files.length} files this time, add up to ${
files.length + uploadFiles.length
} totally`
)
console.log('333')
}
let uploadTimestamp: any = null
const handleBeforeUpload = (file: File) => {
uploadTimestamp = new Date().toISOString() //
// false
// return false;
// filelist
const newFile: any = {
name: '',
url: '', // URL
uploadTimestamp: uploadTimestamp!,
};
fileList.value.push(newFile);
}
const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => {
console.log('444', uploadFile, uploadFiles)
return ElMessageBox.confirm(`Cancel the transfer of ${uploadFile.name} ?`).then(
() => true,
() => false
)
}
//
const handleDelete = (index: number) => {
fileList.value.splice(index, 1)
}
</script>
<style>
a {
color: #409eff;
text-decoration: none;
}
</style>

@ -8,20 +8,10 @@
:inline="true"
label-width="68px"
>
<el-form-item label="入库出库类型1为入库2为出库" prop="stockType">
<el-select
v-model="queryParams.stockType"
placeholder="请选择入库出库类型1为入库2为出库"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="入/出库单号" prop="stockNo">
<el-form-item label="入库单号" prop="stockNo">
<el-input
v-model="queryParams.stockNo"
placeholder="请输入/出库单号"
placeholder="入库单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
@ -30,206 +20,88 @@
<el-form-item label="上游单号" prop="headerNo">
<el-input
v-model="queryParams.headerNo"
placeholder="请输入上游单号"
placeholder="上游单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="物料 Id,对应 base_material表中的 Id 列" prop="materialId">
<el-form-item label="物料编码" prop="matNo">
<el-input
v-model="queryParams.materialId"
placeholder="请输入物料 Id,对应 base_material表中的 Id 列"
v-model="queryParams.matNo"
placeholder="物料编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="批次号" prop="lotNo">
<el-form-item label="物料名称" prop="matName">
<el-input
v-model="queryParams.lotNo"
placeholder="请输入批次号"
v-model="queryParams.matName"
placeholder="物料名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="仓库 Id对应 wms_wh 表中的Id" prop="whId">
<el-input
v-model="queryParams.whId"
placeholder="请输入仓库 Id对应 wms_wh 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="rgId">
<el-input
v-model="queryParams.rgId"
placeholder="请输入库区 Id对应 wms_rg 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="pnId">
<el-input
v-model="queryParams.pnId"
placeholder="请输入库区 Id对应 wms_rg 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库存良品数量" prop="storageOkQty">
<el-input
v-model="queryParams.storageOkQty"
placeholder="请输入库存良品数量"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库存不良品数量" prop="storageNgQty">
<el-input
v-model="queryParams.storageNgQty"
placeholder="请输入库存不良品数量"
<el-form-item label="入库类型" prop="stockInType">
<el-select
v-model="queryParams.stockInType"
placeholder="下拉选择"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="库存报废数量" prop="storageSpQty">
<el-input
v-model="queryParams.storageSpQty"
placeholder="请输入库存报废数量"
<el-form-item label="入库仓库" prop="whId">
<el-select
v-model="queryParams.whId"
placeholder="下拉选择"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
>
<el-option
v-for="dict in warehouseList"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态1为保存2为提交3为作废" prop="status">
<el-form-item label="单据状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态1为保存2为提交3为作废"
placeholder="下拉选择"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="记录的创建人,对应员工表中的 Id" prop="creator">
<el-input
v-model="queryParams.creator"
placeholder="请输入记录的创建人,对应员工表中的 Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="记录的修改人,对应员工表中的 Id" prop="updater">
<el-input
v-model="queryParams.updater"
placeholder="请输入记录的修改人,对应员工表中的 Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker
v-model="queryParams.updateTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="入库人" prop="keeper">
<el-input
v-model="queryParams.keeper"
placeholder="请输入入库人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="入库时间" prop="keeperTime">
<el-date-picker
v-model="queryParams.keeperTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="出库人" prop="outer">
<el-input
v-model="queryParams.outer"
placeholder="请输入出库人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="出库时间" prop="outerTime">
<el-date-picker
v-model="queryParams.outerTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="作废人" prop="cancel">
<el-input
v-model="queryParams.cancel"
placeholder="请输入作废人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="作废时间" prop="cancelTime">
<el-date-picker
v-model="queryParams.cancelTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['heli:storage:create']"
@click="openDetail('create')"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
<!-- <el-button
type="success"
plain
@click="handleExport"
@ -237,7 +109,7 @@
v-hasPermi="['heli:storage:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-button> -->
</el-form-item>
</el-form>
</ContentWrap>
@ -245,20 +117,21 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="出库时间" align="center" prop="id" />
<el-table-column label="入库出库类型1为入库2为出库" align="center" prop="stockType" />
<el-table-column label="入/出库单号" align="center" prop="stockNo" />
<!-- <el-table-column label="主键id" align="center" prop="id" /> -->
<el-table-column label="入库单号" align="center" prop="stockNo" />
<el-table-column label="入库类型" align="center" prop="stockInType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_STORAGE_IN_TYPE" :value="scope.row.stockInType" />
</template>
</el-table-column>
<el-table-column label="上游单号" align="center" prop="headerNo" />
<el-table-column label="物料 Id,对应 base_material表中的 Id 列" align="center" prop="materialId" />
<el-table-column label="批次号" align="center" prop="lotNo" />
<el-table-column label="仓库 Id对应 wms_wh 表中的Id" align="center" prop="whId" />
<el-table-column label="库区 Id对应 wms_rg 表中的Id" align="center" prop="rgId" />
<el-table-column label="库区 Id对应 wms_rg 表中的Id" align="center" prop="pnId" />
<el-table-column label="库存良品数量" align="center" prop="storageOkQty" />
<el-table-column label="库存不良品数量" align="center" prop="storageNgQty" />
<el-table-column label="库存报废数量" align="center" prop="storageSpQty" />
<el-table-column label="入库仓库" align="center" prop="whId" >
<template #default="scope">
{{ warehouseList.find((tag) => tag.id === scope.row.whId)?.whName }}
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="description" />
<el-table-column label="状态1为保存2为提交3为作废" align="center" prop="status" />
<el-table-column
label="创建时间"
align="center"
@ -266,19 +139,19 @@
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="入库人" align="center" prop="keeper" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column
label="入库时间"
label="创建时间"
align="center"
prop="keeperTime"
prop="creatorTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="出库人" align="center" prop="outer" />
<el-table-column label="入库人" align="center" prop="keeper" />
<el-table-column
label="库时间"
label="库时间"
align="center"
prop="outerTime"
prop="keeperTime"
:formatter="dateFormatter"
width="180px"
/>
@ -290,24 +163,34 @@
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="单据状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['heli:storage:update']"
>
编辑
</el-button>
<el-button
link
type="primary"
@click="openForm('review', scope.row.id)"
>
查看
</el-button>
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['heli:storage:delete']"
>
删除
</el-button>
</el-button> -->
</template>
</el-table-column>
</el-table>
@ -320,20 +203,20 @@
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<StorageForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as StorageApi from '@/api/heli/storage'
import StorageForm from './StorageForm.vue'
import * as WarehouseApi from '@/api/heli/warehouse'
defineOptions({ name: 'Storage' })
const message = useMessage() //
const { t } = useI18n() //
const router = useRouter(); //
const loading = ref(true) //
const list = ref([]) //
@ -342,31 +225,29 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
stockType: undefined,
stockInType: undefined,
stockOutType: undefined,
stockNo: undefined,
headerNo: undefined,
materialId: undefined,
lotNo: undefined,
whId: undefined,
rgId: undefined,
pnId: undefined,
storageOkQty: undefined,
storageNgQty: undefined,
storageSpQty: undefined,
description: undefined,
status: undefined,
whId: undefined,
creator: undefined,
createTime: [],
updater: undefined,
updateTime: [],
keeper: undefined,
keeperTime: [],
outer: undefined,
outerTime: [],
outbound: undefined,
outboundTime: [],
cancel: undefined,
cancelTime: [],
matNo:undefined,
matName:undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const warehouseList = ref([])
/** 查询列表 */
const getList = async () => {
@ -397,37 +278,27 @@ const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await StorageApi.deleteStorage(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await StorageApi.exportStorage(queryParams)
download.excel(data, '入/出库.xls')
} catch {
} finally {
exportLoading.value = false
}
/** 详情操作 新增/查看 */
const openDetail = (active: string, id?: number) => {
router.push({ path: '/inventory/storagedetail', query: {type: active, id: id}});
}
/** 初始化 **/
onMounted(() => {
getList()
onMounted(async () => {
const queryParamsWarehouse = reactive({
pageNo: 1,
pageSize: 99
})
const data = await WarehouseApi.getWarehousePage(queryParamsWarehouse)
data.list.forEach(element => {
element.label = element.whName
element.value = element.id
});
warehouseList.value = data.list
await getList()
})
</script>
Loading…
Cancel
Save