Bladeren bron

日常开发

林旭祥 8 maanden geleden
bovenliggende
commit
f36046cd30
6 gewijzigde bestanden met toevoegingen van 148 en 102 verwijderingen
  1. 9 0
      src/api/module/common.ts
  2. 1 1
      src/layout/index.vue
  3. 25 22
      src/views/gesture/index.vue
  4. 42 16
      src/views/login/mobile.vue
  5. 35 31
      src/views/train/multiple.vue
  6. 36 32
      src/views/train/test.vue

+ 9 - 0
src/api/module/common.ts

@@ -176,6 +176,15 @@ export default {
     });
   },
 
+  //设备信息
+  deviceInfo: (data: any) => {
+    return req({
+      url: '/log/hctrl_device_info/list',
+      method: 'get',
+      data: data
+    });
+  },
+
   //扫码登录验证
   qrlogin: (data: any) => {
     return req({

+ 1 - 1
src/layout/index.vue

@@ -26,7 +26,7 @@ const handClick = () => {
 
 const getCountDown = () => {
   timer.value = setTimeout(() => {
-    if (router.currentRoute.value.fullPath != '/ranking') {
+    if (['/ranking', '/login/mobile'].includes(router.currentRoute.value.fullPath)) {
       router.push({ path: '/ranking' });
     }
   }, 1000 * 60 * 15)

+ 25 - 22
src/views/gesture/index.vue

@@ -2,8 +2,8 @@
   <div class="gesture">
     <Header :showTool="false" @confirmExit="getLogout"></Header>
     <div class="menu">
-      <swiper v-if="projectList.length" :slides-per-view="5" :space-between="0" :initialSlide="2" :loop="true"
-        :centeredSlides="true" :modules="[Navigation]" @swiper="onSwiper">
+      <swiper v-if="projectList.length" :slides-per-view="5" :space-between="0" :loop="true" :centeredSlides="true"
+        :modules="[Navigation]" @swiper="onSwiper">
         <swiper-slide v-for="(item, index) in projectList" :key="index" @click="getOption(item)">
           <div class="li">
             <div class="pic"><img :src="'static/images/train/' + item.key + '.png'"></div>
@@ -15,13 +15,6 @@
       </swiper>
     </div>
     <OptionWindow ref="optionWindowRef" :projectList="projectList" />
-
-    <div style=" width: 100%; color: #ffffff; font-size:1.5rem; text-align: center; position:fixed; bottom: 10px; ">
-      <div style="margin-bottom: 10px;">模拟发送手势:</div>
-      <div @click="getCmdtest(1)" style="margin-bottom: 10px;">1、左滑动</div>
-      <div @click="getCmdtest(2)" style="margin-bottom: 10px;">2、举左手</div>
-      <div @click="getCmdtest(3)">3、双手胸前交叉</div>
-    </div>
   </div>
 </template>
 
@@ -153,18 +146,6 @@ const confirm = (myProject?: any) => {
 
 };
 
-/**
- * 模拟发送手势
-*/
-const getCmdtest = (data: any) => {
-  let params = {
-    hctrl_name: `handcontroller_${device_info.value.handcontroller_id}`,
-    cmd: data
-  };
-  proxy?.$http.common.cmdtest(params).then((res: any) => {
-  });
-};
-
 /**
  * 退出
 */
@@ -193,6 +174,22 @@ const getLogout = () => {
   });
 };
 
+/**
+ * 提示语
+*/
+const getTips = () => {
+  let myTime = 4000;
+  let num = 0;
+  timerManager.value.nextItem = setInterval(() => {
+    if (num % 2 == 0) {
+      proxy?.$modal.msgWarning(`手向左滑切换项目`)
+    } else {
+      proxy?.$modal.msgWarning(`举左手进入测试`)
+    }
+    num++
+  }, myTime)
+};
+
 onBeforeMount(() => {
   //加载设备WS
   handWs((e: any) => {
@@ -210,7 +207,12 @@ onBeforeMount(() => {
     }
     //左滑动
     if (e?.data?.result == "next_item") {
-      slideNext();
+      console.log("mySwiper.value", mySwiper.value)
+      if (projectList.value.length < 5) {
+        slidePrev()
+      } else {
+        slideNext();
+      }
     }
     //举左手
     if (e?.data?.result == "left_hand") {
@@ -224,6 +226,7 @@ onBeforeMount(() => {
 })
 onMounted(() => {
   getInitExam();
+  getTips();
 })
 onBeforeUnmount(() => {
   getClearTimer();

+ 42 - 16
src/views/login/mobile.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="mobileLogin">
     <div class="login-content">
-      <div class="login-content-center">
+      <div class="login-content-center" v-if="!show">
         <div class="login-title"> <img src="@/assets/images/login/login.png" /></div>
         <div class="login-input-box">
           <div class="login-item">
@@ -19,18 +19,25 @@
           <div @click="getLogin" class="login-btn">登 录</div>
         </div>
       </div>
+
+      <div v-else style=" width: 100%; color: #ffffff; font-size:20px; text-align: center; ">
+        <div style="margin-bottom: 10px;">模拟发送手势:</div>
+        <div @click="getCmdtest(1)" style="margin-bottom: 10px;">1、左滑动(切换项目)</div>
+        <div @click="getCmdtest(2)" style="margin-bottom: 10px;">2、举左手(确认)</div>
+        <div @click="getCmdtest(3)">3、双手胸前交叉(退出)</div>
+      </div>
     </div>
   </div>
 </template>
 
-<script setup name="QrcodeLogin" lang="ts">
-import QRCode from "qrcode";
-import { handWs, startHand, closeHand } from '@/utils/handWs'
+<script setup name="MobileLogin" lang="ts">
 const { proxy } = getCurrentInstance() as any;
 const router = useRouter();
 const route = useRoute();
 
 const data = reactive<any>({
+  show: false,
+  handcontroller: '',
   loginForm: {
     deviceid: '38715692',
     username: 'manage1',
@@ -38,17 +45,8 @@ const data = reactive<any>({
   }
 });
 
-const { loginForm } = toRefs(data);
+const { show, handcontroller, loginForm } = toRefs(data);
 
-/**
- * 手势
-*/
-const getHandWs = () => {
-  //加载手势WS
-  handWs((e: any) => {
-
-  });
-};
 
 // 登录
 const getLogin = () => {
@@ -67,14 +65,42 @@ const getLogin = () => {
   };
   proxy?.$http.common.qrlogin(params).then((res: any) => {
     if (res.access_token) {
-      proxy?.$modal.alert("配置成功")
+      show.value = true
+      getDeviceInfo()
     }
   }).catch(() => {
   }).finally(() => proxy?.$modal?.closeLoading());
 };
 
+// 设备信息
+const getDeviceInfo = () => {
+  let deviceid = loginForm.value.deviceid;
+  let params = {
+    search_info: deviceid,
+    page: 1,
+    per_page: 1,
+  };
+  proxy?.$http.common.deviceInfo(params).then((res: any) => {
+    if (res.data.length) {
+      handcontroller.value = res.data[0]?.handcontroller_id
+    }
+  }).catch(() => {
+  }).finally(() => { });
+};
+
+/**
+ * 模拟发送手势
+*/
+const getCmdtest = (data: any) => {
+  let params = {
+    hctrl_name: `handcontroller_${handcontroller.value}`,
+    cmd: data
+  };
+  proxy?.$http.common.cmdtest(params).then((res: any) => {
+  });
+};
+
 onMounted(() => {
-  getHandWs();
 })
 </script>
 

+ 35 - 31
src/views/train/multiple.vue

@@ -79,6 +79,7 @@ const data = reactive<any>({
     testTime: 60,//时长
     countdownNum: 0,//计时
     ready: 0,//预备
+    exit: 0,//退出倒计时
   },
   userInfo: {},//用户信息
   examState: 0,//当前状态
@@ -189,7 +190,7 @@ const getAgain = async () => {
  * 确认退出
 */
 const confirmExit = () => {
-  proxy?.$modal.confirm("确定退出吗?").then(() => {
+  proxy?.$modal.confirm(`确定退出吗?`).then(() => {
     getExit();
   }).finally(() => {
   });
@@ -201,7 +202,8 @@ const confirmExit = () => {
 const getExit = () => {
   getClearTimer();//清除计时器
   examEnds();//通知工作站关闭
-  speckCancel()//停止播报;
+  speckCancel();//停止播报
+  closeHand();//关闭手势
   window.onbeforeunload = null;//移除事件处理器
   let handcontroller_id = parameter.value.handcontroller;
   if (handcontroller_id) {
@@ -495,26 +497,42 @@ const initHand = () => {
     }
     //举左手
     if (e?.data?.result == "left_hand") {
-      getReady();
+      if (exit.value) {
+        exit.value = 0;
+        //确认退出
+        let keyEvent: any = null;
+        keyEvent = new KeyboardEvent('keydown', {
+          key: 'Enter', // 键值
+          code: 'Enter', // 键盘代码
+          keyCode: 13, // 旧的键盘代码
+          which: 13, // 新的键盘代码
+          shiftKey: false, // 是否按下Shift键
+          ctrlKey: false, // 是否按下Ctrl键
+          metaKey: false, // 是否按下Meta键(Win键或Command键)
+          bubbles: true, // 事件是否冒泡
+          cancelable: true // 是否可以取消事件的默认行为
+        });
+        document.activeElement?.dispatchEvent(keyEvent);
+      } else {
+        getReady()
+      }
     }
     //退出
     if (e?.data?.result == "exit") {
-      // console.log("exit.value", exit.value)
+      console.log("exit.value", exit.value)
       if (exit.value == 0) {
-        console
+        exit.value = 1
+        speckText("请5秒内举左手确认退出");
         //第一次才弹出
         confirmExit();
-        setTimeout(() => {
-          let keyEvent: any = null;
-          let myKey = null;
-          //如果交叉手两秒后返回超过4次就确认退出
-          if (exit.value >= 4) {
-            myKey = 'Enter';
-          } else {
-            myKey = 'Esc';
+        time.value.exit = 6;
+        timerManager.value.exitTimer = setInterval(() => {
+          time.value.exit--;
+          console.log("取消倒计时", time.value.exit)
+          if (time.value.exit == 0) {
             exit.value = 0;
-          }
-          if (myKey == 'Esc') {
+            getClearTimer("exitTimer");
+            let keyEvent: any = null;
             keyEvent = new KeyboardEvent('keydown', {
               key: 'Escape', // 键值
               code: 'Escape', // 键盘代码
@@ -526,24 +544,10 @@ const initHand = () => {
               bubbles: true, // 事件是否冒泡
               cancelable: true // 是否可以取消事件的默认行为
             });
+            document.activeElement?.dispatchEvent(keyEvent);
           }
-          if (myKey == 'Enter') {
-            keyEvent = new KeyboardEvent('keydown', {
-              key: 'Enter', // 键值
-              code: 'Enter', // 键盘代码
-              keyCode: 13, // 旧的键盘代码
-              which: 13, // 新的键盘代码
-              shiftKey: false, // 是否按下Shift键
-              ctrlKey: false, // 是否按下Ctrl键
-              metaKey: false, // 是否按下Meta键(Win键或Command键)
-              bubbles: true, // 事件是否冒泡
-              cancelable: true // 是否可以取消事件的默认行为
-            });
-          }
-          document.activeElement?.dispatchEvent(keyEvent);
-        }, 2500)
+        }, 1000);
       }
-      exit.value = exit.value + 1
     }
   });
 };

+ 36 - 32
src/views/train/test.vue

@@ -21,7 +21,7 @@
               :leave-active-class="proxy?.animate.dialog.leave">
               <div class="time" v-show="needStart && [42].includes(examState)">{{
                 time.countdownNum
-                }}</div>
+              }}</div>
             </Transition>
             <div class="tips" v-if="examState == 41">
               <img v-if="parameter.gesture" src="@/assets/images/test/ready1.png" />
@@ -133,6 +133,7 @@ const data = reactive<any>({
     testTime: 60,//时长
     countdownNum: 0,//计时
     ready: 0,//预备
+    exit: 0,//退出倒计时
   },
   userInfo: {},//用户信息
   examState: 0,//当前状态
@@ -386,7 +387,7 @@ const getAgain = async () => {
  * 确认退出
 */
 const confirmExit = () => {
-  let abc = proxy?.$modal.confirm("确定退出吗?").then(() => {
+  proxy?.$modal.confirm(`确定退出吗?`).then(() => {
     getExit();
   }).finally(() => {
   });
@@ -398,7 +399,8 @@ const confirmExit = () => {
 const getExit = () => {
   getClearTimer();//清除计时器
   examEnds();//通知工作站关闭
-  speckCancel()//停止播报;
+  speckCancel();//停止播报
+  closeHand();//关闭手势
   window.onbeforeunload = null;//移除事件处理器
   let handcontroller_id = parameter.value.handcontroller;
   if (handcontroller_id) {
@@ -706,26 +708,42 @@ const initHand = () => {
     }
     //举左手
     if (e?.data?.result == "left_hand") {
-      getReady();
+      if (exit.value) {
+        exit.value = 0;
+        //确认退出
+        let keyEvent: any = null;
+        keyEvent = new KeyboardEvent('keydown', {
+          key: 'Enter', // 键值
+          code: 'Enter', // 键盘代码
+          keyCode: 13, // 旧的键盘代码
+          which: 13, // 新的键盘代码
+          shiftKey: false, // 是否按下Shift键
+          ctrlKey: false, // 是否按下Ctrl键
+          metaKey: false, // 是否按下Meta键(Win键或Command键)
+          bubbles: true, // 事件是否冒泡
+          cancelable: true // 是否可以取消事件的默认行为
+        });
+        document.activeElement?.dispatchEvent(keyEvent);
+      } else {
+        getReady()
+      }
     }
     //退出
     if (e?.data?.result == "exit") {
-      // console.log("exit.value", exit.value)
+      console.log("exit.value", exit.value)
       if (exit.value == 0) {
-        console
+        exit.value = 1
+        speckText("请5秒内举左手确认退出");
         //第一次才弹出
         confirmExit();
-        setTimeout(() => {
-          let keyEvent: any = null;
-          let myKey = null;
-          //如果交叉手两秒后返回超过4次就确认退出
-          if (exit.value >= 4) {
-            myKey = 'Enter';
-          } else {
-            myKey = 'Esc';
+        time.value.exit = 6;
+        timerManager.value.exitTimer = setInterval(() => {
+          time.value.exit--;
+          console.log("取消倒计时", time.value.exit)
+          if (time.value.exit == 0) {
             exit.value = 0;
-          }
-          if (myKey == 'Esc') {
+            getClearTimer("exitTimer");
+            let keyEvent: any = null;
             keyEvent = new KeyboardEvent('keydown', {
               key: 'Escape', // 键值
               code: 'Escape', // 键盘代码
@@ -737,24 +755,10 @@ const initHand = () => {
               bubbles: true, // 事件是否冒泡
               cancelable: true // 是否可以取消事件的默认行为
             });
+            document.activeElement?.dispatchEvent(keyEvent);
           }
-          if (myKey == 'Enter') {
-            keyEvent = new KeyboardEvent('keydown', {
-              key: 'Enter', // 键值
-              code: 'Enter', // 键盘代码
-              keyCode: 13, // 旧的键盘代码
-              which: 13, // 新的键盘代码
-              shiftKey: false, // 是否按下Shift键
-              ctrlKey: false, // 是否按下Ctrl键
-              metaKey: false, // 是否按下Meta键(Win键或Command键)
-              bubbles: true, // 事件是否冒泡
-              cancelable: true // 是否可以取消事件的默认行为
-            });
-          }
-          document.activeElement?.dispatchEvent(keyEvent);
-        }, 2500)
+        }, 1000);
       }
-      exit.value = exit.value + 1
     }
   });
 };