From 43e80f868a5a9955733cac4755e4f78ed1c4c031 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 29 Mar 2026 18:24:08 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(mes):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8D=95=E8=A1=A8=E5=8D=95=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整表单字段和状态管理,简化逻辑处理,确保在创建和编辑模式下正确传递数据。增强了用户体验,提升了代码可读性和维护性。 --- .../wm/itemreceipt/ItemReceiptDetailForm.vue | 17 ++++--- .../wm/itemreceipt/ItemReceiptDetailList.vue | 10 ++--- .../mes/wm/itemreceipt/ItemReceiptForm.vue | 45 +++++++++---------- .../wm/itemreceipt/ItemReceiptLineList.vue | 2 +- 4 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/views/mes/wm/itemreceipt/ItemReceiptDetailForm.vue b/src/views/mes/wm/itemreceipt/ItemReceiptDetailForm.vue index 4c62c216d..b21ca0523 100644 --- a/src/views/mes/wm/itemreceipt/ItemReceiptDetailForm.vue +++ b/src/views/mes/wm/itemreceipt/ItemReceiptDetailForm.vue @@ -55,15 +55,13 @@ const props = defineProps<{ const emit = defineEmits(['success']) -const { t } = useI18n() // 国际化 -const message = useMessage() // 消息弹窗 +const { t } = useI18n() +const message = useMessage() const dialogVisible = ref(false) // 弹窗的是否展示 const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中 const formType = ref('') // 表单的类型:create / update -const currentLineId = ref() // 当前操作的行 ID -const formRef = ref() // 表单 Ref const formData = ref({ id: undefined as number | undefined, lineId: undefined as number | undefined, @@ -81,14 +79,15 @@ const formRules = reactive({ areaId: [{ required: true, message: '库位不能为空', trigger: 'change' }], quantity: [{ required: true, message: '数量不能为空', trigger: 'blur' }] }) +const formRef = ref() // 表单 Ref /** 打开弹窗 */ const open = async (type: string, lineId: number, itemId?: number, detailId?: number) => { dialogVisible.value = true dialogTitle.value = type === 'create' ? '添加上架明细' : '编辑上架明细' formType.value = type - currentLineId.value = lineId resetForm() + formData.value.lineId = lineId // 修改时,设置数据 if (detailId) { formLoading.value = true @@ -101,7 +100,6 @@ const open = async (type: string, lineId: number, itemId?: number, detailId?: nu formData.value.itemId = itemId } } -defineExpose({ open }) /** 提交表单 */ const submitForm = async () => { @@ -112,8 +110,7 @@ const submitForm = async () => { try { const data = { ...formData.value, - receiptId: props.receiptId, - lineId: currentLineId.value + receiptId: props.receiptId } as unknown as WmItemReceiptDetailVO if (formType.value === 'create') { await WmItemReceiptDetailApi.createItemReceiptDetail(data) @@ -124,7 +121,7 @@ const submitForm = async () => { } dialogVisible.value = false // 发送操作成功的事件 - emit('success', currentLineId.value) + emit('success', formData.value.lineId) } finally { formLoading.value = false } @@ -144,4 +141,6 @@ const resetForm = () => { } formRef.value?.resetFields() } + +defineExpose({ open }) diff --git a/src/views/mes/wm/itemreceipt/ItemReceiptDetailList.vue b/src/views/mes/wm/itemreceipt/ItemReceiptDetailList.vue index 1de90264f..670b314aa 100644 --- a/src/views/mes/wm/itemreceipt/ItemReceiptDetailList.vue +++ b/src/views/mes/wm/itemreceipt/ItemReceiptDetailList.vue @@ -39,12 +39,13 @@ const props = defineProps<{ const emit = defineEmits(['edit-detail']) -const { t } = useI18n() // 国际化 -const message = useMessage() // 消息弹窗 +const { t } = useI18n() +const message = useMessage() + +const isStock = computed(() => props.formType === 'stock') // 是否为上架模式 const loading = ref(false) // 列表的加载中 const list = ref([]) // 明细列表 -const isStock = computed(() => props.formType === 'stock') // 是否为上架模式 /** 查询明细列表 */ const getList = async () => { @@ -55,7 +56,6 @@ const getList = async () => { loading.value = false } } -defineExpose({ getList }) /** 删除上架明细 */ const handleDelete = async (detailId: number) => { @@ -67,8 +67,8 @@ const handleDelete = async (detailId: number) => { } catch {} } -/** 初始化:延迟加载,展开时才触发 */ onMounted(() => { getList() }) +defineExpose({ getList }) diff --git a/src/views/mes/wm/itemreceipt/ItemReceiptForm.vue b/src/views/mes/wm/itemreceipt/ItemReceiptForm.vue index a14e06f5c..1febfbcb2 100644 --- a/src/views/mes/wm/itemreceipt/ItemReceiptForm.vue +++ b/src/views/mes/wm/itemreceipt/ItemReceiptForm.vue @@ -107,12 +107,7 @@ 执行上架 - + 执行入库 关 闭 @@ -133,12 +128,27 @@ import { } from '@/views/mes/utils/constants' defineOptions({ name: 'ItemReceiptForm' }) +const emit = defineEmits(['success']) const message = useMessage() // 消息弹窗 - const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中 const formType = ref('create') // 表单的类型:create / update / stock / finish / detail +const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式 +const isStock = computed(() => formType.value === 'stock') // 是否为上架模式 +const isFinish = computed(() => formType.value === 'finish') // 是否为执行入库模式 +const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否为详情模式 +const isHeaderReadonly = computed(() => ['stock', 'detail', 'finish'].includes(formType.value)) // 是否只读 +const dialogTitle = computed(() => { + const titles = { + create: '新增采购入库单', + update: '编辑采购入库单', + stock: '执行上架', + finish: '执行入库', + detail: '采购入库单详情' + } + return titles[formType.value] || formType.value +}) const formData = ref({ id: undefined as number | undefined, code: undefined, @@ -157,21 +167,6 @@ const formRules = reactive({ vendorId: [{ required: true, message: '供应商不能为空', trigger: 'change' }] }) const formRef = ref() // 表单 Ref -const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式 -const isStock = computed(() => formType.value === 'stock') // 是否为上架模式 -const isFinish = computed(() => formType.value === 'finish') // 是否为执行入库模式 -const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否为详情模式 -const isHeaderReadonly = computed(() => ['stock', 'detail', 'finish'].includes(formType.value)) // 是否只读 -const dialogTitle = computed(() => { - const titles = { - create: '新增采购入库单', - update: '编辑采购入库单', - stock: '执行上架', - finish: '执行入库', - detail: '采购入库单详情' - } - return titles[formType.value] || formType.value -}) const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成入库单编号 */ @@ -181,7 +176,7 @@ const generateCode = async () => { ) } -/** 到货通知单变化时,自动填充供应商 */ +/** 到货通知单变化时,自动填充供应商和采购订单号 */ const handleNoticeChange = (notice: any) => { if (notice) { formData.value.vendorId = notice.vendorId @@ -206,10 +201,8 @@ const open = async (type: string, id?: number) => { // 保存原始数据快照 originalFormData.value = JSON.stringify(formData.value) } -defineExpose({ open }) /** 提交表单(create/update 模式) */ -const emit = defineEmits(['success']) const submitForm = async () => { // 校验表单 await formRef.value.validate() @@ -305,4 +298,6 @@ const resetForm = () => { } formRef.value?.resetFields() } + +defineExpose({ open }) diff --git a/src/views/mes/wm/itemreceipt/ItemReceiptLineList.vue b/src/views/mes/wm/itemreceipt/ItemReceiptLineList.vue index f55baddc4..c11f8e509 100644 --- a/src/views/mes/wm/itemreceipt/ItemReceiptLineList.vue +++ b/src/views/mes/wm/itemreceipt/ItemReceiptLineList.vue @@ -311,7 +311,7 @@ const setDetailListRef = (lineId: number, el: any) => { } // ==================== 上架明细表单(LineList 层级持有) ==================== -const detailFormRef = ref() +const detailFormRef = ref() // 上架明细表单 Ref /** 上架:直接打开明细创建表单 */ const handleStock = (lineId: number) => {