Selaa lähdekoodia

182矿压修改-提交

lxh 5 kuukautta sitten
vanhempi
commit
9cfd8ea425

+ 211 - 0
src/views/vent/monitorManager/betKy/ceshi.json

@@ -0,0 +1,211 @@
+{
+        "cmd": "monitordata",
+        "msgTxt": [
+            {
+                "datalist": [
+                    {
+                        "msgType": null,
+                        "deviceID": "1824340539909022468",
+                        "strname": "12202工作面支架",
+                        "strinstallpos": "12202工作面支架",
+                        "fsectarea": "null",
+                        "planedVa": null,
+                        "regulation": null,
+                        "stationname": "12202支架",
+                        "stationtype": "redis",
+                        "deviceType": "Minepressure_Support",
+                        "typeName": "支架",
+                        "netStatus": 1,
+                        "warnFlag": 0,
+                        "warnLevel": 0,
+                        "warnLevel_str": "正常",
+                        "syswarnLevel": null,
+                        "syswarnLevel_str": null,
+                        "syswarnLevel_des": null,
+                        "warnTime": null,
+                        "readTime": "2025-12-01 14:28:50",
+                        "warnDes": "",
+                        "frontGateOpenCtrl": null,
+                        "rearGateOpenCtrl": null,
+                        "readData": {
+                            "SLD116_RightPressure": "411",
+                            "SLD50_RightPressure": "377",
+                            "SLD132_RightPressure": "330",
+                            "SLD137_RightPressure": "350",
+                            "SLD18_RightPressure": "342",
+                            "SLD111_RightPressure": "280",
+                            "SLD71_RightPressure": "330",
+                            "SLD39_RightPressure": "385",
+                            "SLD92_RightPressure": "280",
+                            "SLD8_RightPressure": "323",
+                            "SLD80_RightPressure": "310",
+                            "SLD97_RightPressure": "393",
+                            "SLD13_RightPressure": "351",
+                            "SLD3_RightPressure": "338",
+                            "SLD34_RightPressure": "391",
+                            "SLD55_RightPressure": "280",
+                            "SLD76_RightPressure": "300",
+                            "SLD120_RightPressure": "408",
+                            "SLD123_RightPressure": "290",
+                            "SLD6_RightPressure": "292",
+                            "SLD102_RightPressure": "310",
+                            "SLD25_RightPressure": "354",
+                            "SLD134_RightPressure": "290",
+                            "SLD113_RightPressure": "399",
+                            "SLD46_RightPressure": "401",
+                            "SLD67_RightPressure": "290",
+                            "SLD88_RightPressure": "320",
+                            "SLD94_RightPressure": "290",
+                            "SLD41_RightPressure":  "383",
+                            "SLD83_RightPressure": "280",
+                            "SLD107_RightPressure": "320",
+                            "SLD128_RightPressure": "416",
+                            "SLD62_RightPressure": "414",
+                            "SLD20_RightPressure": "368",
+                            "SLD99_RightPressure": "340",
+                            "SLD57_RightPressure": "399",
+                            "SLD78_RightPressure": "330",
+                            "SLD23_RightPressure": "362",
+                            "SLD44_RightPressure": "407",
+                            "SLD65_RightPressure": "300",
+                            "SLD86_RightPressure": "290",
+                            "SLD87_RightPressure": "320",
+                            "SLD90_RightPressure": "290",
+                            "SLD1_RightPressure": "285",
+                            "SLD101_RightPressure": "330",
+                            "SLD122_RightPressure": "411",
+                            "SLD36_RightPressure": "403",
+                            "SLD15_RightPressure": "366",
+                            "SLD114_RightPressure": "295",
+                            "SLD135_RightPressure": "290",
+                            "SLD64_RightPressure": "280",
+                            "SLD85_RightPressure": "300",
+                            "SLD43_RightPressure": "375",
+                            "SLD22_RightPressure": "373",
+                            "SLD91_RightPressure": "300",
+                            "SLD9_RightPressure": "314",
+                            "SLD70_RightPressure": "350",
+                            "SLD79_RightPressure": "350",
+                            "SLD121_RightPressure": "350",
+                            "SLD16_RightPressure": "384",
+                            "SLD58_RightPressure": "310",
+                            "SLD37_RightPressure": "400",
+                            "SLD136_RightPressure": "320",
+                            "SLD115_RightPressure": "389",
+                            "SLD100_RightPressure": "336",
+                            "SLD109_RightPressure": "402",
+                            "SLD108_RightPressure": "358",
+                            "SLD103_RightPressure": "280",
+                            "SLD21_RightPressure": "368",
+                            "SLD84_RightPressure": "310",
+                            "SLD63_RightPressure": "320",
+                            "SLD42_RightPressure": "390",
+                            "sign": "0",
+                            "SLD47_RightPressure": "379",
+                            "SLD26_RightPressure": "358",
+                            "SLD7_RightPressure": "340",
+                            "SLD124_RightPressure": "387",
+                            "SLD17_RightPressure": "337",
+                            "SLD59_RightPressure": "404",
+                            "SLD38_RightPressure": "396",
+                            "SLD133_RightPressure": "393",
+                            "SLD112_RightPressure": "359",
+                            "SLD89_RightPressure": "320",
+                            "SLD68_RightPressure": "350",
+                            "SLD129_RightPressure": "340",
+                            "SLD56_RightPressure": "290",
+                            "SLD77_RightPressure": "280",
+                            "SLD98_RightPressure": "280",
+                            "SLD35_RightPressure": "410",
+                            "SLD14_RightPressure": "302",
+                            "SLD93_RightPressure": "340",
+                            "SLD117_RightPressure": "382",
+                            "SLD138_RightPressure": "300",
+                            "SLD72_RightPressure": "396",
+                            "SLD19_RightPressure": "353",
+                            "SLD51_RightPressure": "409",
+                            "SLD30_RightPressure": "384",
+                            "SLD66_RightPressure": "290",
+                            "SLD24_RightPressure": "365",
+                            "SLD45_RightPressure": "403",
+                            "SLD2_RightPressure": "321",
+                            "SLD140_RightPressure": "330",
+                            "SLD29_RightPressure": "402",
+                            "SLD5_RightPressure": "303",
+                            "SLD73_RightPressure": "350",
+                            "SLD52_RightPressure": "406",
+                            "SLD31_RightPressure": "375",
+                            "SLD139_RightPressure": "290",
+                            "SLD118_RightPressure": "400",
+                            "SLD119_RightPressure": "290",
+                            "SLD130_RightPressure": "290",
+                            "SLD10_RightPressure": "353",
+                            "SLD11_RightPressure": "378",
+                            "SLD74_RightPressure": "280",
+                            "SLD82_RightPressure": "403",
+                            "SLD32_RightPressure": "366",
+                            "SLD40_RightPressure": "4",
+                            "SLD95_RightPressure": "411",
+                            "SLD106_RightPressure": "411",
+                            "SLD127_RightPressure": "374",
+                            "SLD53_RightPressure": "350",
+                            "SLD49_RightPressure": "395",
+                            "SLD28_RightPressure": "352",
+                            "SLD61_RightPressure": "310",
+                            "SLD110_RightPressure": "280",
+                            "SLD131_RightPressure": "330",
+                            "SLD69_RightPressure": "310",
+                            "SLD48_RightPressure": "374",
+                            "SLD27_RightPressure": "347",
+                            "SLD125_RightPressure": "411",
+                            "tTime": "2025-12-01 14:28:49",
+                            "SLD104_RightPressure": "311",
+                            "SLD105_RightPressure": "392",
+                            "SLD126_RightPressure": "310",
+                            "SLD33_RightPressure": "394",
+                            "SLD12_RightPressure": "347",
+                            "SLD4_RightPressure": "336",
+                            "SLD54_RightPressure": "290",
+                            "isRun": "-2",
+                            "SLD60_RightPressure": "389",
+                            "SLD75_RightPressure": "411",
+                            "SLD81_RightPressure": "350",
+                            "SLD96_RightPressure": "411"
+                        },
+                        "readDataDes": null,
+                        "limits": null,
+                        "summaryHour": [],
+                        "summaryDay": [],
+                        "history": [],
+                        "dayhistory": [],
+                        "totalInfo": null,
+                        "sign": null,
+                        "cameras": [],
+                        "links": [],
+                        "avgParam": {},
+                        "other1": null,
+                        "other2": null,
+                        "other3": null,
+                        "remarkInfo": null,
+                        "linkInfo": null,
+                        "addrIndex": 8,
+                        "warnLogNotOkCount": 0,
+                        "otherInfo": null,
+                        "orderNum": 0,
+                        "testFlag": 0,
+                        "strRemark": null,
+                        "zjnum": "143",
+                        "deviceId": 1824340539909022468
+                    }
+                ],
+                "avginfo": {
+                    "warnFlag": {
+                        "value": 0
+                    }
+                },
+                "typeName": "矿压",
+                "type": "Minepressure",
+                "locallist": []
+            }
+        ]
+    }

