feat:添加多选

This commit is contained in:
zhongzm
2024-11-28 18:57:35 +08:00
parent cc3432ca06
commit 154569304c

View File

@@ -352,13 +352,13 @@ const themeObserver = new MutationObserver(() => {
selected: Object.fromEntries( selected: Object.fromEntries(
selectedKPIs.value.map(kpiId => [ selectedKPIs.value.map(kpiId => [
kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId, kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId,
selectedRow.value ? kpiId === selectedRow.value : true selectedRows.value.length === 0 ? true : selectedRows.value.includes(kpiId)
]) ])
) )
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
position: function (point: number[], params: any, dom: HTMLElement, rect: any, size: { viewSize: number[], contentSize: number[] }) { position: function (point: number[], size: { viewSize: number[], contentSize: number[] }) {
const [x, y] = point; const [x, y] = point;
const [viewWidth] = size.viewSize; const [viewWidth] = size.viewSize;
const [tooltipWidth, tooltipHeight] = size.contentSize; const [tooltipWidth, tooltipHeight] = size.contentSize;
@@ -442,7 +442,7 @@ const updateChart = () => {
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
position: function (point: number[], params: any, dom: HTMLElement, rect: any, size: { viewSize: number[], contentSize: number[] }) { position: function (point: number[], size: { viewSize: number[], contentSize: number[] }) {
const [x, y] = point; const [x, y] = point;
const [viewWidth] = size.viewSize; const [viewWidth] = size.viewSize;
const [tooltipWidth, tooltipHeight] = size.contentSize; const [tooltipWidth, tooltipHeight] = size.contentSize;
@@ -489,7 +489,7 @@ const updateChart = () => {
selected: Object.fromEntries( selected: Object.fromEntries(
selectedKPIs.value.map(kpiId => [ selectedKPIs.value.map(kpiId => [
kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId, kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId,
selectedRow.value ? kpiId === selectedRow.value : true selectedRows.value.length === 0 ? true : selectedRows.value.includes(kpiId)
]) ])
), ),
show: false, show: false,
@@ -786,7 +786,7 @@ const updateKpiStats = () => {
}; };
// 添加表列定义 // 添加表列定义
const statsColumns: TableColumnType<KPIStats>[] = [ const statsColumns: TableColumnType<KPIStats>[] = [
{ {
title: '', title: '',
@@ -845,32 +845,31 @@ const statsColumns: TableColumnType<KPIStats>[] = [
} }
]; ];
// 添加一个变量来跟踪当前选中的行 // 将 selectedRow 改为 selectedRows 数组
const selectedRow = ref<string | null>(null); const selectedRows = ref<string[]>([]);
// 添加处理行点击的方法 // 修改处理行点击的方法
const handleRowClick = (record: KPIStats) => { const handleRowClick = (record: KPIStats) => {
if (selectedRow.value === record.kpiId) { const index = selectedRows.value.indexOf(record.kpiId);
// 如果点击的是当前选中的行,则取消选中 if (index > -1) {
selectedRow.value = null; // 如果已经选中,则取消选中
// 更新图表,显示所有指标 selectedRows.value.splice(index, 1);
updateChartLegendSelect();
} else { } else {
// 选中新行 // 添加新的选中项
selectedRow.value = record.kpiId; selectedRows.value.push(record.kpiId);
// 更新图表,只显示选中的指标
updateChartLegendSelect(record.kpiId);
} }
// 更新图表显示
updateChartLegendSelect();
}; };
// 添加更新表图例选中态的方法 // 修改更新表图例选中态的方法
const updateChartLegendSelect = (selectedKpiId?: string) => { const updateChartLegendSelect = () => {
if (!chart) return; if (!chart) return;
const legendSelected = Object.fromEntries( const legendSelected = Object.fromEntries(
selectedKPIs.value.map(kpiId => [ selectedKPIs.value.map(kpiId => [
kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId, kpiColumns.value.find(col => col.kpiId === kpiId)?.title || kpiId,
selectedKpiId ? kpiId === selectedKpiId : true selectedRows.value.length === 0 ? true : selectedRows.value.includes(kpiId)
]) ])
); );
@@ -880,6 +879,14 @@ const updateChartLegendSelect = (selectedKpiId?: string) => {
} }
}); });
}; };
// 修改表格行的自定义配置
const tableRowConfig = computed(() => {
return (record: KPIStats) => ({
onClick: () => handleRowClick(record),
class: selectedRows.value.includes(record.kpiId) ? 'selected-row' : ''
});
});
</script> </script>
<template> <template>
<div class="kpi-overview"> <div class="kpi-overview">
@@ -914,10 +921,7 @@ const updateChartLegendSelect = (selectedKpiId?: string) => {
:scroll="{ y: 250 }" :scroll="{ y: 250 }"
size="small" size="small"
:loading="tableLoading" :loading="tableLoading"
:custom-row="(record) => ({ :custom-row="tableRowConfig"
onClick: () => handleRowClick(record),
class: record.kpiId === selectedRow ? 'selected-row' : ''
})"
/> />
</div> </div>
</div> </div>
@@ -1025,11 +1029,20 @@ const updateChartLegendSelect = (selectedKpiId?: string) => {
/* 选中行样式 */ /* 选中行样式 */
:deep(.selected-row) { :deep(.selected-row) {
background-color: rgba(24, 144, 255, 0.1); background-color: rgba(24, 144, 255, 0.1) !important;
} }
[data-theme='dark'] :deep(.selected-row) { [data-theme='dark'] :deep(.selected-row) {
background-color: rgba(24, 144, 255, 0.2); background-color: rgba(24, 144, 255, 0.2) !important;
}
/* 选中行悬停效果 */
:deep(.selected-row:hover) {
background-color: rgba(24, 144, 255, 0.2) !important;
}
[data-theme='dark'] :deep(.selected-row:hover) {
background-color: rgba(24, 144, 255, 0.3) !important;
} }
/* 鼠标悬停样式 */ /* 鼠标悬停样式 */