refactor: 将位移看板命名从振动重命名为位移

将 displacementBoard 模块中的变量、组件、类型、样式及 API 调用等由 vibration 统一重命名为 displacement,消除语义混淆;同时将 onMounted 中的串行请求优化为并行。
main
zch 4 weeks ago
parent 7e980242ca
commit 906be3335c

@ -1,19 +1,19 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-alert type="info" :closable="false" show-icon class="section-tip" :title="bandTip" /> <el-alert type="info" :closable="false" show-icon class="section-tip" :title="bandTip" />
@ -31,7 +31,7 @@
<div ref="sankeyChartRef" class="chart-container-xl" /> <div ref="sankeyChartRef" class="chart-container-xl" />
</el-card> </el-card>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :xl="12"> <el-col :xs="24" :xl="12">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
<template #header> <template #header>
@ -54,16 +54,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementAdvancedData as getVibrationAdvancedData, type VibrationAdvancedPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementAdvancedData, type DisplacementAdvancedPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { ADVANCED_HELP } from '../components/helpContent'; import { ADVANCED_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { toNumber, vibrationMetricOptions } from '../components/vibrationBoardShared'; import { toNumber, displacementMetricOptions } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardAdvanced' }); defineOptions({ name: 'DisplacementBoardAdvanced' });
const sankeyChartRef = ref<HTMLElement>(); const sankeyChartRef = ref<HTMLElement>();
const treemapChartRef = ref<HTMLElement>(); const treemapChartRef = ref<HTMLElement>();
@ -81,11 +81,11 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const advancedData = ref<VibrationAdvancedPageVO>({ const advancedData = ref<DisplacementAdvancedPageVO>({
sankeyNodes: [], sankeyNodes: [],
sankeyLinks: [], sankeyLinks: [],
treemapItems: [], treemapItems: [],
@ -226,7 +226,7 @@ const renderCharts = () => {
} }
parallelChart.setOption( parallelChart.setOption(
{ {
color: [...vibrationMetricOptions.map((item) => item.color), '#8b5cf6', '#64748b'] as string[], color: [...displacementMetricOptions.map((item) => item.color), '#8b5cf6', '#64748b'] as string[],
tooltip: { tooltip: {
trigger: 'item' trigger: 'item'
}, },
@ -273,7 +273,7 @@ const renderCharts = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationAdvancedData(buildQuery()); const { data } = await getDisplacementAdvancedData(buildQuery());
advancedData.value = data || { advancedData.value = data || {
sankeyNodes: [], sankeyNodes: [],
sankeyLinks: [], sankeyLinks: [],
@ -288,12 +288,14 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
</style> </style>

@ -1,6 +1,6 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
@ -40,7 +40,7 @@
</el-form> </el-form>
</el-card> </el-card>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="12" :md="6"> <el-col :xs="12" :md="6">
<el-card shadow="never" class="kpi-card"> <el-card shadow="never" class="kpi-card">
<div class="kpi-label">高风险事件</div> <div class="kpi-label">高风险事件</div>
@ -71,9 +71,9 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
@ -89,7 +89,7 @@
<div ref="eventChartRef" class="chart-container" /> <div ref="eventChartRef" class="chart-container" />
</el-card> </el-card>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :xl="12"> <el-col :xs="24" :xl="12">
<el-card shadow="never" class="table-card"> <el-card shadow="never" class="table-card">
<template #header> <template #header>
@ -187,16 +187,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementAnomalyData as getVibrationAnomalyData, type VibrationAnomalyPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementAnomalyData, type DisplacementAnomalyPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { ANOMALY_HELP } from '../components/helpContent'; import { ANOMALY_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { toNumber } from '../components/vibrationBoardShared'; import { toNumber } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardAnomaly' }); defineOptions({ name: 'DisplacementBoardAnomaly' });
const eventChartRef = ref<HTMLElement>(); const eventChartRef = ref<HTMLElement>();
const { getChart } = useChartResize(eventChartRef); const { getChart } = useChartResize(eventChartRef);
@ -212,19 +212,19 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
resetAnomalyThresholds, resetAnomalyThresholds,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const anomalyData = ref<VibrationAnomalyPageVO>({ const anomalyData = ref<DisplacementAnomalyPageVO>({
highEvents: [], highEvents: [],
continuousEvents: [], continuousEvents: [],
rapidRiseEvents: [], rapidRiseEvents: [],
jitterEvents: [] jitterEvents: []
}); });
const applyThresholdDefaults = (data?: VibrationAnomalyPageVO) => { const applyThresholdDefaults = (data?: DisplacementAnomalyPageVO) => {
if (!data) { if (!data) {
return; return;
} }
@ -297,13 +297,13 @@ const renderEventChart = () => {
const handleMetricChange = (_value: string) => { const handleMetricChange = (_value: string) => {
// //
resetAnomalyThresholds(); resetAnomalyThresholds();
setVibrationParam('vibrationDisplacement'); setDisplacementParam('vibrationDisplacement');
}; };
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationAnomalyData(buildQuery()); const { data } = await getDisplacementAnomalyData(buildQuery());
anomalyData.value = data || { anomalyData.value = data || {
highEvents: [], highEvents: [],
continuousEvents: [], continuousEvents: [],
@ -318,14 +318,13 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
.threshold-form { .threshold-form {
display: flex; display: flex;
@ -363,3 +362,6 @@ onMounted(async () => {
} }
} }
</style> </style>

@ -1,19 +1,24 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree
:loading="treeLoading"
:tree-data="monitorTreeOptions"
:tree-props="treeProps"
@node-click="handleTreeNodeClick"
/>
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-alert <el-alert
@ -24,7 +29,7 @@
title="对比分析建议选择设备组或全部位移设备,这样横向排名与散点聚类才更有参考价值。" title="对比分析建议选择设备组或全部位移设备,这样横向排名与散点聚类才更有参考价值。"
/> />
<el-row :gutter="16" class="vibration-grid"> <el-row :gutter="16" class="displacement-grid">
<el-col :xs="24" :xl="12"> <el-col :xs="24" :xl="12">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
<template #header> <template #header>
@ -61,16 +66,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementComparisonData as getVibrationComparisonData, type VibrationComparisonPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementComparisonData, type DisplacementComparisonPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { COMPARISON_HELP } from '../components/helpContent'; import { COMPARISON_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { buildCategoryDataZoom, getVibrationMetricOption, toNumber, vibrationMetricOptions } from '../components/vibrationBoardShared'; import { buildCategoryDataZoom, getDisplacementMetricOption, toNumber, displacementMetricOptions } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardComparison' }); defineOptions({ name: 'DisplacementBoardComparison' });
const rankChartRef = ref<HTMLElement>(); const rankChartRef = ref<HTMLElement>();
const scatterChartRef = ref<HTMLElement>(); const scatterChartRef = ref<HTMLElement>();
@ -87,13 +92,13 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const comparisonData = ref<VibrationComparisonPageVO>({ rankItems: [], scatterItems: [] }); const comparisonData = ref<DisplacementComparisonPageVO>({ rankItems: [], scatterItems: [] });
const metricColorMap = Object.fromEntries(vibrationMetricOptions.map((item) => [item.field, item.color])); const metricColorMap = Object.fromEntries(displacementMetricOptions.map((item) => [item.field, item.color]));
const activeMetric = computed(() => getVibrationMetricOption(comparisonData.value.metricField || queryForm.value.vibrationParam)); const activeMetric = computed(() => getDisplacementMetricOption(comparisonData.value.metricField || queryForm.value.vibrationParam));
const renderCharts = () => { const renderCharts = () => {
const rankChart = getChart(rankChartRef); const rankChart = getChart(rankChartRef);
@ -248,7 +253,7 @@ const renderCharts = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationComparisonData(buildQuery()); const { data } = await getDisplacementComparisonData(buildQuery());
comparisonData.value = data || { rankItems: [], scatterItems: [] }; comparisonData.value = data || { rankItems: [], scatterItems: [] };
await nextTick(); await nextTick();
// //
@ -258,12 +263,14 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
</style> </style>

@ -1,13 +1,13 @@
export const vibrationMetricOptions = [ export const displacementMetricOptions = [
// 位移专属看板本轮只保留一个业务指标,避免前端继续暴露无效的多指标切换入口。 // 位移专属看板本轮只保留一个业务指标,避免前端继续暴露无效的多指标切换入口。
{ field: 'vibrationDisplacement', label: '位移', unit: 'um', color: '#5b8ff9' } { field: 'vibrationDisplacement', label: '位移', unit: 'um', color: '#5b8ff9' }
] as const; ] as const;
export const vibrationMetricMap = Object.fromEntries(vibrationMetricOptions.map((item) => [item.field, item])); export const displacementMetricMap = Object.fromEntries(displacementMetricOptions.map((item) => [item.field, item]));
export const vibrationHeatmapColors = ['#0f766e', '#0ea5a4', '#38bdf8', '#fde68a', '#fb923c', '#ef4444']; export const displacementHeatmapColors = ['#0f766e', '#0ea5a4', '#38bdf8', '#fde68a', '#fb923c', '#ef4444'];
export const getVibrationMetricOption = (field?: string) => vibrationMetricMap[field || ''] || vibrationMetricOptions[0]; export const getDisplacementMetricOption = (field?: string) => displacementMetricMap[field || ''] || displacementMetricOptions[0];
export const toNumber = (value: number | string | undefined, fallback = 0) => { export const toNumber = (value: number | string | undefined, fallback = 0) => {
const numberValue = Number(value); const numberValue = Number(value);
@ -50,3 +50,4 @@ export const createDefaultTimeRange = () => {
const start = new Date(end.getTime() - 24 * 3600 * 1000); const start = new Date(end.getTime() - 24 * 3600 * 1000);
return [formatDateTime(start), formatDateTime(end)]; return [formatDateTime(start), formatDateTime(end)];
}; };

@ -2,7 +2,7 @@ import { onBeforeUnmount, onMounted, type Ref } from 'vue';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
/** /**
* ECharts * ECharts
* window * window
*/ */
export function useChartResize(...chartRefs: Ref<HTMLElement | undefined>[]) { export function useChartResize(...chartRefs: Ref<HTMLElement | undefined>[]) {
@ -56,3 +56,4 @@ export function useChartResize(...chartRefs: Ref<HTMLElement | undefined>[]) {
disposeAll disposeAll
}; };
} }

@ -17,14 +17,14 @@ type DisplacementBoardQueryForm = {
}; };
type BuildQueryOptions = { type BuildQueryOptions = {
includeVibrationParam?: boolean; includeDisplacementParam?: boolean;
}; };
const createDefaultQueryForm = (defaultMetric = 'vibrationDisplacement'): VibrationBoardQueryForm => ({ const createDefaultQueryForm = (defaultMetric = 'vibrationDisplacement'): DisplacementBoardQueryForm => ({
compareScope: 'all', compareScope: 'all',
monitorId: '', monitorId: '',
monitorIds: [], monitorIds: [],
selectionLabel: '全部振动设备', selectionLabel: '全部位移设备',
samplingInterval: 5, samplingInterval: 5,
vibrationParam: defaultMetric, vibrationParam: defaultMetric,
highThreshold: undefined, highThreshold: undefined,
@ -43,7 +43,7 @@ const sharedState = reactive({
queryForm: createDefaultQueryForm() queryForm: createDefaultQueryForm()
}); });
export function useVibrationBoardQueryState(defaultMetric = 'vibrationDisplacement') { export function useDisplacementBoardQueryState(defaultMetric = 'vibrationDisplacement') {
const localState = reactive({ const localState = reactive({
loading: false, loading: false,
treeLoading: false, treeLoading: false,
@ -95,7 +95,7 @@ export function useVibrationBoardQueryState(defaultMetric = 'vibrationDisplaceme
queryForm.value.samplingInterval = value; queryForm.value.samplingInterval = value;
}; };
const setVibrationParam = (value: string) => { const setDisplacementParam = (value: string) => {
// 位移专属看板不再允许切换指标,这里强制收敛为位移,避免旧页面残留调用把状态带偏。 // 位移专属看板不再允许切换指标,这里强制收敛为位移,避免旧页面残留调用把状态带偏。
queryForm.value.vibrationParam = 'vibrationDisplacement'; queryForm.value.vibrationParam = 'vibrationDisplacement';
}; };
@ -122,7 +122,7 @@ export function useVibrationBoardQueryState(defaultMetric = 'vibrationDisplaceme
deviceDisplayMap.value = buildDeviceDisplayMap(monitorTreeOptions.value); deviceDisplayMap.value = buildDeviceDisplayMap(monitorTreeOptions.value);
sharedState.treeLoaded = true; sharedState.treeLoaded = true;
if (!queryForm.value.monitorIds.length && !queryForm.value.monitorId) { if (!queryForm.value.monitorIds.length && !queryForm.value.monitorId) {
applySelection(buildSelection(getLeafNodes(monitorTreeOptions.value), '全部振动设备', 'all')); applySelection(buildSelection(getLeafNodes(monitorTreeOptions.value), '全部位移设备', 'all'));
} }
} finally { } finally {
treeLoading.value = false; treeLoading.value = false;
@ -138,7 +138,7 @@ export function useVibrationBoardQueryState(defaultMetric = 'vibrationDisplaceme
applySelection(buildSelection([data], data.label, 'single')); applySelection(buildSelection([data], data.label, 'single'));
}; };
const buildQuery = (options?: BuildQueryOptions): VibrationBoardQuery => ({ const buildQuery = (options?: BuildQueryOptions): DisplacementBoardQuery => ({
samplingInterval: queryForm.value.samplingInterval, samplingInterval: queryForm.value.samplingInterval,
// 位移专属看板统一固定为 vibrationDisplacement前端不再暴露可切换口径。 // 位移专属看板统一固定为 vibrationDisplacement前端不再暴露可切换口径。
vibrationParam: 'vibrationDisplacement', vibrationParam: 'vibrationDisplacement',
@ -172,9 +172,10 @@ export function useVibrationBoardQueryState(defaultMetric = 'vibrationDisplaceme
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
resetAnomalyThresholds, resetAnomalyThresholds,
buildQuery, buildQuery,
getMonitorDisplayName getMonitorDisplayName
}; };
} }

@ -1,22 +1,22 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-row :gutter="16" class="vibration-grid"> <el-row :gutter="16" class="displacement-grid">
<el-col :xs="24" :xl="12"> <el-col :xs="24" :xl="12">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
<template #header> <template #header>
@ -79,16 +79,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementDistributionData as getVibrationDistributionData, type VibrationDistributionPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementDistributionData, type DisplacementDistributionPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { DISTRIBUTION_HELP } from '../components/helpContent'; import { DISTRIBUTION_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { getVibrationMetricOption, toNumber, vibrationHeatmapColors } from '../components/vibrationBoardShared'; import { getDisplacementMetricOption, toNumber, displacementHeatmapColors } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardDistribution' }); defineOptions({ name: 'DisplacementBoardDistribution' });
const intervalChartRef = ref<HTMLElement>(); const intervalChartRef = ref<HTMLElement>();
const histogramChartRef = ref<HTMLElement>(); const histogramChartRef = ref<HTMLElement>();
@ -107,17 +107,17 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const distributionData = ref<VibrationDistributionPageVO>({ const distributionData = ref<DisplacementDistributionPageVO>({
intervalBuckets: [], intervalBuckets: [],
histogramBuckets: [], histogramBuckets: [],
calendarHeatmap: [], calendarHeatmap: [],
hourlyHeatmap: [] hourlyHeatmap: []
}); });
const activeMetric = computed(() => getVibrationMetricOption(distributionData.value.metricField || queryForm.value.vibrationParam)); const activeMetric = computed(() => getDisplacementMetricOption(distributionData.value.metricField || queryForm.value.vibrationParam));
const clearCharts = () => { const clearCharts = () => {
getChart(intervalChartRef)?.clear(); getChart(intervalChartRef)?.clear();
@ -236,7 +236,7 @@ const renderCharts = () => {
left: 'center', left: 'center',
bottom: 0, bottom: 0,
textStyle: { color: '#475569' }, textStyle: { color: '#475569' },
inRange: { color: vibrationHeatmapColors } inRange: { color: displacementHeatmapColors }
}, },
calendar: { calendar: {
top: 24, top: 24,
@ -291,7 +291,7 @@ const renderCharts = () => {
left: 'center', left: 'center',
bottom: 8, bottom: 8,
textStyle: { color: '#475569' }, textStyle: { color: '#475569' },
inRange: { color: vibrationHeatmapColors } inRange: { color: displacementHeatmapColors }
}, },
series: [ series: [
{ {
@ -316,7 +316,7 @@ const renderCharts = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationDistributionData(buildQuery()); const { data } = await getDisplacementDistributionData(buildQuery());
distributionData.value = data || { distributionData.value = data || {
intervalBuckets: [], intervalBuckets: [],
histogramBuckets: [], histogramBuckets: [],
@ -330,12 +330,14 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
</style> </style>

@ -1,17 +1,17 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="12" :sm="12" :md="6"> <el-col :xs="12" :sm="12" :md="6">
<el-card shadow="never" class="kpi-card"> <el-card shadow="never" class="kpi-card">
<div class="kpi-label">采样记录数</div> <div class="kpi-label">采样记录数</div>
@ -42,7 +42,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :sm="12" :xl="6" v-for="item in overviewData.metricCards || []" :key="item.field"> <el-col :xs="24" :sm="12" :xl="6" v-for="item in overviewData.metricCards || []" :key="item.field">
<el-card shadow="never" class="metric-card" :style="{ borderTop: `4px solid ${metricColorMap[item.field || ''] || '#5b8ff9'}` }"> <el-card shadow="never" class="metric-card" :style="{ borderTop: `4px solid ${metricColorMap[item.field || ''] || '#5b8ff9'}` }">
<div class="kpi-label">{{ item.label }}</div> <div class="kpi-label">{{ item.label }}</div>
@ -55,12 +55,12 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-row :gutter="16" class="vibration-grid"> <el-row :gutter="16" class="displacement-grid">
<el-col :xs="24" :xl="12"> <el-col :xs="24" :xl="12">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
<template #header> <template #header>
@ -69,7 +69,7 @@
<div class="card-title">仪表盘总览</div> <div class="card-title">仪表盘总览</div>
<div class="card-subtitle">围绕位移关键统计值做快速巡检适合先判断当前风险边界再决定是否深入排查</div> <div class="card-subtitle">围绕位移关键统计值做快速巡检适合先判断当前风险边界再决定是否深入排查</div>
</div> </div>
<HelpButton title="振动总览" :content="OVERVIEW_HELP" /> <HelpButton title="位移总览" :content="OVERVIEW_HELP" />
</div> </div>
</template> </template>
<div ref="gaugeChartRef" class="chart-container-lg" /> <div ref="gaugeChartRef" class="chart-container-lg" />
@ -103,23 +103,23 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementOverviewData as getVibrationOverviewData, type VibrationOverviewPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementOverviewData, type DisplacementOverviewPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { OVERVIEW_HELP } from '../components/helpContent'; import { OVERVIEW_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { import {
buildCategoryDataZoom, buildCategoryDataZoom,
formatMetricValue, formatMetricValue,
formatPercentValue, formatPercentValue,
getVibrationMetricOption, getDisplacementMetricOption,
toNumber, toNumber,
vibrationMetricOptions displacementMetricOptions
} from '../components/vibrationBoardShared'; } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardOverview' }); defineOptions({ name: 'DisplacementBoardOverview' });
const gaugeChartRef = ref<HTMLElement>(); const gaugeChartRef = ref<HTMLElement>();
const rankChartRef = ref<HTMLElement>(); const rankChartRef = ref<HTMLElement>();
@ -137,13 +137,13 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const overviewData = ref<VibrationOverviewPageVO>({ metricCards: [], gaugeItems: [], deviceRanks: [] }); const overviewData = ref<DisplacementOverviewPageVO>({ metricCards: [], gaugeItems: [], deviceRanks: [] });
const metricColorMap = Object.fromEntries(vibrationMetricOptions.map((item) => [item.field, item.color])); const metricColorMap = Object.fromEntries(displacementMetricOptions.map((item) => [item.field, item.color]));
const activeMetric = computed(() => getVibrationMetricOption(overviewData.value.metricField || queryForm.value.vibrationParam)); const activeMetric = computed(() => getDisplacementMetricOption(overviewData.value.metricField || queryForm.value.vibrationParam));
const buildGaugeCenters = (count: number) => { const buildGaugeCenters = (count: number) => {
if (count <= 1) { if (count <= 1) {
@ -179,7 +179,7 @@ const renderCharts = () => {
formatter: (params: any) => `${params.seriesName}<br/>当前值: <b>${formatMetricValue(params.value)} ${unit}</b>` formatter: (params: any) => `${params.seriesName}<br/>当前值: <b>${formatMetricValue(params.value)} ${unit}</b>`
}, },
series: gaugeItems.map((item, index) => { series: gaugeItems.map((item, index) => {
const gaugeColor = vibrationMetricOptions[index]?.color || currentMetricColor; const gaugeColor = displacementMetricOptions[index]?.color || currentMetricColor;
return { return {
name: item.name, name: item.name,
type: 'gauge', type: 'gauge',
@ -361,7 +361,7 @@ const renderCharts = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationOverviewData(buildQuery()); const { data } = await getDisplacementOverviewData(buildQuery());
overviewData.value = data || { metricCards: [], gaugeItems: [], deviceRanks: [] }; overviewData.value = data || { metricCards: [], gaugeItems: [], deviceRanks: [] };
await nextTick(); await nextTick();
// DOM // DOM
@ -371,16 +371,18 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
.kpi-metric { .kpi-metric {
font-size: clamp(18px, 1.6vw, 24px); font-size: clamp(18px, 1.6vw, 24px);
} }
</style> </style>

@ -1,22 +1,22 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-row :gutter="16" class="vibration-grid"> <el-row :gutter="16" class="displacement-grid">
<el-col :xs="12" :md="8"> <el-col :xs="12" :md="8">
<el-card shadow="never" class="kpi-card"> <el-card shadow="never" class="kpi-card">
<div class="kpi-label">采样记录数</div> <div class="kpi-label">采样记录数</div>
@ -59,16 +59,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementQualityData as getVibrationQualityData, type VibrationQualityPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementQualityData, type DisplacementQualityPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { QUALITY_HELP } from '../components/helpContent'; import { QUALITY_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { buildCategoryDataZoom, formatPercentValue, toNumber } from '../components/vibrationBoardShared'; import { buildCategoryDataZoom, formatPercentValue, toNumber } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardQuality' }); defineOptions({ name: 'DisplacementBoardQuality' });
const qualityChartRef = ref<HTMLElement>(); const qualityChartRef = ref<HTMLElement>();
const { getChart } = useChartResize(qualityChartRef); const { getChart } = useChartResize(qualityChartRef);
@ -84,11 +84,11 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const qualityData = ref<VibrationQualityPageVO>({ metricQualityItems: [] }); const qualityData = ref<DisplacementQualityPageVO>({ metricQualityItems: [] });
const renderChart = () => { const renderChart = () => {
const chart = getChart(qualityChartRef); const chart = getChart(qualityChartRef);
@ -184,7 +184,7 @@ const renderChart = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationQualityData(buildQuery()); const { data } = await getDisplacementQualityData(buildQuery());
qualityData.value = data || { metricQualityItems: [] }; qualityData.value = data || { metricQualityItems: [] };
await nextTick(); await nextTick();
renderChart(); renderChart();
@ -193,12 +193,14 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
</style> </style>

@ -1,19 +1,19 @@
<template> <template>
<div v-loading="loading" class="app-container vibration-board-page"> <div v-loading="loading" class="app-container displacement-board-page">
<VibrationBoardFilter <DisplacementBoardFilter
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam" :vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam" @update:vibration-param="setDisplacementParam"
@query="handleQuery" @query="handleQuery"
/> />
<el-row :gutter="16" class="mt-4 vibration-grid"> <el-row :gutter="16" class="mt-4 displacement-grid">
<el-col :xs="24" :lg="7" :xl="6"> <el-col :xs="24" :lg="7" :xl="6">
<VibrationBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" /> <DisplacementBoardDeviceTree :loading="treeLoading" :tree-data="monitorTreeOptions" :tree-props="treeProps" @node-click="handleTreeNodeClick" />
</el-col> </el-col>
<el-col :xs="24" :lg="17" :xl="18"> <el-col :xs="24" :lg="17" :xl="18">
<el-card shadow="never" class="chart-card"> <el-card shadow="never" class="chart-card">
@ -54,16 +54,16 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementTrendData as getVibrationTrendData, type VibrationTrendPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementTrendData, type DisplacementTrendPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/DisplacementHelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import DisplacementBoardFilter from '../components/DisplacementBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import DisplacementBoardDeviceTree from '../components/DisplacementBoardDeviceTree.vue';
import { TREND_HELP } from '../components/helpContent'; import { TREND_HELP } from '../components/helpContent';
import { useChartResize } from '../components/useChartResize'; import { useChartResize } from '../components/useChartResize';
import { useVibrationBoardQueryState } from '../components/useVibrationBoardQueryState'; import { useDisplacementBoardQueryState } from '../components/useDisplacementBoardQueryState';
import { buildCategoryDataZoom, getVibrationMetricOption, toNumber, vibrationMetricOptions } from '../components/vibrationBoardShared'; import { buildCategoryDataZoom, getDisplacementMetricOption, toNumber, displacementMetricOptions } from '../components/displacementBoardShared';
defineOptions({ name: 'VibrationBoardTrend' }); defineOptions({ name: 'DisplacementBoardTrend' });
const trendChartRef = ref<HTMLElement>(); const trendChartRef = ref<HTMLElement>();
const hourlyChartRef = ref<HTMLElement>(); const hourlyChartRef = ref<HTMLElement>();
@ -80,13 +80,13 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam, setDisplacementParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useDisplacementBoardQueryState();
const trendData = ref<VibrationTrendPageVO>({ series: [], hourlyItems: [] }); const trendData = ref<DisplacementTrendPageVO>({ series: [], hourlyItems: [] });
const metricColorMap = Object.fromEntries(vibrationMetricOptions.map((item) => [item.field, item.color])); const metricColorMap = Object.fromEntries(displacementMetricOptions.map((item) => [item.field, item.color]));
const activeMetric = computed(() => getVibrationMetricOption(trendData.value.metricField || queryForm.value.vibrationParam)); const activeMetric = computed(() => getDisplacementMetricOption(trendData.value.metricField || queryForm.value.vibrationParam));
const renderCharts = () => { const renderCharts = () => {
const trendChart = getChart(trendChartRef); const trendChart = getChart(trendChartRef);
@ -222,7 +222,7 @@ const renderCharts = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
const { data } = await getVibrationTrendData(buildQuery()); const { data } = await getDisplacementTrendData(buildQuery());
trendData.value = data || { series: [], hourlyItems: [] }; trendData.value = data || { series: [], hourlyItems: [] };
await nextTick(); await nextTick();
// //
@ -232,12 +232,14 @@ const handleQuery = async () => {
} }
}; };
onMounted(async () => { onMounted(() => {
await loadTree(); void Promise.all([loadTree(), handleQuery()]);
await handleQuery();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../components/vibrationBoardReport.scss'; @import '../components/displacementBoardReport.scss';
</style> </style>

@ -4,10 +4,8 @@
:selection-label="queryForm.selectionLabel" :selection-label="queryForm.selectionLabel"
:time-range="daterangeRecordTime" :time-range="daterangeRecordTime"
:sampling-interval="queryForm.samplingInterval" :sampling-interval="queryForm.samplingInterval"
:vibration-param="queryForm.vibrationParam"
@update:time-range="setTimeRange" @update:time-range="setTimeRange"
@update:sampling-interval="setSamplingInterval" @update:sampling-interval="setSamplingInterval"
@update:vibration-param="setVibrationParam"
@query="handleQuery" @query="handleQuery"
/> />
@ -59,7 +57,7 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { getDisplacementQualityData as getVibrationQualityData, type VibrationQualityPageVO } from '@/api/ems/report/displacementBoard'; import { getDisplacementQualityData, type DisplacementQualityPageVO } from '@/api/ems/report/displacementBoard';
import HelpButton from '../components/HelpButton.vue'; import HelpButton from '../components/HelpButton.vue';
import VibrationBoardFilter from '../components/VibrationBoardFilter.vue'; import VibrationBoardFilter from '../components/VibrationBoardFilter.vue';
import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue'; import VibrationBoardDeviceTree from '../components/VibrationBoardDeviceTree.vue';
@ -84,11 +82,10 @@ const {
handleTreeNodeClick, handleTreeNodeClick,
setTimeRange, setTimeRange,
setSamplingInterval, setSamplingInterval,
setVibrationParam,
buildQuery buildQuery
} = useVibrationBoardQueryState(); } = useVibrationBoardQueryState();
const qualityData = ref<VibrationQualityPageVO>({ metricQualityItems: [] }); const qualityData = ref<DisplacementQualityPageVO>({ metricQualityItems: [] });
const renderChart = () => { const renderChart = () => {
const chart = getChart(qualityChartRef); const chart = getChart(qualityChartRef);
@ -184,8 +181,9 @@ const renderChart = () => {
const handleQuery = async () => { const handleQuery = async () => {
loading.value = true; loading.value = true;
try { try {
// // vibration_displacement
const { data } = await getVibrationQualityData(buildQuery({ includeVibrationParam: false })); // includeVibrationParam
const { data } = await getDisplacementQualityData(buildQuery());
qualityData.value = data || { metricQualityItems: [] }; qualityData.value = data || { metricQualityItems: [] };
await nextTick(); await nextTick();
renderChart(); renderChart();

Loading…
Cancel
Save