+ 288 - 285
src/views/vent/monitorManager/betKy/index.vue

@@ -1,31 +1,19 @@
 <template>
   <div class="title-text">{{ selectData.strinstallpos || selectData.strname }} </div>
   <div class="pressure-monitor">
-    <a-button
-      preIcon="ant-design:rollback-outlined"
-      type="text"
-      size="small"
-      style="position: absolute; left: 15px; top: 65px; color: #fff; z-index: 9999"
-      @click="getBack"
-    >
+    <a-button preIcon="ant-design:rollback-outlined" type="text" size="small"
+      style="position: absolute; left: 15px; top: 65px; color: #fff; z-index: 9999" @click="getBack">
       返回
     </a-button>
     <div class="table-container">
-      <MonitorTable
-        ref="MonitorDataTable"
-        class="monitor-table"
-        :dataSource="dataSource"
-        :columnsType="deviceType"
-        @selectRow="getSelectRow"
-        :scroll="{ y: scroll.y - 40 }"
-        design-scope="gate-monitor"
-        title="支架监测"
-        :isShowPagination="false"
-      >
+      <MonitorTable ref="MonitorDataTable" class="monitor-table" :dataSource="dataSource" :columnsType="deviceType"
+        @selectRow="getSelectRow" :scroll="{ y: scroll.y - 40 }" design-scope="gate-monitor" title="支架监测"
+        :isShowPagination="false">
         <template #filterCell="{ column, record }">
