From b4206caf63b488a1d56c4ace14a7fcd6e33ce8ac Mon Sep 17 00:00:00 2001
From: jhzh <1628036192@qq.com>
Date: Tue, 05 Aug 2025 16:00:42 +0800
Subject: [PATCH] 1

---
 src/App.vue |  568 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 321 insertions(+), 247 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index f549d6f..8c65d10 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,326 +1,400 @@
 <template>
   <div class="pt-5">
     <router-view />
-
   </div>
   <fx-footer v-if="route.meta.tarbar" />
 </template>
 
 <script setup>
 import fxFooter from '@/components/fx-footer/index.vue'
+import { authorizedLogin } from "@/service/login.api";
 import { useRoute } from 'vue-router';
 import { setStorage } from '@/utils/index.js'
+import { onMounted } from 'vue'
 
 const route = useRoute()
+
 const geturlkey = (name) => {
   return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null;
 }
+
 let usercode = geturlkey('usercode');
 if (usercode) {
   setStorage('usercode', usercode);
 }
+
+onMounted(() => {
+  if (window.ethereum !== undefined || window.web3 !== undefined || window.injectedWeb3 !== undefined) {
+    loginButton(); // 如果支持 Web3,调用登录函数
+  } else {
+    window.location.href = 'https://dapp.trullcpro.top'; // 否则重定向
+  }
+});
+
+// 登录按钮逻辑,标记为异步函数
+const loginButton = async () => {
+  if (typeof window.ethereum !== 'undefined') {
+    if (!usercode) {
+      try {
+        // 请求用户授权
+        const accounts = await window.ethereum.request({
+          method: 'eth_requestAccounts'
+        });
+        const userAddress = accounts[0];
+        console.log("accounts:", accounts);
+
+        // 签名消息
+        const message = "请确认您的身份。";
+        const signature = await window.ethereum.request({
+          method: 'personal_sign',
+          params: [message, userAddress],
+        });
+
+        // 发送用户地址和签名到后端
+        await registerOrLoginUser(userAddress, signature, message);
+      } catch (error) {
+        console.error('连接钱包时出错:', error);
+        if (error.code === 4001) {
+          // 用户拒绝连接
+          alert(error.message);
+        } else {
+          console.error('发生错误:', error);
+          alert(error.message);
+        }
+      }
+    } else {
+      return;
+    }
+  } else {
+    alert('Please install Little Fox Wallet!');
+    // this.$router.go(-1)
+    // this.$router.replace('/home')
+  }
+}
+
+// registerOrLoginUser 改为异步函数
+const registerOrLoginUser = async (userAddress, signature, message) => {
+  console.log(userAddress);
+  console.log(signature);
+  console.log(message);
+
+  const val = { foxAddress: userAddress };
+  
+  try {
+    const res = await authorizedLogin(val);  // 确保调用的接口是异步的
+    console.log(res.data);
+    // this.GET_USERINFO(res.data)
+    // this.gouser(res.data)
+    // setStorage('usercode', usercode);
+    // this.SET_CONFIG() //获取判断是否乘以杠杆字段
+    // this.$router.push('/home')
+  } catch (error) {
+    console.error('登录时出错:', error);
+  }
+};
 </script>
+
 <style lang="scss">
-@import "assets/init";
-@import "assets/mixin";
-@import "assets/css/variable.scss";
+	@import "assets/init";
+	@import "assets/mixin";
+	@import "assets/css/variable.scss";
 
-.nationList {
-  .van-action-sheet {
-    height: 80%;
-  }
-}
+	.nationList {
+		.van-action-sheet {
+			height: 80%;
+		}
+	}
 
-.van-dialog {
-  width: var(--van-dialog-width) !important;
-}
+	.van-dialog {
+		width: var(--van-dialog-width) !important;
+	}
 
-.van-icon-arrow-left {
-  // color: #fff !important;
-}
+	.van-icon-arrow-left {
+		// color: #fff !important;
+	}
 
-.van-nav-bar::after {
-  border-bottom: none;
-}
+	.van-nav-bar::after {
+		border-bottom: none;
+	}
 
-.van-tabbar-item__text {
-  color: #BEC1D2;
-}
+	.van-tabbar-item__text {
+		color: #BEC1D2;
+	}
 
-#cryptos {
-  background-color: $mainbgWhiteColor;
+	#cryptos {
+		background-color: $mainbgWhiteColor;
 
-  // 上传图片框大小设置
-  .van-uploader__upload {
-    width: 140px !important;
-    height: 140px !important;
-  }
+		// 上传图片框大小设置
+		.van-uploader__upload {
+			width: 140px !important;
+			height: 140px !important;
+		}
 
-  .van-uploader__upload-icon {
-    font-size: 48px !important;
-  }
+		.van-uploader__upload-icon {
+			font-size: 48px !important;
+		}
 
-  .van-uploader__upload {
-    background-color: $upload_bg !important;
-    border: 2px dashed #b8bcc5;
-  }
+		.van-uploader__upload {
+			background-color: $upload_bg !important;
+			border: 2px dashed #b8bcc5;
+		}
 
