feat(mes): 添加来源单据编号字段,优化数据结构

pull/871/MERGE
YunaiV 2026-03-26 21:44:05 +08:00
parent 9959c6c5f6
commit be159c7070
7 changed files with 141 additions and 9 deletions

View File

@ -41,6 +41,26 @@
</el-col>
</el-row>
<el-row :gutter="16" v-if="formData.sourceDocType">
<el-col :span="8">
<el-form-item label="来源单据类型">
<el-select v-model="formData.sourceDocType" class="!w-1/1" disabled>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="来源单据编号">
<el-input v-model="formData.sourceDocCode" disabled />
</el-form-item>
</el-col>
</el-row>
<el-divider>生产关联</el-divider>
<el-row :gutter="16">
<el-col :span="8">
@ -302,6 +322,7 @@ const formData = ref({
templateId: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
workOrderId: undefined,
taskId: undefined,
@ -418,6 +439,7 @@ const resetForm = () => {
templateId: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
workOrderId: undefined,
taskId: undefined,

View File

@ -29,6 +29,26 @@
</el-col>
</el-row>
<el-row :gutter="16" v-if="formData.sourceDocType">
<el-col :span="8">
<el-form-item label="来源单据类型">
<el-select v-model="formData.sourceDocType" class="!w-1/1" disabled>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="来源单据编号">
<el-input v-model="formData.sourceDocCode" disabled />
</el-form-item>
</el-col>
</el-row>
<el-divider>物料与供应商</el-divider>
<el-row :gutter="16">
<el-col :span="8">
@ -251,6 +271,7 @@ const formData = ref({
name: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
vendorId: undefined,
vendorBatch: undefined,
@ -345,6 +366,7 @@ const resetForm = () => {
name: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
vendorId: undefined,
vendorBatch: undefined,

View File

@ -28,6 +28,26 @@
</el-col>
</el-row>
<el-row :gutter="16" v-if="formData.sourceDocType">
<el-col :span="8">
<el-form-item label="来源单据类型">
<el-select v-model="formData.sourceDocType" class="!w-1/1" disabled>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="来源单据编号">
<el-input v-model="formData.sourceDocCode" disabled />
</el-form-item>
</el-col>
</el-row>
<el-divider>物料与客户</el-divider>
<el-row :gutter="16">
<el-col :span="8">
@ -256,6 +276,7 @@ const formData = ref({
name: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
clientId: undefined,
batchCode: undefined,
@ -352,6 +373,7 @@ const resetForm = () => {
name: undefined,
sourceDocId: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
sourceLineId: undefined,
clientId: undefined,
batchCode: undefined,

View File

@ -205,6 +205,7 @@ const handleCreateRqc = (row: QcPendingInspectVO) => {
sourceDocId: row.sourceDocId,
sourceDocType: row.sourceDocType,
sourceLineId: row.sourceLineId,
sourceDocCode: row.sourceDocCode,
itemId: row.itemId,
checkQuantity: row.quantity,
inspectDate: row.recordTime,

View File

@ -28,6 +28,25 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16" v-if="formData.sourceDocType">
<el-col :span="8">
<el-form-item label="来源单据类型">
<el-select v-model="formData.sourceDocType" class="!w-1/1" disabled>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="来源单据编号">
<el-input v-model="formData.sourceDocCode" disabled />
</el-form-item>
</el-col>
</el-row>
<el-divider>物料信息</el-divider>
<el-row :gutter="16">
@ -249,6 +268,7 @@ const formData = ref({
sourceDocId: undefined,
sourceDocType: undefined,
sourceLineId: undefined,
sourceDocCode: undefined,
type: undefined,
itemId: undefined,
batchCode: undefined,
@ -344,6 +364,7 @@ const resetForm = () => {
sourceDocId: undefined,
sourceDocType: undefined,
sourceLineId: undefined,
sourceDocCode: undefined,
type: undefined,
itemId: undefined,
batchCode: undefined,

View File

@ -18,8 +18,7 @@
class="!w-240px"
/>
</el-form-item>
<!-- TODO @AI应该字典处理下来源单据类型 -->
<!--
<!-- DONE @AI应该字典处理下来源单据类型 -->
<el-form-item label="来源单据类型" prop="sourceDocType">
<el-select
v-model="queryParams.sourceDocType"
@ -28,15 +27,27 @@
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE)"
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_SOURCE_DOC_TYPE).filter(
(dict) =>
[MesQcSourceDocTypeEnum.RETURN_ISSUE, MesQcSourceDocTypeEnum.RETURN_SALES].includes(
dict.value
)
)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
-->
<!-- TODO @AI来源单据编号如果填写了去相关的去查询然后 IN -->
<el-form-item label="来源单据编号" prop="sourceDocCode">
<el-input
v-model="queryParams.sourceDocCode"
placeholder="请输入来源单据编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="产品物料" prop="itemId">
<MdItemSelect
v-model="queryParams.itemId"
@ -112,9 +123,14 @@
</template>
</el-table-column>
<el-table-column label="检验单名称" align="center" prop="name" min-width="180" />
<!-- TODO @AI应该字典处理下来源单据类型 -->
<el-table-column label="来源单据类型" align="center" prop="sourceDocType" width="120" />
<!-- TODO @AI来源单独编码需要后端 RespVO 拼接下返回 -->
<!-- DONE @AI应该字典处理下来源单据类型 -->
<el-table-column label="来源单据类型" align="center" prop="sourceDocType" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_QC_SOURCE_DOC_TYPE" :value="scope.row.sourceDocType" />
</template>
</el-table-column>
<!-- DONE @AI来源单据编码后端 RespVO 已拼接返回 sourceDocCode -->
<el-table-column label="来源单据编码" align="center" prop="sourceDocCode" width="160" />
<el-table-column label="产品物料编码" align="center" prop="itemCode" width="130" />
<el-table-column label="产品物料名称" align="center" prop="itemName" min-width="150" />
<el-table-column label="规格型号" align="center" prop="itemSpecification" width="130" />
@ -191,7 +207,7 @@ import RqcForm from './RqcForm.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
import UserSelect from '@/views/system/user/components/UserSelect.vue'
import { MesQcStatusEnum } from '@/views/mes/utils/constants'
import { MesQcStatusEnum, MesQcSourceDocTypeEnum } from '@/views/mes/utils/constants'
defineOptions({ name: 'MesQcRqc' })
@ -206,6 +222,7 @@ const queryParams = reactive({
pageSize: 10,
code: undefined,
sourceDocType: undefined,
sourceDocCode: undefined,
itemId: undefined,
batchCode: undefined,
checkResult: undefined,

View File

@ -139,6 +139,33 @@ export const MesQcResultValueType = {
FILE: 5 // 文件
} as const
/** MES 业务类型常量 */
export const MesBizTypeEnum = {
// WM 仓库模块 [100, 200)
WM_ARRIVAL_NOTICE: 100, // 到货通知单
WM_RETURN_ISSUE: 116, // 生产退料
WM_PRODUCT_SALES: 118, // 销售出库
WM_RETURN_SALES: 119, // 销售退货入库
WM_OUTSOURCE_RECPT: 121, // 外协入库
// PRO 生产模块 [300, 400)
PRO_FEEDBACK: 304 // 生产报工
}
/** MES 质检来源单据类型枚举 */
export const MesQcSourceDocTypeEnum = {
// IQC
ARRIVAL_NOTICE: MesBizTypeEnum.WM_ARRIVAL_NOTICE,
OUTSOURCE_RECPT: MesBizTypeEnum.WM_OUTSOURCE_RECPT,
// IPQC
PRO_FEEDBACK: MesBizTypeEnum.PRO_FEEDBACK,
// OQC
PRODUCT_SALES: MesBizTypeEnum.WM_PRODUCT_SALES,
// RQC
RETURN_ISSUE: MesBizTypeEnum.WM_RETURN_ISSUE,
RETURN_SALES: MesBizTypeEnum.WM_RETURN_SALES
}
/** MES 质检类型枚举 */
export const MesQcTypeEnum = {
IQC: 1, // 来料检验