diff --git a/src/views/match/manage/Steps/Step4FeeConfig.vue b/src/views/match/manage/Steps/Step4FeeConfig.vue
index d1b0208..65a0ad5 100644
--- a/src/views/match/manage/Steps/Step4FeeConfig.vue
+++ b/src/views/match/manage/Steps/Step4FeeConfig.vue
@@ -17,6 +17,33 @@
{{ localFormData.price }}
+
+
+
+
+ 暂无项目,请先在第三步配置项目
+
+
+
+
+
+
+
+ {{ row.fee ?? '-' }}
+
+
+
+
+
+
账户信息
@@ -150,6 +177,7 @@ const localFormData = ref({
bankName: '',
accountNumber: '',
businessLicenseUrl: '',
+ projects: [],
});
const merchantOptions = ref([]);
@@ -205,6 +233,7 @@ watch(
localFormData.value.bankName = v.bankName ?? '';
localFormData.value.accountNumber = v.accountNumber ?? '';
localFormData.value.businessLicenseUrl = v.businessLicenseUrl ?? '';
+ localFormData.value.projects = v.projects ?? [];
// 如果已经初始化完成,调用 syncMerchantInfo
if (isInitialized.value) {
@@ -309,6 +338,15 @@ const validatePrice = (rule, value, callback) => {
return;
}
}
+ // 单价(项目)模式:每个项目都必须有价格
+ if (localFormData.value.chargeMode === 3) {
+ const projects = localFormData.value.projects ?? [];
+ const invalid = projects.some((p) => p.fee === undefined || p.fee === null || p.fee === '' || p.fee < 0);
+ if (invalid) {
+ callback(new Error('请为所有项目设置价格(不能为空且不能小于0)'));
+ return;
+ }
+ }
callback();
};
@@ -327,7 +365,7 @@ const validateMerchantId = (rule, value, callback) => {
const rules = {
chargeMode: [{ required: true, message: '请选择收费模式', trigger: 'change' }],
price: [
- { validator: validatePrice, trigger: 'change' }
+ { validator: validatePrice, trigger: ['change', 'blur'] }
],
merchantId: [
{ validator: validateMerchantId, trigger: 'change' }
@@ -338,6 +376,14 @@ const rules = {
const validate = async () => {
if (!formRef.value) return false;
+ // 单价(项目)模式:额外验证每个项目的 fee
+ if (localFormData.value.chargeMode === 3) {
+ const projects = localFormData.value.projects ?? [];
+ const invalid = projects.some((p) => p.fee === undefined || p.fee === null || p.fee === '' || p.fee < 0);
+ if (invalid) {
+ return Promise.reject('请为所有项目设置价格(不能为空且不能小于0)');
+ }
+ }
return await formRef.value.validate();
};
@@ -439,4 +485,15 @@ defineExpose({ validate });
max-height: 500px;
overflow-y: auto;
}
+
+/* 项目单价列表 */
+.project-fee-list {
+ width: 100%;
+}
+
+.project-fee-empty {
+ color: var(--el-text-color-secondary);
+ font-size: 13px;
+ padding: 12px 0;
+}
diff --git a/src/views/match/manage/dialog.vue b/src/views/match/manage/dialog.vue
index c3bfc77..3855101 100644
--- a/src/views/match/manage/dialog.vue
+++ b/src/views/match/manage/dialog.vue
@@ -99,7 +99,10 @@ const currentStepData = computed(() => {
registrationType: formData.value.basicInfo.registrationType
};
case 3:
- return formData.value.feeConfig;
+ return {
+ ...formData.value.feeConfig,
+ projects: formData.value.projectConfig.projects,
+ };
}
});
@@ -118,7 +121,13 @@ const handleStepDataUpdate = (newData) => {
formData.value.projectConfig = projectConfig;
break;
case 3:
- formData.value.feeConfig = newData;
+ // eslint-disable-next-line no-case-declarations
+ const { projects: updatedProjects, ...feeConfig } = newData;
+ formData.value.feeConfig = feeConfig;
+ // 单价(项目)模式下,同步修改后的 projects fee 回第三步
+ if (updatedProjects) {
+ formData.value.projectConfig.projects = updatedProjects;
+ }
break;
}
};