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函数,不再需要