| | |
| | | <script lang="ts" setup> |
| | | import type { FormType } from '../data'; |
| | | |
| | | import type { ErpSaleOrderApi } from '#/api/erp/sale/order'; |
| | | import type { MesWmSalesNoticeApi } from '#/api/mes/wm/salesnotice'; |
| | | |
| | | import { computed, ref } from 'vue'; |
| | |
| | | submitSalesNotice, |
| | | updateSalesNotice, |
| | | } from '#/api/mes/wm/salesnotice'; |
| | | import { createSalesNoticeLine } from '#/api/mes/wm/salesnotice/line'; |
| | | import { getSaleOrderItemListByOrderId } from '#/api/erp/sale/order'; |
| | | import { $t } from '#/locales'; |
| | | |
| | | import { useFormSchema } from '../data'; |
| | |
| | | // 是否为编辑模式(可保存) |
| | | ['create', 'update'].includes(formType.value), |
| | | ); |
| | | const isFinish = computed(() => formType.value === 'finish'); // 是否为执行出库模式 |
| | | const canSubmit = computed( |
| | | () => |
| | | // 是否可提交 |
| | |
| | | const getTitle = computed(() => { |
| | | if (formType.value === 'detail') { |
| | | return $t('ui.actionTitle.view', ['发货通知单']); |
| | | } |
| | | if (formType.value === 'finish') { |
| | | return '执行出库'; |
| | | } |
| | | return formType.value === 'update' |
| | | ? $t('ui.actionTitle.edit', ['发货通知单']) |
| | |
| | | } |
| | | } |
| | | |
| | | /** 执行出库(后端暂未实现,提示用户) */ |
| | | function handleFinish() { |
| | | message.info('执行出库功能暂时不支持,敬请期待!'); |
| | | } |
| | | |
| | | const [Modal, modalApi] = useVbenModal({ |
| | | async onConfirm() { |
| | | if (!isEditable.value) { |
| | |
| | | if (formData.value?.id) { |
| | | await updateSalesNotice({ ...formData.value, ...data }); |
| | | formData.value = { ...formData.value, ...data }; |
| | | } else { |
| | | const id = await createSalesNotice(data); |
| | | formData.value = { |
| | | ...data, |
| | | id, |
| | | status: MesWmSalesNoticeStatusEnum.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 createSalesNotice(data); |
| | | // 选择了销售订单时,自动带入订单产品明细 |
| | | if (data.saleOrderId) { |
| | | try { |
| | | const items = await getSaleOrderItemListByOrderId(data.saleOrderId); |
| | | if (items?.length) { |
| | | await Promise.all(items.map((item: ErpSaleOrderApi.SaleOrderItem) => |
| | | createSalesNoticeLine({ |
| | | noticeId: id, |
| | | saleOrderItemId: item.id, |
| | | itemId: item.productId, |
| | | itemCode: item.productBarCode, |
| | | itemName: item.productName, |
| | | unitMeasureName: item.productUnitName, |
| | | quantity: item.count, |
| | | batchCode: item.batchCode, |
| | | oqcCheckFlag: false, |
| | | }), |
| | | )); |
| | | } |
| | | } catch { |
| | | // 获取订单明细失败不影响主流程 |
| | | } |
| | | } |
| | | formData.value = { |
| | | ...data, |
| | | id, |
| | | status: MesWmSalesNoticeStatusEnum.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')); |
| | |
| | | > |
| | | <Button type="primary">提交</Button> |
| | | </Popconfirm> |
| | | <Button v-if="isFinish" type="primary" @click="handleFinish"> |
| | | 执行出库 |
| | | </Button> |
| | | </div> |
| | | </template> |
| | | </Modal> |