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 }} + + +
+
+ 暂无项目,请先在第三步配置项目 +
+ + + + + + + +
+
+ 账户信息 @@ -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; } };