2 İşlemeler 66365ce5ba ... d90f8a85b1

Yazar SHA1 Mesaj Tarih
  xiaohaizhao d90f8a85b1 调整样式 2 hafta önce
  xiaohaizhao 4fd164019c 调整样式 1 ay önce

+ 160 - 99
src/operation/moduleNormal/controlPanel/model/MT02/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div :class="['control',{'wrapper':wrapper}]" v-if="detail">
+  <div :class="['control', { wrapper: wrapper }]" v-if="detail">
     <div class="control-left">
       <div class="top">
         <infoPanel></infoPanel>
@@ -9,31 +9,44 @@
       </div>
     </div>
     <div class="control-content" v-if="refresh">
-      <div class="map" :style="{transform:`scale(${calcSize})`}">
-        <div style="display: inline-block;position: relative">
-          <dataBlock 
+      <div class="map" :style="{ transform: `scale(${calcSize})` }">
+        <div style="display: inline-block; position: relative">
+          <dataBlock
             v-if="detail.params.UpP"
-            :title="detail.params.UpP.paramname" 
-            :top="0" 
-            :left="50" 
-            :data="[{value:detail.params.UpP.lastvalue,unit:detail.params.UpP.unit}]"
+            :title="detail.params.UpP.paramname"
+            :data="[
+              {
+                value: detail.params.UpP.lastvalue,
+                unit: detail.params.UpP.unit,
+              },
+            ]"
           ></dataBlock>
-          <dataBlock 
-            v-if="detail.params.DownP"
-            :title="detail.params.DownP.paramname" 
-            :top="0" 
-            :left="400" 
-            :data="[{value:detail.params.DownP.lastvalue,unit:detail.params.DownP.unit}]"
-          ></dataBlock>
-          <img :src="imgUrl" alt="">
-          <div style="clear: both;"></div>
+          <view style="position: absolute; right: 35%">
+            <dataBlock
+              v-if="detail.params.DownP"
+              :title="detail.params.DownP.paramname"
+              :data="[
+                {
+                  value: detail.params.DownP.lastvalue,
+                  unit: detail.params.DownP.unit,
+                },
+              ]"
+            ></dataBlock>
+          </view>
+          <img :src="imgUrl" alt="" />
+          <div style="clear: both"></div>
         </div>
       </div>
       <div class="chart">
-        <MyChart :options="[{label:'压力历史曲线图',value:['DownP','UpP'],sumShow:true},{label:'流量历史曲线图',value:['CumFlow']}]"></MyChart>
+        <MyChart :options="options"></MyChart>
       </div>
       <div class="message-header">
-        <customBtn :btnOptions="[{label:wrapper ? '退出全屏' : '进入全屏'}]" :btn="true" style="width:70px" @clickBtn="clickBtn"></customBtn>
+        <customBtn
+          :btnOptions="[{ label: wrapper ? '退出全屏' : '进入全屏' }]"
+          :btn="true"
+          style="width: 70px"
+          @clickBtn="clickBtn"
+        ></customBtn>
         <!-- <Message></Message> -->
       </div>
     </div>
@@ -44,116 +57,159 @@
 </template>
 
 <script setup>
-import infoPanel from '../../modules/infoPanel.vue'
-import MyChart from '../../modules/MyChart.vue'
-import timeControl from './modules/timeControl.vue'
-import controlPanel from './modules/controlPanel.vue'
-import customBtn from '../../modules/customBtn.vue'
-import Message from '../../modules/message.vue'
-import dataBlock from '../../modules/dataBlock.vue'
-import updataBtn from '../../modules/updataBtn.vue'
-import {ref, defineProps, defineEmits, onMounted, provide, onBeforeMount, onUnmounted, computed, watch} from 'vue'
-import {Modal} from 'ant-design-vue'
-import { onBeforeRouteUpdate, useRouter } from 'vue-router'
-import { useAuthStore } from '@/stores/modules/auth'
-import Api from '@/api/api'
-import Http from '@/api/http'
-import utils from '@/utils/utils'
-import { calcSizeFun,setIntervalFun } from '../../modules/util.js'
+import infoPanel from "../../modules/infoPanel.vue";
+import MyChart from "../../modules/MyChart.vue";
+import timeControl from "./modules/timeControl.vue";
+import controlPanel from "./modules/controlPanel.vue";
+import customBtn from "../../modules/customBtn.vue";
+import Message from "../../modules/message.vue";
+import dataBlock from "../../modules/dataBlock.vue";
+import updataBtn from "../../modules/updataBtn.vue";
+import {
+  ref,
+  defineProps,
+  defineEmits,
+  onMounted,
+  provide,
+  onBeforeMount,
+  onUnmounted,
+  computed,
+  watch,
+} from "vue";
+import { Modal } from "ant-design-vue";
+import { onBeforeRouteUpdate, useRouter } from "vue-router";
+import { useAuthStore } from "@/stores/modules/auth";
+import Api from "@/api/api";
+import Http from "@/api/http";
+import utils from "@/utils/utils";
+import { calcSizeFun, setIntervalFun } from "../../modules/util.js";
 
