|
@@ -879,6 +879,8 @@ const paymentForm = ref<BankForm>({
|
|
|
businessAddress: ''
|
|
businessAddress: ''
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+const fixedPhoneReg = /^(\d{3,4}-?)?\d{7,8}(-\d{1,6})?$/;
|
|
|
|
|
+
|
|
|
// 发票类型列表和银行列表
|
|
// 发票类型列表和银行列表
|
|
|
const invoiceTypeList = ref<InvoiceTypeVO[]>([]);
|
|
const invoiceTypeList = ref<InvoiceTypeVO[]>([]);
|
|
|
const systemBankList = ref<SystemBankVO[]>([]);
|
|
const systemBankList = ref<SystemBankVO[]>([]);
|
|
@@ -886,10 +888,43 @@ const systemBankList = ref<SystemBankVO[]>([]);
|
|
|
// 付款信息表单验证规则
|
|
// 付款信息表单验证规则
|
|
|
const paymentFormRules = {
|
|
const paymentFormRules = {
|
|
|
invoiceTypeNo: [{ required: true, message: '请选择开票类型', trigger: 'change' }],
|
|
invoiceTypeNo: [{ required: true, message: '请选择开票类型', trigger: 'change' }],
|
|
|
- bankNum: [{ required: true, message: '请输入开户行行号', trigger: 'blur' }],
|
|
|
|
|
|
|
+ bankNum: [
|
|
|
|
|
+ {
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ const v = String(value ?? '').trim();
|
|
|
|
|
+ if (!v) return callback(new Error('请输入开户行行号'));
|
|
|
|
|
+ if (!/^\d+$/.test(v)) return callback(new Error('开户行行号只能输入数字'));
|
|
|
|
|
+ callback();
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
bankInfoNo: [{ required: true, message: '请选择开户行名称', trigger: 'change' }],
|
|
bankInfoNo: [{ required: true, message: '请选择开户行名称', trigger: 'change' }],
|
|
|
- bankNo: [{ required: true, message: '请输入银行账户', trigger: 'blur' }],
|
|
|
|
|
- phone: [{ required: true, message: '请输入固定电话', trigger: 'blur' }],
|
|
|
|
|
|
|
+ bankNo: [
|
|
|
|
|
+ {
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ const v = String(value ?? '').trim();
|
|
|
|
|
+ if (!v) return callback(new Error('请输入银行账户'));
|
|
|
|
|
+ if (!/^\d+$/.test(v)) return callback(new Error('银行账户只能输入数字'));
|
|
|
|
|
+ callback();
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ phone: [
|
|
|
|
|
+ {
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ const v = String(value ?? '').trim();
|
|
|
|
|
+ if (!v) return callback(new Error('请输入固定电话'));
|
|
|
|
|
+ if (!fixedPhoneReg.test(v)) return callback(new Error('请输入正确的固定电话'));
|
|
|
|
|
+ callback();
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
num: [{ required: true, message: '请选择是否主账号', trigger: 'change' }]
|
|
num: [{ required: true, message: '请选择是否主账号', trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1076,8 +1111,8 @@ const handleSave = async () => {
|
|
|
ElMessage.warning('请输入工商名称');
|
|
ElMessage.warning('请输入工商名称');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- if (detailData.value.fixedPhone && !/^\d+$/.test(String(detailData.value.fixedPhone))) {
|
|
|
|
|
- ElMessage.warning('固定电话只能输入数字');
|
|
|
|
|
|
|
+ if (detailData.value.fixedPhone && !fixedPhoneReg.test(String(detailData.value.fixedPhone).trim())) {
|
|
|
|
|
+ ElMessage.warning('请输入正确的固定电话');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
if (!detailData.value.shortName) {
|
|
if (!detailData.value.shortName) {
|
|
@@ -1187,7 +1222,6 @@ const handleSave = async () => {
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('保存失败:', e);
|
|
console.error('保存失败:', e);
|
|
|
- ElMessage.error('保存失败');
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1682,7 +1716,6 @@ const handleSaveCategories = async () => {
|
|
|
ElMessage.success('保存成功');
|
|
ElMessage.success('保存成功');
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('保存供货类目失败:', e);
|
|
console.error('保存供货类目失败:', e);
|
|
|
- ElMessage.error('保存失败');
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1705,7 +1738,6 @@ const handleSavePurchaseInfo = async () => {
|
|
|
ElMessage.success('保存成功');
|
|
ElMessage.success('保存成功');
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('保存采购信息失败:', e);
|
|
console.error('保存采购信息失败:', e);
|
|
|
- ElMessage.error('保存失败');
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1832,7 +1864,6 @@ const handleBrandSubmit = async () => {
|
|
|
brandDialogVisible.value = false;
|
|
brandDialogVisible.value = false;
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('保存品牌失败:', e);
|
|
console.error('保存品牌失败:', e);
|
|
|
- ElMessage.error('保存失败');
|
|
|
|
|
} finally {
|
|
} finally {
|
|
|
brandSubmitLoading.value = false;
|
|
brandSubmitLoading.value = false;
|
|
|
}
|
|
}
|
|
@@ -2095,24 +2126,7 @@ const handleSupplyAreaSubmit = async () => {
|
|
|
const areaList = buildAreaListFromSelectedProvinceCityIds(selectedSupplyAreaCodes.value);
|
|
const areaList = buildAreaListFromSelectedProvinceCityIds(selectedSupplyAreaCodes.value);
|
|
|
console.log('构建的 areaList:', areaList);
|
|
console.log('构建的 areaList:', areaList);
|
|
|
|
|
|
|
|
- // 前端兜底去重:避免后端按“追加插入”导致重复省/市
|
|
|
|
|
- // 只提交“新增的”省/市(已存在的省/市不重复提交)
|
|
|
|
|
- const existedKeys = new Set<string>();
|
|
|
|
|
- (savedAreaData.value || []).forEach((a: any) => {
|
|
|
|
|
- const level = String(a.level);
|
|
|
|
|
- const areaId = String(a.areaId ?? a.id ?? '');
|
|
|
|
|
- if (!areaId) return;
|
|
|
|
|
- if (level === '1' || level === '2') {
|
|
|
|
|
- existedKeys.add(`${level}-${areaId}`);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- const areaListToSubmit = (areaList || []).filter((a: any) => {
|
|
|
|
|
- const level = String(a.level);
|
|
|
|
|
- const areaId = String(a.areaId ?? '');
|
|
|
|
|
- if (!areaId) return false;
|
|
|
|
|
- return !existedKeys.has(`${level}-${areaId}`);
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ const areaListToSubmit = areaList || [];
|
|
|
|
|
|
|
|
// 从选中的编码中提取区域信息(用于显示)
|
|
// 从选中的编码中提取区域信息(用于显示)
|
|
|
const regionData = extractRegionDataFromSelectedProvinceCityIds(selectedSupplyAreaCodes.value);
|
|
const regionData = extractRegionDataFromSelectedProvinceCityIds(selectedSupplyAreaCodes.value);
|
|
@@ -2127,13 +2141,6 @@ const handleSupplyAreaSubmit = async () => {
|
|
|
|
|
|
|
|
console.log('提交的数据:', submitData);
|
|
console.log('提交的数据:', submitData);
|
|
|
|
|
|
|
|
- if (!submitData.areaList || submitData.areaList.length === 0) {
|
|
|
|
|
- ElMessage.success('保存成功');
|
|
|
|
|
- supplyAreaDialogVisible.value = false;
|
|
|
|
|
- await getSupplyAreaList();
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
await addArea(submitData);
|
|
await addArea(submitData);
|
|
|
|
|
|
|
|
// 更新本地数据
|
|
// 更新本地数据
|
|
@@ -2188,7 +2195,6 @@ const handleSupplyAreaSubmit = async () => {
|
|
|
await getSupplyAreaList();
|
|
await getSupplyAreaList();
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('保存供货区域失败:', e);
|
|
console.error('保存供货区域失败:', e);
|
|
|
- ElMessage.error('保存失败');
|
|
|
|
|
} finally {
|
|
} finally {
|
|
|
supplyAreaSubmitLoading.value = false;
|
|
supplyAreaSubmitLoading.value = false;
|
|
|
}
|
|
}
|