From b56fcbe8d410c18b3a6ff7e4eb0e24815bbb5e09 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 19 九月 2025 13:41:59 +0800
Subject: [PATCH] 移动端释放滑块

---
 manager/src/libs/util.js                        |   15 ++-
 manager/src/components/verify/index.vue         |   54 ++++++++++++-
 manager/src/views/login.vue                     |   25 +++++-
 seller/src/views/my-components/verify/index.vue |   54 ++++++++++++-
 buyer/src/components/verify/index.vue           |   54 ++++++++++++-
 5 files changed, 175 insertions(+), 27 deletions(-)

diff --git a/buyer/src/components/verify/index.vue b/buyer/src/components/verify/index.vue
index 498cc92..73ece56 100644
--- a/buyer/src/components/verify/index.vue
+++ b/buyer/src/components/verify/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @click.stop>
+  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @touchmove="touchMove" @touchend="touchEnd" @click.stop>
     <div class="imgBox" :style="{width:data.originalWidth+'px',height:data.originalHeight + 'px'}">
       <img :src="data.backImage" style="width:100%;height:100%" alt="">
       <img class="slider" :src="data.slidingImage" :style="{left:distance+'px',top:data.randomY+'px'}" :width="data.sliderWidth" :height="data.sliderHeight" alt="">
@@ -7,7 +7,7 @@
     </div>
     <div class="handle" :style="{width:data.originalWidth+'px'}">
       <span class="bgcolor" :style="{width:distance + 'px',background:bgColor}"></span>
-      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown">
+      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown" @touchstart="touchStart">
         <Icon type="md-arrow-round-forward" />
       </span>
       <span class="text">{{verifyText}}</span>
@@ -49,6 +49,13 @@
       this.downX = e.clientX;
       this.flag = true;
     },
+    // 瑙︽懜寮�濮嬩簨浠讹紝寮�濮嬫嫋鍔ㄦ粦鍧�
+    touchStart (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      this.downX = e.touches[0].clientX;
+      this.flag = true;
+    },
     // 榧犳爣绉诲姩浜嬩欢锛岃绠楄窛绂�
     mouseMove (e) {
       if (this.flag) {
@@ -63,20 +70,54 @@
         }
       }
     },
+    // 瑙︽懜绉诲姩浜嬩欢锛岃绠楄窛绂�
+    touchMove (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      if (this.flag) {
+        let offset = e.touches[0].clientX - this.downX;
+
+        if (offset > this.data.originalWidth - 43) {
+          this.distance = this.data.originalWidth - 43;
+        } else if (offset < 0) {
+          this.distance = 0;
+        } else {
+          this.distance = offset;
+        }
+      }
+    },
     // 榧犳爣鎶捣浜嬩欢锛岄獙璇佹槸鍚︽纭�
     mouseUp () {
       if (!this.flag) return false;
       this.flag = false;
+      this.verifySlide();
+    },
+    // 瑙︽懜缁撴潫浜嬩欢锛岄獙璇佹槸鍚︽纭�
+    touchEnd () {
+      if (!this.flag) return false;
+      this.flag = false;
+      this.verifySlide();
+    },
+    // 楠岃瘉婊戝潡浣嶇疆
+    verifySlide() {
+      // 鍥涜垗浜斿叆纭繚浣嶇疆鏄暣鏁帮紝鎻愰珮楠岃瘉鍑嗙‘鎬�
+      let xPos = Math.round(this.distance);
+      
+      // 娣诲姞璋冭瘯淇℃伅
+      console.log('婊戝潡浣嶇疆:', xPos, '瀹瑰櫒瀹藉害:', this.data.originalWidth, '璁惧鍍忕礌姣�:', window.devicePixelRatio);
+      
       let params = {
         verificationEnums: this.type,
-        xPos: this.distance
+        xPos: xPos
       };
+      
       postVerifyImg(params).then(res => {
+        console.log('楠岃瘉鍝嶅簲:', res);
         if (res.success) {
           if (res.result) {
             this.bgColor = 'green';
             this.verifyText = '瑙i攣鎴愬姛';
-            this.$emit('change', { status: true, distance: this.distance });
+            this.$emit('change', { status: true, distance: xPos });
           } else {
             this.bgColor = 'red';
             this.verifyText = '瑙i攣澶辫触';
@@ -84,13 +125,14 @@
             setTimeout(() => {
               that.init();
             }, 1000);
-            this.$emit('change', { status: false, distance: this.distance });
+            this.$emit('change', { status: false, distance: xPos });
           }
         } else {
           this.init()
         }
 
-      }).catch(()=>{
+      }).catch((err)=>{
+        console.error('楠岃瘉璇锋眰澶辫触:', err);
         this.init()
       });
     },
