销售管理页面跳转到 维度分析
This commit is contained in:
@@ -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: '',
|
||||
|
||||
@@ -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()
|
||||
},
|
||||
|
||||
@@ -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 = '编辑销售'
|
||||
|
||||
Reference in New Issue
Block a user