From 18d1c74a2ca3fcb33f27c4e02e60eddbf3d9c568 Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Wed, 20 Aug 2025 23:17:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=90=A5=E6=9C=9F=E7=AE=A1=E6=8E=A7):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=90=A5=E6=9C=9F=E7=BB=93=E6=9D=9F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=8F=8A=E8=90=A5=E6=9C=9F=E8=AE=BE=E7=BD=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增getCampPeriodAdmin API接口用于营期管控 - 在非接数据阶段添加结束营期按钮及相关处理逻辑 - 实现营期设置保存功能并与后端API对接 - 添加营期数据初始化逻辑,从API获取当前营期信息 --- my-vue-app/src/api/secondTop.js | 5 + my-vue-app/src/views/secondTop/secondTop.vue | 176 ++++++++++++++++--- 2 files changed, 153 insertions(+), 28 deletions(-) diff --git a/my-vue-app/src/api/secondTop.js b/my-vue-app/src/api/secondTop.js index af04dc6..d3e4125 100644 --- a/my-vue-app/src/api/secondTop.js +++ b/my-vue-app/src/api/secondTop.js @@ -60,6 +60,11 @@ export const getConversionRateVsAverage = (params) => { return https.post('/api/v1/level_four/overview/conversion_rate_vs_average', params) } +// 营期管控 /api/v1/level_four/overview/camp_period_admin +export const getCampPeriodAdmin = (params) => { + return https.post('/api/v1/level_four/overview/camp_period_admin', params) +} + diff --git a/my-vue-app/src/views/secondTop/secondTop.vue b/my-vue-app/src/views/secondTop/secondTop.vue index fa32786..e95f47a 100644 --- a/my-vue-app/src/views/secondTop/secondTop.vue +++ b/my-vue-app/src/views/secondTop/secondTop.vue @@ -29,14 +29,16 @@ 营期所属阶段: {{ currentStage }} - +
- 调整“接数据”天数: + 调整"接数据"天数:
-
- {{ stage.name }}: {{ stage.startDate }} to {{ stage.endDate }} + + +
+
@@ -180,11 +182,13 @@ import { getOverallCenterPerformance, getTotalGroupCount, getCenterConversionRate, getTotalCallCount, getNewCustomer , getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking, - getTeamRankingInfo, getConversionRateVsAverage - } from '@/api/secondTop.js' + getTeamRankingInfo, getConversionRateVsAverage,getCampPeriodAdmin } from '@/api/secondTop.js' import { useRouter } from 'vue-router' import { useUserStore } from '@/stores/user.js' - + // 路由实例 + const router = useRouter(); + // 用户store实例 + const userStore = useUserStore(); // 营期调控逻辑 // This would ideally come from a prop or API call based on the logged-in user const centerData = ref({ @@ -247,23 +251,121 @@ const centerData = ref({ }); }; - const saveCampSettings = () => { + const saveCampSettings = async () => { recalculateStageDates(); - console.log('Saving camp settings for', centerData.value.name); - console.log('Updated data:', JSON.parse(JSON.stringify(centerData.value))); - alert('营期设置已保存!'); + + // 准备API请求参数 + const params = { + user_name: userStore.userInfo.username, + user_level: userStore.userInfo.user_level.toString(), + receipt_data_time: dataReceivingStage.value.days.toString() + }; + + try { + const res = await getCampPeriodAdmin(params); + if (res.code === 200) { + console.log('营期设置保存成功:', res.data); + alert('营期设置已保存!'); + } else { + alert('保存失败,请重试'); + } + } catch (error) { + console.error('保存营期设置失败:', error); + alert('保存失败,请重试'); + } }; + // 结束营期 + const finishCamp = async () => { + try { + const params = { + user_name: userStore.userInfo.username, + user_level: userStore.userInfo.user_level.toString(), + is_camp_finish: "true" + }; + + const res = await getCampPeriodAdmin(params); + if (res.code === 200) { + console.log('营期结束成功:', res.data); + alert('营期已成功结束!'); + // 可以在这里添加页面跳转或其他后续操作 + } else { + alert('结束营期失败,请重试'); + } + } catch (error) { + console.error('结束营期失败:', error); + alert('结束营期失败,请重试!'); + } + }; + + // console.log('currentStage', userStore.userInfo) + + // 获取,修改当前营期 + const campPeriodAdmin = ref({}) + async function CenterCampPeriodAdmin() { + const params = { + user_name: userStore.userInfo.username + ,user_level: userStore.userInfo.user_level.toString() + } + + const res = await getCampPeriodAdmin(params) + if (res.code === 200) { + campPeriodAdmin.value = res.data + + // 根据API返回的数据更新centerData + if (res.data.camp_period) { + const campPeriod = res.data.camp_period + + // 解析接数据阶段的开始日期作为营期开始日期 + if (campPeriod.receipt_data_time) { + const startDate = campPeriod.receipt_data_time.split(' to ')[0].split(' ')[0] + centerData.value.startDate = startDate + } + + // 计算各阶段天数 + const calculateDays = (timeRange) => { + if (!timeRange) return 1 + const [start, end] = timeRange.split(' to ') + const startDate = new Date(start.split(' ')[0]) + const endDate = new Date(end.split(' ')[0]) + return Math.ceil((endDate - startDate) / (1000 * 60 * 60 * 24)) + 1 + } + + // 更新各阶段天数 + centerData.value.stages.forEach(stage => { + switch(stage.name) { + case '接数据': + stage.days = calculateDays(campPeriod.receipt_data_time) + break + case '课一': + stage.days = calculateDays(campPeriod.class_one) + break + case '课二': + stage.days = calculateDays(campPeriod.class_two) + break + case '课三': + stage.days = calculateDays(campPeriod.class_three) + break + case '课四': + stage.days = calculateDays(campPeriod.class_four) + break + } + }) + + // 重新计算阶段日期 + recalculateStageDates() + } + } + } + + + + // 组别数据 const groups = ref([]) // loading 状态 const isLoading = ref(false) - // 路由实例 - const router = useRouter(); - // 用户store实例 - const userStore = useUserStore(); - // 获取通用请求参数的函数 const getRequestParams = () => { const params = {} @@ -591,20 +693,23 @@ const conversionRateVsAverage = ref({}) return statusMap[status] || '未知' } onMounted(async () => { - recalculateStageDates(); try { isLoading.value = true - await CenterOverallCenterPerformance() - await CenterTotalGroupCount() - await CenterConversionRate() - await CenterTotalCallCount() - await CenterNewCustomer() - await CenterDepositConversionRate() - await CenterCustomerType() - await CenterUrgentNeedToAddress() - await CenterConversionRateVsAverage() - await CenterSeniorManagerList() - await CenterGroupList('all') // 初始化加载全部高级经理数据 + await CenterCampPeriodAdmin() + // CenterCampPeriodAdmin中已经调用了recalculateStageDates,这里不需要重复调用 + // await CenterOverallCenterPerformance() + // await CenterTotalGroupCount() + // await CenterConversionRate() + // await CenterTotalCallCount() + // await CenterNewCustomer() + // await CenterDepositConversionRate() + // await CenterCustomerType() + // await CenterUrgentNeedToAddress() + // await CenterConversionRateVsAverage() + // await CenterSeniorManagerList() + + + // await CenterGroupList('all') // 初始化加载全部高级经理数据 } catch (error) { console.error('数据加载失败:', error) } finally { @@ -1237,4 +1342,19 @@ const conversionRateVsAverage = ref({}) padding: 5px 10px; font-size: 12px; } + +.finish-camp-button { + padding: 8px 16px; + font-size: 14px; + background-color: #dc3545; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + transition: background-color 0.2s; + + &:hover { + background-color: #c82333; + } +} \ No newline at end of file