入库,出库问题修正

入库,出库问题修正
pull/2/head
siontion 9 months ago
parent 8b7d3aa013
commit 27daafed8b

@ -1,5 +1,11 @@
import javax.validation.*;
package com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck;
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -11,6 +17,7 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.time.LocalDateTime;
import java.util.*;
import java.io.IOException;
@ -38,6 +45,9 @@ public class StorageCheckController {
@Resource
private StorageCheckService storageCheckService;
@Resource
private StorageCheckMatService storageCheckMatService;
@PostMapping("/create")
@Operation(summary = "创建入/出库盘点")
@PreAuthorize("@ss.hasPermission('heli:storage-check:create')")
@ -53,6 +63,30 @@ public class StorageCheckController {
return success(true);
}
@PutMapping("/update-status")
@Operation(summary = "更新盘点状态")
@PreAuthorize("@ss.hasPermission('heli:storage:update')")
public CommonResult<Boolean> updateStorageCheckStatus(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
// 提交或者删除时记录相关操作人
LocalDateTime currTime = LocalDateTime.now();
if(updateReqVO.getStatus().equals(2)){
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
} else if(updateReqVO.getStatus().equals(3)){
// 已删除时间更新
updateReqVO.setCancelTime(currTime);
}
// 盘点信息保存
storageCheckService.updateStorageCheck(updateReqVO);
// TODO保存物料列表信息
// TODO生成入库/出库单据
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除入/出库盘点")
@Parameter(name = "id", description = "编号", required = true)

@ -1,18 +1,6 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="700px">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="108px"
v-loading="formLoading"
>
<el-form-item label="库位编码" prop="pnNo">
<el-input v-model="formData.pnNo" placeholder="库位编码" class="!w-500px" />
</el-form-item>
<el-form-item label="库位名称" prop="pnName">
<el-input v-model="formData.pnName" placeholder="请库位名称" class="!w-500px" />
</el-form-item>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="108px" v-loading="formLoading">
<el-form-item label="所属仓库" prop="whId">
<el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-500px" @change="handleWhChange">
<el-option v-for="dict in whList" :key="dict.value" :label="dict.label" :value="dict.value" />
@ -23,16 +11,19 @@
<el-option v-for="dict in rgSelected" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="库位编码" prop="pnNo">
<el-input v-model="formData.pnNo" placeholder="库位编码" class="!w-500px" />
</el-form-item>
<el-form-item label="库位名称" prop="pnName">
<el-input v-model="formData.pnName" placeholder="请库位名称" class="!w-500px" />
</el-form-item>
<el-form-item label="描述" prop="descr">
<el-input v-model="formData.descr" placeholder="描述" type="textarea" />
</el-form-item>
<el-form-item label="启用状态" prop="pnStatus">
<el-radio-group v-model="formData.pnStatus">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_STATUS)" :key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
@ -97,7 +88,7 @@ const open = async (type: string, id?: number) => {
const queryParamsWh = reactive({
pageNo: 1,
pageSize: 99,
whStatus : 1
whStatus: 1
})
const dataWh = await WarehouseApi.getWarehousePage(queryParamsWh)
@ -112,7 +103,7 @@ const open = async (type: string, id?: number) => {
const queryParamsRg = reactive({
pageNo: 1,
pageSize: 99,
rgStatus : 1
rgStatus: 1
})
const dataRg = await RgApi.getRgPage(queryParamsRg)

@ -1,30 +1,21 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="700px">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="108px"
v-loading="formLoading"
>
<el-form-item label="库区编码" prop="rgNo">
<el-input v-model="formData.rgNo" placeholder="库区编码" required class="!w-500px" />
</el-form-item>
<el-form-item label="库区名称" prop="rgName">
<el-input v-model="formData.rgName" placeholder="库区名称" required class="!w-500px"/>
</el-form-item>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="108px" v-loading="formLoading">
<el-form-item label="所属仓库" prop="whId">
<el-select v-model="formData.whId" clearable class="!w-500px">
<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="库区编码" prop="rgNo">
<el-input v-model="formData.rgNo" placeholder="库区编码" required class="!w-500px" />
</el-form-item>
<el-form-item label="库区名称" prop="rgName">
<el-input v-model="formData.rgName" placeholder="库区名称" required class="!w-500px" />
</el-form-item>
<el-form-item label="状态" prop="rgStatus">
<el-radio-group v-model="formData.rgStatus">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_STATUS)" :key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
@ -70,7 +61,7 @@ const open = async (type: string, id?: number) => {
const queryParamsWarehouse = reactive({
pageNo: 1,
pageSize: 99,
whStatus : 1
whStatus: 1
})
const data = await WarehouseApi.getWarehousePage(queryParamsWarehouse)

@ -9,14 +9,7 @@
<img src="/src/assets/imgs/status/statuszf.png" v-else-if="formData.status == 3" alt="" />
<span v-else></span>
</div>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
v-bind:disabled="isShowBtnOther"
>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading" >
<!-- 基础信息 -->
<el-card class="hl-card-info">
<template #header>
@ -34,13 +27,9 @@
<el-row>
<el-col :span="24">
<el-form-item prop="stockInType" label="入库类型">
<el-select v-model="formData.stockInType" clearable style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-select v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType" v-bind:disabled="btnView || btnSave">
<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-col>
@ -50,19 +39,9 @@
<el-row>
<el-col :span="24">
<el-form-item prop="industry" label="单据状态">
<el-select
v-model="formData.status"
placeholder="下拉选择"
clearable
class="!w-700px"
disabled
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-700px" disabled>
<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-col>
@ -70,7 +49,7 @@
<el-row>
<el-col :span="24">
<el-form-item prop="headerNo" label="上游单号">
<el-input v-model="formData.headerNo" />
<el-input v-model="formData.headerNo" class="!w-700px" v-bind:disabled="btnView || btnSave || enableHeadNo" />
</el-form-item>
</el-col>
</el-row>
@ -79,26 +58,17 @@
<el-row>
<el-col :span="24">
<el-form-item label="单据日期" prop="createTime">
{{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm:ss') }}
<!-- {{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm:ss') }} -->
<el-date-picker v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled
class="!w-400px" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="whId" label="入库仓库">
<el-select
v-model="formData.whId"
placeholder="下拉选择"
clearable
class="!w-400px"
@change="handleWh"
>
<el-option
v-for="dict in warehouseList"
:key="dict.id"
:label="dict.whName"
:value="dict.id"
/>
<el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh" v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in warehouseList" :key="dict.id" :label="dict.whName" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
@ -108,12 +78,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="description">
<el-input
type="textarea"
v-model="formData.description"
show-word-limit
maxlength="200"
/>
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" v-bind:disabled="btnView || btnSave" />
</el-form-item>
</el-col>
</el-row>
@ -127,108 +92,45 @@
<el-col>
<el-card class="hl-incard">
<el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"
>新增</el-button
>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem" v-bind:disabled="btnView || btnSave">新增</el-button>
</el-col>
<el-form
ref="matSubFormRef"
:model="formData.matItemDOList"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules"
v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column prop="cid" label="序号" min-width="80" align="center" fixed />
<el-table-column prop="matId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span> 物料编码 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.matId`"
:rules="subFormRules.matId"
class="mb-0px!"
>
<el-select
v-model="scope.row.matId"
placeholder="物料编码"
:remote-method="remoteMatCodeSearch"
remote-show-suffix
remote
clearable
reserve-keyword
filterable
:loading="matSelectLoading"
@change="(val) => handleMatCode(scope, val)"
class="!w-180px"
>
<el-option
v-for="item in matList"
:key="item.id"
:label="item.code"
:value="item.id"
/>
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料编码" :remote-method="remoteMatCodeSearch" v-bind:disabled="btnView || btnSave"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatCode(scope, val)" class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.code" :value="item.id" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="matName" label="物料名称" min-width="120" align="center">
<!-- <template #default="scope">
<el-input v-model="scope.row.matName"
:disabled="!scope.row.editable" />
<el-select v-model="scope.row.matName" placeholder="物料名称" :remote-method="remoteMatSearch"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading" @click="handleMatName"
class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</template> -->
</el-table-column>
<el-table-column prop="matName" label="物料名称" min-width="120" align="center" />
<el-table-column prop="matType" label="物料类型" align="center" min-width="120">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_TYPE"
:value="scope.row.matType"
v-if="scope.row.matType ? true : false"
/>
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType"
v-if="scope.row.matType ? true : false" />
</template>
</el-table-column>
<el-table-column
prop="matSpec"
label="规格/型号"
align="center"
min-width="120"
/>
<el-table-column prop="matSpec" label="规格/型号" align="center" min-width="120" />
<el-table-column prop="matUnit" label="系统单位" align="center" min-width="120">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_UNIT"
:value="scope.row.matUnit"
v-if="scope.row.matUnit ? true : false"
/>
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit"
v-if="scope.row.matUnit ? true : false" />
</template>
</el-table-column>
<el-table-column prop="rgId" align="center" min-width="120">
<template #header> <span class="hl-table_header">*</span> 入库库区 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.rgId`"
:rules="subFormRules.rgId"
class="mb-0px!"
>
<el-select
v-model="scope.row.rgId"
placeholder=""
style="width: 100%"
@change="handleRg(scope)"
>
<el-option
v-for="dict in rgList"
:key="dict.id"
:label="dict.rgName"
:value="dict.id"
/>
<el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!">
<el-select v-model="scope.row.rgId" placeholder="" style="width: 100%" @change="handleRg(scope)" v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in rgList" :key="dict.id" :label="dict.rgName" :value="dict.id" />
</el-select>
</el-form-item>
</template>
@ -236,18 +138,10 @@
<el-table-column prop="pnId" align="center" min-width="120">
<template #header> <span class="hl-table_header">*</span> 入库库位 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.pnId`"
:rules="subFormRules.pnId"
class="mb-0px!"
>
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%">
<el-option
v-for="dict in scope.row.pnlist"
:key="dict.id"
:label="dict.pnName"
:value="dict.id"
/>
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%" v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pnName"
:value="dict.id" />
</el-select>
</el-form-item>
</template>
@ -255,53 +149,31 @@
<el-table-column prop="storageOkQty" align="center" min-width="120">
<template #header> <span class="hl-table_header">*</span> 入库数量 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.storageOkQty`"
:rules="subFormRules.storageOkQty"
class="mb-0px!"
>
<el-input v-model="scope.row.storageOkQty" />
<el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty"
class="mb-0px!">
<el-input v-model="scope.row.storageOkQty" v-bind:disabled="btnView || btnSave"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="lotNo" label="批次号" align="center" min-width="120">
<template #default="scope">
<el-input v-model="scope.row.lotNo" />
<el-input v-model="scope.row.lotNo" v-bind:disabled="btnView || btnSave"/>
</template>
</el-table-column>
<el-table-column
prop="projectNo"
label="子项目编号"
align="center"
min-width="120"
>
<el-table-column prop="projectNo" label="子项目编号" align="center" min-width="120">
<template #default="scope">
<el-input v-model="scope.row.projectNo" />
<el-input v-model="scope.row.projectNo" v-bind:disabled="btnView || btnSave"/>
</template>
</el-table-column>
<el-table-column prop="description" label="备注" align="center" min-width="180">
<template #default="scope">
<el-input v-model="scope.row.description" />
<el-input v-model="scope.row.description" v-bind:disabled="btnView || btnSave" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="120" fixed="right">
<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"
@click.prevent="handleDelete2(scope.$index)"
v-if="isShowBtnDelete"
>
<el-button link type="danger" @click.prevent="handleDelete2(scope.$index)" v-bind:disabled="btnView || btnDelete">
删除
</el-button>
</template>
@ -321,24 +193,15 @@
<el-col>
<el-card class="hl-incard">
<el-col>
<el-upload
ref="matUploadRef"
:file-list="matUploadFiles"
multiple
:limit="10"
:action="uploadUrl"
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl"
:headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}"
name="files"
:show-file-list="false"
:auto-upload="false"
:data="matUploadData"
:on-change="matUploadChange"
class="upload-file-uploader"
>
<el-button type="primary"> <Icon icon="ep:upload-filled" />上传 </el-button>
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData"
:on-change="matUploadChange" class="upload-file-uploader">
<el-button type="primary" v-bind:disabled="btnView || btnSave">
<Icon icon="ep:upload-filled" />上传
</el-button>
</el-upload>
</el-col>
<el-table :data="formData.attachments" class="hl-table">
@ -348,30 +211,16 @@
</template> -->
</el-table-column>
<el-table-column
prop="createTime"
align="center"
label="上传日期"
:formatter="dateFormatter"
/>
<el-table-column prop="createTime" align="center" label="上传日期" :formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"
v-if="isShowBtnDelete"
>
<el-button link type="danger" size="small" v-bind:disabled="btnView || btnDelete"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)" >
删除
</el-button>
<el-button
link
type="primary"
size="small"
@click="downloadAttachment(scope.row.name, scope.row.url)"
>
<el-button link type="primary" size="small" v-bind:disabled="btnView || btnDelete"
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载
</el-button>
</template>
@ -427,30 +276,12 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="() => router.go(-1)" size="large"> </el-button>
<el-button
@click="submitForm"
v-if="isShowBtnGroup"
type="success"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button
@click="handleStatus(2)"
v-if="isShowBtnGroup"
type="primary"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button
@click="handleStatus(3)"
v-if="isShowBtnCancel"
type="danger"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button @click="submitForm" type="success" :disabled="btnView || btnSave" size="large">
</el-button>
<el-button @click="handleStatus(2)" type="primary" :disabled="btnView || btnSave" size="large">
</el-button>
<el-button @click="handleStatus(3)" type="danger" :disabled="btnView || btnCancel" size="large">
</el-button>
</div>
</el-card>
</template>
@ -480,10 +311,8 @@ const message = useMessage() // 消息弹窗
const { query } = useRoute()
const router = useRouter()
const isShow = ref(false)
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
stockType: 1,
@ -495,7 +324,7 @@ const formData = ref({
status: 1,
whId: undefined,
creator: undefined,
createTime: formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'),
createTime: undefined,
keeper: undefined,
keeperTime: undefined,
outbound: undefined,
@ -534,11 +363,10 @@ const handleStatus = async (num) => {
} catch (e) {
return
}
formData.value.status = num
//
await saveFormData()
formData.value.status = num
const dataUpdate = formData.value as unknown as StorageApi.StorageVO
if (num == 2) {
@ -551,41 +379,23 @@ const handleStatus = async (num) => {
message.success(t('common.updateSuccess'))
switch (num) {
case 1:
isShowBtnGroup.value = true
isShowBtnCancel.value = false
isShowBtnOther.value = true
isShowBtnDelete.value = true
break
case 2:
isShowBtnGroup.value = false
isShowBtnCancel.value = true
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
case 3:
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
default:
break
}
//
if (query.type === 'review') {
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
}
query.type = 'update'
query.id = formData.value.id
query.type= 'update'
reload()
}
const userList = ref<UserApi.UserVO[]>([]) //
const enableHeadNo = ref(false)
const handleStockType = async (typeid) => {
formData.value.headerNo = ''
if (typeid == 1) {
enableHeadNo.value = false
} else {
enableHeadNo.value = true
}
}
// ==================== =======================================
const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL)
const matUploadRef = ref()
@ -639,7 +449,6 @@ const downloadAttachment = async (name, url) => {
}
// ==================== =======================================
const storageid = ref()
var commonResult = ''
/** 提交表单 */
@ -652,27 +461,27 @@ const saveFormData = async () => {
const data = formData.value as unknown as StorageApi.StorageVO
if (query.type === 'create') {
//
storageid.value = await StorageApi.createStorage(data)
formData.value.id = await StorageApi.createStorage(data)
commonResult = 'common.createSuccess'
} else {
storageid.value = data.id
await StorageApi.updateStorage(data)
commonResult = 'common.updateSuccess'
}
//
formData.value.matItemDOList.forEach((item) => {
item.stockId = storageid.value
item.stockId = formData.value.id
item.whId = formData.value.whId
})
const dataMats = formData.value.matItemDOList as unknown as StorageMatApi.StorageMatVO[]
await StorageMatApi.createStorageMatBatch(dataMats, storageid.value)
await StorageMatApi.createStorageMatBatch(dataMats, formData.value.id)
if (formData.value.attachments!=undefined && formData.value.attachments.length > 0) {
if (formData.value.attachments != undefined && formData.value.attachments.length > 0) {
//
matUploadData.value.businessId = storageid
matUploadData.value.businessId = formData.value.id
matUploadRef.value!.submit()
}
formData.value = await StorageApi.getStorage(storageid.value)
await initStatus(formData.value.status)
//formData.value = await StorageApi.getStorage(formData.value.id)
message.success(t(commonResult))
} finally {
formLoading.value = false
@ -695,9 +504,8 @@ const submitForm = async () => {
await saveFormData()
//
query.id = formData.value.id
query.type = 'update'
query.id = storageid.value
formData.value.id = storageid.value
//
reload()
}
@ -808,11 +616,46 @@ const handleMatCode = async (scope, matid) => {
}
}
const isShowBtnGroup = ref(true)
const isShowBtnCancel = ref(false)
const isShowBtnOther = ref(false)
const isShowBtnDelete = ref(true)
const btnWhClickable = ref(false)
//
const btnView = ref(false)
const btnSave = ref(false)
const btnCancel = ref(true)
const btnDelete = ref(false)
//
const initStatus = async (status) =>{
switch(status){
case 1:
btnView.value = false
btnSave.value = false
btnCancel.value = true
btnDelete.value = false
break
case 2:
btnView.value = false
btnSave.value = true
btnCancel.value = false
btnDelete.value = true
break
case 3:
btnView.value = true
btnSave.value = true
btnCancel.value = true
btnDelete.value = true
break
default:
break
}
//
if(query.type === 'review'){
btnView.value = true
btnSave.value = true
btnCancel.value = true
btnDelete.value = true
}
}
/** 初始化 **/
onMounted(async () => {
//
@ -829,7 +672,6 @@ onMounted(async () => {
dialogTitle.value = query.type === 'review' ? '查看' : dialogTitle.value
isShow.value = query.type == 'create' ? false : true
//-------------------
const data = await WarehouseApi.getWarehouseSimpList()
@ -839,34 +681,7 @@ onMounted(async () => {
//
formData.value = await StorageApi.getStorage(query.id)
switch (formData.value.status) {
case 1:
isShowBtnGroup.value = true
isShowBtnCancel.value = false
isShowBtnDelete.value = true
break
case 2:
isShowBtnGroup.value = false
isShowBtnCancel.value = true
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
case 3:
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
default:
break
}
//
if (query.type === 'review') {
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
}
await initStatus(formData.value.status)
//
const queryParamsRg = reactive({

@ -9,14 +9,8 @@
<img src="/src/assets/imgs/status/statuszf.png" v-else-if="formData.status == 3" alt="" />
<span v-else></span>
</div>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
v-bind:disabled="isShowBtnOther"
>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading"
v-bind:disabled="isShowBtnOther">
<!-- 基础信息 -->
<el-card class="hl-card-info">
<template #header>
@ -34,13 +28,9 @@
<el-row>
<el-col :span="24">
<el-form-item prop="stockInType" label="出库类型">
<el-select v-model="formData.stockInType" clearable style="width: 100%">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_OUT_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-select v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType" v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_OUT_TYPE)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
@ -50,19 +40,9 @@
<el-row>
<el-col :span="24">
<el-form-item prop="industry" label="单据状态">
<el-select
v-model="formData.status"
placeholder="下拉选择"
clearable
class="!w-700px"
disabled
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-700px" disabled>
<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-col>
@ -70,7 +50,7 @@
<el-row>
<el-col :span="24">
<el-form-item prop="headerNo" label="上游单号">
<el-input v-model="formData.headerNo" />
<el-input v-model="formData.headerNo" class="!w-700px" v-bind:disabled="btnView || btnSave || enableHeadNo"/>
</el-form-item>
</el-col>
</el-row>
@ -79,27 +59,17 @@
<el-row>
<el-col :span="24">
<el-form-item label="单据日期" prop="createTime">
{{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm') }}
<el-date-picker v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled
class="!w-400px" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="whId" label="出库仓库" required>
<el-select
v-model="formData.whId"
placeholder="下拉选择"
clearable
class="!w-400px"
@change="handleWh"
v-bind:disabled="btnWhClickable"
>
<el-option
v-for="dict in warehouseList"
:key="dict.id"
:label="dict.whName"
:value="dict.id"
/>
<el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh"
v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in warehouseList" :key="dict.id" :label="dict.whName" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
@ -109,12 +79,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="description">
<el-input
type="textarea"
v-model="formData.description"
show-word-limit
maxlength="200"
/>
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" class="!w-2080px" v-bind:disabled="btnView || btnSave"/>
</el-form-item>
</el-col>
</el-row>
@ -128,46 +93,20 @@
<el-col>
<el-card class="hl-incard">
<el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"
>新增</el-button
>
<el-button class="hl-addbutton" type="primary" size="large" v-bind:disabled="btnView || btnSave" @click="onAddItem"></el-button>
</el-col>
<el-form
ref="matSubFormRef"
:model="formData.matItemDOList"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules"
v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column prop="cid" label="序号" :width="80" />
<el-table-column prop="matId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>物料名称 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.matId`"
:rules="subFormRules.matId"
class="mb-0px!"
>
<el-select
v-model="scope.row.matId"
placeholder="物料名称"
:remote-method="remoteMatCodeSearch"
remote-show-suffix
remote
clearable
reserve-keyword
filterable
:loading="matSelectLoading"
@change="(val) => handleMatCode(scope, val)"
class="!w-180px"
>
<el-option
v-for="item in matList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatCodeSearch" v-bind:disabled="btnView || btnSave"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatCode(scope, val)" class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</template>
@ -175,50 +114,25 @@
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column prop="matType" label="物料类型" min-width="120" align="center">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_TYPE"
:value="scope.row.matType"
v-if="scope.row.matType ? true : false"
/>
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType"
v-if="scope.row.matType ? true : false" />
</template>
</el-table-column>
<el-table-column
prop="matSpec"
label="规格/型号"
min-width="120"
align="center"
/>
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matUnit" label="系统单位" min-width="120" align="center">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_UNIT"
:value="scope.row.matUnit"
v-if="scope.row.matUnit ? true : false"
/>
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit"
v-if="scope.row.matUnit ? true : false" />
</template>
</el-table-column>
<el-table-column prop="rgId" min-width="120" align="center">
<template #header> <span class="hl-table_header">*</span>出库库区 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.rgId`"
:rules="subFormRules.rgId"
class="mb-0px!"
>
<el-select
v-model="scope.row.rgId"
placeholder=""
style="width: 100%"
@change="handleRg(scope)"
disabled=""
>
<el-option
v-for="dict in rgList"
:key="dict.id"
:label="dict.rgName"
:value="dict.id"
/>
<el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!">
<el-select v-model="scope.row.rgId" placeholder="" style="width: 100%" @change="handleRg(scope)"
v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in rgList" :key="dict.id" :label="dict.rgName" :value="dict.id" />
</el-select>
</el-form-item>
</template>
@ -226,18 +140,10 @@
<el-table-column prop="pnId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>出库库位 </template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.pnId`"
:rules="subFormRules.pnId"
class="mb-0px!"
>
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%">
<el-option
v-for="dict in scope.row.pnlist"
:key="dict.id"
:label="dict.pnName"
:value="dict.id"
/>
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%" v-bind:disabled="btnView || btnSave">
<el-option v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pnName"
:value="dict.id" />
</el-select>
</el-form-item>
</template>
@ -246,19 +152,16 @@
<el-table-column prop="storageOkQty" min-width="120" align="center">
<template #header> <span class="hl-table_header">*</span>出库数量</template>
<template #default="scope">
<el-form-item
:prop="`${scope.$index}.storageOkQty`"
:rules="subFormRules.storageOkQty"
class="mb-0px!"
>
<el-input v-model="scope.row.storageOkQty" />
<el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty"
class="mb-0px!">
<el-input v-model="scope.row.storageOkQty" v-bind:disabled="btnView || btnSave"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="lotNo" min-width="120" label="批次号" align="center" />
<el-table-column prop="description" min-width="180" label="备注" align="center">
<template #default="scope">
<el-input v-model="scope.row.description" />
<el-input v-model="scope.row.description" v-bind:disabled="btnView || btnSave"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
@ -272,13 +175,8 @@
</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)"
v-if="isShowBtnDelete"
>
<el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)"
v-bind:disabled="btnView || btnDelete">
删除
</el-button>
</template>
@ -298,24 +196,15 @@
<el-col>
<el-card class="hl-incard">
<el-col>
<el-upload
ref="matUploadRef"
:file-list="matUploadFiles"
multiple
:limit="10"
:action="uploadUrl"
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl"
:headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}"
name="files"
:show-file-list="false"
:auto-upload="false"
:data="matUploadData"
:on-change="matUploadChange"
class="upload-file-uploader"
>
<el-button type="primary"> <Icon icon="ep:upload-filled" />上传 </el-button>
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData"
:on-change="matUploadChange" class="upload-file-uploader" >
<el-button type="primary" v-bind:disabled="btnView || btnSave">
<Icon icon="ep:upload-filled" />上传
</el-button>
</el-upload>
</el-col>
<el-table :data="formData.attachments" class="hl-table">
@ -325,30 +214,16 @@
</template> -->
</el-table-column>
<el-table-column
prop="createTime"
align="center"
label="上传日期"
:formatter="dateFormatter"
/>
<el-table-column prop="createTime" align="center" label="上传日期" :formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="danger"
size="small"
v-if="isShowBtnDelete"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"
>
<el-button link type="danger" size="small" v-bind:disabled="btnView || btnDelete"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除
</el-button>
<el-button
link
type="primary"
size="small"
@click="downloadAttachment(scope.row.name, scope.row.url)"
>
<el-button link type="primary" size="small" v-bind:disabled="btnView || btnDelete"
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载
</el-button>
</template>
@ -404,30 +279,12 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="() => router.go(-1)" size="large"> </el-button>
<el-button
@click="submitForm"
v-if="isShowBtnGroup"
type="success"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button
@click="handleStatus(2)"
v-if="isShowBtnGroup"
type="primary"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button
@click="handleStatus(3)"
v-if="isShowBtnCancel"
type="danger"
:disabled="formLoading"
size="large"
> </el-button
>
<el-button @click="submitForm" type="success" :disabled="btnView || btnSave" size="large">
</el-button>
<el-button @click="handleStatus(2)" type="primary" :disabled="btnView || btnSave" size="large">
</el-button>
<el-button @click="handleStatus(3)" type="danger" :disabled="btnView || btnCancel" size="large">
</el-button>
</div>
</el-card>
</template>
@ -471,7 +328,7 @@ const formData = ref({
status: 1,
whId: undefined,
creator: undefined,
createTime: formatDate(new Date(), 'YYYY-MM-DD HH:mm'),
createTime: undefined,
keeper: undefined,
keeperTime: undefined,
outbound: undefined,
@ -498,6 +355,17 @@ const subFormRules = reactive({
pnId: [{ required: true, message: '库位不能为空', trigger: 'blur' }],
storageOkQty: [{ required: true, message: '出库数量不能为空', trigger: 'blur' }]
})
const enableHeadNo = ref(false)
const handleStockType = async (typeid) => {
formData.value.headerNo = ''
if (typeid == 1) {
enableHeadNo.value = false
} else {
enableHeadNo.value = true
}
}
const handleStatus = async (num) => {
//
await formRef.value.validate()
@ -526,36 +394,7 @@ const handleStatus = async (num) => {
message.success(t('common.updateSuccess'))
switch (num) {
case 1:
isShowBtnGroup.value = true
isShowBtnCancel.value = false
isShowBtnOther.value = true
isShowBtnDelete.value = true
break
case 2:
isShowBtnGroup.value = false
isShowBtnCancel.value = true
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
case 3:
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
default:
break
}
//
if (query.type === 'review') {
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
}
query.id = storageid.value
query.id = formData.value.id
query.type = 'update'
reload()
}
@ -614,7 +453,6 @@ const downloadAttachment = async (name, url) => {
}
// ==================== =======================================
const storageid = ref()
var commonResult = ''
/** 提交表单 */
@ -647,27 +485,27 @@ const saveFormData = async () => {
const data = formData.value as unknown as StorageApi.StorageVO
if (query.type === 'create') {
//
storageid.value = await StorageApi.createStorage(data)
formData.value.id = await StorageApi.createStorage(data)
commonResult = 'common.createSuccess'
} else {
storageid.value = data.id
await StorageApi.updateStorage(data)
commonResult = 'common.updateSuccess'
}
//
formData.value.matItemDOList.forEach((item) => {
item.stockId = storageid.value
item.stockId = formData.value.id
item.whId = formData.value.whId
})
const dataMats = formData.value.matItemDOList as unknown as StorageMatApi.StorageMatVO[]
await StorageMatApi.createStorageMatBatch(dataMats, storageid.value)
await StorageMatApi.createStorageMatBatch(dataMats, formData.value.id)
if (formData.value.attachments!=undefined && formData.value.attachments.length > 0) {
if (formData.value.attachments != undefined && formData.value.attachments.length > 0) {
//
matUploadData.value.businessId = storageid
matUploadData.value.businessId = formData.value.id
matUploadRef.value!.submit()
}
formData.value = await StorageApi.getStorage(storageid.value)
await initStatus(formData.value.status)
message.success(t(commonResult))
} finally {
formLoading.value = false
@ -689,7 +527,7 @@ const submitForm = async () => {
//
await saveFormData()
//
query.id = storageid.value
query.id = formData.value.id
query.type = 'update'
reload()
}
@ -850,15 +688,49 @@ const handleMatCode = async (scope, matid) => {
}
}
const isShowBtnGroup = ref(true)
const isShowBtnCancel = ref(false)
const isShowBtnOther = ref(false)
const isShowBtnDelete = ref(true)
const btnWhClickable = ref(false)
const matLastData = ref([])
//
const btnView = ref(false)
const btnSave = ref(false)
const btnCancel = ref(true)
const btnDelete = ref(false)
//
const initStatus = async (status) => {
switch (status) {
case 1:
btnView.value = false
btnSave.value = false
btnCancel.value = true
btnDelete.value = false
break
case 2:
btnView.value = false
btnSave.value = true
btnCancel.value = false
btnDelete.value = true
break
case 3:
btnView.value = true
btnSave.value = true
btnCancel.value = true
btnDelete.value = true
break
default:
break
}
//
if (query.type === 'review') {
btnView.value = true
btnSave.value = true
btnCancel.value = true
btnDelete.value = true
}
}
/** 初始化 **/
onMounted(async () => {
btnWhClickable.value = query.type === 'update' ? true : false
matLastData.value = await StorageMatApi.getStorageMatList()
@ -882,36 +754,7 @@ onMounted(async () => {
if (query.id) {
//
formData.value = await StorageApi.getStorage(query.id)
switch (formData.value.status) {
case 1:
isShowBtnGroup.value = true
isShowBtnCancel.value = false
isShowBtnDelete.value = true
break
case 2:
isShowBtnGroup.value = false
isShowBtnCancel.value = true
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
case 3:
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
break
default:
break
}
//
if (query.type === 'review') {
isShowBtnGroup.value = false
isShowBtnCancel.value = false
isShowBtnOther.value = false
isShowBtnDelete.value = false
}
await initStatus(formData.value.status)
//
const queryParamsRg = reactive({
pageNo: 1,

@ -108,7 +108,7 @@
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120" />
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120"/>
<el-table-column label="品牌" align="center" prop="matBrand" min-width="120"/>
<el-table-column label="业务单据编号" align="center" prop="stockNo" min-width="120"/>
<el-table-column label="业务单据编号" align="center" prop="stockNo" min-width="180"/>
<el-table-column label="业务单据类型" align="center" prop="stockTypeName" min-width="120"/>
<el-table-column label="上游单据编号" align="center" prop="headerNo" min-width="120"/>
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/>

Loading…
Cancel
Save