feat:添加多选
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 鼠标悬停样式 */
|
/* 鼠标悬停样式 */
|
||||||
|
|||||||
Reference in New Issue
Block a user