-          <a-tag v-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == 0 ? 'green' : record.warnFlag == 1 ? '#FF5812' : 'gray'">
-            {{ record.warnFlag == 0 ? '正常' : record.warnFlag == 1 ? '报警' : record.warnFlag == 2 ? '断开' : '未监测' }}</a-tag
-          >
+          <a-tag v-if="column.dataIndex === 'warnFlag'"
+            :color="record.warnFlag == 0 ? 'green' : record.warnFlag == 1 ? '#FF5812' : 'gray'">
+            {{ record.warnFlag == 0 ? '正常' : record.warnFlag == 1 ? '报警' : record.warnFlag == 2 ? '断开' : '未监测'
+            }}</a-tag>
           <template v-else-if="column.dataIndex === 'warnLevel'">
             <a-tag v-if="record.warnLevel == '101'" color="green">低风险</a-tag>
             <a-tag v-else-if="record.warnLevel == '102'" color="#FF5812">一般风险</a-tag>
@@ -73,58 +61,66 @@
 </template>
 
 <script setup lang="ts">
-  import { ref, onMounted, computed, reactive, onUnmounted } from 'vue';
-  import * as echarts from 'echarts';
-  import { list } from './main.api';
-  import MonitorTable from '../comment/MonitorTable.vue';
-  import { DoubleLeftOutlined } from '@ant-design/icons-vue';
-  import { useRouter } from 'vue-router';
-  import { usePermission } from '/@/hooks/web/usePermission';
+import { ref, onMounted, computed, reactive, onUnmounted } from 'vue';
+import * as echarts from 'echarts';
+import { list } from './main.api';
+import MonitorTable from '../comment/MonitorTable.vue';
+import { DoubleLeftOutlined } from '@ant-design/icons-vue';
+import { useRouter } from 'vue-router';
+import { usePermission } from '/@/hooks/web/usePermission';
+import { useGlobSetting } from '/@/hooks/setting';
+import ceshi from './ceshi.json'
 
