From bcff2cf9253145d0dd4b36daed70a12ecbd2ff54 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期五, 26 七月 2024 10:56:57 +0800 Subject: [PATCH] 选择宽度自适应 --- src/components/chat/chatComponents/summaryCom/components/deviceLastValue/MonitorContent.vue | 71 ++++++++++++++++++++++++++++++++--- 1 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/components/chat/chatComponents/summaryCom/components/deviceLastValue/MonitorContent.vue b/src/components/chat/chatComponents/summaryCom/components/deviceLastValue/MonitorContent.vue index b2a2bd5..59589b1 100644 --- a/src/components/chat/chatComponents/summaryCom/components/deviceLastValue/MonitorContent.vue +++ b/src/components/chat/chatComponents/summaryCom/components/deviceLastValue/MonitorContent.vue @@ -1,6 +1,6 @@ <template> <div - class="flex cursor-none" + class="flex" :class="`space-x-[${THICK_BORDER_WIDTH}px]`" :style="{ backgroundColor: BORDER_COLOR, @@ -9,7 +9,7 @@ <div :class="ROW_HEADER_CELL_CLASS" :style="{ - width: `${CELL_WIDTH}px`, + width: `${firstColWidth}px`, height: `${CELL_HEIGHT}px`, }" > @@ -20,18 +20,49 @@ :key="index" :class="CONTENT_CELL_CLASS" :style="{ - width: `${CELL_WIDTH}px`, + width: `${restColWidth}px`, height: `${CELL_HEIGHT}px`, }" > - {{ item[type] }} + <span class="cursor-pointer" @mouseover="valueMouseOver($event, item)" @mouseleave="valueMouseLeave"> + {{ item[type] }} + </span> + </div> + <div + v-show="hoverState.show && hoverState.data" + class="z-40 fixed p-2 bg-white" + style="transform-origin: center top" + :style="{ + left: hoverState.left + 'px', + top: hoverState.top + 'px', + }" + > + <div v-if="hoverState.data?.OTITLE" class="font-bold mb-1">{{ hoverState.data?.OTITLE }}</div> + <div class="w-full space-y-1"> + <div v-if="hoverState.data?.OTYPE" class="flex"> + <div class="w-8">绫诲瀷</div> + <div class="before:content-[':'] before:pr-1.5">{{ hoverState.data?.OTYPE }}</div> + </div> + <div v-if="hoverState.data?.ONAME" class="flex"> + <div class="w-8">缂栧彿</div> + <div class="before:content-[':'] before:pr-1.5">{{ hoverState.data?.ONAME }}</div> + </div> + <div v-if="hoverState.data?.[type] || hoverState.data?.[type] === 0" class="flex"> + <div class="w-8">鐩戞祴</div> + <div class="before:content-[':'] before:pr-1.5">{{ hoverState.data?.[type] }}</div> + </div> + <div class="flex" v-if="hoverState.data?.OTIME"> + <div class="w-8">鏃堕棿</div> + <div class="before:content-[':'] before:pr-1.5">{{ hoverState.data?.OTIME }}</div> + </div> + </div> </div> </div> </template> <script setup lang="ts"> -import type { PropType } from 'vue'; -import { BORDER_COLOR, CELL_HEIGHT, CELL_WIDTH, CONTENT_CELL_CLASS, ROW_HEADER_CELL_CLASS, THICK_BORDER_WIDTH } from './constants'; +import { reactive, type PropType } from 'vue'; +import { BORDER_COLOR, CELL_HEIGHT, CONTENT_CELL_CLASS, ROW_HEADER_CELL_CLASS, THICK_BORDER_WIDTH } from './constants'; import type { MonitorValue } from './types'; const props = defineProps({ /** @description 鏍囬 */ @@ -46,6 +77,34 @@ values: { type: Object as PropType<MonitorValue[]>, }, + firstColWidth: { + type: Number, + }, + + restColWidth: { + type: Number, + }, }); + +const hoverState = reactive({ + left: 0, + top: 0, + show: false, + data: null as MonitorValue, +}); + +const TIP_OFFSET = 10; +const valueMouseOver = (e, item: MonitorValue) => { + hoverState.show = true; + const { pageX, pageY } = e; + hoverState.left = pageX + TIP_OFFSET; + hoverState.top = pageY + TIP_OFFSET; + hoverState.data = item; +}; + +const valueMouseLeave = () => { + hoverState.show = false; + hoverState.data = null; +}; </script> <style scoped lang="scss"></style> -- Gitblit v1.9.3