| | |
| | | import type { FormType } from '../data'; |
| | | |
| | | import type { ErpPurchaseInvoiceApi } from '#/api/erp/purchase/invoice'; |
| | | import type { ErpPurchaseInvoiceAiApi } from '#/api/erp/purchase/invoice/ai'; |
| | | |
| | | import { computed, ref } from 'vue'; |
| | | |
| | | import { useVbenModal } from '@vben/common-ui'; |
| | | |
| | | import { message } from 'ant-design-vue'; |
| | | import { Alert, message } from 'ant-design-vue'; |
| | | |
| | | import { useVbenForm } from '#/adapter/form'; |
| | | import { |
| | |
| | | const emit = defineEmits(['success']); |
| | | const formData = ref<ErpPurchaseInvoiceApi.PurchaseInvoice>(); |
| | | const formType = ref<FormType>('create'); |
| | | const orderTotalTaxPrice = ref<number>(); // 所选采购订单合计税额(未开票金额,用于提示与校验) |
| | | const ocrSupplierName = ref(''); |
| | | const orderRemainInvoicePrice = ref<number>(); // 所选采购订单剩余可开票金额(未开票金额,用于提示与校验) |
| | | |
| | | const getTitle = computed(() => { |
| | | if (formType.value === 'create') { |
| | |
| | | }, |
| | | wrapperClass: 'grid-cols-2', |
| | | layout: 'horizontal', |
| | | schema: useFormSchema(orderTotalTaxPrice), |
| | | schema: useFormSchema(orderRemainInvoicePrice), |
| | | showDefaultActions: false, |
| | | }); |
| | | |
| | |
| | | async onOpenChange(isOpen: boolean) { |
| | | if (!isOpen) { |
| | | formData.value = undefined; |
| | | orderTotalTaxPrice.value = undefined; |
| | | ocrSupplierName.value = ''; |
| | | orderRemainInvoicePrice.value = undefined; |
| | | return; |
| | | } |
| | | const data = modalApi.getData<{ formType: FormType; id?: number }>(); |
| | | const data = modalApi.getData<{ |
| | | formType: FormType; |
| | | id?: number; |
| | | ocrData?: ErpPurchaseInvoiceAiApi.OcrResultVO; |
| | | }>(); |
| | | formType.value = data.formType; |
| | | formApi.setDisabled(formType.value === 'detail'); |
| | | formApi.updateSchema(useFormSchema(orderTotalTaxPrice)); |
| | | formApi.updateSchema(useFormSchema(orderRemainInvoicePrice)); |
| | | await formApi.resetForm(); |
| | | // OCR 识别数据预填(新建场景,编辑/详情不处理) |
| | | const ocr = data?.ocrData; |
| | | ocrSupplierName.value = ocr?.supplierName || ''; |
| | | if (ocr) { |
| | | await formApi.setValues({ |
| | | invoiceNo: ocr.invoiceNo, |
| | | invoiceTitle: ocr.invoiceTitle, |
| | | price: ocr.price, |
| | | invoiceTime: ocr.invoiceTime, |
| | | remark: ocr.remark, |
| | | }); |
| | | } |
| | | if (!data || !data.id) { |
| | | return; |
| | | } |
| | |
| | | |
| | | <template> |
| | | <Modal :title="getTitle" class="w-3/5"> |
| | | <Alert |
| | | v-if="ocrSupplierName" |
| | | type="info" |
| | | show-icon |
| | | class="mx-4 mb-4" |
| | | message="识别到销售方名称,请选择采购订单并核对订单供应商是否一致" |
| | | :description="`识别结果:${ocrSupplierName}`" |
| | | /> |
| | | <Form class="mx-4" /> |
| | | </Modal> |
| | | </template> |