查看详情
@@ -103,29 +232,97 @@
>
- {{ currentRecord.workflowId }}
{{ currentRecord.status }}
- {{ currentRecord.salesName || '-' }}
- {{ currentRecord.salesPhone || '-' }}
- {{ currentRecord.dealershipName || '-' }}
- {{ currentRecord.dealershipPhone || '-' }}
- {{ currentRecord.naturalnessScore }}
- {{ currentRecord.coherenceScore }}
- {{ currentRecord.fluencyScore }}
- {{ currentRecord.advisorAggressivenessScore }}
- {{ currentRecord.advisorConsistencyScore }}
- {{ currentRecord.greetingReceptionScore }}
- {{ currentRecord.brandIntroductionScore }}
- {{ currentRecord.customerNeedsUnderstandingScore }}
- {{ currentRecord.budgetUnderstandingScore }}
- {{ currentRecord.recommendationScore }}
- {{ currentRecord.safetyIntroductionScore }}
- {{ currentRecord.healthEnvironmentIntroductionScore }}
- {{ currentRecord.technologyIntroductionScore }}
- {{ currentRecord.testDriveInvitationScore }}
- {{ currentRecord.negotiationDealScore }}
+ {{ currentRecord.salespersonName || currentRecord.salesName || '-' }}
+ {{ currentRecord.salespersonPhone || currentRecord.salesPhone || '-' }}
+ {{ currentRecord.dealerName || currentRecord.dealershipName || '-' }}
+ {{ currentRecord.dealerPhone || currentRecord.dealershipPhone || '-' }}
+
+
+
+ {{ currentRecord.naturalnessScore || 0 }}分
+
+
+
+
+ {{ currentRecord.coherenceScore || 0 }}分
+
+
+
+
+ {{ currentRecord.fluencyScore || 0 }}分
+
+
+
+
+
+
+ {{ currentRecord.advisorAggressivenessScore || 0 }}分
+
+
+
+
+ {{ currentRecord.advisorConsistencyScore || 0 }}分
+
+
+
+
+ {{ currentRecord.greetingReceptionScore || 0 }}分
+
+
+
+
+
+
+ {{ currentRecord.brandIntroductionScore || 0 }}分
+
+
+
+
+ {{ currentRecord.safetyIntroductionScore || 0 }}分
+
+
+
+
+ {{ currentRecord.healthEnvironmentIntroductionScore || 0 }}分
+
+
+
+
+ {{ currentRecord.technologyIntroductionScore || 0 }}分
+
+
+
+
+
+
+ {{ currentRecord.customerNeedsUnderstandingScore || 0 }}分
+
+
+
+
+ {{ currentRecord.budgetUnderstandingScore || 0 }}分
+
+
+
+
+ {{ currentRecord.recommendationScore || 0 }}分
+
+
+
+
+
+
+ {{ currentRecord.testDriveInvitationScore || 0 }}分
+
+
+
+
+ {{ currentRecord.negotiationDealScore || 0 }}分
+
+
{{ currentRecord.elapsedTime }}
{{ currentRecord.createdAt }}
@@ -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()
},
diff --git a/src/views/sales/index.vue b/src/views/sales/index.vue
index b26c3ce..e7205ba 100644
--- a/src/views/sales/index.vue
+++ b/src/views/sales/index.vue
@@ -115,8 +115,6 @@
-
-
@@ -131,10 +129,11 @@
-
+
编辑
查看录音
+ 维度分析查看
删除
@@ -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 = '编辑销售'