feat: 优化报价单物料与供应商逻辑

dev
zangch@mesnac.com 3 days ago
parent 010f5e5fcd
commit cdc76abc52

@ -221,22 +221,37 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="标准物料标识" prop="materialFlag">
<el-radio-group v-model="materialForm.materialFlag">
<el-radio-group v-model="materialForm.materialFlag" @change="handleMaterialFlagChange">
<el-radio v-for="dict in material_flag" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="materialForm.productName" placeholder="请输入产品名称">
<el-form-item label="物料名称" prop="materialName" v-if="materialForm.materialFlag === '1'">
<el-input v-model="materialForm.materialName" placeholder="请点击右侧图标检索物料" readonly>
<template #suffix>
<el-icon style="cursor: pointer" v-if="materialForm.materialFlag === '1'" @click="openSaleMaterialSelect">
<el-icon style="cursor: pointer" @click="openSaleMaterialSelect">
<Search />
</el-icon>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料编号" prop="materialCode" v-if="materialForm.materialFlag === '1'">
<el-input v-model="materialForm.materialCode" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="销售物料名称" prop="saleMaterialName" v-if="materialForm.materialFlag === '1'">
<el-input v-model="materialForm.saleMaterialName" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="materialForm.productName" placeholder="请输入产品名称" @input="handleMaterialProductNameInput" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格描述" prop="specificationDescription">
<el-input v-model="materialForm.specificationDescription" placeholder="请输入规格描述" />
@ -357,14 +372,6 @@
<el-divider content-position="left">供货方信息</el-divider>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="计划标识" prop="supplierPlanFlag">
<el-radio-group v-model="supplierPlanFlag" @change="onSupplierPlanFlagChanged" :disabled="isView">
<el-radio value="1">计划内</el-radio>
<el-radio value="2">计划外</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="supplierPlanFlag === '1'">
<el-form-item label="供应商" prop="supplierContactId">
<el-select v-model="form.supplierContactId" filterable placeholder="请选择供应商" @change="onSupplierChanged" :disabled="isView">
<el-option v-for="s in supplierList" :key="s.supplierId" :label="s.supplierName" :value="s.supplierId" />
@ -545,9 +552,8 @@ const rules = {
//
const customerContactList = ref<any[]>([]);
const supplierList = ref<any[]>([]);
// 12
const supplierPlanFlag = ref<string>('1');
const printTemplateList = ref<any[]>([]);
const DEFAULT_SUPPLIER_ID = 1;
//
const unitInfoList = ref<any[]>([]);
@ -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,20 +1005,9 @@ 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) {
if (form.supplierContactId && (!form.supplierContactPhone || !form.supplierContactEmail || !form.supplierContactName)) {
onSupplierChanged(form.supplierContactId);
}
} else {
//
supplierPlanFlag.value = '2';
}
}
// 使VO itemsVo
const inlineItems = (res.data as any)?.itemsVo;
if (inlineItems && inlineItems.length) {
@ -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;
}
});

Loading…
Cancel
Save