feat(数据展示): 更新转化率组件以支持新数据结构并优化表格列
- 移除secondTop.vue中过时的注释数据 - 修改DetailedDataTable.vue表格列名以匹配新指标 - GroupRanking组件支持显示转化人数并兼容新旧数据结构
This commit is contained in:
@@ -30,7 +30,7 @@
|
|||||||
<div
|
<div
|
||||||
class="bar team-bar"
|
class="bar team-bar"
|
||||||
:style="{ height: (stage.teamRate * 2.4) + 'px' }"
|
:style="{ height: (stage.teamRate * 2.4) + 'px' }"
|
||||||
:title="`本团队: ${stage.teamRate}%`"
|
:title="`本团队: ${stage.teamRate}%(${stage.teamCount}人)`"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bar-container">
|
<div class="bar-container">
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<div
|
<div
|
||||||
class="bar company-bar"
|
class="bar company-bar"
|
||||||
:style="{ height: (stage.companyRate * 2.4) + 'px' }"
|
:style="{ height: (stage.companyRate * 2.4) + 'px' }"
|
||||||
:title="`公司平均: ${stage.companyRate}%`"
|
:title="`公司平均: ${stage.companyRate}%(${stage.companyCount}人)`"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -72,79 +72,58 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 转化率数据
|
// 转化率数据(含人数)
|
||||||
const conversionStages = computed(() => {
|
const conversionStages = computed(() => {
|
||||||
// 如果有传入的转化率数据,使用传入的数据
|
// 兼容新的数据结构:
|
||||||
if (props.conversionData && props.conversionData.conversion_rate && props.conversionData.company_conversion_rate) {
|
// {
|
||||||
const userRates = props.conversionData.conversion_rate
|
// conversion_rate_and_count: {
|
||||||
const companyRates = props.conversionData.company_conversion_rate
|
// center_conversion_rate: { "加微": "20.23%", ... },
|
||||||
|
// center_conversion_count: { "加微": 53, ... }
|
||||||
|
// },
|
||||||
|
// company_conversion_rate_and_count: {
|
||||||
|
// company_conversion_rate: { "加微": "8.44%", ... },
|
||||||
|
// company_conversion_count: { "加微": 558, ... }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (
|
||||||
|
props.conversionData &&
|
||||||
|
props.conversionData.conversion_rate_and_count &&
|
||||||
|
props.conversionData.company_conversion_rate_and_count
|
||||||
|
) {
|
||||||
|
const user = props.conversionData.conversion_rate_and_count
|
||||||
|
const company = props.conversionData.company_conversion_rate_and_count
|
||||||
|
|
||||||
return [
|
const userRates = user.center_conversion_rate || {}
|
||||||
{
|
const userCounts = user.center_conversion_count || {}
|
||||||
name: '加微',
|
const companyRates = company.company_conversion_rate || {}
|
||||||
teamRate: parseFloat(userRates['加微']) || 0,
|
const companyCounts = company.company_conversion_count || {}
|
||||||
companyRate: parseFloat(companyRates['加微']) || 0
|
|
||||||
},
|
const toNumber = (v) => {
|
||||||
{
|
if (v === null || v === undefined) return 0
|
||||||
name: '填表',
|
if (typeof v === 'number') return v
|
||||||
teamRate: parseFloat(userRates['填表']) || 0,
|
// v 可能是 "20.23%" 这样的字符串
|
||||||
companyRate: parseFloat(companyRates['填表']) || 0
|
const n = parseFloat(String(v))
|
||||||
},
|
return isNaN(n) ? 0 : n
|
||||||
{
|
}
|
||||||
name: '通话',
|
|
||||||
teamRate: parseFloat(userRates['通话']) || 0,
|
const stages = ['加微', '填表', '通话', '到课', '付定金', '付费']
|
||||||
companyRate: parseFloat(companyRates['通话']) || 0
|
return stages.map(name => ({
|
||||||
},
|
name,
|
||||||
{
|
teamRate: toNumber(userRates[name]),
|
||||||
name: '首课',
|
teamCount: toNumber(userCounts[name]),
|
||||||
teamRate: parseFloat(userRates['首课']) || 0,
|
companyRate: toNumber(companyRates[name]),
|
||||||
companyRate: parseFloat(companyRates['首课']) || 0
|
companyCount: toNumber(companyCounts[name])
|
||||||
},
|
}))
|
||||||
{
|
|
||||||
name: '三课',
|
|
||||||
teamRate: parseFloat(userRates['三课']) || 0,
|
|
||||||
companyRate: parseFloat(companyRates['三课']) || 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '付费',
|
|
||||||
teamRate: parseFloat(userRates['付费']) || 0,
|
|
||||||
companyRate: parseFloat(companyRates['付费']) || 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 默认数据
|
// 默认数据(名称对齐新接口)
|
||||||
return [
|
return [
|
||||||
{
|
{ name: '加微', teamRate: 80, companyRate: 85, teamCount: 0, companyCount: 0 },
|
||||||
name: '加微',
|
{ name: '填表', teamRate: 90, companyRate: 92, teamCount: 0, companyCount: 0 },
|
||||||
teamRate: 80,
|
{ name: '通话', teamRate: 95, companyRate: 95, teamCount: 0, companyCount: 0 },
|
||||||
companyRate: 85
|
{ name: '到课', teamRate: 60, companyRate: 65, teamCount: 0, companyCount: 0 },
|
||||||
},
|
{ name: '付定金', teamRate: 18, companyRate: 20, teamCount: 0, companyCount: 0 },
|
||||||
{
|
{ name: '付费', teamRate: 15, companyRate: 20, teamCount: 0, companyCount: 0 }
|
||||||
name: '填表',
|
|
||||||
teamRate: 90,
|
|
||||||
companyRate: 92
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '通话',
|
|
||||||
teamRate: 95,
|
|
||||||
companyRate: 95
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '首课',
|
|
||||||
teamRate: 60,
|
|
||||||
companyRate: 65
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '三课',
|
|
||||||
teamRate: 85,
|
|
||||||
companyRate: 88
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '付费',
|
|
||||||
teamRate: 15,
|
|
||||||
companyRate: 20
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -328,28 +328,6 @@ const conversionRateVsAverage = ref({})
|
|||||||
const res = await getConversionRateVsAverage(hasParams ? params : undefined)
|
const res = await getConversionRateVsAverage(hasParams ? params : undefined)
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
conversionRateVsAverage.value = res.data
|
conversionRateVsAverage.value = res.data
|
||||||
/**
|
|
||||||
* "data": {
|
|
||||||
"user_name": "刘瑞",
|
|
||||||
"user_level": 4,
|
|
||||||
"conversion_rate": {
|
|
||||||
"加微": "21.72%",
|
|
||||||
"填表": "21.72%",
|
|
||||||
"通话": "0.00%",
|
|
||||||
"首课": "37.08%",
|
|
||||||
"三课": "14.61%",
|
|
||||||
"付费": "1.87%"
|
|
||||||
},
|
|
||||||
"company_conversion_rate": {
|
|
||||||
"加微": "12.49%",
|
|
||||||
"填表": "12.49%",
|
|
||||||
"通话": "0.00%",
|
|
||||||
"首课": "39.07%",
|
|
||||||
"三课": "24.27%",
|
|
||||||
"付费": "1.27%"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取中心整体概览失败:', error)
|
console.error('获取中心整体概览失败:', error)
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>人员</th>
|
<th>人员</th>
|
||||||
<th @click="sortBy('dealRate')" class="sortable">成交率 <span class="sort-icon" :class="{ active: sortField === 'dealRate' }">{{ sortOrder === 'desc' ? '↓' : '↑' }}</span></th>
|
<th @click="sortBy('dealRate')" class="sortable">成交率 <span class="sort-icon" :class="{ active: sortField === 'dealRate' }">{{ sortOrder === 'desc' ? '↓' : '↑' }}</span></th>
|
||||||
<th @click="sortBy('callDuration')" class="sortable">通话时长 <span class="sort-icon" :class="{ active: sortField === 'callDuration' }">{{ sortOrder === 'desc' ? '↓' : '↑' }}</span></th>
|
<th @click="sortBy('callDuration')" class="sortable">成交单数 <span class="sort-icon" :class="{ active: sortField === 'callDuration' }">{{ sortOrder === 'desc' ? '↓' : '↑' }}</span></th>
|
||||||
<th>通话次数</th>
|
<th>加微率</th>
|
||||||
<th>成交金额</th>
|
<th>入群率</th>
|
||||||
<th>部门</th>
|
<th>表单填写率</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
Reference in New Issue
Block a user