diff --git a/src/views/oa/crm/crmQuoteInfo/edit.vue b/src/views/oa/crm/crmQuoteInfo/edit.vue index 1399e59..161a9d3 100644 --- a/src/views/oa/crm/crmQuoteInfo/edit.vue +++ b/src/views/oa/crm/crmQuoteInfo/edit.vue @@ -221,22 +221,37 @@ - + {{ dict.label }} - - + + + + + + + + + + + + + + + + + @@ -357,14 +372,6 @@ 供货方信息 - - - 计划内 - 计划外 - - - - @@ -545,9 +552,8 @@ const rules = { // 下拉数据 const customerContactList = ref([]); const supplierList = ref([]); -// 供应商计划标识:1计划内,2计划外 -const supplierPlanFlag = ref('1'); const printTemplateList = ref([]); +const DEFAULT_SUPPLIER_ID = 1; // 单位下拉数据 const unitInfoList = ref([]); @@ -601,17 +607,44 @@ const saleMaterialSelectCallBack = (data: any) => { const list = data || []; if (list.length) { const m = list[0]; + materialForm.value.materialFlag = '1'; materialForm.value.materialId = m.materialId; materialForm.value.relationMaterialId = m.relationMaterialId; materialForm.value.materialCode = m.materialCode; materialForm.value.materialName = m.materialName; materialForm.value.saleMaterialName = m.saleMaterialName; materialForm.value.productName = m.saleMaterialName || m.materialName; + if (m.unitId) { + materialForm.value.unitId = m.unitId; + } if (m.unitName) { materialForm.value.unitName = m.unitName; } } }; +const handleMaterialFlagChange = (flag: string) => { + if (flag === '1') { + return; + } + // 切换为非标物料时清空标准物料链路字段,避免把历史 SAP/销售物料关联误当成当前业务数据提交。 + materialForm.value.materialId = undefined; + materialForm.value.relationMaterialId = undefined; + materialForm.value.materialCode = undefined; + materialForm.value.materialName = undefined; + materialForm.value.saleMaterialName = undefined; +}; +const handleMaterialProductNameInput = (value: string) => { + materialForm.value.productName = value; + if (materialForm.value.materialFlag !== '1' || !materialForm.value.materialId) { + return; + } + // 标准物料允许人工改“产品名称”,一旦与当前销售物料名称不同,就先让旧关联失效, + // 保存时由后端按“物料 + 客户 + 新产品名称”重新查找或自动补建销售物料关联。 + if (!value || value !== materialForm.value.saleMaterialName) { + materialForm.value.relationMaterialId = undefined; + materialForm.value.saleMaterialName = undefined; + } +}; const resetMaterialForm = () => { materialForm.value = { ...initMaterialFormData }; materialFormRef.value?.resetFields(); @@ -667,11 +700,26 @@ const handleDeleteMaterial = async (row: CrmQuoteMaterialForm) => { const submitMaterialForm = () => { materialFormRef.value?.validate((valid: boolean) => { if (!valid) return; + const unitInfo = unitInfoList.value.find((item: any) => item.unitId === materialForm.value.unitId); + const materialData = { + ...materialForm.value, + unitName: unitInfo?.unitName || materialForm.value.unitName + } as any; + if (materialData.materialFlag !== '1') { + // 非标物料不保留标准物料技术字段,避免后端把非标数据误识别为标准物料联动场景。 + materialData.materialId = undefined; + materialData.relationMaterialId = undefined; + materialData.materialCode = undefined; + materialData.materialName = undefined; + materialData.saleMaterialName = undefined; + } else if (!materialData.relationMaterialId && materialData.productName) { + // 保存前的本地表格先展示用户最新输入的产品名称,真正的销售物料关联由后端保存时补齐。 + materialData.saleMaterialName = materialData.productName; + } if (currentMaterialIndex.value !== null && currentMaterialIndex.value >= 0) { - materialRows.value[currentMaterialIndex.value] = { ...materialForm.value } as any; + materialRows.value[currentMaterialIndex.value] = materialData; } else { - const newItem = { ...materialForm.value } as any; - materialRows.value.push(newItem); + materialRows.value.push(materialData); } proxy?.$modal.msgSuccess('操作成功'); materialDialog.visible = false; @@ -787,16 +835,7 @@ const onCustomerContactChanged = (id: any) => { form.customerContactPhone = c?.phoneNumber || ''; form.customerContactEmail = c?.email || ''; }; -// 供应商计划标识变化处理 -const onSupplierPlanFlagChanged = (flag: string) => { - supplierPlanFlag.value = flag; - // 切换计划标识时清空供应商选择 - form.supplierContactId = undefined; - form.supplierContactName = ''; - form.supplierContactPhone = ''; - form.supplierContactEmail = ''; -}; -// 供应商选择变化处理(计划内供应商) +// 供应商选择变化处理 const onSupplierChanged = (supplierId: any) => { const supplier = supplierList.value.find((x: any) => x.supplierId === supplierId); if (supplier) { @@ -806,6 +845,19 @@ const onSupplierChanged = (supplierId: any) => { form.supplierContactEmail = supplier.contactEmail || ''; } }; +const applyDefaultSupplier = () => { + if (form.supplierContactId) { + return; + } + const supplier = supplierList.value.find((item: any) => item.supplierId === DEFAULT_SUPPLIER_ID); + if (!supplier) { + proxy?.$modal.msgWarning('默认供货方海威不存在,请手工选择供应商'); + return; + } + // 新增页默认绑定海威主数据,后续若业务手工切换供应商,联系人信息仍允许按表单继续调整。 + form.supplierContactId = supplier.supplierId; + onSupplierChanged(supplier.supplierId); +}; // 生成报价单编号(codeRuleCode=1004) // const generateQuoteCode = async () => { // if (isCodeGenerated.value) return; @@ -953,19 +1005,8 @@ onMounted(async () => { if (!form.customerContactPhone || !form.customerContactEmail || !form.customerContactName) { onCustomerContactChanged(form.customerContactId); } - // 供应商信息回填:判断是否为计划内供应商 - if (form.supplierContactId) { - const supplier = supplierList.value.find((x: any) => x.supplierId === form.supplierContactId); - if (supplier) { - // 计划内供应商 - supplierPlanFlag.value = '1'; - if (!form.supplierContactPhone || !form.supplierContactEmail || !form.supplierContactName) { - onSupplierChanged(form.supplierContactId); - } - } else { - // 计划外供应商 - supplierPlanFlag.value = '2'; - } + if (form.supplierContactId && (!form.supplierContactPhone || !form.supplierContactEmail || !form.supplierContactName)) { + onSupplierChanged(form.supplierContactId); } // 仅使用后端VO内联返回的 itemsVo,前端不再单独请求子表接口 const inlineItems = (res.data as any)?.itemsVo; @@ -975,6 +1016,7 @@ onMounted(async () => { quoteMaterialId: r.quoteMaterialId, quoteId: r.quoteId, itemNo: r.itemNo, + materialFlag: r.materialFlag, materialId: r.materialId, relationMaterialId: r.relationMaterialId, materialCode: r.materialCode, @@ -997,6 +1039,7 @@ onMounted(async () => { } // 新增模式:如已有编号则禁用生成按钮 if (!id) { + applyDefaultSupplier(); isCodeGenerated.value = !!form.quoteCode; } });