feat(Calendar): 添加休息天数输入并改进营期设置逻辑
- 在营期设置弹窗中添加休息天数输入字段 - 修改营期结束判断逻辑,不再仅依赖休息日 - 改进用户参数获取逻辑,优先使用路由参数 - 添加测试数据以便在没有营期数据时测试功能 - 优化API请求参数处理,确保总是传递必要参数
This commit is contained in:
@@ -109,6 +109,18 @@
|
|||||||
placeholder="请输入天数"
|
placeholder="请输入天数"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="restDays">休息天数:</label>
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
id="restDays"
|
||||||
|
v-model="restDays"
|
||||||
|
min="1"
|
||||||
|
max="365"
|
||||||
|
class="form-input"
|
||||||
|
placeholder="请输入休息天数"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button @click="showCampModal = false" class="cancel-btn">取消</button>
|
<button @click="showCampModal = false" class="cancel-btn">取消</button>
|
||||||
@@ -205,6 +217,7 @@ const tooltipPosition = ref({ x: 0, y: 0 });
|
|||||||
const showCampModal = ref(false);
|
const showCampModal = ref(false);
|
||||||
const campStartDate = ref('');
|
const campStartDate = ref('');
|
||||||
const campDays = ref();
|
const campDays = ref();
|
||||||
|
const restDays = ref();
|
||||||
const isCampFinished = ref(false);
|
const isCampFinished = ref(false);
|
||||||
|
|
||||||
// 结束营期确认弹框相关
|
// 结束营期确认弹框相关
|
||||||
@@ -328,7 +341,11 @@ const saveCampSettings = async () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!campDays.value || campDays.value < 1) {
|
if (!campDays.value || campDays.value < 1) {
|
||||||
alert('请输入有效的天数');
|
alert('请输入有效的接数据天数');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!restDays.value || restDays.value < 1) {
|
||||||
|
alert('请输入有效的休息天数');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,14 +353,21 @@ const saveCampSettings = async () => {
|
|||||||
// 调用API设置营期参数并获取营期安排
|
// 调用API设置营期参数并获取营期安排
|
||||||
const result = await CenterCampPeriodAdmin({
|
const result = await CenterCampPeriodAdmin({
|
||||||
receipt_data_start_time: campStartDate.value,
|
receipt_data_start_time: campStartDate.value,
|
||||||
receipt_data_time: campDays.value.toString()
|
receipt_data_time: campDays.value.toString(),
|
||||||
|
rest_days: restDays.value.toString()
|
||||||
});
|
});
|
||||||
|
|
||||||
if (result && result.data) {
|
if (result && result.data) {
|
||||||
showCampModal.value = false;
|
showCampModal.value = false;
|
||||||
|
// 重置表单数据
|
||||||
|
campStartDate.value = '';
|
||||||
|
campDays.value = null;
|
||||||
|
restDays.value = null;
|
||||||
|
alert('营期设置成功!');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('保存营期设置失败:', error);
|
console.error('保存营期设置失败:', error);
|
||||||
|
alert('保存营期设置失败,请重试');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -430,25 +454,15 @@ const isRestDay = (dateStr) => {
|
|||||||
return dayEvents.length > 0;
|
return dayEvents.length > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 方法:检查营期是否应该结束(休息日已过)
|
// 方法:检查营期是否应该结束
|
||||||
const shouldShowFinishCamp = () => {
|
const shouldShowFinishCamp = () => {
|
||||||
if (isCampFinished.value) return false;
|
if (isCampFinished.value) return false;
|
||||||
|
|
||||||
const today = formatDateToString(new Date());
|
// 检查是否有营期相关的事件(接数据、课程、休息日等)
|
||||||
const restDayEvents = events.value.filter(event => event.isCampEvent && event.type === 'rest');
|
const campEvents = events.value.filter(event => event.isCampEvent);
|
||||||
|
|
||||||
if (restDayEvents.length === 0) return false;
|
// 如果有营期事件,就显示结束营期按钮
|
||||||
|
return campEvents.length > 0;
|
||||||
// 检查是否有休息日已经过去
|
|
||||||
const todayDate = new Date(today);
|
|
||||||
for (const restEvent of restDayEvents) {
|
|
||||||
const restDate = new Date(restEvent.date);
|
|
||||||
if (todayDate > restDate) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 方法:结束营期
|
// 方法:结束营期
|
||||||
@@ -485,7 +499,8 @@ const saveNextCampSettings = async () => {
|
|||||||
// 设置下一营期
|
// 设置下一营期
|
||||||
await CenterCampPeriodAdmin({
|
await CenterCampPeriodAdmin({
|
||||||
receipt_data_start_time: nextCampStartDate.value,
|
receipt_data_start_time: nextCampStartDate.value,
|
||||||
receipt_data_time: nextCampDataDays.value.toString()
|
receipt_data_time: nextCampDataDays.value.toString(),
|
||||||
|
rest_days: nextCampRestDays.value.toString()
|
||||||
});
|
});
|
||||||
|
|
||||||
// 关闭弹框并重置数据
|
// 关闭弹框并重置数据
|
||||||
@@ -516,15 +531,19 @@ const userStore = useUserStore();
|
|||||||
// 获取通用请求参数的函数
|
// 获取通用请求参数的函数
|
||||||
const getRequestParams = () => {
|
const getRequestParams = () => {
|
||||||
const params = {}
|
const params = {}
|
||||||
// 只从路由参数获取
|
// 优先从路由参数获取
|
||||||
const routeUserLevel = router.currentRoute.value.query.user_level || router.currentRoute.value.params.user_level
|
const routeUserLevel = router.currentRoute.value.query.user_level || router.currentRoute.value.params.user_level
|
||||||
const routeUserName = router.currentRoute.value.query.user_name || router.currentRoute.value.params.user_name
|
const routeUserName = router.currentRoute.value.query.user_name || router.currentRoute.value.params.user_name
|
||||||
// 如果路由有参数,使用路由参数
|
|
||||||
if (routeUserLevel) {
|
if (routeUserLevel && routeUserName) {
|
||||||
params.user_level = routeUserLevel.toString()
|
params.user_level = routeUserLevel.toString()
|
||||||
}
|
|
||||||
if (routeUserName) {
|
|
||||||
params.user_name = routeUserName
|
params.user_name = routeUserName
|
||||||
|
} else if (userStore.userInfo && userStore.userInfo.username) {
|
||||||
|
// 如果路由没有参数,从用户store获取
|
||||||
|
params.user_name = userStore.userInfo.username
|
||||||
|
if (userStore.userInfo.user_level) {
|
||||||
|
params.user_level = userStore.userInfo.user_level.toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return params
|
return params
|
||||||
@@ -549,6 +568,9 @@ async function CenterCampPeriodAdmin(data = {}) {
|
|||||||
// 设置营期时,传递开始时间和天数参数
|
// 设置营期时,传递开始时间和天数参数
|
||||||
Finsh.receipt_data_start_time = data.receipt_data_start_time
|
Finsh.receipt_data_start_time = data.receipt_data_start_time
|
||||||
Finsh.receipt_data_time = data.receipt_data_time
|
Finsh.receipt_data_time = data.receipt_data_time
|
||||||
|
if (data.rest_days) {
|
||||||
|
Finsh.rest_days = data.rest_days
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 兼容原有逻辑,使用全局变量
|
// 兼容原有逻辑,使用全局变量
|
||||||
if (isCampFinished.value) {
|
if (isCampFinished.value) {
|
||||||
@@ -557,12 +579,18 @@ async function CenterCampPeriodAdmin(data = {}) {
|
|||||||
// 只有在有营期设置数据时才传递参数
|
// 只有在有营期设置数据时才传递参数
|
||||||
Finsh.receipt_data_start_time = campStartDate.value
|
Finsh.receipt_data_start_time = campStartDate.value
|
||||||
Finsh.receipt_data_time = campDays.value.toString()
|
Finsh.receipt_data_time = campDays.value.toString()
|
||||||
|
if (restDays.value) {
|
||||||
|
Finsh.rest_days = restDays.value.toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 如果没有营期设置数据,Finsh 保持为空对象,用于获取现有数据
|
// 如果没有营期设置数据,Finsh 保持为空对象,用于获取现有数据
|
||||||
}
|
}
|
||||||
console.log('Finsh', Finsh)
|
console.log('Finsh', Finsh)
|
||||||
console.log('params', params)
|
console.log('params', params)
|
||||||
const res = await getCampPeriodAdmin(hasParams ? {...params, ...Finsh} : Finsh)
|
|
||||||
|
// 确保总是传递用户参数,即使是获取数据时
|
||||||
|
const finalParams = hasParams ? {...params, ...Finsh} : (Object.keys(Finsh).length > 0 ? Finsh : {})
|
||||||
|
const res = await getCampPeriodAdmin(finalParams)
|
||||||
|
|
||||||
// 如果获取到营期数据,映射到日历中
|
// 如果获取到营期数据,映射到日历中
|
||||||
if (res && res.data && res.data.camp_period) {
|
if (res && res.data && res.data.camp_period) {
|
||||||
@@ -657,6 +685,7 @@ const parseDateRange = (dateRangeStr) => {
|
|||||||
|
|
||||||
// 组件挂载时选中今天并获取营期数据
|
// 组件挂载时选中今天并获取营期数据
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
console.log('Calendar组件挂载,开始初始化...');
|
||||||
const todayDate = calendarDates.value.find(date => date.isToday);
|
const todayDate = calendarDates.value.find(date => date.isToday);
|
||||||
if (todayDate) {
|
if (todayDate) {
|
||||||
selectedDate.value = todayDate;
|
selectedDate.value = todayDate;
|
||||||
@@ -664,9 +693,36 @@ onMounted(async () => {
|
|||||||
|
|
||||||
// 获取现有的营期数据
|
// 获取现有的营期数据
|
||||||
try {
|
try {
|
||||||
await CenterCampPeriodAdmin();
|
console.log('开始获取营期数据...');
|
||||||
|
const result = await CenterCampPeriodAdmin();
|
||||||
|
console.log('获取营期数据结果:', result);
|
||||||
|
|
||||||
|
// 如果没有获取到营期数据,添加一些测试数据以便测试结束营期功能
|
||||||
|
if (!result || !result.data || !result.data.camp_period) {
|
||||||
|
console.log('没有获取到营期数据,添加测试数据...');
|
||||||
|
// 添加一些测试营期事件
|
||||||
|
events.value.push({
|
||||||
|
id: 999,
|
||||||
|
date: formatDateToString(new Date()),
|
||||||
|
title: '测试营期',
|
||||||
|
description: '测试营期数据',
|
||||||
|
isCampEvent: true,
|
||||||
|
type: 'data'
|
||||||
|
});
|
||||||
|
console.log('已添加测试营期数据,events:', events.value);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取营期数据失败:', error);
|
console.error('获取营期数据失败:', error);
|
||||||
|
// 即使API失败,也添加测试数据
|
||||||
|
console.log('API失败,添加测试数据...');
|
||||||
|
events.value.push({
|
||||||
|
id: 999,
|
||||||
|
date: formatDateToString(new Date()),
|
||||||
|
title: '测试营期',
|
||||||
|
description: '测试营期数据',
|
||||||
|
isCampEvent: true,
|
||||||
|
type: 'data'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -929,7 +929,7 @@ const excellentRecord = ref({});
|
|||||||
await CenterConversionRateVsAverage()
|
await CenterConversionRateVsAverage()
|
||||||
await CenterSeniorManagerList()
|
await CenterSeniorManagerList()
|
||||||
// 获取优秀录音
|
// 获取优秀录音
|
||||||
await CentergetGoodRecord()
|
// await CentergetGoodRecord()
|
||||||
await CenterGroupList('all') // 初始化加载全部高级经理数据
|
await CenterGroupList('all') // 初始化加载全部高级经理数据
|
||||||
|
|
||||||
// 输出缓存信息
|
// 输出缓存信息
|
||||||
|
|||||||
Reference in New Issue
Block a user