Browse Source

feat:优化

master
wang 14 hours ago
parent
commit
ed4c22f232
  1. 47
      src/views/business/erp/service/service-applications-form.vue
  2. 52
      src/views/mobile/service/create.vue

47
src/views/business/erp/service/service-applications-form.vue

@ -516,6 +516,24 @@
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
}
// 按活动配置同步服务时长。编辑旧记录时保留已有值,但固定时长记录为空时必须补回配置值。
function syncActivityDuration(activity, preserveExisting = false) {
if (!activity || activity.timeType !== 'TIME') {
return;
}
const configuredDuration = String(activity.price ?? '').trim();
const hasExistingDuration = form.serviceDuration !== undefined && form.serviceDuration !== null && form.serviceDuration !== '';
if (preserveExisting && hasExistingDuration) {
return;
}
if (configuredDuration.includes('-')) {
form.serviceDuration = undefined;
return;
}
const fixedDuration = Number(configuredDuration || 25);
form.serviceDuration = Number.isFinite(fixedDuration) ? fixedDuration : 25;
}
async function show(rowData, isDetail = false) {
initializingForm.value = true;
Object.assign(form, formDefault);
@ -596,6 +614,7 @@
}
// 将timeType放入serviceType字段中传递给后端
form.serviceType = selectedActivity.timeType || '';
syncActivityDuration(selectedActivity, true);
}
}
}
@ -894,29 +913,22 @@
// 将timeType放入serviceType字段中传递给后端
form.serviceType = selectedActivity.timeType || '';
// 根据活动类型设置默认服务时长
// 只有在非编辑模式下(即新建模式)才设置默认服务时长
if (!form.applicationId) {
// 新增或用户在编辑页切换活动时按新活动配置重置;编辑初始化仅在旧值为空时补固定时长。
const activityChangedByUser =
!initializingForm.value &&
oldActivityNameId != null &&
String(activityNameId) !== String(oldActivityNameId);
if (!form.applicationId || activityChangedByUser) {
if (selectedActivity.timeType === 'TIME') {
// 检查活动是否有固定小时数(使用price字段)
if (selectedActivity.price) {
// 如果价格包含范围(有-),让用户自己填写
if (selectedActivity.price.includes('-')) {
form.serviceDuration = undefined;
} else {
// 固定使用活动中的小时数
form.serviceDuration = parseFloat(selectedActivity.price);
}
} else {
// 默认值
form.serviceDuration = 25;
}
syncActivityDuration(selectedActivity, false);
} else if (['AMOUNT', 'AMOUT'].includes(selectedActivity.timeType)) {
form.serviceDuration = undefined;
} else if (selectedActivity.timeType === 'DICT') {
// DICT类型:清空服务时长,让用户通过选择时间或手动填写
form.serviceDuration = undefined;
}
} else {
syncActivityDuration(selectedActivity, true);
}
}
} else {
@ -953,6 +965,9 @@
if (dayjs(value).isAfter(dayjs())) {
return Promise.reject('活动结束时间不能晚于当前时间');
}
if (form.serviceStart && !dayjs(value).isAfter(dayjs(form.serviceStart))) {
return Promise.reject('活动结束时间必须晚于开始时间');
}
return Promise.resolve();
},
},

52
src/views/mobile/service/create.vue

@ -586,6 +586,23 @@
}
// 监听活动名称变化,更新活动类型和设置默认服务时长
function syncActivityDuration(activity, preserveExisting = false) {
if (!activity || activity.timeType !== 'TIME') {
return;
}
const configuredDuration = String(activity.price ?? '').trim();
const hasExistingDuration = form.serviceDuration !== undefined && form.serviceDuration !== null && form.serviceDuration !== '';
if (preserveExisting && hasExistingDuration) {
return;
}
if (configuredDuration.includes('-')) {
form.serviceDuration = undefined;
return;
}
const fixedDuration = Number(configuredDuration || 25);
form.serviceDuration = Number.isFinite(fixedDuration) ? fixedDuration : 25;
}
watch(
() => form.activityNameId,
(activityNameId, oldActivityNameId) => {
@ -623,23 +640,14 @@
console.log('更新后的currentActivityType:', currentActivityType.value);
console.log('当前form.serviceDuration:', form.serviceDuration);
// 根据活动类型设置默认服务时长
// 只有在非编辑模式下(即新建模式)才设置默认服务时长
if (!isEditMode.value) {
// 新增或用户在编辑页切换活动时按新活动配置重置;编辑初始化仅在旧值为空时补固定时长。
const activityChangedByUser =
!initializingForm.value &&
oldActivityNameId != null &&
String(activityNameId) !== String(oldActivityNameId);
if (!isEditMode.value || activityChangedByUser) {
if (selectedActivity.timeType === 'TIME') {
// 检查活动是否有固定小时数(使用price字段)
if (selectedActivity.price) {
// 如果价格包含范围(有-),让用户自己填写
if (selectedActivity.price.includes('-')) {
form.serviceDuration = undefined;
} else {
// 固定使用活动中的小时数
form.serviceDuration = parseFloat(selectedActivity.price);
}
} else {
// 默认值
form.serviceDuration = 25;
}
syncActivityDuration(selectedActivity, false);
} else if (['AMOUNT', 'AMOUT'].includes(selectedActivity.timeType)) {
form.serviceDuration = undefined;
} else if (selectedActivity.timeType === 'DICT') {
@ -648,6 +656,7 @@
}
console.log('设置后的form.serviceDuration:', form.serviceDuration);
} else {
syncActivityDuration(selectedActivity, true);
console.log('编辑模式下,保留原有的form.serviceDuration:', form.serviceDuration);
}
@ -766,6 +775,11 @@
return;
}
if (!dayjs(form.serviceEnd).isAfter(dayjs(form.serviceStart))) {
message.error('服务结束时间必须晚于开始时间');
return;
}
if (!form.serviceDuration) {
message.error('请填写服务时长');
return;
@ -905,6 +919,11 @@
return;
}
if (!dayjs(form.serviceEnd).isAfter(dayjs(form.serviceStart))) {
message.error('服务结束时间必须晚于开始时间');
return;
}
if (!form.serviceDuration) {
message.error('请填写服务时长');
return;
@ -1091,6 +1110,7 @@
loadSameFirmLawyers();
}
form.serviceType = selectedActivity.timeType || '';
syncActivityDuration(selectedActivity, true);
} else {
}
} else {

Loading…
Cancel
Save