| | |
| | | getItemReceipt, |
| | | stockItemReceipt, |
| | | submitItemReceipt, |
| | | submitItemReceiptApproval, |
| | | updateItemReceipt, |
| | | } from '#/api/mes/wm/itemreceipt'; |
| | | import { $t } from '#/locales'; |
| | |
| | | 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, |
| | | ); |
| | | const canSubmitApproval = 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); |
| | | message.success('入库成功'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } |
| | | |
| | | /** 提交审批 */ |
| | | async function handleSubmitApproval() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | // 使用默认流程key,实际项目中可能需要弹窗选择 |
| | | const processDefinitionKey = 'item_receipt_approval'; |
| | | await submitItemReceiptApproval(formData.value.id, processDefinitionKey); |
| | | message.success('提交审批成功'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | |
| | | 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"> |
| | |
| | | > |
| | | <Button type="primary">提交</Button> |
| | | </Popconfirm> |
| | | <Button v-if="canSubmitApproval" type="primary" @click="handleSubmitApproval"> |
| | | 提交审批 |
| | | </Button> |
| | | <Button v-if="isStock" type="primary" @click="confirmStock"> |
| | | 执行上架 |
| | | </Button> |