+let AuthStore = useAuthStore();
 
-let AuthStore = useAuthStore()
+let router = useRouter();
+let emit = defineEmits(["onSuccess"]);
+let props = defineProps({});
 
-let router = useRouter()
-let emit = defineEmits(['onSuccess'])
-let props = defineProps({})
+let refresh = ref(true);
+let wrapper = ref(false);
 
-let refresh = ref(true)
-let wrapper = ref(false)
+let options = ref([
+  { label: "压力历史曲线图", value: ["DownP", "UpP"], sumShow: true },
+  { label: "流量历史曲线图", value: ["CumFlow"] },
+]);
 
-let detail = ref('')
+let detail = ref("");
 
 let modelList = ref([
-  {label:'就地模式',value:'LocalMode'},
-  {label:'远程开关阀模式',value:'SwitchMode'},
-  {label:'远程不利点模式',value:'DisadvantageMode'},
-  {label:'恒压控制',value:'ConstantConON'},
-  {label:'分时控制模式',value:'TimeConON'},
-])
+  { label: "就地模式", value: "LocalMode" },
+  { label: "远程开关阀模式", value: "SwitchMode" },
+  { label: "远程不利点模式", value: "DisadvantageMode" },
+  { label: "恒压控制", value: "ConstantConON" },
+  { label: "分时控制模式", value: "TimeConON" },
+]);
 
-provide('detail',detail)
-provide('modelList',modelList)
+provide("detail", detail);
+provide("modelList", modelList);
 
-let calcSize = ref(1)
+let calcSize = ref(1);
 calcSizeFun((size) => {
-  calcSize.value = size
-})
+  calcSize.value = size;
+});
 
 let imgUrl = computed(() => {
-  let arr = detail.value.attinfos.filter(item => item.usetype == 'previewImage')
-  return arr[arr.length - 1] ? arr[arr.length - 1].url : ''
-})
+  let arr = detail.value.attinfos.filter(
+    (item) => item.usetype == "previewImage"
+  );
+  return arr[arr.length - 1] ? arr[arr.length - 1].url : "";
+});
 
 let clickBtn = (tag) => {
-  tag.label == '进入全屏' ? wrapper.value = true : wrapper.value = false
-  refresh.value = false
+  tag.label == "进入全屏" ? (wrapper.value = true) : (wrapper.value = false);
+  refresh.value = false;
   setTimeout(() => {
-    refresh.value = true
-  })
-}
+    refresh.value = true;
+  });
+};
 
 let detailFun = async () => {
   let res = await Api.requested({
-    "id": "20230628084901",
-    "content": {
-      "w_deviceid": router.currentRoute.value.query.id
-    }
-  })
-  detail.value = res.data
+    id: "20230628084901",
+    content: {
+      w_deviceid: router.currentRoute.value.query.id,
+    },
+  });
+  detail.value = res.data;
 
