feat(mes): 移除单位编号字段,优化工单 BOM 相关逻辑

pull/871/MERGE
YunaiV 2026-03-15 10:39:07 +08:00
parent 1e5f56b54b
commit 39d3efce50
4 changed files with 46 additions and 32 deletions

View File

@ -253,6 +253,7 @@ export enum DICT_TYPE {
IOT_MODBUS_FRAME_FORMAT = 'iot_modbus_frame_format', // IoT Modbus 帧格式
// ========== MES - 制造执行系统模块 ==========
MES_MD_ITEM_OR_PRODUCT = 'mes_md_item_or_product', // MES 物料产品标识
MES_CLIENT_TYPE = 'mes_client_type', // MES 客户类型
MES_VENDOR_LEVEL = 'mes_vendor_level', // MES 供应商级别
MES_CAL_HOLIDAY_TYPE = 'mes_cal_holiday_type', // MES 假期类型

View File

@ -7,21 +7,35 @@
<el-table-column label="BOM 物料名称" align="center" prop="itemName" min-width="150" />
<el-table-column label="规格型号" align="center" prop="itemSpec" width="120" />
<el-table-column label="单位" align="center" prop="unitMeasureName" width="80" />
<el-table-column label="物料/产品" align="center" prop="itemOrProduct" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_MD_ITEM_OR_PRODUCT" :value="scope.row.itemOrProduct" />
</template>
</el-table-column>
<el-table-column label="预计使用量" align="center" prop="quantity" width="120" />
<el-table-column label="备注" align="center" prop="remark" min-width="120" />
<el-table-column label="操作" align="center" width="160" v-if="!disabled">
<el-table-column
label="操作"
align="center"
width="160"
fixed="right"
v-if="
[MesProWorkOrderStatusEnum.PREPARE, MesProWorkOrderStatusEnum.CONFIRMED].includes(
workOrder.status
)
"
>
<template #default="scope">
<!-- 草稿状态编辑数量/备注 -->
<!-- TODO @AIworkOrder 来自父组件 WorkOrderForm 通过 prop :work-order="formData" 传入即当前工单的完整数据 -->
<el-button
v-if="workOrder.status === MesProWorkOrderStatusEnum.PREPARE"
link
type="primary"
@click="openBomForm('update', scope.row)"
@click="openForm('update', scope.row)"
>
编辑
</el-button>
<!-- 已确认 + 自行生产 + 产品类型 BOM 生成工单 -->
<!-- 已确认 + 自行生产 + 产品类型 BOM 生成工单 -->
<el-button
v-if="
workOrder.status === MesProWorkOrderStatusEnum.CONFIRMED &&
@ -78,6 +92,7 @@
<script setup lang="ts">
import { ProWorkOrderBomApi, ProWorkOrderBomVO } from '@/api/mes/pro/workorder/bom'
import { MesProWorkOrderStatusEnum, MesProWorkOrderTypeEnum } from '@/views/mes/utils/constants'
import { DICT_TYPE } from '@/utils/dict'
defineOptions({ name: 'WorkOrderBomList' })
@ -116,7 +131,6 @@ const getBomList = async () => {
}
/** 生成工单(通知父组件) */
// todo @
const handleGenerateWorkOrder = (row: any) => {
emit('generate-work-order', row)
}
@ -130,9 +144,6 @@ const formData = ref({
id: undefined as number | undefined,
workOrderId: undefined as number | undefined,
itemId: undefined as number | undefined,
itemName: undefined as string | undefined,
unitMeasureId: undefined as number | undefined,
unitMeasureName: undefined as string | undefined,
quantity: undefined as number | undefined,
remark: undefined as string | undefined
})
@ -140,20 +151,24 @@ const formRules = reactive({
quantity: [{ required: true, message: '预计使用量不能为空', trigger: 'blur' }]
})
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
workOrderId: undefined,
itemId: undefined,
quantity: undefined,
remark: undefined
}
formRef.value?.resetFields()
}
/** 打开 BOM 编辑弹窗 */
const openBomForm = (_type: string, row: any) => {
const openForm = (_type: string, row: any) => {
resetForm()
dialogVisible.value = true
dialogTitle.value = '编辑 BOM 物料'
formData.value = {
id: row.id,
workOrderId: row.workOrderId,
itemId: row.itemId,
itemName: row.itemName,
unitMeasureId: row.unitMeasureId,
unitMeasureName: row.unitMeasureName,
quantity: row.quantity,
remark: row.remark
}
formData.value = { ...row }
}
/** 提交表单 */
@ -161,14 +176,7 @@ const submitForm = async () => {
await formRef.value.validate()
formLoading.value = true
try {
const data = {
id: formData.value.id,
workOrderId: formData.value.workOrderId,
itemId: formData.value.itemId,
unitMeasureId: formData.value.unitMeasureId,
quantity: formData.value.quantity,
remark: formData.value.remark
} as unknown as ProWorkOrderBomVO
const data = formData.value as unknown as ProWorkOrderBomVO
await ProWorkOrderBomApi.updateWorkOrderBom(data)
message.success(t('common.updateSuccess'))
dialogVisible.value = false

View File

@ -1,6 +1,6 @@
<!-- MES 工单物料需求列表只读 -->
<template>
<el-table v-loading="loading" :data="itemList" :stripe="true" :show-overflow-tooltip="true">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="物料编码" align="center" prop="itemCode" width="120" />
<el-table-column label="物料名称" align="center" prop="itemName" min-width="150" />
<el-table-column label="规格型号" align="center" prop="itemSpec" width="120" />
@ -18,19 +18,21 @@ const props = defineProps<{
workOrderId: number
}>()
const loading = ref(false)
const itemList = ref<any[]>([])
const loading = ref(false) //
const list = ref<any[]>([]) //
/** 查询物料需求列表 */
const getList = async () => {
loading.value = true
try {
itemList.value = await ProWorkOrderBomApi.getWorkOrderBomItemListByWorkOrderId(props.workOrderId)
list.value = await ProWorkOrderBomApi.getWorkOrderBomItemListByWorkOrderId(props.workOrderId)
} finally {
loading.value = false
}
}
/** 初始化 */
onMounted(() => getList())
onMounted(() => {
getList()
})
</script>

View File

@ -279,6 +279,9 @@ const handleGenerateWorkOrder = (bomRow: any) => {
formData.value.requestDate = currentWorkOrder.requestDate
formData.value.productId = bomRow.itemId
formData.value.quantity = bomRow.quantity
formData.value.name = `${bomRow.itemName}${bomRow.quantity}${bomRow.unitMeasureName || ''}`
//
message.info('已从 BOM 物料预填子工单,请补充工单编码等信息后保存')
}
defineExpose({ open }) // open