feat(mes): 重构缺陷记录相关类的包结构,更新缺陷等级字段类型为整数,优化缺陷记录内联编辑组件

pull/871/MERGE
YunaiV 2026-02-21 21:03:14 +08:00
parent 31cc9bd31e
commit 298ad41d5b
12 changed files with 368 additions and 315 deletions

View File

@ -6,7 +6,7 @@ export interface QcDefectVO {
code: string // 缺陷编码
name: string // 缺陷描述
type: string // 检测项类型
level: string // 缺陷等级
level: number // 缺陷等级
remark: string // 备注
}

View File

@ -43,7 +43,7 @@
class="!w-1/1"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
v-for="dict in getIntDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -61,7 +61,7 @@
</Dialog>
</template>
<script setup lang="ts">
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { QcDefectApi, QcDefectVO } from '@/api/mes/qc/defect'
import { generateRandomStr } from '@/utils'

View File

@ -50,7 +50,7 @@
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
v-for="dict in getIntDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -143,7 +143,7 @@ import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { QcDefectApi, QcDefectVO } from '@/api/mes/qc/defect'
import DefectForm from './DefectForm.vue'
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
defineOptions({ name: 'MesQcDefect' })

View File

@ -0,0 +1,231 @@
<!-- 缺陷记录内联编辑列表通用组件 IQC/IPQC/OQC/RQC 各模块复用 -->
<template>
<Dialog title="缺陷记录" v-model="dialogVisible" width="900px">
<!-- 新增按钮 -->
<el-row class="mb-10px">
<el-button
type="primary"
plain
@click="handleAdd"
v-hasPermi="['mes:qc-defect:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增缺陷
</el-button>
</el-row>
<!-- 内联编辑表格 -->
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="缺陷描述" align="center" min-width="200">
<template #default="scope">
<el-input
v-if="scope.row.editing"
v-model="scope.row.name"
placeholder="请输入缺陷描述"
/>
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="缺陷等级" align="center" width="140">
<template #default="scope">
<el-select
v-if="scope.row.editing"
v-model="scope.row.level"
placeholder="请选择"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
<dict-tag v-else :type="DICT_TYPE.MES_DEFECT_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column label="缺陷数量" align="center" width="120">
<template #default="scope">
<el-input-number
v-if="scope.row.editing"
v-model="scope.row.quantity"
:min="1"
controls-position="right"
class="!w-1/1"
/>
<span v-else>{{ scope.row.quantity }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" min-width="150">
<template #default="scope">
<el-input
v-if="scope.row.editing"
v-model="scope.row.remark"
placeholder="请输入备注"
/>
<span v-else>{{ scope.row.remark || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="130" fixed="right">
<template #default="scope">
<template v-if="scope.row.editing">
<el-button link type="success" @click="handleSave(scope.row)"></el-button>
<el-button link type="info" @click="handleCancel(scope.row, scope.$index)">
取消
</el-button>
</template>
<template v-else>
<el-button
link
type="primary"
@click="handleEdit(scope.row)"
v-hasPermi="['mes:qc-defect:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:qc-defect:update']"
>
删除
</el-button>
</template>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</Dialog>
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { QcDefectRecordApi, QcDefectRecordVO } from '@/api/mes/qc/defect/record'
/** 缺陷记录内联编辑弹窗(通用组件,供 IQC/IPQC/OQC/RQC 各模块复用) */
defineOptions({ name: 'DefectRecordInlineList' })
const emit = defineEmits(['refresh']) //
const message = useMessage()
const { t } = useI18n()
const dialogVisible = ref(false)
const loading = ref(false)
const list = ref<any[]>([])
const total = ref(0)
// open
const qcType = ref<number>(0) // MesQcTypeEnum
const qcId = ref<number>(0) // ID
const lineId = ref<number>(0) // ID
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
qcType: undefined as number | undefined,
qcId: undefined as number | undefined,
lineId: undefined as number | undefined
})
/** 打开弹窗 */
const open = async (type: number, id: number, line: number) => {
qcType.value = type
qcId.value = id
lineId.value = line
queryParams.pageNo = 1
dialogVisible.value = true
await getList()
}
defineExpose({ open })
/** 查询列表 */
const getList = async () => {
if (!qcId.value || !lineId.value) {
return
}
queryParams.qcType = qcType.value
queryParams.qcId = qcId.value
queryParams.lineId = lineId.value
loading.value = true
try {
const data = await QcDefectRecordApi.getDefectRecordPage(queryParams)
list.value = data.list.map((item: QcDefectRecordVO) => ({ ...item, editing: false }))
total.value = data.total
} finally {
loading.value = false
}
}
/** 新增行 */
const handleAdd = () => {
list.value.unshift({
id: undefined,
qcType: qcType.value,
qcId: qcId.value,
lineId: lineId.value,
name: '',
level: undefined,
quantity: 1,
remark: '',
editing: true,
isNew: true
})
}
/** 编辑行 */
const handleEdit = (row: any) => {
row._backup = { ...row }
row.editing = true
}
/** 保存行 */
const handleSave = async (row: any) => {
//
if (!row.name) {
message.warning('缺陷描述不能为空')
return
}
if (!row.level) {
message.warning('缺陷等级不能为空')
return
}
try {
if (row.isNew) {
await QcDefectRecordApi.createDefectRecord(row)
message.success(t('common.createSuccess'))
} else {
await QcDefectRecordApi.updateDefectRecord(row)
message.success(t('common.updateSuccess'))
}
await getList()
emit('refresh')
} catch {}
}
/** 取消编辑 */
const handleCancel = (row: any, index: number) => {
if (row.isNew) {
list.value.splice(index, 1)
} else {
Object.assign(row, row._backup)
row.editing = false
}
}
/** 删除行 */
const handleDelete = async (id: number) => {
try {
await message.delConfirm()
await QcDefectRecordApi.deleteDefectRecord(id)
message.success(t('common.delSuccess'))
await getList()
emit('refresh')
} catch {}
}
</script>

View File

@ -1,268 +0,0 @@
<!-- MES 来料检验缺陷记录 子列表CRUD -->
<template>
<div>
<!-- 操作栏 -->
<!-- TODO @芋艿说下 mes:qc-record 这个权限标识的情况 -->
<el-row class="mb-10px">
<el-button
type="primary"
plain
size="small"
@click="openForm('create')"
v-hasPermi="['mes:qc-record:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增缺陷记录
</el-button>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="缺陷描述" align="center" prop="name" min-width="200" />
<el-table-column label="缺陷等级" align="center" prop="level" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_DEFECT_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column label="缺陷数量" align="center" prop="quantity" width="100" />
<el-table-column label="备注" align="center" prop="remark" min-width="150" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" width="130" fixed="right">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:qc-record:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:qc-record:update']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 表单弹窗添加/修改 -->
<Dialog :title="dialogTitle" v-model="dialogVisible" width="600px">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="检验行" prop="lineId">
<el-select v-model="formData.lineId" placeholder="请选择检验行" filterable class="!w-1/1">
<el-option
v-for="line in lineList"
:key="line.id"
:label="
line.indicatorName + (line.indicatorCode ? ' (' + line.indicatorCode + ')' : '')
"
:value="line.id"
/>
</el-select>
</el-form-item>
<el-form-item label="缺陷描述" prop="name">
<el-input v-model="formData.name" placeholder="请输入缺陷描述" />
</el-form-item>
<el-form-item label="缺陷等级" prop="level">
<el-select v-model="formData.level" placeholder="请选择缺陷等级" class="!w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.MES_DEFECT_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="缺陷数量" prop="quantity">
<el-input-number
v-model="formData.quantity"
:min="1"
placeholder="请输入"
class="!w-1/1"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</div>
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { QcDefectRecordApi, QcDefectRecordVO } from '@/api/mes/qc/defect/record'
import { QcIqcLineApi, QcIqcLineVO } from '@/api/mes/qc/iqc/line'
defineOptions({ name: 'IqcDefectList' })
const props = defineProps<{
iqcId: number
lineId?: number //
}>()
const message = useMessage()
const { t } = useI18n()
const loading = ref(false)
const list = ref<QcDefectRecordVO[]>([])
const lineList = ref<QcIqcLineVO[]>([]) //
/** 查询列表 */
const getList = async () => {
if (!props.iqcId) return
loading.value = true
try {
const data = await QcDefectRecordApi.getDefectRecordPage({
pageNo: 1,
pageSize: 100,
qcType: 1,
qcId: props.iqcId,
lineId: props.lineId
})
list.value = data.list
} finally {
loading.value = false
}
}
/** 加载检验行列表 */
const loadLineList = async () => {
if (!props.iqcId) return
const data = await QcIqcLineApi.getIqcLinePage({
pageNo: 1,
pageSize: 100,
iqcId: props.iqcId
})
lineList.value = data.list
}
// ==================== / ====================
const dialogVisible = ref(false)
const dialogTitle = ref('')
const formLoading = ref(false)
const formType = ref('')
const formRef = ref()
const formData = ref({
id: undefined,
qcType: 1 as number,
qcId: undefined as number | undefined,
lineId: undefined as number | undefined,
name: undefined,
level: undefined,
quantity: 1,
remark: undefined
})
const formRules = reactive({
lineId: [{ required: true, message: '检验行不能为空', trigger: 'change' }],
name: [{ required: true, message: '缺陷描述不能为空', trigger: 'blur' }],
level: [{ required: true, message: '缺陷等级不能为空', trigger: 'change' }]
})
/** 添加/修改操作 */
const openForm = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
formData.value.qcId = props.iqcId
// lineId prop lineId
if (props.lineId) {
formData.value.lineId = props.lineId
}
//
await loadLineList()
//
if (id) {
formLoading.value = true
try {
const defect = list.value.find((d) => d.id === id)
if (defect) {
formData.value = { ...defect } as any
}
} finally {
formLoading.value = false
}
}
}
/** 提交表单 */
const submitForm = async () => {
if (!formRef) return
const valid = await formRef.value.validate()
if (!valid) return
formLoading.value = true
try {
const data = formData.value as unknown as QcDefectRecordVO
if (formType.value === 'create') {
await QcDefectRecordApi.createDefectRecord(data)
message.success(t('common.createSuccess'))
} else {
await QcDefectRecordApi.updateDefectRecord(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
await getList()
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
qcType: 1,
qcId: undefined,
lineId: undefined,
name: undefined,
level: undefined,
quantity: 1,
remark: undefined
}
formRef.value?.resetFields()
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
await message.delConfirm()
await QcDefectRecordApi.deleteDefectRecord(id)
message.success(t('common.delSuccess'))
await getList()
} catch {}
}
/** 监听 iqcId 变化,重新加载列表 */
watch(
() => props.iqcId,
() => getList(),
{ immediate: true }
)
/** 监听 lineId 变化,重新加载列表 */
watch(
() => props.lineId,
() => getList()
)
</script>

View File

@ -12,7 +12,7 @@
<el-row :gutter="16">
<el-col :span="8">
<el-form-item label="检验单编号" prop="code">
<!-- TODO @AI参考别的模块搞一下 -->
<!-- TODO @AI参考别的模块搞一下有个生成按钮 -->
<el-input v-model="formData.code" placeholder="请输入检验单编号" />
</el-form-item>
</el-col>
@ -21,12 +21,12 @@
<el-input v-model="formData.name" placeholder="请输入检验单名称" />
</el-form-item>
</el-col>
<!-- TODO @AI貌似不用填写这个字段哈 -->
<el-col :span="8">
<el-form-item label="检验模板" prop="templateId">
<el-form-item label="质检方案" prop="templateId">
<!-- TODO @AI质检方案有个 select 组件 -->
<el-select
v-model="formData.templateId"
placeholder="请选择检验模板"
placeholder="质检方案"
filterable
class="!w-1/1"
>
@ -200,22 +200,12 @@
<el-tab-pane label="检验项" name="line">
<IqcLineList :iqc-id="formData.id" />
</el-tab-pane>
<!-- TODO @AI应该是 IqcDefectList可以重构到 /Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/mes/qc/defect/record/components/ 提供给每个模块使用传递 qc-idqc-type -->
<el-tab-pane label="缺陷记录" name="defect">
<IqcDefectList :iqc-id="formData.id" />
</el-tab-pane>
<!-- TODO @AI检测结果缺少一个 List -->
<!-- TODO @芋艿检测结果缺少一个 tab-pane -->
</el-tabs>
</template>
<template #footer>
<el-button
@click="submitForm"
type="primary"
:disabled="formLoading"
>
</el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
@ -229,8 +219,8 @@ import MdVendorSelect from '@/views/mes/md/vendor/components/MdVendorSelect.vue'
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
import UserSelect from '@/views/system/user/components/UserSelect.vue'
import IqcLineList from './IqcLineList.vue'
import IqcDefectList from './IqcDefectList.vue'
// TODO @AI /Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue
defineOptions({ name: 'IqcForm' })
const { t } = useI18n()
@ -243,6 +233,7 @@ const formType = ref('')
const activeTab = ref('line')
//
// TODO @AI/Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/mes/qc/template components select
const templateList = ref<any[]>([])
const formData = ref({
@ -268,7 +259,6 @@ const formData = ref({
inspectDate: undefined,
inspectorUserId: undefined,
remark: undefined,
status: 0,
//
criticalRate: 0,
majorRate: 0,
@ -356,7 +346,6 @@ const resetForm = () => {
inspectDate: undefined,
inspectorUserId: undefined,
remark: undefined,
status: 0, // TODO @AI
criticalRate: 0,
majorRate: 0,
minorRate: 0,

View File

@ -21,51 +21,59 @@
<el-table-column label="轻微缺陷数" align="center" prop="minorQuantity" width="100" />
<el-table-column label="操作" align="center" width="100" fixed="right">
<template #default="scope">
<el-button link type="primary" @click="openDefectDialog(scope.row)"> </el-button>
<el-button link type="primary" @click="openDefectDialog(scope.row)"> </el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 缺陷记录弹窗 -->
<Dialog title="缺陷记录" v-model="defectDialogVisible" width="900px">
<IqcDefectList :iqc-id="props.iqcId" :line-id="currentLineId!" />
</Dialog>
<!-- 缺陷记录弹窗内联编辑 -->
<DefectRecordInlineList ref="defectListRef" @refresh="getList" />
</div>
</template>
<script setup lang="ts">
import { DICT_TYPE } from '@/utils/dict'
import { QcIqcLineApi, QcIqcLineVO } from '@/api/mes/qc/iqc/line'
import IqcDefectList from './IqcDefectList.vue'
import DefectRecordInlineList from '@/views/mes/qc/defect/record/components/DefectRecordInlineList.vue'
import { MesQcTypeEnum } from '@/views/mes/utils/constants'
defineOptions({ name: 'IqcLineList' })
const props = defineProps<{ iqcId: number }>()
const loading = ref(false)
const list = ref<QcIqcLineVO[]>([])
//
const defectDialogVisible = ref(false)
const currentLineId = ref<number>()
const loading = ref(false) //
const list = ref<QcIqcLineVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
iqcId: undefined as number | undefined
})
const defectListRef = ref() // Ref
/** 打开缺陷记录弹窗 */
const openDefectDialog = (row: QcIqcLineVO) => {
currentLineId.value = row.id
defectDialogVisible.value = true
defectListRef.value.open(MesQcTypeEnum.IQC, props.iqcId, row.id)
}
/** 查询列表 */
const getList = async () => {
if (!props.iqcId) return
if (!props.iqcId) {
return
}
queryParams.iqcId = props.iqcId
loading.value = true
try {
const data = await QcIqcLineApi.getIqcLinePage({
pageNo: 1,
pageSize: 100,
iqcId: props.iqcId
})
const data = await QcIqcLineApi.getIqcLinePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
@ -74,7 +82,10 @@ const getList = async () => {
/** 监听 iqcId 变化,重新加载列表 */
watch(
() => props.iqcId,
() => getList(),
() => {
queryParams.pageNo = 1
getList()
},
{ immediate: true }
)
</script>

View File

@ -204,6 +204,7 @@
</template>
<script setup lang="ts">
// TODO @AI /Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/system/user/index.vue
import { dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { QcIqcApi, QcIqcVO } from '@/api/mes/qc/iqc'

View File

@ -150,7 +150,7 @@
<script setup lang="ts">
import { DICT_TYPE } from '@/utils/dict'
import { QcTemplateIndicatorApi, QcTemplateIndicatorVO } from '@/api/mes/qc/template/indicator'
import { QcTemplateIndicatorApi, QcTemplateIndicatorVO } from '@/api/mes/qc/template/indicator/index'
import QcIndicatorSelect from '@/views/mes/qc/indicator/components/QcIndicatorSelect.vue'
import MdUnitMeasureSelect from '@/views/mes/md/unitmeasure/components/MdUnitMeasureSelect.vue'

View File

@ -151,7 +151,7 @@
</template>
<script setup lang="ts">
import { QcTemplateItemApi, QcTemplateItemVO } from '@/api/mes/qc/template/item'
import { QcTemplateItemApi, QcTemplateItemVO } from '@/api/mes/qc/template/item/index'
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
defineOptions({ name: 'TemplateItemList' })

View File

@ -0,0 +1,81 @@
<!-- MES 质检方案选择器纯下拉前端过滤支持 namecode -->
<template>
<el-select
v-model="selectValue"
:placeholder="placeholder"
:disabled="disabled"
:clearable="clearable"
filterable
:filter-method="handleFilter"
class="!w-1/1"
@change="handleChange"
>
<el-option v-for="item in filteredList" :key="item.id" :label="item.name" :value="item.id">
<div class="flex items-center gap-8px">
<span>{{ item.name }}</span>
<el-tag v-if="item.code" size="small" type="info" class="ml-4px">
{{ item.code }}
</el-tag>
</div>
</el-option>
</el-select>
</template>
<script setup lang="ts">
import { QcTemplateApi, QcTemplateVO } from '@/api/mes/qc/template'
defineOptions({ name: 'QcTemplateSelect' })
const props = withDefaults(
defineProps<{
modelValue?: number
disabled?: boolean
clearable?: boolean
placeholder?: string
}>(),
{
disabled: false,
clearable: true,
placeholder: '请选择质检方案'
}
)
const emit = defineEmits<{
'update:modelValue': [value: number | undefined]
change: [item: QcTemplateVO | undefined]
}>()
const allList = ref<QcTemplateVO[]>([]) //
const filteredList = ref<QcTemplateVO[]>([]) //
const selectValue = computed({
get: () => props.modelValue,
set: (val) => emit('update:modelValue', val)
})
/** 前端过滤name + code */
const handleFilter = (query: string) => {
if (!query) {
filteredList.value = allList.value
return
}
const keyword = query.toLowerCase()
filteredList.value = allList.value.filter(
(item) =>
item.name?.toLowerCase().includes(keyword) ||
item.code?.toLowerCase().includes(keyword)
)
}
/** 选中变化 */
const handleChange = (val: number | undefined) => {
const item = allList.value.find((o) => o.id === val)
emit('change', item)
}
/** 加载质检方案列表 */
onMounted(async () => {
allList.value = await QcTemplateApi.getTemplateSimpleList()
filteredList.value = allList.value
})
</script>

View File

@ -130,6 +130,14 @@ export const MesDvCheckResultEnum = {
ABNORMAL: 2 // 异常
}
/** MES 质检类型枚举 */
export const MesQcTypeEnum = {
IQC: 1, // 来料检验
IPQC: 2, // 过程检验
OQC: 3, // 出货检验
RQC: 4 // 退货检验
}
/** MES 来料检验单IQC状态枚举 */
export const MesQcIqcStatusEnum = {
PREPARE: 0, // 草稿