gaoluyang
2026-08-03 75242bbba28ae8902ddf86d33febb497d79e5fc3
src/views/crm/saleQuotation/index.vue
@@ -16,8 +16,13 @@
} from '#/api/crm/saleQuotation';
import { $t } from '#/locales';
import type { CrmSaleQuotationAiApi } from '#/api/crm/saleQuotation/ai';
import { nextTick, ref } from 'vue';
import { QUOTATION_STATUS, useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
import OcrUpload from './modules/ocr-upload.vue';
const { push } = useRouter();
@@ -25,6 +30,8 @@
  connectedComponent: Form,
  destroyOnClose: true,
});
const ocrUploadRef = ref<InstanceType<typeof OcrUpload>>();
/** 刷新表格 */
function handleRefresh() {
@@ -34,6 +41,18 @@
/** 创建报价单 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** AI 识别录入 */
function handleOcrCreate() {
  ocrUploadRef.value?.open();
}
/** OCR 识别结果确认 */
function handleOcrSuccess(data: CrmSaleQuotationAiApi.OcrResultVO) {
  nextTick(() => {
    formModalApi.setData({ ocrData: data } as any).open();
  });
}
/** 编辑报价单 */
@@ -127,6 +146,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <OcrUpload ref="ocrUploadRef" @success="handleOcrSuccess" />
    <Grid>
      <template #toolbar-tools>
        <TableAction
@@ -138,6 +158,12 @@
              auth: ['crm:sale-quotation:create'],
              onClick: handleCreate,
            },
            {
              label: 'AI 识别录入',
              type: 'default',
              auth: ['crm:sale-quotation:create'],
              onClick: handleOcrCreate,
            },
          ]"
        />
      </template>