diff --git a/manager/src/components/verify/index.vue b/manager/src/components/verify/index.vue
index 498cc92..73ece56 100644
--- a/manager/src/components/verify/index.vue
+++ b/manager/src/components/verify/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @click.stop>
+  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @touchmove="touchMove" @touchend="touchEnd" @click.stop>
     <div class="imgBox" :style="{width:data.originalWidth+'px',height:data.originalHeight + 'px'}">
       <img :src="data.backImage" style="width:100%;height:100%" alt="">
       <img class="slider" :src="data.slidingImage" :style="{left:distance+'px',top:data.randomY+'px'}" :width="data.sliderWidth" :height="data.sliderHeight" alt="">
@@ -7,7 +7,7 @@
     </div>
     <div class="handle" :style="{width:data.originalWidth+'px'}">
       <span class="bgcolor" :style="{width:distance + 'px',background:bgColor}"></span>
-      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown">
+      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown" @touchstart="touchStart">
         <Icon type="md-arrow-round-forward" />
       </span>
       <span class="text">{{verifyText}}</span>
@@ -49,6 +49,13 @@
       this.downX = e.clientX;
       this.flag = true;
     },
+    // 瑙︽懜寮�濮嬩簨浠讹紝寮�濮嬫嫋鍔ㄦ粦鍧�
+    touchStart (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      this.downX = e.touches[0].clientX;
+      this.flag = true;
+    },
     // 榧犳爣绉诲姩浜嬩欢锛岃绠楄窛绂�
     mouseMove (e) {
       if (this.flag) {
@@ -63,20 +70,54 @@
         }
       }
     },
+    // 瑙︽懜绉诲姩浜嬩欢锛岃绠楄窛绂�
+    touchMove (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      if (this.flag) {
+        let offset = e.touches[0].clientX - this.downX;
+
+        if (offset > this.data.originalWidth - 43) {
+          this.distance = this.data.originalWidth - 43;
+        } else if (offset < 0) {
+          this.distance = 0;
+        } else {
+          this.distance = offset;
+        }
+      }
+    },
     // 榧犳爣鎶捣浜嬩欢锛岄獙璇佹槸鍚︽纭�
     mouseUp () {
       if (!this.flag) return false;
       this.flag = false;
+      this.verifySlide();
+    },
+    // 瑙︽懜缁撴潫浜嬩欢锛岄獙璇佹槸鍚︽纭�
+    touchEnd () {
+      if (!this.flag) return false;
+      this.flag = false;
+      this.verifySlide();
+    },
+    // 楠岃瘉婊戝潡浣嶇疆
+    verifySlide() {
+      // 鍥涜垗浜斿叆纭繚浣嶇疆鏄暣鏁帮紝鎻愰珮楠岃瘉鍑嗙‘鎬�
+      let xPos = Math.round(this.distance);
+      
+      // 娣诲姞璋冭瘯淇℃伅
+      console.log('婊戝潡浣嶇疆:', xPos, '瀹瑰櫒瀹藉害:', this.data.originalWidth, '璁惧鍍忕礌姣�:', window.devicePixelRatio);
+      
       let params = {
         verificationEnums: this.type,
-        xPos: this.distance
+        xPos: xPos
       };
+      
       postVerifyImg(params).then(res => {
+        console.log('楠岃瘉鍝嶅簲:', res);
         if (res.success) {
           if (res.result) {
             this.bgColor = 'green';
             this.verifyText = '瑙i攣鎴愬姛';
-            this.$emit('change', { status: true, distance: this.distance });
+            this.$emit('change', { status: true, distance: xPos });
           } else {
             this.bgColor = 'red';
             this.verifyText = '瑙i攣澶辫触';
@@ -84,13 +125,14 @@
             setTimeout(() => {
               that.init();
             }, 1000);
-            this.$emit('change', { status: false, distance: this.distance });
+            this.$emit('change', { status: false, distance: xPos });
           }
         } else {
           this.init()
         }
 
-      }).catch(()=>{
+      }).catch((err)=>{
+        console.error('楠岃瘉璇锋眰澶辫触:', err);
         this.init()
       });
     },
