业绩
@@ -55,9 +51,13 @@ import { ref, computed } from 'vue'
const props = defineProps({
groups: {
type: Array,
- required: true
+ default: () => []
},
seniorManagerData: {
+ type: Object,
+ default: () => null
+ },
+ groupList: {
type: Object,
default: () => ({})
}
@@ -77,11 +77,7 @@ const seniorManagers = computed(() => {
}))
}
return [
- { id: 'manager1', name: '张经理' },
- { id: 'manager2', name: '李经理' },
- { id: 'manager3', name: '王经理' },
- { id: 'manager4', name: '刘经理' },
- { id: 'manager5', name: '陈经理' }
+ { id: 'manager1', name: '张经理' }
]
})
@@ -90,9 +86,118 @@ const handleManagerChange = () => {
emit('manager-change', selectedManager.value)
}
+// 处理 groupList 数据
+const processedGroups = computed(() => {
+ console.log('GroupList data:', props.groupList)
+
+ if (!props.groupList || Object.keys(props.groupList).length === 0) {
+ return props.groups || []
+ }
+
+ const groups = []
+
+ // 处理 composition_transformation 数据
+ if (props.groupList.composition_transformation) {
+ console.log('Processing composition_transformation:', props.groupList.composition_transformation)
+ Object.entries(props.groupList.composition_transformation).forEach(([managerName, teamData]) => {
+ console.log('Manager:', managerName, 'TeamData:', teamData, 'Type:', typeof teamData)
+
+ // 处理嵌套对象结构
+ if (typeof teamData === 'object' && teamData !== null) {
+ Object.entries(teamData).forEach(([teamName, rate]) => {
+ // 解析团队名称,如"星耀三部-周毅"拆分为部门和经理
+ const parts = teamName.split('-')
+ let groupName, leaderName
+
+ if (parts.length >= 2) {
+ // 处理包含双横线的情况,如"巅峰三部--刘东洋"
+ if (teamName.includes('--')) {
+ const doubleDashParts = teamName.split('--')
+ groupName = doubleDashParts[0]
+ leaderName = doubleDashParts[1]
+ } else {
+ // 处理单横线的情况,如"星耀三部-周毅"
+ groupName = parts[0]
+ leaderName = parts.slice(1).join('-')
+ }
+ } else {
+ groupName = teamName
+ leaderName = managerName
+ }
+
+ groups.push({
+ id: `${managerName}-${teamName}`,
+ name: groupName,
+ leader: leaderName,
+ conversionRate: parseFloat(rate) || 0,
+ todayPerformance: 0, // 默认值
+ newClients: 0, // 默认值
+ deals: 0 // 默认值
+ })
+ })
+ } else if (typeof teamData === 'string') {
+ // 处理直接字符串值的情况(选择具体经理时可能出现)
+ // 解析团队名称,如"星耀三部-周毅"拆分为部门和经理
+ const parts = managerName.split('-')
+ let groupName, leaderName
+
+ if (parts.length >= 2) {
+ // 处理包含双横线的情况,如"巅峰三部--刘东洋"
+ if (managerName.includes('--')) {
+ const doubleDashParts = managerName.split('--')
+ groupName = doubleDashParts[0]
+ leaderName = doubleDashParts[1]
+ } else {
+ // 处理单横线的情况,如"星耀三部-周毅"
+ groupName = parts[0]
+ leaderName = parts.slice(1).join('-')
+ }
+ } else {
+ groupName = managerName
+ leaderName = managerName
+ }
+
+ groups.push({
+ id: `${managerName}`,
+ name: groupName,
+ leader: leaderName,
+ conversionRate: parseFloat(teamData) || 0,
+ todayPerformance: 0,
+ newClients: 0,
+ deals: 0
+ })
+ }
+ })
+ }
+
+ // 处理 formal_plural 数据
+ if (props.groupList.formal_plural) {
+ console.log('Processing formal_plural:', props.groupList.formal_plural)
+ Object.entries(props.groupList.formal_plural).forEach(([managerName, teamData]) => {
+ if (typeof teamData === 'object' && teamData !== null) {
+ Object.entries(teamData).forEach(([teamName, count]) => {
+ const existingGroup = groups.find(g => g.id === `${managerName}-${teamName}` || g.id === managerName)
+ if (existingGroup) {
+ existingGroup.newClients = count || 0
+ }
+ })
+ } else if (typeof teamData === 'number') {
+ // 处理直接数值的情况
+ const existingGroup = groups.find(g => g.id === managerName)
+ if (existingGroup) {
+ existingGroup.newClients = teamData || 0
+ }
+ }
+ })
+ }
+
+ console.log('Processed groups:', groups)
+ return groups
+})
+
// 按综合表现排序的组别
const sortedGroups = computed(() => {
- return [...props.groups].sort((a, b) => calculateScore(b) - calculateScore(a))
+ return [...processedGroups.value].sort((a, b) => calculateScore(b) - calculateScore(a))
})
// 计算综合分数
@@ -237,10 +342,33 @@ const getAlertIcon = (level) => {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
+ max-height: 400px;
+ overflow-y: auto;
+ padding-right: 8px;
+
+ /* 自定义滚动条样式 */
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: #f1f5f9;
+ border-radius: 3px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #cbd5e1;
+ border-radius: 3px;
+
+ &:hover {
+ background: #94a3b8;
+ }
+ }
&.compact {
grid-template-columns: repeat(1, 1fr);
gap: 0.75rem;
+ max-height: 500px;
.ranking-card {
padding: 0.75rem;
diff --git a/my-vue-app/src/views/secondTop/secondTop.vue b/my-vue-app/src/views/secondTop/secondTop.vue
index 3f1f3f3..6d9a155 100644
--- a/my-vue-app/src/views/secondTop/secondTop.vue
+++ b/my-vue-app/src/views/secondTop/secondTop.vue
@@ -51,7 +51,7 @@
-
+
@@ -327,23 +327,41 @@
const res = await getCenterAdvancedManagerList(hasParams ? params : undefined)
if (res.code === 200) {
seniorManagerList.value = res.data
- /**
- * "data": {
- "user_name": "刘瑞",
- "user_level": 4,
- "center_advanced_managers": [
- "陈盼良"
- ]
- }
- */
}
} catch (error) {
console.error('获取中心整体概览失败:', error)
}
}
-
-
-
+ // 综合排名---组别列表
+ const groupList = ref([])
+ async function CenterGroupList(selectedManagerId = 'all') {
+ const params = getRequestParams()
+ const hasParams = params.user_name
+
+ // 根据选择的经理构建请求参数
+ let requestParams = hasParams ? { ...params } : {}
+
+ if (selectedManagerId === 'all') {
+ requestParams.get_all = "true"
+ } else {
+ // 根据manager id找到对应的名字
+ const selectedManager = seniorManagerList.value?.center_advanced_managers?.find((name, index) => `manager_${index}` === selectedManagerId)
+ console.log('Found Manager:', selectedManager)
+ if (selectedManager) {
+ requestParams.team_leader_name = selectedManager
+ }
+ }
+ try {
+ const res = await getTeamRanking(requestParams)
+ console.log('API Response:', res)
+ if (res.code === 200) {
+ groupList.value = res.data
+ console.log('Updated groupList:', groupList.value)
+ }
+ } catch (error) {
+ console.error('获取团队排名失败:', error)
+ }
+ }
// 当前选中的组别,默认为第一个
const selectedGroup = ref(groups[0])
@@ -353,6 +371,11 @@
selectedGroup.value = group
}
+ // 处理高级经理选择变化
+ const handleManagerChange = (selectedManagerId) => {
+ CenterGroupList(selectedManagerId)
+ }
+
// 格式化货币
const formatCurrency = (value) => {
if (value >= 10000) {
@@ -387,7 +410,7 @@
await CenterCustomerType()
await CenterUrgentNeedToAddress()
await CenterSeniorManagerList()
-
+ await CenterGroupList('all') // 初始化加载全部高级经理数据
})