gr 2 rokov pred
rodič
commit
e4978d9ee8

+ 45 - 5
package-lock.json

@@ -2605,6 +2605,11 @@
         "lodash": "^4.17.14"
       }
     },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
     "at-least-node": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -2625,6 +2630,16 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "axios": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.1.3.tgz",
+      "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==",
+      "requires": {
+        "follow-redirects": "^1.15.0",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
     "babel-loader": {
       "version": "8.2.5",
       "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz",
@@ -3092,6 +3107,14 @@
       "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
     "commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@@ -3622,6 +3645,11 @@
         "object-keys": "^1.1.1"
       }
     },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+    },
     "depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@@ -4547,8 +4575,17 @@
     "follow-redirects": {
       "version": "1.15.2",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
-      "dev": true
+      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+    },
+    "form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      }
     },
     "forwarded": {
       "version": "0.2.0",
@@ -5637,14 +5674,12 @@
     "mime-db": {
       "version": "1.52.0",
       "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
     },
     "mime-types": {
       "version": "2.1.35",
       "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
       "requires": {
         "mime-db": "1.52.0"
       }
@@ -6658,6 +6693,11 @@
         }
       }
     },
+    "proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",

+ 1 - 0
package.json

@@ -9,6 +9,7 @@
   },
   "dependencies": {
     "@vueuse/core": "^9.3.1",
+    "axios": "^1.1.3",
     "core-js": "^3.8.3",
     "echarts": "^5.4.0",
     "echarts-gl": "^2.0.9",

+ 2 - 2
src/echarts/options.js

@@ -467,14 +467,14 @@ export function setWaterLevel(ele, barData) {
 	}
 
 	let maxData = [1000];
-	let barWidth = 108
+	let barWidth = 90
 
 	let option = {
 		background: 'transparent',
 		grid: {
 			top: '11%',
 			left: '0%',
-			bottom: '3%',
+			bottom: '4%',
 			right: '0%',
 		},
 		tooltip: {

+ 1 - 0
src/main.js

@@ -3,6 +3,7 @@ import App from './App.vue'
 import router from "@/router/index.js";
 import '@/assets/styles/index.scss'
 
+
 createApp(App)
 .use(router)
 .mount('#app')

+ 36 - 0
src/request/index.js

@@ -0,0 +1,36 @@
+import axios from 'axios'
+
+const service = axios.create({
+	baseURL: 'http://10.83.68.108:8090/ghjgDataShareApi', 
+	timeout: 60000, 
+	withCredentials: true, 
+	headers: {
+		'Content-Type': 'application/json',
+		// 'token': 'your token',
+		'X-Requested-With': 'XMLHttpRequest',
+	},
+})
+
+service.interceptors.request.use(
+	function (config) {
+		// 在发送请求之前做些什么
+		return config
+	},
+	function (error) {
+		// 对请求错误做些什么
+		return Promise.reject(error)
+	}
+)
+
+service.interceptors.response.use(
+	function (response) {
+		const dataAxios = response.data
+		return dataAxios
+	},
+	function (error) {
+		return Promise.reject(error)
+	}
+)
+
+export default service
+

+ 3 - 0
src/request/token.js

@@ -0,0 +1,3 @@
+export default function getToken() {
+  
+}

+ 0 - 0
src/store/index.js


+ 76 - 39
src/views/home/Header.vue

@@ -48,10 +48,10 @@
                 <span class="wl-subtitle">水位值</span>
                 <div class="wl-aside-main">
                   <div class="wl-aside-label">
-                    <span v-for="item in waterLevelNum">{{item}}mm</span>
+                    <span v-show="item%500 === 0" v-for="item in waterLevelNum">{{item}}mm</span>
                   </div>
-                  <div class="wl-aside-axis">
-                    <div class="wl-axis-dragger">
+                  <div id="water-axis" class="wl-aside-axis">
+                    <div id="dragger-left" class="wl-axis-dragger">
                       <img src="@/assets/imgs/arrow-left.png" alt="">
                       <i></i>
                     </div>
@@ -62,14 +62,14 @@
               <div class="wl-right">
                 <span class="wl-subtitle">时间轴</span>
                 <div class="wl-aside-main">
-                  <div class="wl-aside-axis">
-                    <div class="wl-axis-dragger">
+                  <div id="time-axis" class="wl-aside-axis">
+                    <div @mousedown="handleTimeDrag" id="dragger-right" class="wl-axis-dragger">
                       <i></i>
                       <img src="@/assets/imgs/arrow-right.png" alt="">
                     </div>
                   </div>
                   <div class="wl-aside-label">
-                    <span v-for="item in waterLevelTime">{{item}}</span>
+                    <span v-show="item%2 ===0" v-for="item in waterLevelTime">{{item}}:00</span>
                   </div>
                 </div>
               </div>
@@ -96,11 +96,55 @@ export default {
 </script>
 
 <script setup>
-  import { onMounted, reactive, ref, computed, nextTick } from 'vue';
+  import { onMounted, reactive, ref, computed, nextTick, watch } from 'vue';
   import { useNow, useDateFormat } from '@vueuse/core'
   import { addResponseEventListener, callUIInteraction } from '@/webRtcVideo.js'
   import { setWaterLevel } from '@/echarts/options'
 
+
+  const waterLevelNow = ref(450)
+  const waterLevelShow = ref(false)
+
+
+  // 水位时间条拖动时的处理函数
+  function handleTimeDrag(event) {
+    let timeDragger = document.getElementById('dragger-right')
+    let totalH = document.getElementById('time-axis').offsetHeight
+    event =event||window.event
+    let tp =event.clientY - timeDragger.offsetTop
+    let top = event.clientY-tp
+    timeDragger.onmousemove = function(event){
+      event =event||window.event
+      top = event.clientY-tp
+      if(top>-3 && top<totalH-22) {
+        timeDragger.style.top= top+"px"
+      }else {
+        timeDragger.onmousemove = null
+        handleTimeDragDone(parseInt(top/totalH*100))
+      }
+    }
+    timeDragger.onmouseup= function(){
+      timeDragger.onmousemove = null
+      handleTimeDragDone(parseInt(top/totalH*100))
+    }
+  }
+
+  // 水位时间条拖动完成时的处理函数
+  function handleTimeDragDone(perIn) {
+    let perOut = -perIn*perIn / 60 + 1.8*perIn + 20
+    let waterAxisH = document.getElementById('water-axis').offsetHeight-23
+    let height = perOut/100*waterAxisH
+    let waterLevelDragger = document.getElementById('dragger-left')
+    waterLevelDragger.style.bottom= parseInt(height) + 'px'
+    waterLevelNow.value = perOut*10
+    setWaterLevel(document.getElementById('wl-center'),[waterLevelNow.value])
+    toggleSwqk(parseInt(perOut*6+100))
+  }
+
+  onMounted(() => [
+    setWaterLevel(document.getElementById('wl-center'),[waterLevelNow.value])
+  ])
+
   const temperature = ref('32')
   const humidity = ref('42.3')
   const time = useDateFormat(useNow(), 'HH:mm')
@@ -139,7 +183,7 @@ export default {
     dfmzStatus = !dfmzStatus
   }
 
-  const waterLevelShow = ref(false)
+  
   const waterLevelNum = computed(() => {
     let arr = []
     for(let i=2000; i<=5000; i+=200) {
@@ -152,15 +196,16 @@ export default {
     for(let i=24; i>=1; i--) {
       let a = ''
       if(i<10) {
-        a = '0'+i+':00'
+        a = '0'+i
       }else {
-        a = i+':00'
+        a = i
       }
       arr.push(a)
     }
     return arr
   })
 
+
   function handleToolClick(index) {
     toolList[index].status = !toolList[index].status
     let status = toolList[index].status
@@ -189,10 +234,10 @@ export default {
       case 6:
         if(status) {
           waterLevelShow.value = true
+          swqkOn()
           nextTick(() => {
-            setWaterLevel(document.getElementById('wl-center'),[600])
+            setWaterLevel(document.getElementById('wl-center'),[waterLevelNow.value])
           })
-          
         } else {
           waterLevelShow.value = false 
         }
@@ -335,17 +380,13 @@ export default {
       "Parameters":{ "x":230843,"y":-78457,"z":998,"roll_x":0,"roll_y":-20,"roll_z":64 }
     }
     callUIInteractionFormat(JSON.stringify(action1));
-    let action2 = {
-      "ActionName":"set_water_z",
-      "Parameters":{ "water_z":1000 }
-    }
-    callUIInteractionFormat(action2);
+    toggleSwqk(374)
   }
 
-  function swqkOff() {
+  function toggleSwqk(param) {
     let action = {
       "ActionName":"set_water_z",
-      "Parameters":{ "water_z":280 }
+      "Parameters":{ "water_z":param }
     }
     callUIInteractionFormat(action);
   }
@@ -622,16 +663,16 @@ export default {
 
     .water-level {
       position: absolute;
-      top: 15vh;
-      left: 28vw;
-      width: 468px;
-      height: 523px;
+      bottom: -77vh;
+      right: 19vw;
+      width: 360px;
+      height: 370px;
       background: rgba(0,38,77,0.5);
       text-align: center;
 
       .wl-title {
         display: block;
-        margin: 24px 0 27px;
+        margin: 14px 0 10px;
         font-size: 18px;
         font-weight: bold;
         color: #FFFFFF;
@@ -639,15 +680,15 @@ export default {
 
       .wl-main {
         box-sizing: border-box;
-        padding: 0 50px 35px;
+        padding: 0 20px 18px;
         display: flex;
         justify-content: space-between;
-        height: calc(100% - 75px);
+        height: calc(100% - 58px);
       }
 
       .wl-subtitle {
         display: block;
-        margin-bottom: 15px;
+        margin-bottom: 5px;
         font-size: 16px;
         font-weight: bold;
         color: transparent;
@@ -659,12 +700,12 @@ export default {
       .wl-aside-main {
         display: flex;
         justify-content: space-between;
-        height: calc(100% - 36px);
+        height: calc(100% - 26px);
       }
 
       .wl-aside-label {
         box-sizing: border-box;
-        padding: 5px 0;
+        padding-bottom: 2px;
         display: flex;
         flex-direction: column;
         justify-content: space-between;
@@ -688,9 +729,9 @@ export default {
 
       .wl-axis-dragger {
         position: absolute;
-        bottom: 0;
-        right: 1px;
-        width: 45px;
+        bottom: 40%;
+        right: 6px;
+        width: 40px;
         height: 24px;
         display: flex;
         justify-content: space-between;
@@ -707,7 +748,6 @@ export default {
       .wl-left  {
         width: 35%;
         box-sizing: border-box;
-        padding-right: 10px;
         
       }
 
@@ -719,7 +759,7 @@ export default {
         width: 28%;
         height: 100%;
         box-sizing: border-box;
-        padding-left: 10px;
+        padding-left: 8px;
 
         .wl-subtitle {
           text-align: left;
@@ -730,13 +770,10 @@ export default {
           background-size: contain;
         }
 
-        .wl-aside-label>span {
-          line-height: 12px;
-        }
-
         .wl-axis-dragger {
           cursor: pointer;
-          left: 1px;
+          left: 0;
+          bottom: 0;
         }
 
       }

+ 1 - 1
src/views/home/Home.vue

@@ -25,7 +25,7 @@ export default {
   width: 100%;
   height: 100%;
   overflow: hidden;
-  background-color: rgb(62, 86, 134);
+  background-color: rgb(29, 40, 63);
   color: #e3e3e3;
   user-select: none;
 }