| | |
| | | |
| | | import { computed, ref } from 'vue'; |
| | | |
| | | import { confirm, useVbenModal } from '../../../../packages/effects/common-ui/src'; |
| | | import { MesWmItemReceiptStatusEnum } from '../../../../packages/constants/src'; |
| | | import { confirm, useVbenModal } from '@vben/common-ui'; |
| | | import { MesWmItemReceiptStatusEnum } from '@vben/constants'; |
| | | |
| | | import { Button, Divider, message, Popconfirm } from 'ant-design-vue'; |
| | | |
| | |
| | | const emit = defineEmits(['success']); |
| | | const formType = ref<FormType>('create'); |
| | | const formData = ref<MesWmItemReceiptApi.ItemReceipt>(); |
| | | const originalSnapshot = ref(''); // 表单原始数据快照,用于提交时跳过未变更的保存请求 |
| | | const originalSnapshot = ref(''); |
| | | const isEditable = computed(() => |
| | | // 是否为编辑模式(可保存) |
| | | ['create', 'update'].includes(formType.value), |
| | | ); |
| | | const isStock = computed(() => formType.value === 'stock'); // 是否为上架模式 |
| | | const isFinish = computed(() => formType.value === 'finish'); // 是否为执行入库模式 |
| | | const isStock = computed(() => formType.value === 'stock'); |
| | | const isFinish = computed(() => formType.value === 'finish'); |
| | | const canSubmit = computed( |
| | | () => |
| | | // 是否可提交 |
| | | formType.value === 'update' && |
| | | formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE, |
| | | ); |
| | |
| | | wrapperClass: 'grid-cols-3', |
| | | }); |
| | | |
| | | /** 提交入库单:表单有修改时先保存,再调用提交接口 */ |
| | | /** 提交入库单 */ |
| | | async function handleSubmit() { |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid || !formData.value?.id) { |
| | |
| | | |
| | | /** 执行上架 */ |
| | | async function handleStock() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | if (!formData.value?.id) return; |
| | | modalApi.lock(); |
| | | try { |
| | | await stockItemReceipt(formData.value.id); |
| | |
| | | |
| | | /** 执行入库 */ |
| | | async function handleFinish() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | if (!formData.value?.id) return; |
| | | modalApi.lock(); |
| | | try { |
| | | await finishItemReceipt(formData.value.id); |
| | |
| | | return; |
| | | } |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid) { |
| | | return; |
| | | } |
| | | if (!valid) return; |
| | | modalApi.lock(); |
| | | // 提交表单 |
| | | const data = (await formApi.getValues()) as MesWmItemReceiptApi.ItemReceipt; |
| | | try { |
| | | if (formData.value?.id) { |
| | | await updateItemReceipt({ ...formData.value, ...data }); |
| | | formData.value = { ...formData.value, ...data }; |
| | | } else { |
| | | const id = await createItemReceipt(data); |
| | | formData.value = { |
| | | ...data, |
| | | id, |
| | | status: MesWmItemReceiptStatusEnum.PREPARE, |
| | | }; |
| | | await formApi.setFieldValue('id', id); |
| | | await formApi.setFieldValue('status', formData.value.status); |
| | | formType.value = 'update'; |
| | | emit('success'); |
| | | message.success($t('ui.actionMessage.operationSuccess')); |
| | | await modalApi.close(); |
| | | return; |
| | | } |
| | | // 新增:保持弹窗打开,切换到编辑模式 |
| | | const id = await createItemReceipt(data); |
| | | formData.value = { |
| | | ...data, |
| | | id, |
| | | status: MesWmItemReceiptStatusEnum.PREPARE, |
| | | }; |
| | | await formApi.setFieldValue('id', id); |
| | | await formApi.setFieldValue('status', formData.value.status); |
| | | formType.value = 'update'; |
| | | originalSnapshot.value = JSON.stringify(await formApi.getValues()); |
| | | emit('success'); |
| | | message.success($t('ui.actionMessage.operationSuccess')); |
| | |
| | | originalSnapshot.value = ''; |
| | | return; |
| | | } |
| | | // 加载数据 |
| | | const data = modalApi.getData<{ formType: FormType; id?: number }>(); |
| | | formType.value = data.formType; |
| | | formApi.setState({ schema: useFormSchema(formType.value, formApi) }); |
| | |
| | | modalApi.lock(); |
| | | try { |
| | | formData.value = await getItemReceipt(data.id); |
| | | // 设置到 values |
| | | await formApi.setValues(formData.value); |
| | | } finally { |
| | | modalApi.unlock(); |
| | |
| | | <template> |
| | | <Modal :title="getTitle" class="w-3/5"> |
| | | <Form class="mx-4" /> |
| | | <!-- 非新建模式展示物料信息 --> |
| | | <template v-if="formData?.id"> |
| | | <Divider>物料信息</Divider> |
| | | <div class="mx-4"> |