From b0c2f28d7febb2aa74eaaa1fcb25e44427c7f4fc Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Wed, 29 Oct 2025 17:11:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=BD=95=E9=9F=B3=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=98=E7=A7=80=E5=BD=95=E9=9F=B3=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=B9=B6=E4=BC=98=E5=8C=96API=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(性能优化): 使用Promise.all并行请求核心KPI接口 style(样式调整): 修改ProblemRanking组件高度和内边距 chore: 移除调试用的console.log语句 --- my-vue-app/src/components/FeedbackForm.vue | 2 +- my-vue-app/src/utils/https.js | 2 +- my-vue-app/src/views/person/sale.vue | 53 +- .../senorManger/components/GoodMusic.vue | 1145 +++++++++++++++++ .../senorManger/components/ProblemRanking.vue | 4 +- .../src/views/senorManger/seniorManager.vue | 37 +- 6 files changed, 1217 insertions(+), 26 deletions(-) create mode 100644 my-vue-app/src/views/senorManger/components/GoodMusic.vue diff --git a/my-vue-app/src/components/FeedbackForm.vue b/my-vue-app/src/components/FeedbackForm.vue index 2ceec4c..52277e9 100644 --- a/my-vue-app/src/components/FeedbackForm.vue +++ b/my-vue-app/src/components/FeedbackForm.vue @@ -129,7 +129,7 @@ const handleSubmit = async () => { 'Authorization': `Bearer ${token}` } }); - console.log('响应状态8888:', response.data.message); + // console.log('响应状态8888:', response.data.message); // 提交成功 submitStatus.value = 'success'; // 触发父组件的事件,并传递数据 diff --git a/my-vue-app/src/utils/https.js b/my-vue-app/src/utils/https.js index 07a1086..8f85432 100644 --- a/my-vue-app/src/utils/https.js +++ b/my-vue-app/src/utils/https.js @@ -5,7 +5,7 @@ import { useUserStore } from '@/stores/user' // 创建axios实例 const service = axios.create({ - baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径,支持完整URL + baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径,支持完整URL // baseURL: 'http://192.168.15.121:8890' || '', // API基础路径,支持完整URL timeout: 100000, // 请求超时时间 headers: { diff --git a/my-vue-app/src/views/person/sale.vue b/my-vue-app/src/views/person/sale.vue index b306bc8..0c6bf1f 100644 --- a/my-vue-app/src/views/person/sale.vue +++ b/my-vue-app/src/views/person/sale.vue @@ -365,26 +365,38 @@ async function getCoreKpi() { try { const params = getRequestParams() const hasParams = params.user_name - + + // 并发请求所有KPI接口 + const [ + todayCallRes, + conversionRes, + avgCallTimeRes, + callSuccessRateRes + ] = await Promise.all([ + getTodayCall(hasParams ? params : undefined), + getConversionRateAndAllocatedData(hasParams ? params : undefined), + getAvgCallTime(hasParams ? params : undefined), + getCallSuccessRate(hasParams ? params : undefined) + ]) + // 今日通话数据 - const res = await getTodayCall(hasParams ? params : undefined) - if (res.code === 200) { - kpiDataState.totalCalls = res.data.call_count + if (todayCallRes.code === 200) { + kpiDataState.totalCalls = todayCallRes.data.call_count } + // 转化率、分配数据量、加微率 - const conversionRes = await getConversionRateAndAllocatedData(hasParams ? params : undefined) if (conversionRes.code === 200) { kpiDataState.conversionRate = conversionRes.data.conversion_rate || 0 kpiDataState.assignedData = conversionRes.data.all_count || 0 kpiDataState.wechatAddRate = conversionRes.data.plus_v_conversion_rate || 0 - } + } + // 平均通话时长 - const avgCallTimeRes = await getAvgCallTime(hasParams ? params : undefined) if (avgCallTimeRes.code === 200) { kpiDataState.avgDuration = avgCallTimeRes.data.call_time || 0 } + // 电话接通率 - const callSuccessRateRes = await getCallSuccessRate(hasParams ? params : undefined) if (callSuccessRateRes.code === 200) { kpiDataState.successRate = callSuccessRateRes.data.call_success_rate || 0 } @@ -401,26 +413,35 @@ async function getStatisticsData() { const params = getRequestParams() const hasParams = params.user_name - // 获取表单填写率 - const fillingRateRes = await getTableFillingRate(hasParams ? params : undefined) + // 并发请求所有统计数据 + const [ + fillingRateRes, + avgResponseRes, + communicationRes, + timeoutRes + ] = await Promise.all([ + getTableFillingRate(hasParams ? params : undefined), + getAverageResponseTime(hasParams ? params : undefined), + getWeeklyActiveCommunicationRate(hasParams ? params : undefined), + getTimeoutResponseRate(hasParams ? params : undefined) + ]) + + // 处理表单填写率 if (fillingRateRes.code === 200) { statisticsData.formCompletionRate = fillingRateRes.data.filling_rate } - // 获取平均响应时间 - const avgResponseRes = await getAverageResponseTime(hasParams ? params : undefined) + // 处理平均响应时间 if (avgResponseRes.code === 200) { statisticsData.averageResponseTime = avgResponseRes.data.average_minutes } - // 获取客户沟通率 - const communicationRes = await getWeeklyActiveCommunicationRate(hasParams ? params : undefined) + // 处理客户沟通率 if (communicationRes.code === 200) { statisticsData.customerCommunicationRate = communicationRes.data.communication_rate } - // 获取超时响应率 - const timeoutRes = await getTimeoutResponseRate(hasParams ? params : undefined) + // 处理超时响应率 if (timeoutRes.code === 200) { statisticsData.timeoutResponseRate = timeoutRes.data.overtime_rate_600 statisticsData.severeTimeoutRate = timeoutRes.data.overtime_rate_800 diff --git a/my-vue-app/src/views/senorManger/components/GoodMusic.vue b/my-vue-app/src/views/senorManger/components/GoodMusic.vue new file mode 100644 index 0000000..1887c1b --- /dev/null +++ b/my-vue-app/src/views/senorManger/components/GoodMusic.vue @@ -0,0 +1,1145 @@ + + + + + \ No newline at end of file diff --git a/my-vue-app/src/views/senorManger/components/ProblemRanking.vue b/my-vue-app/src/views/senorManger/components/ProblemRanking.vue index fab9d61..b197a89 100644 --- a/my-vue-app/src/views/senorManger/components/ProblemRanking.vue +++ b/my-vue-app/src/views/senorManger/components/ProblemRanking.vue @@ -87,7 +87,7 @@ $white: #ffffff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); display: flex; flex-direction: column; - height: 26rem !important; + height: 21.5rem !important; max-height: 26rem; // flex: 1; } @@ -96,7 +96,7 @@ $white: #ffffff; display: flex; justify-content: space-between; align-items: center; - padding: 20px 20px 16px; + padding: 10px 20px 10px; border-bottom: 1px solid #ebeef5; h3 { diff --git a/my-vue-app/src/views/senorManger/seniorManager.vue b/my-vue-app/src/views/senorManger/seniorManager.vue index fb6b85d..0c535fe 100644 --- a/my-vue-app/src/views/senorManger/seniorManager.vue +++ b/my-vue-app/src/views/senorManger/seniorManager.vue @@ -53,7 +53,12 @@ @update-check-type="updateCheckType" />
- + +
+ + +
+
-
- - -
+
{ console.log('所有缓存已清除') } +// 优秀录音 +const excellentRecord = ref([]); +async function CenterExcellentRecord() { + const params={ + user_level:userStore.userInfo.user_level.toString(), + user_name:userStore.userInfo.username + } + try { + const cacheKey = getCacheKey('CenterExcellentRecord', params); + const result = await withCache(cacheKey, async () => { + const res = await getExcellentRecordFile(params); + return res.data; + }); + excellentRecord.value = result; + console.log(111111,result); + } catch (error) { + console.error("获取优秀录音失败:", error); + } +} + const clearSpecificCache = (functionName, params = {}) => { const cacheKey = getCacheKey(functionName, params) cache.delete(cacheKey) @@ -771,6 +795,7 @@ onMounted(async ()=>{ await fetchTableFillingRate() await fetchUrgentNeedToAddress() await fetchTeamRanking() + await CenterExcellentRecord() console.log('缓存状态:', getCacheInfo())