diff --git a/src/views/oa/crm/crmQuoteInfo/edit.vue b/src/views/oa/crm/crmQuoteInfo/edit.vue index a1a0bfe..1399e59 100644 --- a/src/views/oa/crm/crmQuoteInfo/edit.vue +++ b/src/views/oa/crm/crmQuoteInfo/edit.vue @@ -20,9 +20,9 @@ - - - + + + @@ -140,6 +140,30 @@ + + +
+ + + + + + +
+
+
@@ -454,8 +478,8 @@ import { CrmQuoteInfoForm } from '@/api/oa/crm/crmQuoteInfo/types'; import type { CrmQuoteMaterialForm } from '@/api/oa/crm/crmQuoteMaterial/types'; import { getCrmCustomerContactList } from '@/api/oa/crm/customerContact'; import { getCrmSupplierInfoList } from '@/api/oa/crm/crmSupplierInfo'; -import { getRuleGenerateCode } from '@/api/system/codeRule'; import { getBaseUnitInfoList } from '@/api/oa/base/unitInfo'; +import { getBasePrintTemplateList } from '@/api/oa/base/printTemplate'; import SaleMaterialSelect from '@/components/SaleMaterialSelect/index.vue'; import ApprovalButton from '@/components/Process/approvalButton.vue'; import ApprovalRecord from '@/components/Process/approvalRecord.vue'; @@ -508,6 +532,7 @@ const form = reactive({ supplierContactName: undefined, supplierContactPhone: undefined, supplierContactEmail: undefined, + templateId: undefined, remark: undefined, ossId: undefined }); @@ -522,6 +547,7 @@ const customerContactList = ref([]); const supplierList = ref([]); // 供应商计划标识:1计划内,2计划外 const supplierPlanFlag = ref('1'); +const printTemplateList = ref([]); // 单位下拉数据 const unitInfoList = ref([]); @@ -529,6 +555,10 @@ const getUnitInfoListSelect = async () => { const res = await getBaseUnitInfoList(null); unitInfoList.value = res.data || []; }; +const getPrintTemplateListSelect = async () => { + const res = await getBasePrintTemplateList({ templateType: '4' }); + printTemplateList.value = res.data || []; +}; const approvalRecordRef = ref>(); const submitVerifyRef = ref>(); @@ -872,6 +902,23 @@ const handleApprovalRecord = () => { } }; +/** 报价单模板预览/PDF导出 */ +const handleQuoteTemplateDownload = () => { + if (!form.quoteId) { + proxy?.$modal.msgWarning('请先保存报价单后再导出PDF'); + return; + } + if (!form.templateId) { + proxy?.$modal.msgWarning('请先在报价单上选择打印模板'); + return; + } + // 这里直接透传业务ID和模板ID到预览页,保持与列表页导出链路一致,避免两套导出逻辑长期分叉 + router.push({ + path: '/quote/quoteView', + query: { templateId: form.templateId, quoteId: form.quoteId } + }); +}; + /** 提交审批回调(与 projectInfo 保持一致) */ const submitCallback = async () => { await proxy?.$tab.closePage(route as any); @@ -889,6 +936,7 @@ onMounted(async () => { const supplierRes = await getCrmSupplierInfoList({}); supplierList.value = supplierRes.data || []; await getUnitInfoListSelect(); + await getPrintTemplateListSelect(); // 编辑场景 const id = route.query.id || route.params.id; diff --git a/src/views/oa/crm/crmQuoteInfo/index.vue b/src/views/oa/crm/crmQuoteInfo/index.vue index 8f3397c..899b28e 100644 --- a/src/views/oa/crm/crmQuoteInfo/index.vue +++ b/src/views/oa/crm/crmQuoteInfo/index.vue @@ -171,7 +171,7 @@ :disabled="single" @click="handleExportTemplate()" v-hasPermi="['oa/crm:crmQuoteInfo:export']" - >模板导出PDF导出 @@ -308,12 +308,12 @@ - - + + @@ -782,7 +782,7 @@ const handleApprovalRecord = (row: CrmQuoteInfoVO) => { approvalRecordRef.value?.init(row.quoteId as any); }; -/** 模板导出:跳转printTemplate预览页,由UmoEditor导出PDF */ +/** 模板导出:参考合同信息 contractView,直接跳转系统菜单已配置的 /quote/quoteView,由预览页执行导出 */ const handleExportTemplate = (row?: CrmQuoteInfoVO) => { const _quote = row || crmQuoteInfoList.value.find((item) => item.quoteId === ids.value[0]); if (!_quote?.quoteId) { diff --git a/src/views/oa/crm/crmQuoteInfo/quoteView.vue b/src/views/oa/crm/crmQuoteInfo/quoteView.vue index 6bbb330..ea14251 100644 --- a/src/views/oa/crm/crmQuoteInfo/quoteView.vue +++ b/src/views/oa/crm/crmQuoteInfo/quoteView.vue @@ -1,13 +1,13 @@