销售管理页面跳转到 维度分析

This commit is contained in:
ZLI263
2025-10-01 21:19:22 +08:00
parent 655dc2b2d3
commit 696bec5206
5 changed files with 436 additions and 100 deletions

View File

@@ -9,12 +9,10 @@ export function getAudioList(params) {
current: params.current || 1,
size: params.size || 20,
recordingName: params.recordingName,
customerPhone: params.customerPhone,
dealershipId: params.dealershipId,
intentionLevel: params.intentionLevel,
projectId: params.projectId,
salesPhone: params.salesPhone,
customerName: params.customerName,
editStatus: params.editStatus,
maxDuration: params.maxDuration,
minDuration: params.minDuration,

View File

@@ -86,10 +86,10 @@ export function getTopSalesPage(params) {
params: {
current: params.current || 1,
size: params.size || 10,
workflowId: params.workflowId,
status: params.status,
salesName: params.salesName,
dealershipName: params.dealershipName
salespersonName: params.salespersonName,
salespersonPhone: params.salespersonPhone,
dealerName: params.dealerName
}
})
}

View File

@@ -45,24 +45,6 @@
</el-form-item>
<!-- 第二行 -->
<el-form-item label="客户名称">
<el-input
v-model="queryParams.customerName"
placeholder="请输入客户名称"
clearable
style="width: 200px"
/>
</el-form-item>
<el-form-item label="客户手机号">
<el-input
v-model="queryParams.customerPhone"
placeholder="请输入客户手机号"
clearable
style="width: 200px"
/>
</el-form-item>
<el-form-item label="编辑状态">
<el-select v-model="queryParams.editStatus" placeholder="请选择编辑状态" clearable>
<el-option label="已编辑" value="1" />
@@ -698,7 +680,8 @@
<div class="analysis-header">
<h3>{{ currentAnalysisRow.recordingName }}</h3>
<p><strong>客户</strong>{{ currentAnalysisRow.customerName }} ({{ currentAnalysisRow.customerPhone }})</p>
<p><strong>销售</strong>{{ currentAnalysisRow.salesName }}</p>
<p><strong>销售</strong>{{ dimensionAnalysisResult.salespersonName || currentAnalysisRow.salesName }} ({{ dimensionAnalysisResult.salespersonPhone || currentAnalysisRow.salesPhone }})</p>
<p><strong>经销商</strong>{{ dimensionAnalysisResult.dealerName || currentAnalysisRow.dealershipName }} ({{ dimensionAnalysisResult.dealerPhone || currentAnalysisRow.dealershipPhone }})</p>
<p><strong>录音时间</strong>{{ currentAnalysisRow.recordingTime }}</p>
</div>
@@ -709,15 +692,15 @@
<div class="score-grid">
<div class="score-item">
<span class="score-label">自然度</span>
<span class="score-value">{{ dimensionAnalysisResult.naturalnessScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.naturalnessScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">连贯性</span>
<span class="score-value">{{ dimensionAnalysisResult.coherenceScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.coherenceScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">流畅度</span>
<span class="score-value">{{ dimensionAnalysisResult.fluencyScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.fluencyScore || '--' }}</span>
</div>
</div>
</div>
@@ -728,15 +711,15 @@
<div class="score-grid">
<div class="score-item">
<span class="score-label">主动性</span>
<span class="score-value">{{ dimensionAnalysisResult.advisorAggressivenessScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.advisorAggressivenessScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">一致性</span>
<span class="score-value">{{ dimensionAnalysisResult.advisorConsistencyScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.advisorConsistencyScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">接待问候</span>
<span class="score-value">{{ dimensionAnalysisResult.greetingReceptionScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.greetingReceptionScore || '--' }}</span>
</div>
</div>
</div>
@@ -747,19 +730,19 @@
<div class="score-grid">
<div class="score-item">
<span class="score-label">品牌介绍</span>
<span class="score-value">{{ dimensionAnalysisResult.brandIntroductionScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.brandIntroductionScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">安全介绍</span>
<span class="score-value">{{ dimensionAnalysisResult.safetyIntroductionScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.safetyIntroductionScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">健康环保</span>
<span class="score-value">{{ dimensionAnalysisResult.healthEnvironmentIntroductionScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.healthEnvironmentIntroductionScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">技术介绍</span>
<span class="score-value">{{ dimensionAnalysisResult.technologyIntroductionScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.technologyIntroductionScore || '--' }}</span>
</div>
</div>
</div>
@@ -770,15 +753,15 @@
<div class="score-grid">
<div class="score-item">
<span class="score-label">需求理解</span>
<span class="score-value">{{ dimensionAnalysisResult.customerNeedsUnderstandingScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.customerNeedsUnderstandingScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">预算理解</span>
<span class="score-value">{{ dimensionAnalysisResult.budgetUnderstandingScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.budgetUnderstandingScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">推荐匹配</span>
<span class="score-value">{{ dimensionAnalysisResult.recommendationScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.recommendationScore || '--' }}</span>
</div>
</div>
</div>
@@ -789,11 +772,11 @@
<div class="score-grid">
<div class="score-item">
<span class="score-label">试驾邀请</span>
<span class="score-value">{{ dimensionAnalysisResult.testDriveInvitationScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.testDriveInvitationScore || '--' }}</span>
</div>
<div class="score-item">
<span class="score-label">谈判成交</span>
<span class="score-value">{{ dimensionAnalysisResult.negotiationDealScore }}</span>
<span class="score-value">{{ dimensionAnalysisResult.negotiationDealScore || '--' }}</span>
</div>
</div>
</div>
@@ -804,8 +787,8 @@
<div class="info-grid">
<div class="info-item">
<span class="info-label">状态</span>
<el-tag :type="dimensionAnalysisResult.status === 'succeeded' ? 'success' : 'danger'">
{{ dimensionAnalysisResult.status === 'succeeded' ? '成功' : '失败' }}
<el-tag :type="dimensionAnalysisResult.status === 'success' ? 'success' : 'danger'">
{{ dimensionAnalysisResult.status === 'success' ? '成功' : '失败' }}
</el-tag>
</div>
<div class="info-item">
@@ -1023,8 +1006,6 @@ export default {
dealershipId: '',
projectId: '',
salesPhone: '',
customerName: '',
customerPhone: '',
editStatus: '',
maxDuration: '',
minDuration: '',
@@ -1320,8 +1301,6 @@ export default {
dealershipId: '',
projectId: '',
salesPhone: '',
customerName: '',
customerPhone: '',
editStatus: '',
maxDuration: '',
minDuration: '',

View File

@@ -3,15 +3,6 @@
<!-- 查询条件区域 -->
<el-card class="filter-container" shadow="never">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="100px">
<el-form-item label="工作流ID">
<el-input
v-model="queryParams.workflowId"
placeholder="请输入工作流ID"
clearable
style="width: 200px"
/>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option label="全部" value="" />
@@ -23,16 +14,25 @@
<el-form-item label="销售人员">
<el-input
v-model="queryParams.salesName"
v-model="queryParams.salespersonName"
placeholder="请输入销售人员姓名"
clearable
style="width: 200px"
/>
</el-form-item>
<el-form-item label="销售电话">
<el-input
v-model="queryParams.salespersonPhone"
placeholder="请输入销售人员电话"
clearable
style="width: 200px"
/>
</el-form-item>
<el-form-item label="经销商">
<el-input
v-model="queryParams.dealershipName"
v-model="queryParams.dealerName"
placeholder="请输入经销商名称"
clearable
style="width: 200px"
@@ -56,11 +56,10 @@
>
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="工作流ID" prop="workflowId" min-width="150" />
<el-table-column label="销售人员" prop="salesName" min-width="120" />
<el-table-column label="销售电话" prop="salesPhone" min-width="120" />
<el-table-column label="经销商" prop="dealershipName" min-width="150" />
<el-table-column label="经销商电话" prop="dealershipPhone" min-width="120" />
<el-table-column label="销售人员" prop="salespersonName" min-width="120" />
<el-table-column label="销售电话" prop="salespersonPhone" min-width="120" />
<el-table-column label="经销商" prop="dealerName" min-width="150" />
<el-table-column label="经销商电话" prop="dealerPhone" min-width="120" />
<el-table-column label="状态" prop="status" min-width="100">
<template slot-scope="scope">
<el-tag :type="getStatusType(scope.row.status)">
@@ -68,11 +67,141 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="自然度评分" prop="naturalnessScore" min-width="120" />
<el-table-column label="连贯性评分" prop="coherenceScore" min-width="120" />
<el-table-column label="流畅度评分" prop="fluencyScore" min-width="120" />
<el-table-column label="总用时(秒)" prop="elapsedTime" min-width="120" />
<el-table-column label="创建时间" prop="createdAt" min-width="150" />
<!-- 基础沟通能力 -->
<el-table-column label="自然度" prop="naturalnessScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.naturalnessScore)" size="mini">
{{ scope.row.naturalnessScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="连贯性" prop="coherenceScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.coherenceScore)" size="mini">
{{ scope.row.coherenceScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="流畅度" prop="fluencyScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.fluencyScore)" size="mini">
{{ scope.row.fluencyScore || 0 }}
</el-tag>
</template>
</el-table-column>
<!-- 顾问表现 -->
<el-table-column label="积极性" prop="advisorAggressivenessScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.advisorAggressivenessScore)" size="mini">
{{ scope.row.advisorAggressivenessScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="一致性" prop="advisorConsistencyScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.advisorConsistencyScore)" size="mini">
{{ scope.row.advisorConsistencyScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="接待问候" prop="greetingReceptionScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.greetingReceptionScore)" size="mini">
{{ scope.row.greetingReceptionScore || 0 }}
</el-tag>
</template>
</el-table-column>
<!-- 产品介绍 -->
<el-table-column label="品牌介绍" prop="brandIntroductionScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.brandIntroductionScore)" size="mini">
{{ scope.row.brandIntroductionScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="安全介绍" prop="safetyIntroductionScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.safetyIntroductionScore)" size="mini">
{{ scope.row.safetyIntroductionScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="健康环保" prop="healthEnvironmentIntroductionScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.healthEnvironmentIntroductionScore)" size="mini">
{{ scope.row.healthEnvironmentIntroductionScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="技术介绍" prop="technologyIntroductionScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.technologyIntroductionScore)" size="mini">
{{ scope.row.technologyIntroductionScore || 0 }}
</el-tag>
</template>
</el-table-column>
<!-- 客户理解 -->
<el-table-column label="需求理解" prop="customerNeedsUnderstandingScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.customerNeedsUnderstandingScore)" size="mini">
{{ scope.row.customerNeedsUnderstandingScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="预算理解" prop="budgetUnderstandingScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.budgetUnderstandingScore)" size="mini">
{{ scope.row.budgetUnderstandingScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="推荐匹配" prop="recommendationScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.recommendationScore)" size="mini">
{{ scope.row.recommendationScore || 0 }}
</el-tag>
</template>
</el-table-column>
<!-- 成交促进 -->
<el-table-column label="试驾邀请" prop="testDriveInvitationScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.testDriveInvitationScore)" size="mini">
{{ scope.row.testDriveInvitationScore || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="谈判成交" prop="negotiationDealScore" min-width="80" align="center">
<template slot-scope="scope">
<el-tag :type="getScoreType(scope.row.negotiationDealScore)" size="mini">
{{ scope.row.negotiationDealScore || 0 }}
</el-tag>
</template>
</el-table-column>
<!-- 汇总评分 -->
<el-table-column label="综合评分" min-width="100" align="center" fixed="right">
<template slot-scope="scope">
<el-tag :type="getOverallScoreType(scope.row)" size="small">
{{ getOverallScore(scope.row) }}
</el-tag>
</template>
</el-table-column>
<!-- 其他信息 -->
<el-table-column label="总用时(秒)" prop="elapsedTime" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.elapsedTime || 0 }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createdAt" min-width="150" align="center">
<template slot-scope="scope">
<span>{{ formatDateTime(scope.row.createdAt) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleView(scope.row)">查看详情</el-button>
@@ -103,29 +232,97 @@
>
<div v-if="currentRecord">
<el-descriptions :column="2" border>
<el-descriptions-item label="工作流ID">{{ currentRecord.workflowId }}</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag :type="getStatusType(currentRecord.status)">{{ currentRecord.status }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="销售人员">{{ currentRecord.salesName || '-' }}</el-descriptions-item>
<el-descriptions-item label="销售电话">{{ currentRecord.salesPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="经销商">{{ currentRecord.dealershipName || '-' }}</el-descriptions-item>
<el-descriptions-item label="经销商电话">{{ currentRecord.dealershipPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="自然度评分">{{ currentRecord.naturalnessScore }}</el-descriptions-item>
<el-descriptions-item label="连贯性评分">{{ currentRecord.coherenceScore }}</el-descriptions-item>
<el-descriptions-item label="流畅度评分">{{ currentRecord.fluencyScore }}</el-descriptions-item>
<el-descriptions-item label="顾问积极性评分">{{ currentRecord.advisorAggressivenessScore }}</el-descriptions-item>
<el-descriptions-item label="顾问一致性评分">{{ currentRecord.advisorConsistencyScore }}</el-descriptions-item>
<el-descriptions-item label="问候接待评分">{{ currentRecord.greetingReceptionScore }}</el-descriptions-item>
<el-descriptions-item label="品牌介绍评分">{{ currentRecord.brandIntroductionScore }}</el-descriptions-item>
<el-descriptions-item label="客户需求理解评分">{{ currentRecord.customerNeedsUnderstandingScore }}</el-descriptions-item>
<el-descriptions-item label="预算理解评分">{{ currentRecord.budgetUnderstandingScore }}</el-descriptions-item>
<el-descriptions-item label="推荐评分">{{ currentRecord.recommendationScore }}</el-descriptions-item>
<el-descriptions-item label="安全介绍评分">{{ currentRecord.safetyIntroductionScore }}</el-descriptions-item>
<el-descriptions-item label="健康环境介绍评分">{{ currentRecord.healthEnvironmentIntroductionScore }}</el-descriptions-item>
<el-descriptions-item label="技术介绍评分">{{ currentRecord.technologyIntroductionScore }}</el-descriptions-item>
<el-descriptions-item label="试驾邀请评分">{{ currentRecord.testDriveInvitationScore }}</el-descriptions-item>
<el-descriptions-item label="谈判成交评分">{{ currentRecord.negotiationDealScore }}</el-descriptions-item>
<el-descriptions-item label="销售人员">{{ currentRecord.salespersonName || currentRecord.salesName || '-' }}</el-descriptions-item>
<el-descriptions-item label="销售电话">{{ currentRecord.salespersonPhone || currentRecord.salesPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="经销商">{{ currentRecord.dealerName || currentRecord.dealershipName || '-' }}</el-descriptions-item>
<el-descriptions-item label="经销商电话">{{ currentRecord.dealerPhone || currentRecord.dealershipPhone || '-' }}</el-descriptions-item>
<!-- 基础沟通能力 (3个维度) -->
<el-descriptions-item label="自然度评分">
<el-tag :type="getScoreType(currentRecord.naturalnessScore)" size="small">
{{ currentRecord.naturalnessScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="连贯性评分">
<el-tag :type="getScoreType(currentRecord.coherenceScore)" size="small">
{{ currentRecord.coherenceScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="流畅度评分">
<el-tag :type="getScoreType(currentRecord.fluencyScore)" size="small">
{{ currentRecord.fluencyScore || 0 }}
</el-tag>
</el-descriptions-item>
<!-- 顾问表现 (3个维度) -->
<el-descriptions-item label="顾问积极性评分">
<el-tag :type="getScoreType(currentRecord.advisorAggressivenessScore)" size="small">
{{ currentRecord.advisorAggressivenessScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="顾问一致性评分">
<el-tag :type="getScoreType(currentRecord.advisorConsistencyScore)" size="small">
{{ currentRecord.advisorConsistencyScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="问候接待评分">
<el-tag :type="getScoreType(currentRecord.greetingReceptionScore)" size="small">
{{ currentRecord.greetingReceptionScore || 0 }}
</el-tag>
</el-descriptions-item>
<!-- 产品介绍 (4个维度) -->
<el-descriptions-item label="品牌介绍评分">
<el-tag :type="getScoreType(currentRecord.brandIntroductionScore)" size="small">
{{ currentRecord.brandIntroductionScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="安全介绍评分">
<el-tag :type="getScoreType(currentRecord.safetyIntroductionScore)" size="small">
{{ currentRecord.safetyIntroductionScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="健康环境介绍评分">
<el-tag :type="getScoreType(currentRecord.healthEnvironmentIntroductionScore)" size="small">
{{ currentRecord.healthEnvironmentIntroductionScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="技术介绍评分">
<el-tag :type="getScoreType(currentRecord.technologyIntroductionScore)" size="small">
{{ currentRecord.technologyIntroductionScore || 0 }}
</el-tag>
</el-descriptions-item>
<!-- 客户理解 (3个维度) -->
<el-descriptions-item label="客户需求理解评分">
<el-tag :type="getScoreType(currentRecord.customerNeedsUnderstandingScore)" size="small">
{{ currentRecord.customerNeedsUnderstandingScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="预算理解评分">
<el-tag :type="getScoreType(currentRecord.budgetUnderstandingScore)" size="small">
{{ currentRecord.budgetUnderstandingScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="推荐评分">
<el-tag :type="getScoreType(currentRecord.recommendationScore)" size="small">
{{ currentRecord.recommendationScore || 0 }}
</el-tag>
</el-descriptions-item>
<!-- 成交促进 (2个维度) -->
<el-descriptions-item label="试驾邀请评分">
<el-tag :type="getScoreType(currentRecord.testDriveInvitationScore)" size="small">
{{ currentRecord.testDriveInvitationScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="谈判成交评分">
<el-tag :type="getScoreType(currentRecord.negotiationDealScore)" size="small">
{{ currentRecord.negotiationDealScore || 0 }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="总用时(秒)">{{ currentRecord.elapsedTime }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ currentRecord.createdAt }}</el-descriptions-item>
</el-descriptions>
@@ -163,18 +360,47 @@ export default {
queryParams: {
current: 1,
size: 10,
workflowId: '',
status: '',
salesName: '',
dealershipName: ''
salespersonName: '',
salespersonPhone: '',
dealerName: ''
},
// 详情对话框
detailDialogVisible: false,
currentRecord: null
}
},
watch: {
// 监听路由变化
'$route'(to, from) {
console.log('路由变化:', to.query)
if (to.query.salespersonPhone) {
this.queryParams.salespersonPhone = to.query.salespersonPhone
console.log('路由监听中设置销售电话:', to.query.salespersonPhone)
this.getList()
}
}
},
created() {
this.getList()
// 检查URL参数中是否有销售电话
if (this.$route.query.salespersonPhone) {
this.queryParams.salespersonPhone = this.$route.query.salespersonPhone
console.log('从URL参数设置销售电话:', this.$route.query.salespersonPhone)
console.log('设置后的queryParams:', this.queryParams)
}
// 使用nextTick确保参数设置完成后再查询
this.$nextTick(() => {
this.getList()
})
},
mounted() {
// 在mounted中再次检查URL参数确保参数正确设置
if (this.$route.query.salespersonPhone && !this.queryParams.salespersonPhone) {
this.queryParams.salespersonPhone = this.$route.query.salespersonPhone
console.log('mounted中设置销售电话:', this.$route.query.salespersonPhone)
this.getList()
}
},
methods: {
// 获取列表数据
@@ -189,9 +415,31 @@ export default {
}
})
getTopSalesPage(params).then(response => {
// 参数名称映射:前端字段名 -> 后端期望的字段名
const apiParams = {
current: params.current,
size: params.size,
status: params.status,
salespersonName: params.salespersonName, // 直接传递销售人员参数
salespersonPhone: params.salespersonPhone, // 直接传递销售人员电话参数
dealerName: params.dealerName // 直接传递经销商参数
}
// 移除空值
Object.keys(apiParams).forEach(key => {
if (apiParams[key] === '' || apiParams[key] === null || apiParams[key] === undefined) {
delete apiParams[key]
}
})
console.log('发送给后端的参数:', apiParams)
console.log('当前查询参数:', this.queryParams)
console.log('URL参数:', this.$route.query)
console.log('salespersonPhone参数值:', params.salespersonPhone)
getTopSalesPage(apiParams).then(response => {
console.log('TopSales列表响应:', response)
// 检查响应结构
if (response) {
// 如果响应直接是分页格式(根据您提供的后端数据格式)
@@ -207,7 +455,7 @@ export default {
}
} else if (response.data) {
console.log('检测到response.data字段')
// 如果响应有data字段
if (response.data.records && Array.isArray(response.data.records)) {
console.log('response.data是分页格式')
@@ -249,7 +497,7 @@ export default {
this.topSalesList = []
this.total = 0
}
console.log('最终topSalesList:', this.topSalesList)
console.log('最终total:', this.total)
this.loading = false
@@ -304,6 +552,88 @@ export default {
return statusMap[status] || 'info'
},
// 获取评分标签类型
getScoreType(score) {
if (!score || score === 0) return 'info'
if (score >= 8) return 'success'
if (score >= 6) return 'warning'
return 'danger'
},
// 格式化日期时间
formatDateTime(dateTimeStr) {
if (!dateTimeStr) return '-'
try {
const date = new Date(dateTimeStr)
return date.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
})
} catch (error) {
return dateTimeStr
}
},
// 计算综合评分
getOverallScore(row) {
const scores = [
row.naturalnessScore,
row.coherenceScore,
row.fluencyScore,
row.advisorAggressivenessScore,
row.advisorConsistencyScore,
row.greetingReceptionScore,
row.brandIntroductionScore,
row.safetyIntroductionScore,
row.healthEnvironmentIntroductionScore,
row.technologyIntroductionScore,
row.customerNeedsUnderstandingScore,
row.budgetUnderstandingScore,
row.recommendationScore,
row.testDriveInvitationScore,
row.negotiationDealScore
]
const validScores = scores.filter(score => score && score > 0)
if (validScores.length === 0) return '0分'
const average = validScores.reduce((sum, score) => sum + score, 0) / validScores.length
return Math.round(average * 10) / 10 + '分'
},
// 获取综合评分标签类型
getOverallScoreType(row) {
const scores = [
row.naturalnessScore,
row.coherenceScore,
row.fluencyScore,
row.advisorAggressivenessScore,
row.advisorConsistencyScore,
row.greetingReceptionScore,
row.brandIntroductionScore,
row.safetyIntroductionScore,
row.healthEnvironmentIntroductionScore,
row.technologyIntroductionScore,
row.customerNeedsUnderstandingScore,
row.budgetUnderstandingScore,
row.recommendationScore,
row.testDriveInvitationScore,
row.negotiationDealScore
]
const validScores = scores.filter(score => score && score > 0)
if (validScores.length === 0) return 'info'
const average = validScores.reduce((sum, score) => sum + score, 0) / validScores.length
if (average >= 8) return 'success'
if (average >= 6) return 'warning'
return 'danger'
},
// 查询
handleQuery() {
this.queryParams.current = 1
@@ -316,10 +646,10 @@ export default {
this.queryParams = {
current: 1,
size: 10,
workflowId: '',
status: '',
salesName: '',
dealershipName: ''
salespersonName: '',
salespersonPhone: '',
dealerName: ''
}
this.getList()
},

View File

@@ -115,8 +115,6 @@
<el-table-column label="销售名称" prop="salesName" min-width="120" />
<el-table-column label="登录账号" prop="loginAccount" min-width="120" />
<el-table-column label="录音数" prop="totalRecordingHours" sortable min-width="100" />
<el-table-column label="平均录音时间(分钟)" prop="avgRecordingTime" sortable min-width="150" />
<el-table-column label="录音总时长(小时)" prop="totalRecordingTime" sortable min-width="150" />
<el-table-column label="所属项目" prop="projectName" min-width="150" />
<el-table-column label="所属分支机构" prop="dealershipName" min-width="150" />
<el-table-column label="角色" prop="role" min-width="100" />
@@ -131,10 +129,11 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<el-table-column label="操作" width="250" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-button type="text" size="small" @click="handleViewRecordings(scope.row)">查看录音</el-button>
<el-button type="text" size="small" @click="handleViewDimensionAnalysis(scope.row)">维度分析查看</el-button>
<el-button type="text" size="small" style="color: #F56C6C;" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
@@ -447,6 +446,36 @@ export default {
})
},
// 维度分析查看
handleViewDimensionAnalysis(row) {
console.log('维度分析查看', row)
// 检查是否有销售电话
if (!row.loginAccount || row.loginAccount.trim() === '') {
this.$message.warning('该销售暂无电话信息,无法查看维度分析')
return
}
console.log('跳转到维度分析页面,销售电话:', row.loginAccount)
// 跳转到维度分析列表页面,并传递销售电话参数
this.$router.push({
name: 'DimensionAnalysis',
query: {
salespersonPhone: row.loginAccount
}
}).catch(err => {
console.error('路由跳转失败:', err)
// 如果命名路由失败,使用路径路由
this.$router.push({
path: '/sales/dimension-analysis',
query: {
salespersonPhone: row.loginAccount
}
})
})
},
// 编辑
handleEdit(row) {
this.dialogTitle = '编辑销售'