|
@@ -14,36 +14,101 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<template #left>
|
|
<template #left>
|
|
|
- <!-- <SidebarMenu @leaf-node-click="handleLeafNodeClick" /> -->
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <PanelContainer title="在线状态">
|
|
|
|
|
+
|
|
|
|
|
+ <TechTabs v-model="onlineStatusActiveTab" type="segmented" @tab-click="handleTabClick">
|
|
|
|
|
+ <TechTabPane label="信号机" name="signalMachine" style="height: 100%;">
|
|
|
|
|
+ <DynamicDonutChart v-if="onlineStatusDisplayData" :chartData="onlineStatusDisplayData.chartData"
|
|
|
|
|
+ :centerTitle="onlineStatusDisplayData.centerTitle" :centerSubTitle="onlineStatusDisplayData.centerSubTitle" />
|
|
|
|
|
+ </TechTabPane>
|
|
|
|
|
+ <TechTabPane label="检测器" name="detector">
|
|
|
|
|
+ <DynamicDonutChart v-if="onlineStatusDisplayData" :chartData="onlineStatusDisplayData.chartData"
|
|
|
|
|
+ :centerTitle="onlineStatusDisplayData.centerTitle" :centerSubTitle="onlineStatusDisplayData.centerSubTitle" />
|
|
|
|
|
+ </TechTabPane>
|
|
|
|
|
+ <TechTabPane label="红路灯" name="trafficLight">
|
|
|
|
|
+ <DynamicDonutChart v-if="onlineStatusDisplayData" :chartData="onlineStatusDisplayData.chartData"
|
|
|
|
|
+ :centerTitle="onlineStatusDisplayData.centerTitle" :centerSubTitle="onlineStatusDisplayData.centerSubTitle" />
|
|
|
|
|
+ </TechTabPane>
|
|
|
|
|
+ </TechTabs>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ </PanelContainer>
|
|
|
|
|
+ </div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
- </DashboardLayout>
|
|
|
|
|
|
|
+ </DashboardLayout>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import DashboardLayout from '@/layouts/DashboardLayout.vue';
|
|
import DashboardLayout from '@/layouts/DashboardLayout.vue';
|
|
|
import WeatherWidget from '@/components/ui/WeatherWidget.vue';
|
|
import WeatherWidget from '@/components/ui/WeatherWidget.vue';
|
|
|
import DateTimeWidget from '@/components/ui/DateTimeWidget.vue';
|
|
import DateTimeWidget from '@/components/ui/DateTimeWidget.vue';
|
|
|
-import SidebarMenu from '@/components/ui/SidebarMenu.vue';
|
|
|
|
|
|
|
+import PanelContainer from '@/components/ui/PanelContainer.vue';
|
|
|
|
|
+import DynamicDonutChart from '@/components/ui/DynamicDonutChart.vue';
|
|
|
|
|
+import TechTabs from '@/components/ui/TechTabs.vue';
|
|
|
|
|
+import TechTabPane from '@/components/ui/TechTabPane.vue';
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+const mockDeviceData = {
|
|
|
|
|
+ 'signalMachine': {
|
|
|
|
|
+ centerTitle: '98%',
|
|
|
|
|
+ centerSubTitle: '980/1000',
|
|
|
|
|
+ chartData: [
|
|
|
|
|
+ { name: '在线', value: 980, color: '#32F6F8' },
|
|
|
|
|
+ { name: '离线', value: 20, color: '#E4D552' }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ 'detector': {
|
|
|
|
|
+ centerTitle: '85%',
|
|
|
|
|
+ centerSubTitle: '425/500',
|
|
|
|
|
+ chartData: [
|
|
|
|
|
+ { name: '正常', value: 425, color: '#32F6F8' },
|
|
|
|
|
+ { name: '故障', value: 50, color: '#faad14' },
|
|
|
|
|
+ { name: '掉线', value: 25, color: '#ff4d4f' }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ 'trafficLight': {
|
|
|
|
|
+ centerTitle: '99%',
|
|
|
|
|
+ centerSubTitle: '1188/1200',
|
|
|
|
|
+ chartData: [
|
|
|
|
|
+ { name: '正常发光', value: 1188, color: '#32F6F8' },
|
|
|
|
|
+ { name: '灯组损坏', value: 12, color: '#ff4d4f' }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
name: "HomePage",
|
|
name: "HomePage",
|
|
|
- components: {
|
|
|
|
|
- DashboardLayout,
|
|
|
|
|
|
|
+ components: {
|
|
|
|
|
+ DashboardLayout,
|
|
|
WeatherWidget,
|
|
WeatherWidget,
|
|
|
DateTimeWidget,
|
|
DateTimeWidget,
|
|
|
- SidebarMenu
|
|
|
|
|
|
|
+ PanelContainer,
|
|
|
|
|
+ DynamicDonutChart,
|
|
|
|
|
+ TechTabs,
|
|
|
|
|
+ TechTabPane
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
-
|
|
|
|
|
|
|
+ // 在线状态面板
|
|
|
|
|
+ onlineStatusActiveTab: 'detector',
|
|
|
|
|
+ onlineStatusDisplayData: mockDeviceData['detector']
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
|
mounted() {
|
|
mounted() {
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
-
|
|
|
|
|
|
|
+ // 监听 Tab 切换事件
|
|
|
|
|
+ handleTabClick(selectedTabName) {
|
|
|
|
|
+ console.log('用户切换了设备类型:', selectedTabName);
|
|
|
|
|
+
|
|
|
|
|
+ // 从 mock 字典中取出对应的数据并赋值,图表会自动响应式更新!
|
|
|
|
|
+ if (mockDeviceData[selectedTabName]) {
|
|
|
|
|
+ this.onlineStatusDisplayData = mockDeviceData[selectedTabName];
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
</script>
|
|
</script>
|