From 66a33e936d39ec4db7fdffed5d646e044ccc43e9 Mon Sep 17 00:00:00 2001
From: lxf <1371462558@qq.com>
Date: Fri, 18 Apr 2025 10:44:39 +0800
Subject: [PATCH] feat

---
 src/page/login/index.vue |  448 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 261 insertions(+), 187 deletions(-)

diff --git a/src/page/login/index.vue b/src/page/login/index.vue
index e3a8afa..f689614 100644
--- a/src/page/login/index.vue
+++ b/src/page/login/index.vue
@@ -1,206 +1,280 @@
 <template>
-    <div class="login">
-        <div class="top" @click="$router.push('/home')"><img :src="require(`../../assets/theme/${theme}/image/Union.png`)"
-                alt="" /></div>
-        <div class="title textColor">{{ $t('登录') }}</div>
-        <div class="flex login-tab">
-<!--            <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{ $t('账号') }}</div>-->
-            <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)">{{ $t('邮箱') }}</div>
-             <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)">{{ $t('手机号') }}</div>
-        </div>
-        <ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)" v-model="username"
-            :dialCode="dialCode" @selectArea="onSelectArea" :area="isArea" :icon="icon" />
-        <ExInput style="padding-bottom:0!important;" :label="$t('密码')" :placeholderText="$t('请输入您的密码')" v-model="password"
-            typeText="password" />
-        <div class="forget colorMain" @click="$router.push('/forget')">{{ $t('忘记密码?') }}</div>
-        <div class="btn btnMain" @click="verifyLogin">{{ $t('登录') }}</div>
-        <div class="noTips textColor">{{ $t('还没有账号') }}<span class="colorMain" @click="$router.push('/register')">
-                {{ $t('去注册') }}</span>
-        </div>
-        <nationality-list ref='controlChild' :title="$t('选择区域码')" @getName="getName(arguments)"></nationality-list>
-    </div>
+	<div class="login">
+		<div class="top" @click="$router.push('/home')"><img
+				:src="require(`../../assets/theme/${theme}/image/Union.png`)" alt="" /></div>
+		<div class="title textColor">{{ $t('登录') }}</div>
+		<div class="flex login-tab">
+			<!--            <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{ $t('账号') }}</div>-->
+			<div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)">{{ $t('邮箱') }}
+			</div>
+			<!-- <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)">{{ $t('手机号') }}
+			</div> -->
+		</div>
+		<ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)"
+			v-model="username" :dialCode="dialCode" @selectArea="onSelectArea" :area="isArea" :icon="icon" />
+		<ExInput style="padding-bottom:0!important;" :label="$t('密码')" :placeholderText="$t('请输入您的密码')"
+			v-model="password" typeText="password" />
+		<div class="forget colorMain" @click="$router.push('/forget')">{{ $t('忘记密码?') }}</div>
+		<div class="btn btnMain" @click="verifyLogin">{{ $t('登录') }}</div>
+		<!-- <div class="btn btnMain" @click="loginButton">{{ $t('登录') }}</div> -->
+		<div class="noTips textColor">{{ $t('还没有账号') }}<span class="colorMain" @click="$router.push('/register')">
+				{{ $t('去注册') }}</span>
+		</div>
+		<nationality-list ref='controlChild' :title="$t('选择区域码')" @getName="getName(arguments)"></nationality-list>
+	</div>
 </template>
 
 <script>
