销售管理页面跳转到 维度分析
This commit is contained in:
@@ -9,12 +9,10 @@ export function getAudioList(params) {
|
|||||||
current: params.current || 1,
|
current: params.current || 1,
|
||||||
size: params.size || 20,
|
size: params.size || 20,
|
||||||
recordingName: params.recordingName,
|
recordingName: params.recordingName,
|
||||||
customerPhone: params.customerPhone,
|
|
||||||
dealershipId: params.dealershipId,
|
dealershipId: params.dealershipId,
|
||||||
intentionLevel: params.intentionLevel,
|
intentionLevel: params.intentionLevel,
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
salesPhone: params.salesPhone,
|
salesPhone: params.salesPhone,
|
||||||
customerName: params.customerName,
|
|
||||||
editStatus: params.editStatus,
|
editStatus: params.editStatus,
|
||||||
maxDuration: params.maxDuration,
|
maxDuration: params.maxDuration,
|
||||||
minDuration: params.minDuration,
|
minDuration: params.minDuration,
|
||||||
|
|||||||
@@ -86,10 +86,10 @@ export function getTopSalesPage(params) {
|
|||||||
params: {
|
params: {
|
||||||
current: params.current || 1,
|
current: params.current || 1,
|
||||||
size: params.size || 10,
|
size: params.size || 10,
|
||||||
workflowId: params.workflowId,
|
|
||||||
status: params.status,
|
status: params.status,
|
||||||
salesName: params.salesName,
|
salespersonName: params.salespersonName,
|
||||||
dealershipName: params.dealershipName
|
salespersonPhone: params.salespersonPhone,
|
||||||
|
dealerName: params.dealerName
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,24 +45,6 @@
|
|||||||
</el-form-item>
|
</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-form-item label="编辑状态">
|
||||||
<el-select v-model="queryParams.editStatus" placeholder="请选择编辑状态" clearable>
|
<el-select v-model="queryParams.editStatus" placeholder="请选择编辑状态" clearable>
|
||||||
<el-option label="已编辑" value="1" />
|
<el-option label="已编辑" value="1" />
|
||||||
@@ -698,7 +680,8 @@
|
|||||||
<div class="analysis-header">
|
<div class="analysis-header">
|
||||||
<h3>{{ currentAnalysisRow.recordingName }}</h3>
|
<h3>{{ currentAnalysisRow.recordingName }}</h3>
|
||||||
<p><strong>客户:</strong>{{ currentAnalysisRow.customerName }} ({{ currentAnalysisRow.customerPhone }})</p>
|
<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>
|
<p><strong>录音时间:</strong>{{ currentAnalysisRow.recordingTime }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -709,15 +692,15 @@
|
|||||||
<div class="score-grid">
|
<div class="score-grid">
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">自然度</span>
|
<span class="score-label">自然度</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.naturalnessScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.naturalnessScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">连贯性</span>
|
<span class="score-label">连贯性</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.coherenceScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.coherenceScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">流畅度</span>
|
<span class="score-label">流畅度</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.fluencyScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.fluencyScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -728,15 +711,15 @@
|
|||||||
<div class="score-grid">
|
<div class="score-grid">
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">主动性</span>
|
<span class="score-label">主动性</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.advisorAggressivenessScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.advisorAggressivenessScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">一致性</span>
|
<span class="score-label">一致性</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.advisorConsistencyScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.advisorConsistencyScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">接待问候</span>
|
<span class="score-label">接待问候</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.greetingReceptionScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.greetingReceptionScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -747,19 +730,19 @@
|
|||||||
<div class="score-grid">
|
<div class="score-grid">
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">品牌介绍</span>
|
<span class="score-label">品牌介绍</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.brandIntroductionScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.brandIntroductionScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">安全介绍</span>
|
<span class="score-label">安全介绍</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.safetyIntroductionScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.safetyIntroductionScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">健康环保</span>
|
<span class="score-label">健康环保</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.healthEnvironmentIntroductionScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.healthEnvironmentIntroductionScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">技术介绍</span>
|
<span class="score-label">技术介绍</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.technologyIntroductionScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.technologyIntroductionScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -770,15 +753,15 @@
|
|||||||
<div class="score-grid">
|
<div class="score-grid">
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">需求理解</span>
|
<span class="score-label">需求理解</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.customerNeedsUnderstandingScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.customerNeedsUnderstandingScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">预算理解</span>
|
<span class="score-label">预算理解</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.budgetUnderstandingScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.budgetUnderstandingScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">推荐匹配</span>
|
<span class="score-label">推荐匹配</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.recommendationScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.recommendationScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -789,11 +772,11 @@
|
|||||||
<div class="score-grid">
|
<div class="score-grid">
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">试驾邀请</span>
|
<span class="score-label">试驾邀请</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.testDriveInvitationScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.testDriveInvitationScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="score-item">
|
<div class="score-item">
|
||||||
<span class="score-label">谈判成交</span>
|
<span class="score-label">谈判成交</span>
|
||||||
<span class="score-value">{{ dimensionAnalysisResult.negotiationDealScore }}分</span>
|
<span class="score-value">{{ dimensionAnalysisResult.negotiationDealScore || '--' }}分</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -804,8 +787,8 @@
|
|||||||
<div class="info-grid">
|
<div class="info-grid">
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">状态</span>
|
<span class="info-label">状态</span>
|
||||||
<el-tag :type="dimensionAnalysisResult.status === 'succeeded' ? 'success' : 'danger'">
|
<el-tag :type="dimensionAnalysisResult.status === 'success' ? 'success' : 'danger'">
|
||||||
{{ dimensionAnalysisResult.status === 'succeeded' ? '成功' : '失败' }}
|
{{ dimensionAnalysisResult.status === 'success' ? '成功' : '失败' }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
@@ -1023,8 +1006,6 @@ export default {
|
|||||||
dealershipId: '',
|
dealershipId: '',
|
||||||
projectId: '',
|
projectId: '',
|
||||||
salesPhone: '',
|
salesPhone: '',
|
||||||
customerName: '',
|
|
||||||
customerPhone: '',
|
|
||||||
editStatus: '',
|
editStatus: '',
|
||||||
maxDuration: '',
|
maxDuration: '',
|
||||||
minDuration: '',
|
minDuration: '',
|
||||||
@@ -1320,8 +1301,6 @@ export default {
|
|||||||
dealershipId: '',
|
dealershipId: '',
|
||||||
projectId: '',
|
projectId: '',
|
||||||
salesPhone: '',
|
salesPhone: '',
|
||||||
customerName: '',
|
|
||||||
customerPhone: '',
|
|
||||||
editStatus: '',
|
editStatus: '',
|
||||||
maxDuration: '',
|
maxDuration: '',
|
||||||
minDuration: '',
|
minDuration: '',
|
||||||
|
|||||||
@@ -3,15 +3,6 @@
|
|||||||
<!-- 查询条件区域 -->
|
<!-- 查询条件区域 -->
|
||||||
<el-card class="filter-container" shadow="never">
|
<el-card class="filter-container" shadow="never">
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="100px">
|
<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-form-item label="状态">
|
||||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||||
<el-option label="全部" value="" />
|
<el-option label="全部" value="" />
|
||||||
@@ -23,16 +14,25 @@
|
|||||||
|
|
||||||
<el-form-item label="销售人员">
|
<el-form-item label="销售人员">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.salesName"
|
v-model="queryParams.salespersonName"
|
||||||
placeholder="请输入销售人员姓名"
|
placeholder="请输入销售人员姓名"
|
||||||
clearable
|
clearable
|
||||||
style="width: 200px"
|
style="width: 200px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</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-form-item label="经销商">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.dealershipName"
|
v-model="queryParams.dealerName"
|
||||||
placeholder="请输入经销商名称"
|
placeholder="请输入经销商名称"
|
||||||
clearable
|
clearable
|
||||||
style="width: 200px"
|
style="width: 200px"
|
||||||
@@ -56,11 +56,10 @@
|
|||||||
>
|
>
|
||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column label="序号" type="index" width="50" />
|
<el-table-column label="序号" type="index" width="50" />
|
||||||
<el-table-column label="工作流ID" prop="workflowId" min-width="150" />
|
<el-table-column label="销售人员" prop="salespersonName" min-width="120" />
|
||||||
<el-table-column label="销售人员" prop="salesName" min-width="120" />
|
<el-table-column label="销售电话" prop="salespersonPhone" min-width="120" />
|
||||||
<el-table-column label="销售电话" prop="salesPhone" min-width="120" />
|
<el-table-column label="经销商" prop="dealerName" min-width="150" />
|
||||||
<el-table-column label="经销商" prop="dealershipName" min-width="150" />
|
<el-table-column label="经销商电话" prop="dealerPhone" min-width="120" />
|
||||||
<el-table-column label="经销商电话" prop="dealershipPhone" min-width="120" />
|
|
||||||
<el-table-column label="状态" prop="status" min-width="100">
|
<el-table-column label="状态" prop="status" min-width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag :type="getStatusType(scope.row.status)">
|
<el-tag :type="getStatusType(scope.row.status)">
|
||||||
@@ -68,11 +67,141 @@
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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="naturalnessScore" min-width="80" align="center">
|
||||||
<el-table-column label="流畅度评分" prop="fluencyScore" min-width="120" />
|
<template slot-scope="scope">
|
||||||
<el-table-column label="总用时(秒)" prop="elapsedTime" min-width="120" />
|
<el-tag :type="getScoreType(scope.row.naturalnessScore)" size="mini">
|
||||||
<el-table-column label="创建时间" prop="createdAt" min-width="150" />
|
{{ 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">
|
<el-table-column label="操作" width="200" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" size="small" @click="handleView(scope.row)">查看详情</el-button>
|
<el-button type="text" size="small" @click="handleView(scope.row)">查看详情</el-button>
|
||||||
@@ -103,29 +232,97 @@
|
|||||||
>
|
>
|
||||||
<div v-if="currentRecord">
|
<div v-if="currentRecord">
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="工作流ID">{{ currentRecord.workflowId }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="状态">
|
<el-descriptions-item label="状态">
|
||||||
<el-tag :type="getStatusType(currentRecord.status)">{{ currentRecord.status }}</el-tag>
|
<el-tag :type="getStatusType(currentRecord.status)">{{ currentRecord.status }}</el-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="销售人员">{{ currentRecord.salesName || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="销售人员">{{ currentRecord.salespersonName || currentRecord.salesName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="销售电话">{{ currentRecord.salesPhone || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="销售电话">{{ currentRecord.salespersonPhone || currentRecord.salesPhone || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="经销商">{{ currentRecord.dealershipName || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="经销商">{{ currentRecord.dealerName || currentRecord.dealershipName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="经销商电话">{{ currentRecord.dealershipPhone || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="经销商电话">{{ currentRecord.dealerPhone || currentRecord.dealershipPhone || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="自然度评分">{{ currentRecord.naturalnessScore }}</el-descriptions-item>
|
<!-- 基础沟通能力 (3个维度) -->
|
||||||
<el-descriptions-item label="连贯性评分">{{ currentRecord.coherenceScore }}</el-descriptions-item>
|
<el-descriptions-item label="自然度评分">
|
||||||
<el-descriptions-item label="流畅度评分">{{ currentRecord.fluencyScore }}</el-descriptions-item>
|
<el-tag :type="getScoreType(currentRecord.naturalnessScore)" size="small">
|
||||||
<el-descriptions-item label="顾问积极性评分">{{ currentRecord.advisorAggressivenessScore }}</el-descriptions-item>
|
{{ currentRecord.naturalnessScore || 0 }}分
|
||||||
<el-descriptions-item label="顾问一致性评分">{{ currentRecord.advisorConsistencyScore }}</el-descriptions-item>
|
</el-tag>
|
||||||
<el-descriptions-item label="问候接待评分">{{ currentRecord.greetingReceptionScore }}</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="品牌介绍评分">{{ currentRecord.brandIntroductionScore }}</el-descriptions-item>
|
<el-descriptions-item label="连贯性评分">
|
||||||
<el-descriptions-item label="客户需求理解评分">{{ currentRecord.customerNeedsUnderstandingScore }}</el-descriptions-item>
|
<el-tag :type="getScoreType(currentRecord.coherenceScore)" size="small">
|
||||||
<el-descriptions-item label="预算理解评分">{{ currentRecord.budgetUnderstandingScore }}</el-descriptions-item>
|
{{ currentRecord.coherenceScore || 0 }}分
|
||||||
<el-descriptions-item label="推荐评分">{{ currentRecord.recommendationScore }}</el-descriptions-item>
|
</el-tag>
|
||||||
<el-descriptions-item label="安全介绍评分">{{ currentRecord.safetyIntroductionScore }}</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="健康环境介绍评分">{{ currentRecord.healthEnvironmentIntroductionScore }}</el-descriptions-item>
|
<el-descriptions-item label="流畅度评分">
|
||||||
<el-descriptions-item label="技术介绍评分">{{ currentRecord.technologyIntroductionScore }}</el-descriptions-item>
|
<el-tag :type="getScoreType(currentRecord.fluencyScore)" size="small">
|
||||||
<el-descriptions-item label="试驾邀请评分">{{ currentRecord.testDriveInvitationScore }}</el-descriptions-item>
|
{{ currentRecord.fluencyScore || 0 }}分
|
||||||
<el-descriptions-item label="谈判成交评分">{{ currentRecord.negotiationDealScore }}</el-descriptions-item>
|
</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.elapsedTime }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="创建时间">{{ currentRecord.createdAt }}</el-descriptions-item>
|
<el-descriptions-item label="创建时间">{{ currentRecord.createdAt }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
@@ -163,18 +360,47 @@ export default {
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
current: 1,
|
current: 1,
|
||||||
size: 10,
|
size: 10,
|
||||||
workflowId: '',
|
|
||||||
status: '',
|
status: '',
|
||||||
salesName: '',
|
salespersonName: '',
|
||||||
dealershipName: ''
|
salespersonPhone: '',
|
||||||
|
dealerName: ''
|
||||||
},
|
},
|
||||||
// 详情对话框
|
// 详情对话框
|
||||||
detailDialogVisible: false,
|
detailDialogVisible: false,
|
||||||
currentRecord: null
|
currentRecord: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
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()
|
this.getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
// 检查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: {
|
methods: {
|
||||||
// 获取列表数据
|
// 获取列表数据
|
||||||
@@ -189,7 +415,29 @@ 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)
|
console.log('TopSales列表响应:', response)
|
||||||
|
|
||||||
// 检查响应结构
|
// 检查响应结构
|
||||||
@@ -304,6 +552,88 @@ export default {
|
|||||||
return statusMap[status] || 'info'
|
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() {
|
handleQuery() {
|
||||||
this.queryParams.current = 1
|
this.queryParams.current = 1
|
||||||
@@ -316,10 +646,10 @@ export default {
|
|||||||
this.queryParams = {
|
this.queryParams = {
|
||||||
current: 1,
|
current: 1,
|
||||||
size: 10,
|
size: 10,
|
||||||
workflowId: '',
|
|
||||||
status: '',
|
status: '',
|
||||||
salesName: '',
|
salespersonName: '',
|
||||||
dealershipName: ''
|
salespersonPhone: '',
|
||||||
|
dealerName: ''
|
||||||
}
|
}
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -115,8 +115,6 @@
|
|||||||
<el-table-column label="销售名称" prop="salesName" min-width="120" />
|
<el-table-column label="销售名称" prop="salesName" min-width="120" />
|
||||||
<el-table-column label="登录账号" prop="loginAccount" 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="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="projectName" min-width="150" />
|
||||||
<el-table-column label="所属分支机构" prop="dealershipName" min-width="150" />
|
<el-table-column label="所属分支机构" prop="dealershipName" min-width="150" />
|
||||||
<el-table-column label="角色" prop="role" min-width="100" />
|
<el-table-column label="角色" prop="role" min-width="100" />
|
||||||
@@ -131,10 +129,11 @@
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="200" fixed="right">
|
<el-table-column label="操作" width="250" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
<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="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>
|
<el-button type="text" size="small" style="color: #F56C6C;" @click="handleDelete(scope.row)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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) {
|
handleEdit(row) {
|
||||||
this.dialogTitle = '编辑销售'
|
this.dialogTitle = '编辑销售'
|
||||||
|
|||||||
Reference in New Issue
Block a user