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/register/index.vue |  732 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 446 insertions(+), 286 deletions(-)

diff --git a/src/page/register/index.vue b/src/page/register/index.vue
index 7281819..9a6115c 100644
--- a/src/page/register/index.vue
+++ b/src/page/register/index.vue
@@ -1,39 +1,117 @@
 <template>
-    <div class="register">
-        <div class="top" @click="$router.go(-1)"><img :src="require(`../../assets/theme/${theme}/image/Union.png`)" alt="">
-        </div>
-        <Step :step="1"></Step>
-        <div class="title textColor">{{ $t('注册') }}</div>
-        <div class="flex re-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.trim="username"
-            :area="isArea" :dialCode="dialCode" @selectArea="onSelectArea" :icon="icon" />
-
-        <ExInput :label="$t('设置密码')" :placeholderText="$t('密码(6-12个字符)')" v-model="password" typeText="password" />
-        <ExInput :label="$t('确认密码')" :placeholderText="$t('请确认密码')" v-model="repassword" typeText="password" />
-        <ExInput :label="$t('邀请码(选填)')" :placeholderText="$t('请输入邀请码')" v-model="invitCode" :clearBtn="false" />
-        <div class="protocol textColor">
-            <i @click="agreeProt">
-                <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" />
-                <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" />
-            </i>
-            {{ $t('我已阅读并同意') }}<span class="colorMain" @click="$router.push('/TermsOfService?serviceTerm=1')">{{ $t('服务条款')
-            }}</span>
-        </div>
-        <div class="btn btnMain" @click="register">{{ $t('注册') }}</div>
-        <div class="noTips textColor">{{ $t('已有账号') }}<span class="colorMain" @click="$router.push('/login')">
-                {{ $t('去登录') }}</span>
-        </div>
-        <nationality-list ref='controlChild' :title="$t('选择区域码')" @getName="getName(arguments)"></nationality-list>
-
-        <Vcode :imgs="[img1, img2]" :show="show" @success="onSuccess" :canvasHeight="200" @fail="onFail"
-            @close="show = false;" sliderText='' :successText="$t('验证通过!')" :failText="$t('验证失败,请重试')" />
-
-        <div>{{ msg }}</div>
+  <div class="register">
+    <div class="top" @click="$router.go(-1)">
+      <img
+        :src="require(`../../assets/theme/${theme}/image/Union.png`)"
+        alt=""
+      />
     </div>
+    <!-- <Step :step="1"></Step> -->
+    <div class="title textColor">{{ $t("注册") }}</div>
+    <div class="flex re-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.trim="username"
+      :area="isArea"
+      :dialCode="dialCode"
+      @selectArea="onSelectArea"
+      :icon="icon"
+    />
+
+    <ExInput
+      :label="$t('设置密码')"
+      :placeholderText="$t('密码(6-12个字符)')"
+      v-model="password"
+      typeText="password"
+    />
+    <ExInput
+      :label="$t('确认密码')"
+      :placeholderText="$t('请确认密码')"
+      v-model="repassword"
+      typeText="password"
+    />
+    <ExInput
+      :label="$t('资金密码')"
+      :placeholderText="$t('资金密码(6位数字)')"
+      v-model="safeword"
+      typeText="password"
+    />
+    <ExInput
+      :label="$t('确认资金密码')"
+      :placeholderText="$t('确认资金密码')"
+      v-model="resafeword"
+      typeText="password"
+    />
+    <ExInput
+      :label="$t('邀请码(选填)')"
+      :placeholderText="$t('请输入邀请码')"
+      v-model="invitCode"
+      :clearBtn="false"
+    />
+    <!-- <div class="title textColor">{{ $t("邮箱验证") }}</div> -->
+    <p>{{ $t("verifyEmailTips", { account: account }) }}</p>
+    <div class="iptbox inputBackground">
+      <input
+        class="inputBackground textColor"
+        type="text"
+        :placeholder="$t('请输入验证码')"
+        v-model="verifyCode"
+      />
+      <span @click="senCode"
+        >{{ $t("发送验证码") }}
+        <template v-if="time"> ({{ time }})s</template></span
+      >
+    </div>
+    <div class="protocol textColor">
+      <i @click="agreeProt">
+        <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" />
+        <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" />
+      </i>
+      {{ $t("我已阅读并同意")
+      }}<span
+        class="colorMain"
+        @click="$router.push('/TermsOfService?serviceTerm=1')"
+        >{{ $t("服务条款") }}</span
+      >
+    </div>
+    <div class="btn btnMain" @click="register">{{ $t("注册") }}</div>
+    <div class="noTips textColor">
+      {{ $t("已有账号")
+      }}<span class="colorMain" @click="$router.push('/login')">
+        {{ $t("去登录") }}</span
+      >
+    </div>
+    <nationality-list
+      ref="controlChild"
+      :title="$t('选择区域码')"
+      @getName="getName(arguments)"
+    ></nationality-list>
+
+    <Vcode
+      :imgs="[img1, img2]"
+      :show="show"
+      @success="onSuccess"
+      :canvasHeight="200"
+      @fail="onFail"
+      @close="show = false"
+      sliderText=""
+      :successText="$t('验证通过!')"
+      :failText="$t('验证失败,请重试')"
+    />
+
+    <div>{{ msg }}</div>
+  </div>
 </template>
 
 <script>