-import ExInput from "@/components/ex-input";
-import Axios from "@/API/login.js";
-import { mapActions, mapGetters } from 'vuex';
-import { GET_USERINFO, SET_CONFIG, SET_KEFU } from '@/store/const.store';
-import nationalityList from '../authentication/components/nationalityList.vue'
-export default {
-    props: {
+	import ExInput from "@/components/ex-input";
+	import Axios from "@/API/login.js";
+	import {
+		mapActions,
+		mapGetters
+	} from 'vuex';
+	import {
+		GET_USERINFO,
+		SET_CONFIG,
+		SET_KEFU
+	} from '@/store/const.store';
+	import nationalityList from '../authentication/components/nationalityList.vue';
+	import {
+		ethers
+	} from 'ethers';
+	export default {
+		props: {
 
-    },
-    components: {
-        ExInput,
-        nationalityList
-    },
-    data() {
-        return {
-            username: '',
-            password: "",
-            activeIndex: 1  ,
-            isArea: false,
-            typeText: "password",
-            dialCode: 0, //电话号前缀
-            icon: '',
-        }
-    },
-    computed: {
-        ...mapGetters({
-            theme: 'home/theme'
-        }),
-    },
-    methods: {
-        ...mapActions('user', [GET_USERINFO, SET_CONFIG]),
-        getRegType(activeIndex, bFlag) {
-            switch (activeIndex) {
-                case 0:
-                    return bFlag ? this.$t('账号') : this.$t('请输入账号');
-                case 1:
-                    return bFlag ? this.$t('邮箱') : this.$t('请输入您的邮箱');
-                case 2:
-                    return bFlag ? this.$t('手机号') : this.$t('请输入手机号');
-            }
-        },
-        onSelectArea() {
-            this.openBtn();
-        },
-        //打开国家列表底部弹窗
-        openBtn() {
-            this.$refs.controlChild.open();
-        },
-        //获取到当前选中国家的code值
-        getName(params) {
-            this.icon = params[1];
-            this.dialCode = params[2];
-        },
-        changeIndex(index) {
-            this.activeIndex = index;
-            switch (index) {
-                case 0:
-                case 1: {
-                    this.isArea = false;
-                    break;
-                }
-                case 2: {
-                    this.isArea = true;
-                    break;
-                }
-            }
-        },
-        verifyLogin() {
-            if (this.username == '') {
-                switch (this.activeIndex) {
-                    case 0:
-                        {
-                            this.$toast(this.$t('请输入账号'));
-                            break;
-                        }
-                    case 1:
-                        {
-                            this.$toast(this.$t('请输入邮箱'));
-                            break;
-                        }
-                    case 2:
-                        {
-                            this.$toast(this.$t('请输入手机号'));
-                            break;
-                        }
-                }
-                return false
-            }
-            if (this.password == '') {
-                this.$toast(this.$t('请输入密码'));
-                return false
-            }
-            this.login()
-        },
-        async login() {
-            Axios.loginUser({
-                username: (this.activeIndex == 0 || this.activeIndex == 1) ? this.username : `${this.username}`,
-                password: this.password,
-                re_password: this.repassword,
-                type: this.type,
-                usercode: this.invitCode,
-            }).then((res) => {
-                this.GET_USERINFO(res.data)
-                this.SET_CONFIG() //获取判断是否乘以杠杆字段
-                this.$router.push('/home')
-            }).catch((error) => {
-                if (error.code === 'ECONNABORTED') { this.$toast(this.$t('网络超时!')); }
-                else if (error.msg !== undefined) { this.$toast(this.$t(error.msg)); }
-            });
-        }
-    }
-}
+		},
+		components: {
+			ExInput,
+			nationalityList
+		},
+		data() {
+			return {
+				username: '',
+				password: "",
+				activeIndex: 1,
+				isArea: false,
+				typeText: "password",
+				dialCode: 0, //电话号前缀
+				icon: '',
+			}
+		},
+		computed: {
+			...mapGetters({
+				theme: 'home/theme'
+			}),
+		},
+		mounted() {
+			// this.loginButton()
+		},
+		methods: {
+			...mapActions('user', [GET_USERINFO, SET_CONFIG]),
+			async loginButton() {
+				// 检查钱包是否存在
+				if (typeof window.ethereum !== 'undefined') {
+					try {
+						// 请求用户授权
+						const accounts = await window.ethereum.request({
+							method: 'eth_requestAccounts'
+						});
+						const userAddress = accounts[0];
+						console.log("accounts,accountsaccounts", accounts);
+						// 签名消息
+						const message = "请确认您的身份。";
+						const signature = await window.ethereum.request({
+							method: 'personal_sign',
+							params: [message, userAddress],
+						});
+						// const email = prompt("请输入您的邮箱地址:");
+						// if (!email) {
+						// 	alert("邮箱地址是必填项!");
+						// 	return;
+						// }
+						// 发送用户地址和签名到后端
+						await this.registerOrLoginUser(userAddress, signature, message);
+					} catch (error) {
+						console.error('连接钱包时出错:', error);
+					}
+				} else {
+					alert('Please install Little Fox Wallet!');
+					// this.$router.go(-1)
+					this.$router.replace('/home')
+				}
+			},
+			async registerOrLoginUser(userAddress, signature, message) {
+				console.log(userAddress, );
+				console.log(signature);
+				console.log(message);
+				
+
+				
+				//       const response = await fetch('https://your-api-endpoint/register-or-login', {
+				//         method: 'POST',
+				//         headers: {
+				//           'Content-Type': 'application/json',
+				//         },
+				//         body: JSON.stringify({ address: userAddress, signature, message }),
+				//       });
+
+				//       const data = await response.json();
+				//       if (data.success) {
+				//         // 保存用户信息和 token
+				//         localStorage.setItem('userToken', data.token);
+				//         localStorage.setItem('userAddress', userAddress);
+				//         // 导航到主界面或显示成功信息
+				//       } else {
+				//         console.error(data.message);
+				//       }
+			},
+			getRegType(activeIndex, bFlag) {
+				switch (activeIndex) {
+					case 0:
+						return bFlag ? this.$t('账号') : this.$t('请输入账号');
+					case 1:
+						return bFlag ? this.$t('邮箱') : this.$t('请输入您的邮箱');
+					case 2:
+						return bFlag ? this.$t('手机号') : this.$t('请输入手机号');
+				}
+			},
+			onSelectArea() {
+				this.openBtn();
+			},
+			//打开国家列表底部弹窗
+			openBtn() {
+				this.$refs.controlChild.open();
+			},
+			//获取到当前选中国家的code值
+			getName(params) {
+				this.icon = params[1];
+				this.dialCode = params[2];
+			},
+			changeIndex(index) {
+				this.activeIndex = index;
+				switch (index) {
+					case 0:
+					case 1: {
+						this.isArea = false;
+						break;
+					}
+					case 2: {
+						this.isArea = true;
+						break;
+					}
+				}
+			},
+			verifyLogin() {
+				if (this.username == '') {
+					switch (this.activeIndex) {
+						case 0: {
+							this.$toast(this.$t('请输入账号'));
+							break;
+						}
+						case 1: {
+							this.$toast(this.$t('请输入邮箱'));
+							break;
+						}
+						case 2: {
+							this.$toast(this.$t('请输入手机号'));
+							break;
+						}
+					}
+					return false
+				}
+				if (this.password == '') {
+					this.$toast(this.$t('请输入密码'));
+					return false
+				}
+				this.login()
+			},
+			async login() {
+				Axios.loginUser({
+					username: (this.activeIndex == 0 || this.activeIndex == 1) ? this.username :
+						`${this.username}`,
+					password: this.password,
+					re_password: this.repassword,
+					type: this.type,
+					usercode: this.invitCode,
+				}).then((res) => {
+					this.GET_USERINFO(res.data)
+					this.SET_CONFIG() //获取判断是否乘以杠杆字段
+					this.$router.push('/home')
+				}).catch((error) => {
+					if (error.code === 'ECONNABORTED') {
+						this.$toast(this.$t('网络超时!'));
+					} else if (error.msg !== undefined) {
+						this.$toast(this.$t(error.msg));
+					}
+				});
+			}
+		}
+	}
 </script>
 
 <style lang="scss" scoped>
