From 57069e3a01dea2a70ff9818efe187ff9290d4ab2 Mon Sep 17 00:00:00 2001
From: lbw_9527443 <780139497@qq.com>
Date: Mon, 18 Aug 2025 13:27:03 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E8=A1=A8=E6=A0=BC):=20?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AF=A6=E7=BB=86=E6=95=B0=E6=8D=AE=E8=A1=A8?=
=?UTF-8?q?=E6=A0=BC=E7=9A=84=E7=AD=9B=E9=80=89=E5=92=8C=E6=8E=92=E5=BA=8F?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加筛选器变化事件处理,支持按中心领导、团队领导和组长筛选数据
- 修改表格排序逻辑以适配新数据结构
- 更新表格显示字段以匹配后端返回的数据格式
- 移除不再需要的格式化函数
---
.../topOne/components/DetailedDataTable.vue | 110 +++++++++++-------
my-vue-app/src/views/topOne/topone.vue | 81 ++++++++++++-
2 files changed, 144 insertions(+), 47 deletions(-)
diff --git a/my-vue-app/src/views/topOne/components/DetailedDataTable.vue b/my-vue-app/src/views/topOne/components/DetailedDataTable.vue
index 2863a90..9fac607 100644
--- a/my-vue-app/src/views/topOne/components/DetailedDataTable.vue
+++ b/my-vue-app/src/views/topOne/components/DetailedDataTable.vue
@@ -25,14 +25,14 @@
-
-
-
+
+
+
@@ -41,34 +41,36 @@
| 人员 |
- 成交率 {{ sortOrder === 'desc' ? '↓' : '↑' }} |
- 成交单数 {{ sortOrder === 'desc' ? '↓' : '↑' }} |
+ 成交率 {{ sortOrder === 'desc' ? '↓' : '↑' }} |
+ 成交单数 {{ sortOrder === 'desc' ? '↓' : '↑' }} |
加微率 |
入群率 |
表单填写率 |
-
+
+
+
+
- {{ person.name.charAt(0) }}
-
- {{ person.name }}
- {{ person.position }}
+ {{ person.leader_name?.charAt(0) }}
+
+ {{ person.leader_name}}
|
- {{ person.dealRate }}%
-
+ {{ person.conversion_rate }}
+
|
- {{ formatDuration(person.callDuration) }} |
- {{ person.callCount }}次 |
- ¥{{ person.dealAmount.toLocaleString() }} |
- {{ person.department }} |
+ {{ person.total_deals }} |
+ {{ person.plus_v_rate }} |
+ {{ person.group_rate }} |
+ {{ person.form_filling_rate }} |
@@ -85,10 +87,10 @@ const props = defineProps({
selectedPerson: { type: Object, default: null },
levelTree: { type: Object, default: () => ({}) }
});
-defineEmits(['update:selectedPerson']);
+const emit = defineEmits(['update:selectedPerson', 'filter-change']);
const filters = ref({ centerLeader: '', advancedManager: '', manager: '', dealStatus: '' });
-const sortField = ref('dealRate');
+const sortField = ref('conversion_rate');
const sortOrder = ref('desc');
const centerLeaders = computed(() => {
@@ -107,25 +109,54 @@ const centerLeaders = computed(() => {
return manager ? manager.managers || [] : [];
});
-const filteredTableData = computed(() => {
- let filtered = props.tableData;
- if (filters.value.centerLeader) filtered = filtered.filter(item => item.centerLeader === filters.value.centerLeader);
- if (filters.value.advancedManager) filtered = filtered.filter(item => item.advancedManager === filters.value.advancedManager);
- if (filters.value.manager) filtered = filtered.filter(item => item.manager === filters.value.manager);
- return filtered.sort((a, b) => {
- const aValue = a[sortField.value], bValue = b[sortField.value];
+// 显示表格数据(直接使用API返回的数据)
+const displayTableData = computed(() => {
+ if (!props.tableData || !Array.isArray(props.tableData)) return [];
+
+ return props.tableData.sort((a, b) => {
+ let aValue = a[sortField.value];
+ let bValue = b[sortField.value];
+
+ // 处理百分比字符串
+ if (typeof aValue === 'string' && aValue.includes('%')) {
+ aValue = parseFloat(aValue.replace('%', ''));
+ }
+ if (typeof bValue === 'string' && bValue.includes('%')) {
+ bValue = parseFloat(bValue.replace('%', ''));
+ }
+
return sortOrder.value === 'desc' ? bValue - aValue : aValue - bValue;
});
});
const onCenterLeaderChange = () => {
- filters.value.advancedManager = '';
- filters.value.manager = '';
-};
-
-const onAdvancedManagerChange = () => {
- filters.value.manager = '';
-};
+ filters.value.advancedManager = '';
+ filters.value.manager = '';
+ emitFilterChange();
+ };
+
+ const onAdvancedManagerChange = () => {
+ filters.value.manager = '';
+ emitFilterChange();
+ };
+
+ const onManagerChange = () => {
+ emitFilterChange();
+ };
+
+ const emitFilterChange = () => {
+ const filterParams = {};
+ if (filters.value.centerLeader) {
+ filterParams.center_leader = filters.value.centerLeader;
+ }
+ if (filters.value.advancedManager) {
+ filterParams.team_leader = filters.value.advancedManager;
+ }
+ if (filters.value.manager) {
+ filterParams.group_leader = filters.value.manager;
+ }
+ emit('filter-change', filterParams);
+ };
const sortBy = (field) => {
if (sortField.value === field) sortOrder.value = sortOrder.value === 'desc' ? 'asc' : 'desc';
@@ -137,10 +168,7 @@ const getRateClass = (rate) => {
const getRateColor = (rate) => {
if (rate >= 80) return '#4CAF50'; if (rate >= 60) return '#FF9800'; return '#f44336';
};
-const formatDuration = (minutes) => {
- const h = Math.floor(minutes / 60), m = minutes % 60;
- return h > 0 ? `${h}h${m}m` : `${m}m`;
-};
+// 移除formatDuration函数,不再需要