@@ -41,295 +119,377 @@
 import ExInput from "@/components/ex-input";
 import Step from "./step.vue";
 import Axios from "@/API/login.js";
-import { mapActions, mapGetters } from 'vuex';
-import { GET_USERINFO } from '@/store/const.store';
-import nationalityList from '../authentication/components/nationalityList.vue'
+import { mapActions, mapGetters } from "vuex";
+import { GET_USERINFO } from "@/store/const.store";
+import nationalityList from "../authentication/components/nationalityList.vue";
 import Vcode from "vue-puzzle-vcode";
 import img1 from "../../assets/image/slider/1.png";
 import img2 from "../../assets/image/slider/2.png";
-import { getStorage } from '@/utils/utis'
+import { getStorage } from "@/utils/utis";
 export default {
-    props: {
-
-    },
-    components: {
-        [Popup.name]: Popup,
-        ExInput,
-        Step,
-        nationalityList,
-        Vcode
-    },
-    data() {
-        return {
-            show: false,
-            msg: '',
-            type: 3,// 1手机 2 邮箱 3账号
-            agree: false,
-            username: '',
-            password: "",
-            repassword: '',
-            invitCode: '',//邀请码
-            activeIndex: 1,
-            typeText: "password",
-            isArea: false,
-            dialCode: 0, //电话号前缀
-            icon: '',
-            img1,
-            img2,
-        }
-    },
-    mounted() {
-        let usercode = getStorage('usercode')
-        if (usercode) {
-            this.invitCode = usercode;
-        }
-    },
-    computed: {
-        ...mapGetters({
-            theme: 'home/theme'
-        }),
-    },
-    methods: {
-        ...mapActions('user', [GET_USERINFO]),
-        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('请输入手机号');
-            }
-        },
-        onClose() {
-            console.log('onClose')
-        },
-        onSuccess() {
-            console.log('onSuccess')
-            this.registerApi();
-            this.show = false;
-        },
-        onFail() {
-            this.msg = ''
-        },
-        onRefresh() {
-            this.msg = ''
-        },
-        onSelectArea() {
-            this.openBtn();
-        },
-        //打开国家列表底部弹窗
-        openBtn() {
-            this.$refs.controlChild.open();
-        },
-        //获取到当前选中国家的code值
-        getName(params) {
-            this.icon = params[1];
-            this.dialCode = params[2];
-        },
-        agreeProt() {
-            this.agree = !this.agree
-        },
-        register() {
-            // if (this.activeIndex == 0){
-            //     let match = this.username.search(/@/);
-            //     if (this.username == '' || match == -1) {
-            //         this.$toast(this.$t('请输入正确的邮箱地址'));
-            //         return
-            //     }
-            // }else{
-            //     if (this.username == '' ) {
-            //         this.$toast(this.$t('请输入手机号'));
-            //         return
-            //     }
-            // }
-            switch (this.activeIndex) {
-                case 0:
-                    {
-                        if (this.username == '') {
-                            this.$toast(this.$t('请输入账号'));
-                            return;
-                        }
-                        if (this.username.length < 6 || this.username.length > 30) {
-                            this.$toast(this.$t('账号长度必须6-30位'));
-                            return;
-                        }
-                        break;
-                    }
-                case 1:
-                    {
-                        let match = this.username.search(/@/);
-                        if (this.username == '' || match == -1) {
-                            this.$toast(this.$t('请输入正确的邮箱地址'));
-                            return;
-                        }
-                        break;
-                    }
-                case 2:
-                    {
-                        if (this.username == '') {
-                            this.$toast(this.$t('请输入手机号'));
-                            return;
-                        }
-                        break;
-                    }
-            }
-            if (this.password == '') {
-                this.$toast(this.$t('请输入密码'));
-                return
-            }
-            if (this.password.length < 6) {
-                this.$toast(this.$t('密码(6-12个字符)'));
-                return
-            }
-            if (this.repassword !== this.password) {
-                this.$toast(this.$t('密码不一致'));
-                return
-            }
-            if (!this.agree) {
-                this.$toast(this.$t('请同意服务条款'));
-                return
-            }
-            this.show = true
-        },
-        changeIndex(index) {
-            this.activeIndex = index;
-            switch (index) {
-                case 0:
-                case 1: {
-                    this.isArea = false;
-                    break;
-                }
-                case 2: {
-                    this.isArea = true;
-                    break;
-                }
-            }
-        },
-        registerApi() {
-            switch (this.activeIndex) {
-                case 0:
-                    {
-                        this.type = 3;
-                        break;
-                    }
-                case 1:
-                    {
-                        this.type = 2;
-                        break;
-                    }
-                case 2:
-                    {
-                        this.type = 1;
-                        break;
-                    }
-            }
-            Axios.registerUser({
-                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)
-                if (this.activeIndex == 0||this.activeIndex == 2) {
-                    this.$router.push('/setFond')
-                }
-                else  {
-                    this.$router.push({ name: 'verify', query: { type: this.activeIndex, account: this.activeIndex == 1 ? this.username : `${this.username}` } })
-                }
-            }).catch((error) => {
-                if (error.code === 'ECONNABORTED') { this.$toast(this.$t('网络超时!')); }
-                else if (error.msg !== undefined) { this.$toast(this.$t(error.msg)); }
-            });
-        }
+  props: {},
+  components: {
+    [Popup.name]: Popup,
+    ExInput,
+    Step,
+    nationalityList,
+    Vcode,
+  },
+  data() {
+    return {
+      show: false,
+      msg: "",
+      type: 3, // 1手机 2 邮箱 3账号
+      agree: false,
+      username: "",
+      password: "",
+      repassword: "",
+      resafeword: "",
+      safeword: "",
+      invitCode: "", //邀请码
+      activeIndex: 1,
+      typeText: "password",
+      isArea: false,
+      dialCode: 0, //电话号前缀
+      icon: "",
+      img1,
+      img2,
+      account: "",
+      timer: "",
+      time: 0,
+      verifyCode: "",
+    };
+  },
+  mounted() {
+    let usercode = getStorage("usercode");
+    if (usercode) {
+      this.invitCode = usercode;
     }
-}
+  },
+  computed: {
+    ...mapGetters({
+      theme: "home/theme",
+    }),
+  },
+  methods: {
+    ...mapActions("user", [GET_USERINFO]),
+    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("请输入手机号");
+      }
+    },
+    onClose() {
+      console.log("onClose");
+    },
+    onSuccess() {
+      console.log("onSuccess");
+      this.registerApi();
+      this.show = false;
+    },
+    onFail() {
+      this.msg = "";
+    },
+    onRefresh() {
+      this.msg = "";
+    },
+    onSelectArea() {
+      this.openBtn();
+    },
+    //打开国家列表底部弹窗
+    openBtn() {
+      this.$refs.controlChild.open();
+    },
+    //获取到当前选中国家的code值
+    getName(params) {
+      this.icon = params[1];
+      this.dialCode = params[2];
+    },
+    agreeProt() {
+      this.agree = !this.agree;
+    },
+    register() {
+      // if (this.activeIndex == 0){
+      //     let match = this.username.search(/@/);
+      //     if (this.username == '' || match == -1) {
+      //         this.$toast(this.$t('请输入正确的邮箱地址'));
+      //         return
+      //     }
+      // }else{
+      //     if (this.username == '' ) {
+      //         this.$toast(this.$t('请输入手机号'));
+      //         return
+      //     }
+      // }
+      switch (this.activeIndex) {
+        case 0: {
+          if (this.username == "") {
+            this.$toast(this.$t("请输入账号"));
+            return;
+          }
+          if (this.username.length < 6 || this.username.length > 30) {
+            this.$toast(this.$t("账号长度必须6-30位"));
+            return;
+          }
+          break;
+        }
+        case 1: {
+          let match = this.username.search(/@/);
+          if (this.username == "" || match == -1) {
+            this.$toast(this.$t("请输入正确的邮箱地址"));
+            return;
+          }
+          break;
+        }
+        case 2: {
+          if (this.username == "") {
+            this.$toast(this.$t("请输入手机号"));
+            return;
+          }
+          break;
+        }
+      }
+      if (this.password == "") {
+        this.$toast(this.$t("请输入密码"));
+        return;
+      }
+      if (this.password.length < 6) {
+        this.$toast(this.$t("密码(6-12个字符)"));
+        return;
+      }
+      if (this.repassword !== this.password) {
+        this.$toast(this.$t("密码不一致"));
+        return;
+      }
+      if (!this.agree) {
+        this.$toast(this.$t("请同意服务条款"));
+        return;
+      }
+      if (this.verifyCode.length < 6) {
+        this.$toast(this.$t("请输入6位验证码"));
+        return;
+      }
+      // this.show = true
+      this.registerApi();
+    },
+    bindEmail() {
+      Axios.bindEmail({
+        email: this.account,
+        verifcode: this.verifyCode,
+      })
+        .then((res) => {
+          this.$toast(this.$t("绑定成功"));
+          // this.$router.push('/setFond')
+          this.setSafewordReg();
+        })
+        .catch((error) => {
+          if (error.code === "ECONNABORTED") {
+            this.$toast(this.$t("网络超时!"));
+          } else if (error.msg !== undefined) {
+            this.$toast(this.$t(error.msg));
+          }
+        });
+    },
+    changeIndex(index) {
+      this.activeIndex = index;
+      switch (index) {
+        case 0:
+        case 1: {
+          this.isArea = false;
+          break;
+        }
+        case 2: {
+          this.isArea = true;
+          break;
+        }
+      }
+    },
+    registerApi() {
+      switch (this.activeIndex) {
+        case 0: {
+          this.type = 3;
+          break;
+        }
+        case 1: {
+          this.type = 2;
+          break;
+        }
+        case 2: {
+          this.type = 1;
+          break;
+        }
+      }
+      Axios.registerUser({
+        username:
+          this.activeIndex == 0 || this.activeIndex == 1
+            ? this.username
+            : `${this.username}`,
+        password: this.password,
+        re_password: this.repassword,
+        re_safeword: this.resafeword,
+        safeword: this.safeword,
+        type: this.type,
+        usercode: this.invitCode,
+        verifcode: this.verifyCode,
+      })
+        .then((res) => {
+          this.GET_USERINFO(res.data);
+        //   if (this.activeIndex == 0 || this.activeIndex == 2) {
+            this.$router.push("/finish");
+        //   } else {
+            // this.$router.push('/userCenter')
+            // this.$router.push({
+            //   name: "verify",
+            //   query: {
+            //     type: this.activeIndex,
+            //     account:
+            //       this.activeIndex == 1 ? this.username : `${this.username}`,
+            //   },
+            // });
+        //   }
+        })
+        .catch((error) => {
+          if (error.code === "ECONNABORTED") {
+            this.$toast(this.$t("网络超时!"));
+          } else if (error.msg !== undefined) {
+            this.$toast(this.$t(error.msg));
+          }
+        });
+    },
+    senCode() {
+      if (this.time > 0) {
+        return false;
+      }
+      Axios.sendVerifyCode({
+        target: this.username,
+      })
+        .then((res) => {
+          this.time = 30;
+          this.timer = setInterval(() => {
+            if (this.time > 0) {
+              this.time = this.time - 1;
+            } else {
+              this.time = 0;
+              clearInterval(this.timer);
+            }
+          }, 1000);
+        })
+        .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>
 .register {
-    width: 100%;
-    box-sizing: border-box;
-    padding: 32px;
-    font-size: 26px;
+  width: 100%;
+  box-sizing: border-box;
+  padding: 32px;
+  font-size: 26px;
 }
 
 .top {
-    padding-left: 18px;
-    padding-top: 18px;
+  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;
+  font-weight: 700;
+  font-size: 52px;
+  margin-top: 54px;
+  margin-bottom: 66px;
 }
 
 .re-tab {
-    margin-bottom: 44px;
+  margin-bottom: 44px;
 
-    div {
-        padding: 0 36px;
-        height: 68px;
-        line-height: 68px;
-        text-align: center;
-        border-radius: 8px;
-        margin-right: 20px;
+  div {
+    padding: 0 36px;
+    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 {
-    color: #1D91FF;
-    font-size: 24px;
-    line-height: 28px;
+  color: #1d91ff;
+  font-size: 24px;
+  line-height: 28px;
 }
 
 .btn {
-    color: #fff;
-    height: 88px;
-    line-height: 88px;
-    text-align: center;
-    font-size: 32px;
-    margin-top: 40px;
-    border-radius: 10px;
+  color: #fff;
+  height: 88px;
+  line-height: 88px;
+  text-align: center;
+  font-size: 32px;
+  margin-top: 40px;
+  border-radius: 10px;
 }
 
 .noTips {
-    margin-top: 48px;
+  margin-top: 48px;
 }
 
 .protocol {
-    display: flex;
-    align-items: center;
+  display: flex;
+  align-items: center;
+  height: 30px;
+  margin-top: 20px;
+  i {
+    width: 30px;
     height: 30px;
+    margin-right: 18px;
 
-    i {
-        width: 30px;
-        height: 30px;
-        margin-right: 18px;
-
-        img {
-            width: 100%;
-            height: 100%;
-        }
+    img {
+      width: 100%;
+      height: 100%;
     }
+  }
+}
+
+.iptbox {
+  height: 88px;
+  margin-top: 16px;
+  padding: 0 20px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-radius: 6px;
+  input {
+    flex: 1;
+    height: 100%;
+    border: none;
+  }
+  span {
+    color: #1d91ff;
+  }
 }
 </style>

--
Gitblit v1.9.3