-
-  for (let i=1;i<9;i++) {
-      detail.value.paramvalues[`start${i}`] =  (detail.value.paramvalues[`T${i}H`] !== '' ? detail.value.paramvalues[`T${i}H`] || 0 : '-') + ':' + (detail.value.paramvalues[`T${i}M`] !== '' ? detail.value.paramvalues[`T${i}M`] || 0 : '-')
-      detail.value.paramvalues[`end${i}`] =  (detail.value.paramvalues[`T${i}H1`] !== '' ? detail.value.paramvalues[`T${i}H1`] || 0 : '-') + ':' + (detail.value.paramvalues[`T${i}M1`] !== '' ? detail.value.paramvalues[`T${i}M1`] || 0 : '-')
-      detail.value.paramcmdvalues[`start${i}`] =  (detail.value.paramcmdvalues[`T${i}H`] !== '' ? detail.value.paramcmdvalues[`T${i}H`] || 0 : '-') + ':' + (detail.value.paramcmdvalues[`T${i}M`] !== '' ? detail.value.paramcmdvalues[`T${i}M`] || 0 : '-')
-      detail.value.paramcmdvalues[`end${i}`] =  (detail.value.paramcmdvalues[`T${i}H1`] !== '' ? detail.value.paramcmdvalues[`T${i}H1`] || 0 : '-') + ':' + (detail.value.paramcmdvalues[`T${i}M1`] !== '' ? detail.value.paramcmdvalues[`T${i}M1`] || 0 : '-')
+  for (let i = 1; i < 9; i++) {
+    detail.value.paramvalues[`start${i}`] =
+      (detail.value.paramvalues[`T${i}H`] !== ""
+        ? detail.value.paramvalues[`T${i}H`] || 0
+        : "-") +
+      ":" +
+      (detail.value.paramvalues[`T${i}M`] !== ""
+        ? detail.value.paramvalues[`T${i}M`] || 0
+        : "-");
+    detail.value.paramvalues[`end${i}`] =
+      (detail.value.paramvalues[`T${i}H1`] !== ""
+        ? detail.value.paramvalues[`T${i}H1`] || 0
+        : "-") +
+      ":" +
+      (detail.value.paramvalues[`T${i}M1`] !== ""
+        ? detail.value.paramvalues[`T${i}M1`] || 0
+        : "-");
+    detail.value.paramcmdvalues[`start${i}`] =
+      (detail.value.paramcmdvalues[`T${i}H`] !== ""
+        ? detail.value.paramcmdvalues[`T${i}H`] || 0
+        : "-") +
+      ":" +
+      (detail.value.paramcmdvalues[`T${i}M`] !== ""
+        ? detail.value.paramcmdvalues[`T${i}M`] || 0
+        : "-");
+    detail.value.paramcmdvalues[`end${i}`] =
+      (detail.value.paramcmdvalues[`T${i}H1`] !== ""
+        ? detail.value.paramcmdvalues[`T${i}H1`] || 0
+        : "-") +
+      ":" +
+      (detail.value.paramcmdvalues[`T${i}M1`] !== ""
+        ? detail.value.paramcmdvalues[`T${i}M1`] || 0
+        : "-");
   }
 
-  modelList.value.forEach(item => {
+  modelList.value.forEach((item) => {
     console.log(detail.value.paramvalues[item.value]);
-    if (detail.value.paramvalues[item.value] == '1') {
-      detail.value.paramvalues.控制模式 = item.label
+    if (detail.value.paramvalues[item.value] == "1") {
+      detail.value.paramvalues.控制模式 = item.label;
     }
-    if (detail.value.paramcmdvalues[item.value] == '1') {
-      detail.value.paramcmdvalues.控制模式 = item.label
+    if (detail.value.paramcmdvalues[item.value] == "1") {
+      detail.value.paramcmdvalues.控制模式 = item.label;
     }
-  })
+  });
 
   if (!detail.value.isfeedback) {
-    let keys = Object.keys(detail.value.paramcmdvalues)
-    keys.forEach(item => {
-      detail.value.paramcmdvalues[item] = detail.value.paramvalues[item]
-    })
+    let keys = Object.keys(detail.value.paramcmdvalues);
+    keys.forEach((item) => {
+      detail.value.paramcmdvalues[item] = detail.value.paramvalues[item];
+    });
   }
 
   console.log(res.data);
-}
+};
 
-provide('detailFun',detailFun)
+provide("detailFun", detailFun);
 
 //刷新数据
-let timer = setIntervalFun(detailFun,router.currentRoute.value.query.id)
+let timer = setIntervalFun(detailFun, router.currentRoute.value.query.id);
 
-onMounted( () => {
-  detailFun()
-})
+onMounted(() => {
+  detailFun();
+});
 onUnmounted(() => {
-  clearInterval(timer)
-})
+  clearInterval(timer);
+});
 </script>
 
 <style scoped>