-  const { hasPermission } = usePermission();
-  const router = useRouter();
-  const chartEl = ref<HTMLElement>();
-  const currentTime = computed(() => new Date().toLocaleString());
-  const scroll = reactive({
-    y: 230,
-  });
-  const deviceType = ref('Minepressure');
-  const dataSource = ref<Array<any>>([]);
-  const IdList = ref<Array<{ deviceId: string; strname: string }>>([]);
-  const chartData = ref<Array<any>>([]);
-  const chartDataShow = ref<Array<any>>([]);
-  const selectRowIndex = ref(-1); // 选中行
-  const selectData = ref<any>({});
-  const colorRanges = [
-    { min: -Infinity, max: 0, color: '#999999', label: '异常数据' },
-    { min: 0, max: 252, color: '#5470c6', label: '初撑力不足' },
-    { min: 252, max: 375, color: '#91cc75', label: '正常' },
-    { min: 375, max: 425, color: '#fac858', label: '轻微来压' },
-    { min: 425, max: 475, color: '#ee6666', label: '强来压' },
-    { min: 475, max: Infinity, color: '#fc8452', label: '剧烈来压' },
-  ];
-  const dataRanges = [
-    { min: -Infinity, max: 0, color: '#999', label: '<0' },
-    { min: 0, max: 252, color: '#5470c6', label: '0-252' },
-    { min: 252, max: 375, color: '#91cc75', label: '252-375' },
-    { min: 375, max: 425, color: '#fac858', label: '375-425' },
-    { min: 425, max: 475, color: '#ee6666', label: '425-475' },
-    { min: 475, max: Infinity, color: '#fc8452', label: '>475' },
-  ];
+const { hasPermission } = usePermission();
+const router = useRouter();
+const chartEl = ref<HTMLElement>();
+const currentTime = computed(() => new Date().toLocaleString());
+const scroll = reactive({
+  y: 230,
+});
+const deviceType = ref('Minepressure_monitor');
+const dataSource = ref<Array<any>>([]);
+const IdList = ref<Array<{ deviceId: string; strname: string }>>([]);
+const chartData = ref<Array<any>>([]);
+const chartDataShow = ref<Array<any>>([]);
+const selectRowIndex = ref(-1); // 选中行
+const selectData = ref<any>({});
+const colorRanges = [
+  { min: -Infinity, max: 0, color: '#999999', label: '异常数据' },
+  { min: 0, max: 252, color: '#5470c6', label: '初撑力不足' },
+  { min: 252, max: 375, color: '#91cc75', label: '正常' },
+  { min: 375, max: 425, color: '#fac858', label: '轻微来压' },
+  { min: 425, max: 475, color: '#ee6666', label: '强来压' },
+  { min: 475, max: Infinity, color: '#fc8452', label: '剧烈来压' },
+];
+const dataRanges = [
+  { min: -Infinity, max: 0, color: '#999', label: '<0' },
+  { min: 0, max: 252, color: '#5470c6', label: '0-252' },
+  { min: 252, max: 375, color: '#91cc75', label: '252-375' },
+  { min: 375, max: 425, color: '#fac858', label: '375-425' },
+  { min: 425, max: 475, color: '#ee6666', label: '425-475' },
+  { min: 475, max: Infinity, color: '#fc8452', label: '>475' },
+];
 
-  const legendData = colorRanges.map((item) => ({
-    color: item.color,
-    label: item.label,
-  }));
+const legendData = colorRanges.map((item) => ({
+  color: item.color,
+  label: item.label,
+}));
 
-  let timer: null | NodeJS.Timeout = undefined;
+let timer: null | NodeJS.Timeout = undefined;
 
