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