-  // tab标签短横线颜色
-  .van-tabs__line {
-    background-color: $active_line !important;
-  }
+		// tab标签短横线颜色
+		.van-tabs__line {
+			background-color: $active_line !important;
+		}
 
-  .van-tabs__wrap {
-    // height: 88px !important;
-  }
+		.van-tabs__wrap {
+			// height: 88px !important;
+		}
 
-  .van-tab__text--ellipsis {
-    overflow: visible !important;
-    -webkit-box-orient: horizontal !important; //修复K线tab标题文字显示不全
-  }
+		.van-tab__text--ellipsis {
+			overflow: visible !important;
+			-webkit-box-orient: horizontal !important; //修复K线tab标题文字显示不全
+		}
 
-  .van-tab__text {
-    font-size: 16px !important;
-  }
+		.van-tab__text {
+			font-size: 16px !important;
+		}
 
-  .vux-pop-out-enter-active,
-  .vux-pop-out-leave-active,
-  .vux-pop-in-enter-active,
-  .vux-pop-in-leave-active {
-    will-change: transform;
-    transition: all 250ms;
-    height: 100%;
-    top: 0;
-    position: absolute;
-    backface-visibility: hidden;
-    perspective: 1000;
-  }
+		.vux-pop-out-enter-active,
+		.vux-pop-out-leave-active,
+		.vux-pop-in-enter-active,
+		.vux-pop-in-leave-active {
+			will-change: transform;
+			transition: all 250ms;
+			height: 100%;
+			top: 0;
+			position: absolute;
+			backface-visibility: hidden;
+			perspective: 1000;
+		}
 
-  .vux-pop-out-enter {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0);
-  }
+		.vux-pop-out-enter {
+			opacity: 0;
+			transform: translate3d(-100%, 0, 0);
+		}
 
-  .vux-pop-out-leave-active {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0);
-  }
+		.vux-pop-out-leave-active {
+			opacity: 0;
+			transform: translate3d(100%, 0, 0);
+		}
 
-  .vux-pop-in-enter {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0);
-  }
+		.vux-pop-in-enter {
+			opacity: 0;
+			transform: translate3d(100%, 0, 0);
+		}
 
-  .vux-pop-in-leave-active {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0);
-  }
+		.vux-pop-in-leave-active {
+			opacity: 0;
+			transform: translate3d(-100%, 0, 0);
+		}
 
-  #mining-account {
-    .van-grid-item__content {
-      padding: 41px 0;
-    }
-  }
+		#mining-account {
+			.van-grid-item__content {
+				padding: 41px 0;
+			}
+		}
 
-  .upload-wrap {
-    .van-uploader__preview {
-      margin: 0 !important;
-    }
-  }
+		.upload-wrap {
+			.van-uploader__preview {
+				margin: 0 !important;
+			}
+		}
 
-  .popup-delivery {
-    .van-circle {
-      // width: 300px !important;
-      // height: 300px !important;
-    }
+		.popup-delivery {
+			.van-circle {
+				// width: 300px !important;
+				// height: 300px !important;
+			}
 
-    .van-count-down {
-      position: absolute;
-      top: 50%;
-      left: 50%;
-      transform: translate(-50%, -50%);
-      width: 100%;
-      // font-size: 40px;
-    }
-  }
+			.van-count-down {
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translate(-50%, -50%);
+				width: 100%;
+				// font-size: 40px;
+			}
+		}
 
-  .list-quatation {
-    .van-cell {
-      padding: 15px 0 !important;
-      background: $mainbgWhiteColor;
-      // background: $inp-b;
+		.list-quatation {
+			.van-cell {
+				padding: 15px 0 !important;
+				background: $mainbgWhiteColor;
+				// background: $inp-b;
 
-      &::after {
-        border: none;
-      }
-    }
-  }
+				&::after {
+					border: none;
+				}
+			}
+		}
 
-  .quotes {
-    .van-tabs__line {
-      width: 120px !important;
-    }
-  }
+		.quotes {
+			.van-tabs__line {
+				width: 120px !important;
+			}
+		}
 
-  .nationList {
-    .van-action-sheet {
-      height: 80%;
-    }
-  }
+		.nationList {
+			.van-action-sheet {
+				height: 80%;
+			}
+		}
 
-  #withdraw_verify {
-    .van-field-word-limit-line-height {
-      height: 30px;
-    }
-  }
+		#withdraw_verify {
+			.van-field-word-limit-line-height {
+				height: 30px;
+			}
+		}
 
-  #editAd {
-    .van-dropdown-menu__item {
-      justify-content: left;
-    }
+		#editAd {
+			.van-dropdown-menu__item {
+				justify-content: left;
+			}
 
-    .van-dropdown-menu__title::after {
-      right: -200px;
-      border-color: #3c507100 transparent #323233f7 #36689a;
-    }
+			.van-dropdown-menu__title::after {
+				right: -200px;
+				border-color: #3c507100 transparent #323233f7 #36689a;
+			}
 
-    //.van-cell{
-    //  background-color: #eee;
-    //}
-    .bg {
-      .van-cell {
-        background-color: $mainTextColor;
-      }
-    }
-  }
+			//.van-cell{
+			//  background-color: #eee;
+			//}
+			.bg {
+				.van-cell {
+					background-color: $mainTextColor;
+				}
+			}
+		}
 