-  async function getDataSource(flag?) {
-    if (timer) timer = null;
-    if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(
-        async () => {
-          let res = await list({ devicetype: 'Minepressure', pagetype: 'normal' });
+async function getDataSource(flag?) {
+  if (timer) timer = null;
+  if (Object.prototype.toString.call(timer) === '[object Null]') {
+    timer = setTimeout(
+      async () => {
+        let res
+        const { sysOrgCode } = useGlobSetting();
+        if (sysOrgCode == 'A02A02') {
+           res=ceshi
+        } else {
+           res = await list({ devicetype: 'Minepressure', pagetype: 'normal' });
+        }
           const dataArr = res.msgTxt[0].datalist || [];
           dataSource.value = [];
           IdList.value = [];
@@ -144,252 +140,259 @@
           if (timer) {
             getDataSource();
           }
-        },
-        flag ? 0 : 1000
-      );
-    }
-  }
-  // 切换检测数据
-  async function getSelectRow(selectRow, index) {
-    if (!selectRow) return;
-    selectRowIndex.value = index;
-    chartDataShow.value = chartData.value[index];
-    initChart();
+      },
+      flag ? 0 : 1000
+    );
   }
-  function initChart() {
-    if (!chartEl.value) return;
-    const chart = echarts.init(chartEl.value);
-    const data = chartDataShow.value;
+}
+// 切换检测数据
+async function getSelectRow(selectRow, index) {
+  if (!selectRow) return;
+  selectRowIndex.value = index;
+  chartDataShow.value = chartData.value[index];
+  initChart();
+}
+function initChart() {
+  if (!chartEl.value) return;
+  const chart = echarts.init(chartEl.value);
+  const data = chartDataShow.value;
 
-    const option = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: (params: any) => {
-          const value = params[0].value;
-          const range = colorRanges.find((r) => value >= r.min && value < r.max);
-          return `${params[0].dataIndex + 1}#<br/>
+  const option = {
+    tooltip: {
+      trigger: 'axis',
+      formatter: (params: any) => {
+        const value = params[0].value;
+        const range = colorRanges.find((r) => value >= r.min && value < r.max);
+        return `${params[0].dataIndex + 1}#<br/>
                 值: ${value}bar<br/>
                 状态: ${range?.label || '未知'}`;
-        },
       },
-      dataZoom: [
-        {
-          type: 'inside',
-          start: 0,
-          end: 100,
-          xAxisIndex: [0],
-        },
-        {
-          type: 'slider',
-          start: 0,
-          end: 100,
-          xAxisIndex: [0],
-          bottom: 10,
-          height: 10,
-        },
-      ],
-      xAxis: {
-        type: 'category',
-        data: data.map((_, i) => `${i + 1}#`),
-        axisLabel: {
-          interval: 1,
-          rotate: 45,
-          color: '#0ff', // 标签颜色
-        },
+    },
+    dataZoom: [
+      {
+        type: 'inside',
+        start: 0,
+        end: 100,
+        xAxisIndex: [0],
       },
-      yAxis: {
-        type: 'value',
-        name: '矿压值(bar)',
-        min: -50,
-        max: 600,
-        splitLine: {
-          show: true,
-          lineStyle: {
-            color: '#eeeeee55', // 设置Y轴颜色
-          },
-        },
-        axisLabel: {
-          margin: 15, // 控制刻度标签与轴线之间的距离
-          fontSize: 12, // 标签字体大小
-          color: '#0ff', // 标签颜色
-        },
-        nameTextStyle: {
-          color: '#0ff',
+      {
+        type: 'slider',
+        start: 0,
+        end: 100,
+        xAxisIndex: [0],
+        bottom: 10,
+        height: 10,
+      },
+    ],
+    xAxis: {
+      type: 'category',
+      data: data.map((_, i) => `${i + 1}#`),
+      axisLabel: {
+        interval: 1,
+        rotate: 45,
+        color: '#0ff', // 标签颜色
+      },
+    },
+    yAxis: {
+      type: 'value',
+      name: '矿压值(bar)',
+      min: -50,
+      max: 600,
+      splitLine: {
+        show: true,
+        lineStyle: {
+          color: '#eeeeee55', // 设置Y轴颜色
         },
       },
-      series: [
-        {
-          data: data.map((value) => ({
-            value,
-            itemStyle: {
-              color: colorRanges.find((r) => value >= r.min && value < r.max)?.color,
-            },
-          })),
-          type: 'bar',
-          barWidth: '60%',
-          label: {
-            show: true,
-            position: 'top',
-            formatter: '{c}',
-            color: '#fff',
-            textShadowColor: '#333', // 阴影颜色
-            textShadowBlur: 0, // 阴影模糊半径
-
-            textBorderColor: '#333', // 描边颜色
-            textBorderWidth: 1, // 描边宽度
+      axisLabel: {
+        margin: 15, // 控制刻度标签与轴线之间的距离
+        fontSize: 12, // 标签字体大小
+        color: '#0ff', // 标签颜色
+      },
+      nameTextStyle: {
+        color: '#0ff',
+      },
+    },
+    series: [
+      {
+        data: data.map((value) => ({
+          value,
+          itemStyle: {
+            color: colorRanges.find((r) => value >= r.min && value < r.max)?.color,
           },
+        })),
+        type: 'bar',
+        barWidth: '60%',
+        label: {
+          show: true,
+          position: 'top',
+          formatter: '{c}',
+          color: '#fff',
+          textShadowColor: '#333', // 阴影颜色
+          textShadowBlur: 0, // 阴影模糊半径
+
+          textBorderColor: '#333', // 描边颜色
+          textBorderWidth: 1, // 描边宽度
         },
-      ],
-      grid: {
-        left: '10',
-        right: '15',
-        bottom: '20',
-        top: '50',
-        containLabel: true,
       },
-    };
-    chart.setOption(option);
-    window.addEventListener('resize', () => chart.resize());
+    ],
+    grid: {
+      left: '10',
+      right: '15',
+      bottom: '20',
+      top: '50',
+      containLabel: true,
+    },
+  };
+  chart.setOption(option);
+  window.addEventListener('resize', () => chart.resize());
+}
+function getBack() {
+  router.push('/monitorChannel/monitor-alarm-home');
+}
+onMounted(async () => {
+  timer = null;
+  await getDataSource(1);
+  initChart();
+});
+onUnmounted(() => {
+  if (timer) {
+    clearInterval(timer);
   }
-  function getBack() {
-    router.push('/monitorChannel/monitor-alarm-home');
-  }
-  onMounted(async () => {
-    timer = null;
-    await getDataSource(1);
-    initChart();
-  });
-  onUnmounted(() => {
-    if (timer) {
-      clearInterval(timer);
-    }
-    timer = undefined;
-  });
+  timer = undefined;
+});
 </script>
 
 <style lang="less" scoped>
-  .title-text {
-    position: absolute;
-    color: #fff;
-    width: 100%;
-    height: 32px;
-    text-align: center;
-    top: 52px;
-    z-index: 9999;
-  }
-  .pressure-monitor {
-    width: 100%;
-    height: 100%;
-    padding: 10px 10px 15px 10px;
-    box-sizing: border-box;
-    position: relative;
-  }
+.title-text {
+  position: absolute;
+  color: #fff;
+  width: 100%;
+  height: 32px;
+  text-align: center;
+  top: 52px;
+  z-index: 9999;
+}
 
-  .time-display {
-    color: #fff;
-    font-size: 14px;
-  }
+.pressure-monitor {
+  width: 100%;
+  height: 100%;
+  padding: 10px 10px 15px 10px;
+  box-sizing: border-box;
+  position: relative;
+}
 
-  .table-container {
-    width: 100%;
-    height: 250px;
-    border-radius: 8px;
-    padding: 15px 20px;
-    margin-top: 80px;
-    border-bottom: 1px solid var(--vent-table-thead-border);
-    background-color: #ffffff08;
-  }
+.time-display {
+  color: #fff;
+  font-size: 14px;
+}
 
-  .chart-box {
-    margin-top: 10px;
-    border: 1px solid var(--vent-btn-primary-border-color);
-    position: relative;
-    .icon {
-      width: 100%;
-      color: var(--vent-table-thead-border);
-      font-size: 12px;
-      transform: rotate(-90deg);
-      position: absolute;
-      top: -12px;
-    }
-    .chart-container {
-      width: 100%;
-      height: 400px;
-      border-radius: 8px;
-      padding: 5px;
-    }
-    .info-panel {
-      display: grid;
-      grid-template-columns: 1fr 1fr;
-      gap: 20px;
-      padding: 20px 20px 10px 20px;
-    }
-    background-color: #ffffff08;
-  }
-  .chart {
-    width: 100%;
-    height: 100%;
-  }
+.table-container {
+  width: 100%;
+  height: 250px;
+  border-radius: 8px;
+  padding: 15px 20px;
+  margin-top: 80px;
+  border-bottom: 1px solid var(--vent-table-thead-border);
+  background-color: #ffffff08;
+}
 
-  .legend-section,
-  .range-section {
-    border-radius: 8px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+.chart-box {
+  margin-top: 10px;
+  border: 1px solid var(--vent-btn-primary-border-color);
+  position: relative;
+
+  .icon {
+    width: 100%;
+    color: var(--vent-table-thead-border);
+    font-size: 12px;
+    transform: rotate(-90deg);
+    position: absolute;
+    top: -12px;
   }
 
-  h3 {
+  .chart-container {
     width: 100%;
-    color: #fff;
-    margin-top: 0;
-    margin-bottom: 15px;
-    font-size: 16px;
-    padding-bottom: 8px;
-    border-bottom: 1px solid var(--vent-btn-primary-border-color);
-    position: relative;
-    display: inline-block;
-    padding-left: 20px;
-    &::after {
-      content: '';
-      position: absolute;
-      display: block;
-      width: 4px;
-      height: 12px;
-      top: 6px;
-      left: 10px;
-      background: #45d3fd;
-      border-radius: 4px;
-    }
+    height: 400px;
+    border-radius: 8px;
+    padding: 5px;
   }
 
-  .legend-grid,
-  .range-grid {
+  .info-panel {
     display: grid;
-    grid-template-columns: repeat(2, 1fr);
-    gap: 12px;
-    padding-left: 40px;
+    grid-template-columns: 1fr 1fr;
+    gap: 20px;
+    padding: 20px 20px 10px 20px;
   }
 
-  .legend-item,
-  .range-item {
-    display: flex;
-    align-items: center;
-  }
+  background-color: #ffffff08;
+}
+
+.chart {
+  width: 100%;
+  height: 100%;
+}
 
-  .color-indicator {
-    display: inline-block;
-    width: 18px;
-    height: 18px;
+.legend-section,
+.range-section {
+  border-radius: 8px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+h3 {
+  width: 100%;
+  color: #fff;
+  margin-top: 0;
+  margin-bottom: 15px;
+  font-size: 16px;
+  padding-bottom: 8px;
+  border-bottom: 1px solid var(--vent-btn-primary-border-color);
+  position: relative;
+  display: inline-block;
+  padding-left: 20px;
+
+  &::after {
+    content: '';
+    position: absolute;
+    display: block;
+    width: 4px;
+    height: 12px;
+    top: 6px;
+    left: 10px;
+    background: #45d3fd;
     border-radius: 4px;
-    margin-right: 8px;
   }
+}
 
-  .legend-text,
-  .range-text {
-    font-size: 14px;
-    color: #fff;
-  }
+.legend-grid,
+.range-grid {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 12px;
+  padding-left: 40px;
+}
 
-  .range-text {
-    font-family: monospace;
-  }
+.legend-item,
+.range-item {
+  display: flex;
+  align-items: center;
+}
+
+.color-indicator {
+  display: inline-block;
+  width: 18px;
+  height: 18px;
+  border-radius: 4px;
+  margin-right: 8px;
+}
+
+.legend-text,
+.range-text {
+  font-size: 14px;
+  color: #fff;
+}
+
+.range-text {
+  font-family: monospace;
+}
 </style>