feat(mes): 添加生产退料单确认功能及字段校验

新增确认生产退料单的接口,更新相关字段为必填项并添加数量校验逻辑。此变更旨在提升退料单的管理效率和数据准确性。
pull/871/MERGE
YunaiV 2026-02-28 22:16:52 +08:00
parent 2a83f67065
commit 15de32fcbf
3 changed files with 32 additions and 26 deletions

View File

@ -9,7 +9,7 @@ export interface WmReturnIssueVO {
workstationName?: string workstationName?: string
workOrderId?: number workOrderId?: number
workOrderCode?: string workOrderCode?: string
returnType?: string type?: number
returnDate?: string returnDate?: string
status?: number status?: number
remark?: string remark?: string

View File

@ -23,7 +23,6 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- TODO @AI必填前后端都是name -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="退料单名称" prop="name"> <el-form-item label="退料单名称" prop="name">
<el-input <el-input
@ -33,17 +32,16 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- TODO @AI必填前后端都是returnType -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="退料类型" prop="returnType"> <el-form-item label="退料类型" prop="type">
<el-select <el-select
v-model="formData.returnType" v-model="formData.type"
placeholder="请选择退料类型" placeholder="请选择退料类型"
:disabled="isHeaderReadonly" :disabled="isHeaderReadonly"
class="!w-full" class="!w-full"
> >
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -63,7 +61,6 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- TODO @AI必填前后端都是workOrderId -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="生产工单" prop="workOrderId"> <el-form-item label="生产工单" prop="workOrderId">
<ProWorkOrderSelect v-model="formData.workOrderId" :disabled="isHeaderReadonly" /> <ProWorkOrderSelect v-model="formData.workOrderId" :disabled="isHeaderReadonly" />
@ -105,7 +102,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { generateRandomStr } from '@/utils' import { generateRandomStr } from '@/utils'
import { WmReturnIssueApi, WmReturnIssueVO } from '@/api/mes/wm/returnissue' import { WmReturnIssueApi, WmReturnIssueVO } from '@/api/mes/wm/returnissue'
import ProWorkOrderSelect from '@/views/mes/pro/workorder/components/ProWorkOrderSelect.vue' import ProWorkOrderSelect from '@/views/mes/pro/workorder/components/ProWorkOrderSelect.vue'
@ -125,13 +122,15 @@ const formData = ref({
name: undefined, name: undefined,
workOrderId: undefined, workOrderId: undefined,
workstationId: undefined, workstationId: undefined,
returnType: undefined, type: undefined,
returnDate: undefined, returnDate: undefined,
remark: undefined remark: undefined
}) })
const formRules = reactive({ const formRules = reactive({
code: [{ required: true, message: '退料单编号不能为空', trigger: 'blur' }], code: [{ required: true, message: '退料单编号不能为空', trigger: 'blur' }],
name: [{ required: true, message: '退料单名称不能为空', trigger: 'blur' }] name: [{ required: true, message: '退料单名称不能为空', trigger: 'blur' }],
type: [{ required: true, message: '退料类型不能为空', trigger: 'change' }],
workOrderId: [{ required: true, message: '生产工单不能为空', trigger: 'change' }]
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
@ -222,7 +221,7 @@ const resetForm = () => {
name: undefined, name: undefined,
workOrderId: undefined, workOrderId: undefined,
workstationId: undefined, workstationId: undefined,
returnType: undefined, type: undefined,
returnDate: undefined, returnDate: undefined,
remark: undefined remark: undefined
} }

View File

@ -25,17 +25,22 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<!-- TODO @AI增加 生产工单 select --> <el-form-item label="生产工单" prop="workOrderId">
<!-- TODO @AI需要生成下字典插入 sql --> <ProWorkOrderSelect
<el-form-item label="退料类型" prop="returnType"> v-model="queryParams.workOrderId"
clearable
class="!w-240px"
/>
</el-form-item>
<el-form-item label="退料类型" prop="type">
<el-select <el-select
v-model="queryParams.returnType" v-model="queryParams.type"
placeholder="请选择退料类型" placeholder="请选择退料类型"
clearable clearable
class="!w-240px" class="!w-240px"
> >
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -104,9 +109,9 @@
<el-table-column label="退料单名称" align="center" prop="name" min-width="150" /> <el-table-column label="退料单名称" align="center" prop="name" min-width="150" />
<el-table-column label="生产工单" align="center" prop="workOrderCode" min-width="140" /> <el-table-column label="生产工单" align="center" prop="workOrderCode" min-width="140" />
<el-table-column label="工作站" align="center" prop="workstationName" min-width="120" /> <el-table-column label="工作站" align="center" prop="workstationName" min-width="120" />
<el-table-column label="退料类型" align="center" prop="returnType" min-width="110"> <el-table-column label="退料类型" align="center" prop="type" min-width="110">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE" :value="scope.row.type" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -152,8 +157,8 @@
删除 删除
</el-button> </el-button>
<!-- TODO @芋艿UNEXECUTEUNSTOCK --> <!-- TODO @芋艿UNEXECUTEUNSTOCK -->
<!-- 待入库入库上架 --> <!-- 待入库执行上架 -->
<!-- TODO @AI名字改成执行上架 --> <!-- DONE @AI名字改成执行上架 -->
<el-button <el-button
link link
type="success" type="success"
@ -161,10 +166,10 @@
v-hasPermi="['mes:wm-return-issue:update']" v-hasPermi="['mes:wm-return-issue:update']"
v-if="scope.row.status === MesWmReturnIssueStatusEnum.APPROVING" v-if="scope.row.status === MesWmReturnIssueStatusEnum.APPROVING"
> >
入库上架 执行上架
</el-button> </el-button>
<!-- 已入库完成 --> <!-- 已入库执行退料 -->
<!-- TODO @AI名字换成执行退料 --> <!-- DONE @AI名字换成执行退料 -->
<el-button <el-button
link link
type="success" type="success"
@ -172,7 +177,7 @@
v-hasPermi="['mes:wm-return-issue:execute']" v-hasPermi="['mes:wm-return-issue:execute']"
v-if="scope.row.status === MesWmReturnIssueStatusEnum.APPROVED" v-if="scope.row.status === MesWmReturnIssueStatusEnum.APPROVED"
> >
完成 执行退料
</el-button> </el-button>
<!-- 待入库已入库取消 --> <!-- 待入库已入库取消 -->
<el-button <el-button
@ -204,10 +209,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { dateFormatter2 } from '@/utils/formatTime' import { dateFormatter2 } from '@/utils/formatTime'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import download from '@/utils/download' import download from '@/utils/download'
import { WmReturnIssueApi, WmReturnIssueVO } from '@/api/mes/wm/returnissue' import { WmReturnIssueApi, WmReturnIssueVO } from '@/api/mes/wm/returnissue'
import ReturnIssueForm from './ReturnIssueForm.vue' import ReturnIssueForm from './ReturnIssueForm.vue'
import ProWorkOrderSelect from '@/views/mes/pro/workorder/components/ProWorkOrderSelect.vue'
import { MesWmReturnIssueStatusEnum } from '@/views/mes/utils/constants' import { MesWmReturnIssueStatusEnum } from '@/views/mes/utils/constants'
defineOptions({ name: 'MesWmReturnIssue' }) defineOptions({ name: 'MesWmReturnIssue' })
@ -224,7 +230,8 @@ const queryParams = reactive({
pageSize: 10, pageSize: 10,
code: undefined, code: undefined,
name: undefined, name: undefined,
returnType: undefined, workOrderId: undefined,
type: undefined,
status: undefined, status: undefined,
returnDate: undefined returnDate: undefined
}) })