diff --git a/manager/src/libs/util.js b/manager/src/libs/util.js
index 142e9f1..a5090a9 100644
--- a/manager/src/libs/util.js
+++ b/manager/src/libs/util.js
@@ -106,13 +106,13 @@
   let userInfo = Cookies.get("userInfoManager");
   if (!userInfo) {
     // 鏈櫥褰�
-    return;
+    return Promise.resolve(false);
   }
   if (!vm.$store.state.app.added) {
     // 绗竴娆″姞杞� 璇诲彇鏁版嵁
     // 鍔犺浇鑿滃崟
-    getCurrentPermissionList().then(res => {
-      if (!res.success) return false;
+    return getCurrentPermissionList().then(res => {
+      if (!res.success) return Promise.reject(false);
       let menuData = res.result;
 
       // 鏍煎紡鍖栨暟鎹紝璁剧疆 绌篶hildren 涓� null
@@ -129,7 +129,7 @@
       }
 
       if (!menuData) {
-        return;
+        return Promise.reject(false);
       }
       util.initAllMenuData(constRoutes, menuData);
       util.initRouterNode(otherRoutes, otherRouter);
@@ -145,17 +145,22 @@
       // 缂撳瓨鏁版嵁 淇敼鍔犺浇鏍囪瘑
       window.localStorage.setItem("menuData", JSON.stringify(menuData));
       vm.$store.commit("setAdded", true);
+      return Promise.resolve(true);
+    }).catch(err => {
+      console.error("璺敱鍒濆鍖栧け璐�:", err);
+      return Promise.reject(false);
     });
   } else {
     // 璇诲彇缂撳瓨鏁版嵁
     let data = window.localStorage.getItem("menuData");
     if (!data) {
       vm.$store.commit("setAdded", false);
-      return;
+      return Promise.resolve(false);
     }
     let menuData = JSON.parse(data);
     // 娣诲姞鑿滃崟璺敱
     util.initMenuData(vm, menuData);
+    return Promise.resolve(true);
   }
 };
 
diff --git a/manager/src/views/login.vue b/manager/src/views/login.vue
index c1b7819..2237626 100644
--- a/manager/src/views/login.vue
+++ b/manager/src/views/login.vue
@@ -119,13 +119,30 @@
           // 鍔犺浇鑿滃崟
           Cookies.set("userInfoManager", JSON.stringify(res.result));
           this.$store.commit("setAvatarPath", res.result.avatar);
-          util.initRouter(this);
-          this.$router.push({
-            name: "home_index",
+          // 纭繚璺敱鍒濆鍖栧畬鎴愬悗鍐嶈繘琛岃烦杞�
+          return util.initRouter(this).then(() => {
+            this.$router.push({
+              name: "home_index",
+            }).catch(err => {
+              console.error("璺敱璺宠浆閿欒:", err);
+              // 濡傛灉鐩存帴璺宠浆澶辫触锛屽皾璇曚娇鐢╮eplace
+              this.$router.replace({
+                name: "home_index",
+              });
+            });
+          }).catch(err => {
+            console.error("璺敱鍒濆鍖栧け璐�:", err);
+            // 璺敱鍒濆鍖栧け璐ユ椂涔熻烦杞埌棣栭〉
+            this.$router.push({
+              name: "home_index",
+            });
           });
         } else {
           this.loading = false;
         }
+      }).catch(err => {
+        console.error("鑾峰彇鐢ㄦ埛淇℃伅澶辫触:", err);
+        this.loading = false;
       });
     },
     submitLogin() {
@@ -156,7 +173,7 @@
         .catch(() => {
           this.loading = false;
         });
-      this.$refs.verify.show = false;
+      // this.$refs.verify.show = false;
     },
   },
 };
