diff --git a/frontend/src/views/Analytics.vue b/frontend/src/views/Analytics.vue index 9aeea1f..bfe82c1 100644 --- a/frontend/src/views/Analytics.vue +++ b/frontend/src/views/Analytics.vue @@ -199,7 +199,23 @@
-

设计师绩效排行榜

+
+

设计师绩效排行榜

+
+ + + {{ dept.deptName }} + + +
+
({ const warningTasks = ref([]) const warningFilter = ref('all') +// 部门筛选 +const selectedDeptId = ref(undefined) +const departmentList = ref([]) + // 图表引用 const trendChartRef = ref() const typeChartRef = ref() @@ -649,7 +670,7 @@ const loadAllData = async () => { // 并行加载所有数据 const [demandData, designerData, efficiencyData, warningsData] = await Promise.all([ getDemandStatistics(dateRange.value, undefined, undefined, month), - getDesignerPerformance(month), + getDesignerPerformance(month, selectedDeptId.value), getProcessEfficiency(month), getWarningTasks() ]) @@ -912,7 +933,44 @@ const exportData = () => { message.success('报表导出成功') } +// 加载接单部门列表 +const loadDepartments = async () => { + try { + const res = await fetchDepartmentOverview() + // 只显示接单部门 + departmentList.value = (res.data || []).filter((d: any) => d.deptType === 'receiving') + } catch (error) { + console.error('加载部门列表失败:', error) + } +} + +// 部门筛选变化 +const handleDeptChange = (deptId: number | undefined) => { + selectedDeptId.value = deptId + loadDesignerData() +} + +// 单独加载设计师绩效数据(用于部门筛选) +const loadDesignerData = async () => { + loading.value = true + try { + const month = selectedMonth.value || undefined + const designerData = await getDesignerPerformance(month, selectedDeptId.value) + Object.assign(designerPerformance, designerData) + await nextTick() + if (activeTab.value === 'designer') { + renderWorkloadChart() + } + } catch (error) { + message.error('加载设计师绩效数据失败') + console.error('加载设计师绩效数据失败:', error) + } finally { + loading.value = false + } +} + onMounted(() => { + loadDepartments() loadAllData() }) @@ -1055,6 +1113,23 @@ onMounted(() => { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); margin-bottom: 24px; + .table-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: $space-lg; + + .chart-title { + margin-bottom: 0; + } + + .filter-bar { + display: flex; + align-items: center; + gap: 12px; + } + } + .chart-title { font-size: $font-size-lg; font-weight: 600;