|
|
|
|
@ -68,6 +68,8 @@
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<!-- 按当前报价单页面要求暂时隐藏“有效期起”,仅保留后端字段兼容历史数据与模板变量 -->
|
|
|
|
|
<!--
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="有效期起" prop="validFrom">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
@ -80,6 +82,7 @@
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
-->
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="有效期止" prop="validTo">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
@ -151,16 +154,17 @@
|
|
|
|
|
:value="item.templateId"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-tooltip content="PDF预览" placement="top">
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
type="info"
|
|
|
|
|
icon="Download"
|
|
|
|
|
:disabled="!form.templateId || !form.quoteId"
|
|
|
|
|
@click="handleQuoteTemplateDownload"
|
|
|
|
|
v-hasPermi="['oa/crm:crmQuoteInfo:export']"
|
|
|
|
|
/>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
type="primary"
|
|
|
|
|
icon="Download"
|
|
|
|
|
:disabled="!form.templateId || !form.quoteId"
|
|
|
|
|
@click="handleQuoteTemplateDownload"
|
|
|
|
|
style="font-weight: 600"
|
|
|
|
|
v-hasPermi="['oa/crm:crmQuoteInfo:export']"
|
|
|
|
|
>
|
|
|
|
|
报价单查看
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
@ -603,6 +607,16 @@ const materialRules = {
|
|
|
|
|
};
|
|
|
|
|
const saleMaterialSelectRef = ref<InstanceType<typeof SaleMaterialSelect>>();
|
|
|
|
|
const openSaleMaterialSelect = () => saleMaterialSelectRef.value?.open();
|
|
|
|
|
const ensureStandardMaterialProductName = (
|
|
|
|
|
row: CrmQuoteMaterialForm & { materialFlag?: string; materialName?: string; saleMaterialName?: string }
|
|
|
|
|
) => {
|
|
|
|
|
if (row.materialFlag !== '1' || row.productName) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 标准物料新增时前端先兜底一次,避免用户未手填产品名称时表格显示为空;
|
|
|
|
|
// 真正的客户销售物料关联仍以后端保存逻辑为准,前后端共同保证不漏建。
|
|
|
|
|
row.productName = row.saleMaterialName || row.materialName || undefined;
|
|
|
|
|
};
|
|
|
|
|
const saleMaterialSelectCallBack = (data: any) => {
|
|
|
|
|
const list = data || [];
|
|
|
|
|
if (list.length) {
|
|
|
|
|
@ -620,6 +634,7 @@ const saleMaterialSelectCallBack = (data: any) => {
|
|
|
|
|
if (m.unitName) {
|
|
|
|
|
materialForm.value.unitName = m.unitName;
|
|
|
|
|
}
|
|
|
|
|
ensureStandardMaterialProductName(materialForm.value as any);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const handleMaterialFlagChange = (flag: string) => {
|
|
|
|
|
@ -712,9 +727,12 @@ const submitMaterialForm = () => {
|
|
|
|
|
materialData.materialCode = undefined;
|
|
|
|
|
materialData.materialName = undefined;
|
|
|
|
|
materialData.saleMaterialName = undefined;
|
|
|
|
|
} else if (!materialData.relationMaterialId && materialData.productName) {
|
|
|
|
|
// 保存前的本地表格先展示用户最新输入的产品名称,真正的销售物料关联由后端保存时补齐。
|
|
|
|
|
materialData.saleMaterialName = materialData.productName;
|
|
|
|
|
} else {
|
|
|
|
|
ensureStandardMaterialProductName(materialData);
|
|
|
|
|
if (!materialData.relationMaterialId && materialData.productName) {
|
|
|
|
|
// 保存前的本地表格先展示用户最新输入的产品名称,真正的销售物料关联由后端保存时补齐。
|
|
|
|
|
materialData.saleMaterialName = materialData.productName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (currentMaterialIndex.value !== null && currentMaterialIndex.value >= 0) {
|
|
|
|
|
materialRows.value[currentMaterialIndex.value] = materialData;
|
|
|
|
|
@ -954,10 +972,10 @@ const handleApprovalRecord = () => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 报价单模板预览/PDF导出 */
|
|
|
|
|
/** 报价单查看/PDF预览 */
|
|
|
|
|
const handleQuoteTemplateDownload = () => {
|
|
|
|
|
if (!form.quoteId) {
|
|
|
|
|
proxy?.$modal.msgWarning('请先保存报价单后再导出PDF');
|
|
|
|
|
proxy?.$modal.msgWarning('请先保存报价单后再查看PDF');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!form.templateId) {
|
|
|
|
|
|