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 @@