| | |
| | | <script lang="ts" setup> |
| | | import type { FormType } from '../data'; |
| | | |
| | | import type { ErpPurchaseOrderApi, ProcessDefinition } from '#/api/erp/purchase/order'; |
| | | import type { ErpPurchaseOrderApi } from '#/api/erp/purchase/order'; |
| | | |
| | | import { computed, ref } from 'vue'; |
| | | |
| | |
| | | import { |
| | | confirmReceipt, |
| | | createPurchaseOrder, |
| | | getPurchaseApproveProcessList, |
| | | getPurchaseOrder, |
| | | updatePurchaseOrder, |
| | | } from '#/api/erp/purchase/order'; |
| | |
| | | |
| | | import { useFormSchema } from '../data'; |
| | | import PurchaseOrderItemForm from './item-form.vue'; |
| | | import ProcessSelectModal from './process-select-modal.vue'; |
| | | |
| | | const emit = defineEmits(['success']); |
| | | const formData = ref<ErpPurchaseOrderApi.PurchaseOrder>(); |
| | | const formType = ref<FormType>('create'); |
| | | const itemFormRef = ref<InstanceType<typeof PurchaseOrderItemForm>>(); |
| | | const selectedProcessId = ref<string>(''); |
| | | |
| | | const getTitle = computed(() => { |
| | | if (formType.value === 'create') { |
| | |
| | | }, |
| | | }); |
| | | |
| | | const [ProcessModal, processModalApi] = useVbenModal({ |
| | | connectedComponent: ProcessSelectModal, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | /** æ´æ°éè´è®¢å项 */ |
| | | function handleUpdateItems(items: ErpPurchaseOrderApi.PurchaseOrderItem[]) { |
| | | formData.value = modalApi.getData<ErpPurchaseOrderApi.PurchaseOrder>(); |
| | |
| | | }); |
| | | } |
| | | |
| | | /** æµç¨éæ©æå */ |
| | | function handleProcessSelectSuccess(processId: string) { |
| | | selectedProcessId.value = processId; |
| | | submitOrder(); |
| | | } |
| | | |
| | | /** æäº¤è®¢å */ |
| | | async function submitOrder() { |
| | | const data = (await formApi.getValues()) as ErpPurchaseOrderApi.PurchaseOrder; |
| | |
| | | })); |
| | | if (data.fileUrl && Array.isArray(data.fileUrl)) { |
| | | data.fileUrl = data.fileUrl.length > 0 ? data.fileUrl[0] : ''; |
| | | } |
| | | if (selectedProcessId.value) { |
| | | data.processDefinitionId = selectedProcessId.value; |
| | | } |
| | | await (formType.value === 'create' |
| | | ? createPurchaseOrder(data) |
| | |
| | | } |
| | | |
| | | modalApi.lock(); |
| | | |
| | | if (formType.value === 'create') { |
| | | try { |
| | | const processes = await getPurchaseApproveProcessList(); |
| | | if (processes.length === 1) { |
| | | selectedProcessId.value = processes[0].id; |
| | | await submitOrder(); |
| | | } else if (processes.length > 1) { |
| | | processModalApi.setData(processes).open(); |
| | | } else { |
| | | message.error('éè´å®¡æ ¸åç±»ä¸æ²¡æå¯ç¨çæµç¨æ¨¡åï¼è¯·å
å建并å叿µç¨'); |
| | | } |
| | | } catch (error: any) { |
| | | message.error(error.message || 'è·åæµç¨å表失败'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } else { |
| | | try { |
| | | await submitOrder(); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } |
| | | }, |
| | | async onOpenChange(isOpen: boolean) { |
| | | if (!isOpen) { |
| | | formData.value = undefined; |
| | | selectedProcessId.value = ''; |
| | | return; |
| | | } |
| | | const data = modalApi.getData<{ formType: FormType; id?: number }>(); |
| | |
| | | class="w-3/4" |
| | | :show-confirm-button="formType !== 'detail'" |
| | | > |
| | | <ProcessModal @success="handleProcessSelectSuccess" /> |
| | | <Form class="mx-3"> |
| | | <template #items> |
| | | <PurchaseOrderItemForm |