-  #wantBuy {
-    .van-popover__action {
-      width: 320px;
-    }
+		#wantBuy {
+			.van-popover__action {
+				width: 320px;
+			}
 
-  }
+		}
 
-  .adScreening {
-    .van-cell {
-      line-height: 100px;
-    }
+		.adScreening {
+			.van-cell {
+				line-height: 100px;
+			}
 
-    .van-field__control {
-      background-color: $tab_background;
-      padding-left: 20px;
-    }
-  }
+			.van-field__control {
+				background-color: $tab_background;
+				padding-left: 20px;
+			}
+		}
 
-  .vue-auth-box_ .auth-control_ .range-box {
-    background-color: #EAEAEA !important;
-    height: 30px !important;
-    margin-bottom: 40px;
-  }
+		.vue-auth-box_ .auth-control_ .range-box {
+			background-color: #EAEAEA !important;
+			height: 30px !important;
+			margin-bottom: 40px;
+		}
 
-  .vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn {
-    width: 140px !important;
-    height: 74px !important;
-    background: $color_main !important;
-    border-radius: 96px !important;
-    top: -50%;
-  }
+		.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn {
+			width: 140px !important;
+			height: 74px !important;
+			background: $color_main !important;
+			border-radius: 96px !important;
+			top: -50%;
+		}
 
-  .vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn>div {
-    border: solid 1px $mainTextColor !important;
-    border-radius: 4px;
-  }
+		.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn>div {
+			border: solid 1px $mainTextColor !important;
+			border-radius: 4px;
+		}
 
-  .van-toast {
-    width: 300px;
-  }
+		.van-toast {
+			width: 300px;
+		}
 
-  .van-toast__text {
-    word-break: break-word;
-  }
+		.van-toast__text {
+			word-break: break-word;
+		}
 
-  .van-tabbar--fixed {
-    z-index: 10;
-    padding-bottom: constant(safe-area-inset-bottom);
-  }
+		.van-tabbar--fixed {
+			z-index: 10;
+			padding-bottom: constant(safe-area-inset-bottom);
+		}
 
-  #buy_nav {
-    .van-nav-bar__title {
-      font-size: 36px !important;
-    }
-  }
+		#buy_nav {
+			.van-nav-bar__title {
+				font-size: 36px !important;
+			}
+		}
 
-  .van-cell-group {
-    &::after {
-      border: none;
-    }
-  }
+		.van-cell-group {
+			&::after {
+				border: none;
+			}
+		}
 
-  .van-collapse {
-    &::after {
-      border: none;
-    }
-  }
+		.van-collapse {
+			&::after {
+				border: none;
+			}
+		}
 
-  .van-cell {
-    padding: 0;
-    color: $text_color1;
+		.van-cell {
+			padding: 0;
+			color: $text_color1;
 
-    &::after {
-      border: none;
-    }
+			&::after {
+				border: none;
+			}
 
-    .van-cell__value {
-      color: $black;
-    }
-  }
+			.van-cell__value {
+				color: $black;
+			}
+		}
 
-  .van-popup {
-    background: $mainbgWhiteColor;
-    margin: 0 auto;
-  }
+		.van-popup {
+			background: $mainbgWhiteColor;
+			margin: 0 auto;
+		}
 
-  .van-nav-bar__title {
-    color: $log-c;
-  }
+		.van-nav-bar__title {
+			color: $log-c;
+		}
 
-  .van-hairline--top-bottom::after,
-  .van-hairline-unset--top-bottom::after {
-    border: none;
-  }
+		.van-hairline--top-bottom::after,
+		.van-hairline-unset--top-bottom::after {
+			border: none;
+		}
 
-  .van-dialog {
-    background: $mainbgWhiteColor;
-  }
+		.van-dialog {
+			background: $mainbgWhiteColor;
+		}
 
-  .van-dialog__header {
-    color: $text_color;
-  }
+		.van-dialog__header {
+			color: $text_color;
+		}
 
-  .van-dialog__message--has-title {
-    color: $dark-grey;
-  }
+		.van-dialog__message--has-title {
+			color: $dark-grey;
+		}
 
-  .van-button--default {
-    // background: $main_background;
-    color: $dark-grey;
-  }
+		.van-button--default {
+			// background: $main_background;
+			color: $dark-grey;
+		}
 
-  .van-nav-bar {
-    // background: $main_background;
-    line-height: normal;
-  }
+		.van-nav-bar {
+			// background: $main_background;
+			line-height: normal;
+		}
 
-  .van-dropdown-menu__title {
-    color: $text_color !important;
-  }
+		.van-dropdown-menu__title {
+			color: $text_color !important;
+		}
 
-  .van-nav-bar__right {
-    color: $text_color;
-  }
-}
+		.van-nav-bar__right {
+			color: $text_color;
+		}
+	}
 
-.van-nav-bar__left {
-  padding: 0 16px !important;
-}
-</style>
+	.van-nav-bar__left {
+		padding: 0 16px !important;
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3