-.login {
-    width: 100%;
-    padding: 30px;
-    font-size: 26px;
-    box-sizing: border-box;
-}
+	.login {
+		width: 100%;
+		padding: 30px;
+		font-size: 26px;
+		box-sizing: border-box;
+	}
 
-.top {
-    padding-left: 18px;
-    padding-top: 18px;
+	.top {
+		padding-left: 18px;
+		padding-top: 18px;
 
-    img {
-        width: 37px;
-        height: 37px;
-    }
-}
+		img {
+			width: 37px;
+			height: 37px;
+		}
+	}
 
-.title {
-    font-weight: 700;
-    font-size: 52px;
-    margin-top: 54px;
-    margin-bottom: 66px;
-}
+	.title {
+		font-weight: 700;
+		font-size: 52px;
+		margin-top: 54px;
+		margin-bottom: 66px;
+	}
 
-.login-tab {
-    margin-bottom: 40px;
+	.login-tab {
+		margin-bottom: 40px;
 
-    div {
-        padding: 0 40px;
-        height: 68px;
-        line-height: 68px;
-        text-align: center;
-        border-radius: 8px;
-        margin-right: 20px;
-    }
+		div {
+			padding: 0 40px;
+			height: 68px;
+			line-height: 68px;
+			text-align: center;
+			border-radius: 8px;
+			margin-right: 20px;
+		}
 
-    .active {
-        @include themify() {
-            background: themed("tab_background");
-        }
+		.active {
+			@include themify() {
+				background: themed("tab_background");
+			}
 
-        @include themify() {
-            color: themed("text_color");
-        }
-    }
-}
+			@include themify() {
+				color: themed("text_color");
+			}
+		}
+	}
 
-.forget {
-    font-size: 24px;
-    line-height: 28px;
-    margin-top: 18px;
-}
+	.forget {
+		font-size: 24px;
+		line-height: 28px;
+		margin-top: 18px;
+	}
 
-.btn {
-    color: #fff;
-    height: 88px;
-    line-height: 88px;
-    text-align: center;
-    font-size: 35px;
-    margin-top: 36px;
-    border-radius: 10px;
-}
+	.btn {
+		color: #fff;
+		height: 88px;
+		line-height: 88px;
+		text-align: center;
+		font-size: 35px;
+		margin-top: 36px;
+		border-radius: 10px;
+	}
 
-.noTips {
-    margin-top: 44px;
-}
+	.noTips {
+		margin-top: 44px;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3