| 1 |
- {"ast":null,"code":"import { getEnvSensingList } from '@/api';\nexport default {\n name: 'EnvSensing',\n data() {\n return {\n list: [],\n scrollTimer: null,\n paused: false\n };\n },\n async mounted() {\n const res = await getEnvSensingList();\n this.list = res.data.list;\n this.$nextTick(() => this.startScroll());\n },\n beforeDestroy() {\n clearInterval(this.scrollTimer);\n },\n methods: {\n startScroll() {\n const wrapper = this.$refs.listWrapper;\n if (!wrapper) return;\n this.scrollTimer = setInterval(() => {\n if (this.paused) return;\n if (wrapper.scrollTop + wrapper.clientHeight >= wrapper.scrollHeight - 2) {\n wrapper.scrollTop = 0;\n } else {\n wrapper.scrollTop += 0.5;\n }\n }, 30);\n },\n pauseScroll() {\n this.paused = true;\n },\n resumeScroll() {\n this.paused = false;\n }\n }\n};","map":{"version":3,"names":["getEnvSensingList","name","data","list","scrollTimer","paused","mounted","res","$nextTick","startScroll","beforeDestroy","clearInterval","methods","wrapper","$refs","listWrapper","setInterval","scrollTop","clientHeight","scrollHeight","pauseScroll","resumeScroll"],"sources":["src/components/LabStats/EnvSensing.vue"],"sourcesContent":["<template>\n <div class=\"panel-box env-sensing\">\n <div class=\"panel-title\">实验环境安全智能感知</div>\n <div class=\"panel-content\">\n <div class=\"list-wrapper\" ref=\"listWrapper\" @mouseenter=\"pauseScroll\" @mouseleave=\"resumeScroll\">\n <div class=\"env-item\" v-for=\"item in list\" :key=\"item.id\">\n <div class=\"env-header\">\n <span class=\"env-lab\">{{ item.lab }}</span>\n <span class=\"env-dept\">{{ item.dept }}</span>\n </div>\n <div class=\"env-data\">\n <span class=\"data-tag\">温度:{{ item.temp }}°C</span>\n <span class=\"data-tag\">湿度:{{ item.humidity }}%</span>\n <span class=\"data-tag\">TVOC {{ item.tvoc }}mg/m³</span>\n <span class=\"data-tag\" :class=\"{ warn: item.co2.warn }\">\n <template v-if=\"item.co2.warn\">△</template>CO₂ {{ item.co2.value }}ppm\n </span>\n <span class=\"data-tag\" :class=\"{ warn: item.o2.warn }\">\n <template v-if=\"item.o2.warn\">△</template>O₂ {{ item.o2.value }}%\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { getEnvSensingList } from '@/api'\n\nexport default {\n name: 'EnvSensing',\n data() {\n return {\n list: [],\n scrollTimer: null,\n paused: false\n }\n },\n async mounted() {\n const res = await getEnvSensingList()\n this.list = res.data.list\n this.$nextTick(() => this.startScroll())\n },\n beforeDestroy() {\n clearInterval(this.scrollTimer)\n },\n methods: {\n startScroll() {\n const wrapper = this.$refs.listWrapper\n if (!wrapper) return\n this.scrollTimer = setInterval(() => {\n if (this.paused) return\n if (wrapper.scrollTop + wrapper.clientHeight >= wrapper.scrollHeight - 2) {\n wrapper.scrollTop = 0\n } else {\n wrapper.scrollTop += 0.5\n }\n }, 30)\n },\n pauseScroll() { this.paused = true },\n resumeScroll() { this.paused = false }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.env-sensing {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .panel-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n }\n}\n\n.list-wrapper {\n height: 100%;\n overflow: hidden;\n padding: 0 14px;\n}\n\n.env-item {\n padding: 10px 0;\n border-bottom: 1px solid rgba(26, 58, 106, 0.3);\n}\n\n.env-header {\n display: flex;\n align-items: baseline;\n gap: 10px;\n margin-bottom: 6px;\n}\n\n.env-lab {\n font-size: 13px;\n font-weight: bold;\n color: #fff;\n}\n\n.env-dept {\n font-size: 11px;\n color: $text-muted;\n}\n\n.env-data {\n display: flex;\n flex-wrap: wrap;\n gap: 6px 14px;\n}\n\n.data-tag {\n font-size: 12px;\n color: $text-secondary;\n\n &.warn {\n color: #f44336;\n font-weight: bold;\n }\n}\n</style>\n"],"mappings":"AA4BA,SAAAA,iBAAA;AAEA;EACAC,IAAA;EACAC,KAAA;IACA;MACAC,IAAA;MACAC,WAAA;MACAC,MAAA;IACA;EACA;EACA,MAAAC,QAAA;IACA,MAAAC,GAAA,SAAAP,iBAAA;IACA,KAAAG,IAAA,GAAAI,GAAA,CAAAL,IAAA,CAAAC,IAAA;IACA,KAAAK,SAAA,YAAAC,WAAA;EACA;EACAC,cAAA;IACAC,aAAA,MAAAP,WAAA;EACA;EACAQ,OAAA;IACAH,YAAA;MACA,MAAAI,OAAA,QAAAC,KAAA,CAAAC,WAAA;MACA,KAAAF,OAAA;MACA,KAAAT,WAAA,GAAAY,WAAA;QACA,SAAAX,MAAA;QACA,IAAAQ,OAAA,CAAAI,SAAA,GAAAJ,OAAA,CAAAK,YAAA,IAAAL,OAAA,CAAAM,YAAA;UACAN,OAAA,CAAAI,SAAA;QACA;UACAJ,OAAA,CAAAI,SAAA;QACA;MACA;IACA;IACAG,YAAA;MAAA,KAAAf,MAAA;IAAA;IACAgB,aAAA;MAAA,KAAAhB,MAAA;IAAA;EACA;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|