|
@@ -1118,15 +1118,20 @@ const removeInvoice = (data: any) => {
|
|
|
|
|
|
|
|
// 保存按钮
|
|
// 保存按钮
|
|
|
const handleSave = async () => {
|
|
const handleSave = async () => {
|
|
|
|
|
+ // 1. 先检查 ref 是否存在,避免静默失败
|
|
|
|
|
+ if (!formRef.value || !salesFormRef.value) {
|
|
|
|
|
+ ElMessage.error('表单组件未加载,请刷新页面');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
- // 验证基本信息表单
|
|
|
|
|
- await formRef.value?.validate();
|
|
|
|
|
- // 验证销售信息表单
|
|
|
|
|
- await salesFormRef.value?.validate();
|
|
|
|
|
|
|
+ // 2. 串行验证,任何一步失败都会抛出异常,进入 catch
|
|
|
|
|
+ // 注意:ElementPlus 的 validate 失败时会 reject 一个包含错误信息的对象
|
|
|
|
|
+ await formRef.value.validate();
|
|
|
|
|
+ await salesFormRef.value.validate();
|
|
|
|
|
|
|
|
submitLoading.value = true;
|
|
submitLoading.value = true;
|
|
|
|
|
|
|
|
- // 组装提交数据
|
|
|
|
|
const submitData: CustomerInfoForm = {
|
|
const submitData: CustomerInfoForm = {
|
|
|
...form,
|
|
...form,
|
|
|
customerBusinessBo: businessInfo,
|
|
customerBusinessBo: businessInfo,
|
|
@@ -1135,13 +1140,31 @@ const handleSave = async () => {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
await updateCustomerInfo(submitData);
|
|
await updateCustomerInfo(submitData);
|
|
|
|
|
+
|
|
|
ElMessage.success('保存成功');
|
|
ElMessage.success('保存成功');
|
|
|
|
|
|
|
|
// 重新加载数据
|
|
// 重新加载数据
|
|
|
await loadCustomerData(custId.value);
|
|
await loadCustomerData(custId.value);
|
|
|
|
|
+
|
|
|
|
|
+ // 可选:保存成功后重置表单或关闭弹窗
|
|
|
|
|
+ // emit('update:visible', false);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- console.error('保存失败:', error);
|
|
|
|
|
- ElMessage.error('保存失败,请重试');
|
|
|
|
|
|
|
+ // 3. 关键优化:区分验证错误和系统错误
|
|
|
|
|
+
|
|
|
|
|
+ // ElementPlus 的 validate 失败时,error 通常是一个包含 fields 信息的对象
|
|
|
|
|
+ // 或者你可以判断 error 是否包含特定的验证失败标记
|
|
|
|
|
+ const isValidationError = error && typeof error === 'object' && 'fields' in error;
|
|
|
|
|
+ // 有些版本可能是 error instanceof Error 且 message 包含特定字样,具体视 EP 版本而定
|
|
|
|
|
+ // 最简单的判断:如果是因为 validate 抛出的,通常不需要报全局错误,因为表单上已经红字提示了
|
|
|
|
|
+
|
|
|
|
|
+ if (isValidationError) {
|
|
|
|
|
+ console.warn('表单验证未通过', error);
|
|
|
|
|
+ // 让用户专注于表单上的红色提示,不要弹全局 Toast 干扰用户
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是真正的系统错误(如网络断开、后端报错)
|
|
|
|
|
+ ElMessage.error('保存失败,请稍后重试或联系管理员');
|
|
|
} finally {
|
|
} finally {
|
|
|
submitLoading.value = false;
|
|
submitLoading.value = false;
|
|
|
}
|
|
}
|