diff --git a/seller/src/views/my-components/verify/index.vue b/seller/src/views/my-components/verify/index.vue
index 498cc92..73ece56 100644
--- a/seller/src/views/my-components/verify/index.vue
+++ b/seller/src/views/my-components/verify/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @click.stop>
+  <div class="verify-content" v-if="show" @mousemove="mouseMove" @mouseup="mouseUp" @touchmove="touchMove" @touchend="touchEnd" @click.stop>
     <div class="imgBox" :style="{width:data.originalWidth+'px',height:data.originalHeight + 'px'}">
       <img :src="data.backImage" style="width:100%;height:100%" alt="">
       <img class="slider" :src="data.slidingImage" :style="{left:distance+'px',top:data.randomY+'px'}" :width="data.sliderWidth" :height="data.sliderHeight" alt="">
@@ -7,7 +7,7 @@
     </div>
     <div class="handle" :style="{width:data.originalWidth+'px'}">
       <span class="bgcolor" :style="{width:distance + 'px',background:bgColor}"></span>
-      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown">
+      <span class="swiper" :style="{left:distance + 'px'}" @mousedown="mouseDown" @touchstart="touchStart">
         <Icon type="md-arrow-round-forward" />
       </span>
       <span class="text">{{verifyText}}</span>
@@ -49,6 +49,13 @@
       this.downX = e.clientX;
       this.flag = true;
     },
+    // 瑙︽懜寮�濮嬩簨浠讹紝寮�濮嬫嫋鍔ㄦ粦鍧�
+    touchStart (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      this.downX = e.touches[0].clientX;
+      this.flag = true;
+    },
     // 榧犳爣绉诲姩浜嬩欢锛岃绠楄窛绂�
     mouseMove (e) {
       if (this.flag) {
@@ -63,20 +70,54 @@
         }
       }
     },
+    // 瑙︽懜绉诲姩浜嬩欢锛岃绠楄窛绂�
+    touchMove (e) {
+      // 闃绘榛樿婊氬姩琛屼负
+      e.preventDefault();
+      if (this.flag) {
+        let offset = e.touches[0].clientX - this.downX;
+
+        if (offset > this.data.originalWidth - 43) {
+          this.distance = this.data.originalWidth - 43;
+        } else if (offset < 0) {
+          this.distance = 0;
+        } else {
+          this.distance = offset;
+        }
+      }
+    },
     // 榧犳爣鎶捣浜嬩欢锛岄獙璇佹槸鍚︽纭�
     mouseUp () {
       if (!this.flag) return false;
       this.flag = false;
+      this.verifySlide();
+    },
+    // 瑙︽懜缁撴潫浜嬩欢锛岄獙璇佹槸鍚︽纭�
+    touchEnd () {
+      if (!this.flag) return false;
+      this.flag = false;
+      this.verifySlide();
+    },
+    // 楠岃瘉婊戝潡浣嶇疆
+    verifySlide() {
+      // 鍥涜垗浜斿叆纭繚浣嶇疆鏄暣鏁帮紝鎻愰珮楠岃瘉鍑嗙‘鎬�
+      let xPos = Math.round(this.distance);
+      
+      // 娣诲姞璋冭瘯淇℃伅
+      console.log('婊戝潡浣嶇疆:', xPos, '瀹瑰櫒瀹藉害:', this.data.originalWidth, '璁惧鍍忕礌姣�:', window.devicePixelRatio);
+      
       let params = {
         verificationEnums: this.type,
-        xPos: this.distance
+        xPos: xPos
       };
+      
       postVerifyImg(params).then(res => {
+        console.log('楠岃瘉鍝嶅簲:', res);
         if (res.success) {
           if (res.result) {
             this.bgColor = 'green';
             this.verifyText = '瑙i攣鎴愬姛';
-            this.$emit('change', { status: true, distance: this.distance });
+            this.$emit('change', { status: true, distance: xPos });
           } else {
             this.bgColor = 'red';
             this.verifyText = '瑙i攣澶辫触';
@@ -84,13 +125,14 @@
             setTimeout(() => {
               that.init();
             }, 1000);
-            this.$emit('change', { status: false, distance: this.distance });
+            this.$emit('change', { status: false, distance: xPos });
           }
         } else {
           this.init()
         }
 
-      }).catch(()=>{
+      }).catch((err)=>{
+        console.error('楠岃瘉璇锋眰澶辫触:', err);
         this.init()
       });
     },

--
Gitblit v1.8.0