From 6b027c18660b828ec7b57ad0e3f4ffca9f4d14d1 Mon Sep 17 00:00:00 2001 From: haoxuan <haoxuan> Date: 星期五, 03 十一月 2023 15:15:24 +0800 Subject: [PATCH] Merge branch 'dev' of http://192.168.5.5:10010/r/web/bulletin-board-style1 into wn --- src/views/dashboard/components/DashboardTitle.vue | 88 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/views/dashboard/components/DashboardTitle.vue b/src/views/dashboard/components/DashboardTitle.vue index b55e9fb..57f1a01 100644 --- a/src/views/dashboard/components/DashboardTitle.vue +++ b/src/views/dashboard/components/DashboardTitle.vue @@ -1,41 +1,103 @@ <template> <div class="dashboard-title"> - <div class="title-text">鏅鸿兘宸ヤ綔鍙� 鈥� {{ deviceStore?.deviceInfo?.currentDeviceID ?? '' }}</div> + <div class="title-text"> + 鏅鸿兘宸ヤ綔鍙� 鈥� {{ deviceStore?.deviceInfo?.currentDeviceID ?? '' }} + <el-icon size="32" color="#0db7f5" style="margin-left: 20px; cursor: pointer" @click="openDevicesModal"> + <IconSlider></IconSlider> + </el-icon> + </div> <div class="title-status"> - <div class="connection-info" @click="openSelectDeviceModal"> - <el-icon size="30" color="red"> + <div class="connection-info" @click="openProblemsModal"> + <el-icon size="30" :color="problemsIconStatus ? '#00ff00' : '#ff0000'"> <AlertLightIcon></AlertLightIcon> </el-icon> </div> <div class="cloud-connection-status"> - <el-icon size="45" color="#ff0000"> - <IconCloudOff></IconCloudOff> + <el-icon v-if="cloudConnectionIconStatus" size="45" color="#00ff00"> + <IconCloudDone></IconCloudDone> </el-icon> - <el-icon size="45" color="#00ff00"> - <IconCloudDone></IconCloudDone> + <el-icon v-else size="45" color="#ff0000"> + <IconCloudOff></IconCloudOff> </el-icon> </div> </div> </div> - <TroubleTrackerModal v-model="showModal"></TroubleTrackerModal> + <TroubleTrackerModal v-model="showProblemsModal" :problems="problemList"></TroubleTrackerModal> </template> <script setup lang="ts"> import AlertLightIcon from '@/components/icons/AlertLightIcon.vue' -import { ref } from 'vue' +import { computed, onUnmounted, ref } from 'vue' import { useDevicesStore } from '@/stores/devices' import TroubleTrackerModal from '@/views/dashboard/components/TroubleTrackerModal.vue' import IconCloudDone from '~icons/material-symbols-light/cloud-done-outline' import IconCloudOff from '~icons/material-symbols-light/cloud-off-outline' +import IconSlider from '~icons/bx/slider' +import { useRequest } from 'vue-hooks-plus' +import { apiGetProblemList } from '@/api' +import { PROBLEMS_POLLING_DURATION } from '@/common/constants' -const showModal = ref(false) - -function openSelectDeviceModal() { - showModal.value = true +// 鏄惁鏄剧ず闂璇婃柇modal +const showProblemsModal = ref(false) +/** + * 鎵撳紑闂璇婃柇modal + */ +function openProblemsModal() { + showProblemsModal.value = true } +// 鏄惁鏄剧ず璁惧鍒囨崲modal +const showDevicesModal = ref(false) +/** + * 鎵撳紑璁惧鍒囨崲modal + */ +function openDevicesModal() { + showDevicesModal.value = true +} + +// 鑾峰彇褰撳墠璁惧鍚� const deviceStore = useDevicesStore() + +// 闂璇婃柇鍒楄〃 +const problemList = computed(() => { + return problemsRes?.value?.data ?? [] +}) +// 闂璇婃柇icon鐘舵��, 闂鍒楄〃涓湁涓�鏉″紓甯稿嵆涓虹孩鐏� 鍚﹀垯鏄豢鐏� true缁跨伅 +const problemsIconStatus = computed(() => { + if (!problemList.value || !problemList.value?.length) { + // 榛樿缁跨伅, 鎷垮埌涓�娆℃暟鎹悗鎵嶄互鎺ュ彛涓哄噯 + return true + } + return !problemList.value.some((ele) => !ele.CheckResult) +}) +// 浜戠杩炴帴icon鐘舵��, 闂鍒楄〃涓湁涓�鏉′唬琛ㄤ簯绔摼鎺ョ殑, 寮傚父鍗充负绾㈣壊浜慽con 鍚﹀垯鏄豢鑹� true缁夸簯 +const cloudConnectionIconStatus = computed(() => { + if (!problemList.value || !problemList.value?.length) { + // 榛樿缁跨伅, 鎷垮埌涓�娆℃暟鎹悗鎵嶄互鎺ュ彛涓哄噯 + return true + } + // 娌℃暟鎹氨褰撴槸閾炬帴姝e父 + const cloudConnection = problemList.value.find((ele) => ele.ItemCode === 'cloud') + return cloudConnection ? cloudConnection?.CheckResult : true +}) + +/** + * 杞闂璇婃柇 + */ +const { + data: problemsRes, + run: startProblemsPolling, + cancel: cancelProblemsPolling +} = useRequest(apiGetProblemList, { + manual: true, + pollingInterval: PROBLEMS_POLLING_DURATION, + pollingWhenHidden: false +}) +startProblemsPolling() +onUnmounted(() => { + cancelProblemsPolling() +}) </script> <style scoped lang="scss"> -- Gitblit v1.8.0