-*{
+* {
   box-sizing: border-box;
 }
 .control {
@@ -161,7 +217,12 @@ onUnmounted(() => {
   height: calc(100vh - 60px);
   width: 100%;
   padding: 10px 0;
-  background: linear-gradient(90deg, #001D6A 0%, #0060B2 82%, #007BD5 100%) !important;
+  background: linear-gradient(
+    90deg,
+    #001d6a 0%,
+    #0060b2 82%,
+    #007bd5 100%
+  ) !important;
 }
 .wrapper {
   position: absolute;
@@ -177,23 +238,23 @@ onUnmounted(() => {
   display: flex;
   flex-direction: column;
   justify-content: space-between;
-} 
+}
 .control .control-left .top {
   width: 100%;
   height: 49.5%;
-  background:  rgb(0, 0, 0,.05);
+  background: rgb(0, 0, 0, 0.05);
   padding: 10px;
 }
 .control .control-left .bottom {
   width: 100%;
   min-width: 290px;
   height: 49.5%;
-  background:  rgb(0, 0, 0,.05);
+  background: rgb(0, 0, 0, 0.05);
   padding: 10px;
 }
 
 .control .control-content {
-  flex:1 ;
+  flex: 1;
   height: 100%;
   padding: 0 10px;
   display: flex;
@@ -231,14 +292,14 @@ onUnmounted(() => {
 .control .control-content .chart {
   width: 100%;
   height: 255px;
-  background:  rgb(0, 0, 0,.05);
+  background: rgb(0, 0, 0, 0.05);
   padding: 0 10px 10px 0;
 }
 
 .control .control-right {
   width: 272px;
   height: 100%;
-  background:  rgb(0, 0, 0,.05);
+  background: rgb(0, 0, 0, 0.05);
   padding: 10px;
 }
 .stop {

+ 38 - 11
src/operation/moduleNormal/controlPanel/modules/dataBlock.vue

@@ -17,7 +17,7 @@
         class="content"
         v-if="!Object.keys($slots).filter((item) => item != 'handle').length"
       >
-        <div class="item" v-for="(item, index) in data">
+        <div class="item" v-for="item in data" :key="item.title">
           <span class="item-title" v-if="item.title">{{ item.title }}</span>
           <div class="value">
             <span :style="[{ fontSize: item.fontSize }]">{{ item.value }}</span>
@@ -34,9 +34,36 @@
 </template>
 
 <script setup>
-import { ref, defineProps, defineEmits } from "vue";
+import { ref, defineProps, defineEmits, onMounted } from "vue";
+
 let emit = defineEmits([]);
 let props = defineProps(["title", "data", "top", "left"]);
+
+// 动态调整根字体大小
+onMounted(() => {
+  const setRootFontSize = () => {
+    const baseSize = 18; // 增大基础字体大小
+    const screenWidth = document.documentElement.clientWidth;
+
+    // 根据屏幕宽度调整缩放比例
+    let scale;
+    if (screenWidth <= 1280) {
+      scale = screenWidth / 1280; // 以1280px为基准
+    } else if (screenWidth > 1280 && screenWidth <= 1920) {
+      scale = screenWidth / 1920; // 以1920px为基准
+    } else if (screenWidth > 1920 && screenWidth <= 2560) {
+      scale = screenWidth / 2560; // 以2560px为基准
+    } else {
+      scale = screenWidth / 3840; // 以3840px为基准
+    }
+
+    document.documentElement.style.fontSize =
+      baseSize * Math.min(scale, 1.5) + "px"; // 限制最大缩放
+  };
+
+  setRootFontSize();
+  window.addEventListener("resize", setRootFontSize);
+});
 </script>
 
 <style scoped>
@@ -45,32 +72,32 @@ let props = defineProps(["title", "data", "top", "left"]);
 }
 .data-block {
   background: rgba(0, 0, 0, 0.25);
-  width: 9.524vw;
+  width: 9.524rem; /* 使用 rem 替代 vw */
   color: #ffffff;
 }
 
 .header {
 }
 .header .title {
-  background: linear-gradient(-60deg, transparent 1.488vw, rgba(255, 164, 6));
-  padding: 0.119vw 0.476vw 0.119vw 0.476vw;
-  margin-bottom: 0.179vw;
+  background: linear-gradient(-60deg, transparent 1.488rem, rgba(255, 164, 6));
+  padding: 0.119rem 0.476rem;
+  margin-bottom: 0.179rem;
   position: relative;
-  font-size: 0.595vw;
+  font-size: 0.595rem;
 }
 .content {
-  padding: 0 0.298vw 0.298vw 0.298vw;
+  padding: 0 0.298rem 0.298rem 0.298rem;
 }
 .content .item {
 }
 .content .item .item-title {
-  font-size: 0.595vw;
+  font-size: 0.595rem;
 }
 .content .item .value {
   display: flex;
   justify-content: space-between;
-  border-bottom: 0.060vw solid rgba(255, 255, 255, 0.1);
-  font-size: 0.952vw;
+  border-bottom: 0.06rem solid rgba(255, 255, 255, 0.1);
+  font-size: 0.952rem;
 }
 .content .item:last-child {
   border: none;