feat(导航): 添加双击导航功能并优化数据展示
- 在GroupComparison组件中添加双击部门跳转到经理页面的功能 - 在secondTop组件中添加双击成员跳转到销售页面的功能 - 优化topOne组件中客户迫切问题排行榜的数据格式转换 - 在RankingList组件中增加展示条目并添加排序功能 - 在SalesTimelineWithTaskList组件中替换alert弹窗为自定义模态框 - 优化secondTop组件路由跳转逻辑,避免重复请求
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
class="ranking-card"
|
||||
:class="getRankingClass(index)"
|
||||
@click="$emit('select-group', group)"
|
||||
@dblclick="navigateToManager(group)"
|
||||
>
|
||||
<div class="rank-badge">{{ index + 1 }}</div>
|
||||
<div class="group-info">
|
||||
@@ -47,6 +48,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, computed } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const props = defineProps({
|
||||
groups: {
|
||||
@@ -65,6 +67,9 @@ const props = defineProps({
|
||||
|
||||
const emit = defineEmits(['select-group', 'manager-change'])
|
||||
|
||||
// 路由实例
|
||||
const router = useRouter()
|
||||
|
||||
// 选中的高级经理
|
||||
const selectedManager = ref('all')
|
||||
|
||||
@@ -267,6 +272,17 @@ const getRankingClass = (index) => {
|
||||
return 'rank-other'
|
||||
}
|
||||
|
||||
// 处理部门双击事件,跳转到经理页面
|
||||
const navigateToManager = (group) => {
|
||||
router.push({
|
||||
path: '/senior-manager',
|
||||
query: {
|
||||
user_name: group.id,
|
||||
user_level: 3
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取趋势图标
|
||||
const getTrendIcon = (trend) => {
|
||||
const icons = {
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div>
|
||||
<div v-if="!isRouteNavigation">
|
||||
<!-- 用户下拉菜单 -->
|
||||
<UserDropdown />
|
||||
</div>
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
<div class="members-grid">
|
||||
<div v-for="member in selectedGroup.members" :key="member.id" class="member-card"
|
||||
:class="getStatusClass(member.status)">
|
||||
:class="getStatusClass(member.status)" @dblclick="navigateToSale(member.name)">
|
||||
<div class="member-header">
|
||||
<div class="member-info">
|
||||
<h3 class="member-name">{{ member.name }}</h3>
|
||||
@@ -250,7 +250,7 @@ const centerData = ref({
|
||||
stage.endDate = stageEndDate.toISOString().split('T')[0];
|
||||
});
|
||||
};
|
||||
|
||||
// 保存营期
|
||||
const saveCampSettings = async () => {
|
||||
recalculateStageDates();
|
||||
|
||||
@@ -358,9 +358,6 @@ const centerData = ref({
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 组别数据
|
||||
const groups = ref([])
|
||||
// loading 状态
|
||||
@@ -692,10 +689,32 @@ const conversionRateVsAverage = ref({})
|
||||
}
|
||||
return statusMap[status] || '未知'
|
||||
}
|
||||
|
||||
// 双击成员卡片跳转到销售页面
|
||||
const navigateToSale = (userName) => {
|
||||
router.push({
|
||||
path: '/sale',
|
||||
query: {
|
||||
user_name: userName,
|
||||
user_level: '1'
|
||||
}
|
||||
})
|
||||
}
|
||||
onMounted(async () => {
|
||||
try {
|
||||
isLoading.value = true
|
||||
await CenterCampPeriodAdmin()
|
||||
|
||||
// 判断页面进入方式:如果是通过路由跳转进入(URL中有user_name和user_level参数),则不发送CenterCampPeriodAdmin请求
|
||||
// 如果是直接登录进入页面,则发送请求
|
||||
const currentQuery = router.currentRoute.value.query
|
||||
const isFromRoute = currentQuery.fromRoute ||
|
||||
sessionStorage.getItem('fromRoute') ||
|
||||
(currentQuery.user_name && currentQuery.user_level)
|
||||
|
||||
if (!isFromRoute) {
|
||||
// 直接登录进入页面时才调用CenterCampPeriodAdmin
|
||||
await CenterCampPeriodAdmin()
|
||||
}
|
||||
// CenterCampPeriodAdmin中已经调用了recalculateStageDates,这里不需要重复调用
|
||||
await CenterOverallCenterPerformance()
|
||||
await CenterTotalGroupCount()
|
||||
|
||||
Reference in New Issue
Block a user