1
PC-20250623MANY\Administrator
2025-09-17 34171d550c6284bcf657e9b51dde1ccc6769b919
src/page/login/register.vue
@@ -1,52 +1,56 @@
<template>
  <div class="login_page">
    <headers :mess="loginWay" />
    <div class="img_mess">
      <div class="logo_content animated fadeInRight">
        <img :src="Logo" alt />
      </div>
    <headers />
    <div class="login_title animated slideInDown">
      <span>{{ $t("hj15") }}</span>
    </div>
    <div class="logins_content">
      <div class="login_title animated slideInDown">
        <span>{{ '邮箱注册' }}</span>
      </div>
      <div class="login_forms">
        <div class="top_forms">
          <div class="user_name">
            <input type="text" :placeholder="placeholder" v-model="phone" />
          </div>
          <div class="captcha">
            <input type="text" :placeholder="verification" v-model="code" />
            <div v-if="codeshow" @click="checkCodeBox">获取验证码</div>
            <div v-if="!codeshow" class="getcode">{{count}}s</div>
          </div>
          <div class="password">
            <input type="password"  placeholder="密码为6~12位数字、字母或符号" v-model="userPassword"  />
            <!-- @input="handleInput()" -->
          </div>
          <div class="password">
            <input type="password"  placeholder="请再次确认密码" v-model="rePassword"  />
          </div>
          <div class="user_name">
            <input type="text" placeholder="机构代码" v-model="userName" />
          </div>
          <div class="forms_title">{{ placeholder }}</div>
          <el-input :placeholder="$t('请输入')" :size="medium" v-model="phone" clearable @input="handleInput()">
          </el-input>
          <!-- <div class="forms_title">{{ $t("hj25") }}</div>
          <el-input :placeholder="$t('请输入')" :size="medium" v-model="yzmCode" clearable @input="handleInput()">
            <template slot="append">
              <van-button type="info" size="small" @click="getYzm" :loading="djs > 0" :loading-text="djs + ''">
                <span style="font-size: 14px;">{{ $t('获取验证码') }}</span>
              </van-button>
            </template>
          </el-input> -->
          <div class="forms_title">{{ $t("Password") }}</div>
          <el-input :placeholder="$t('hj19')" :size="medium" v-model="userPassword" clearable @input="handleInput()">
          </el-input>
          <div class="forms_title">{{ $t("hj20") }}</div>
          <el-input :placeholder="$t('请输入')" :size="medium" v-model="rePassword" clearable @input="handleInput()">
          </el-input>
          <div class="forms_title">{{ $t("hj21") }}</div>
          <el-input :placeholder="$t('请输入')" :size="medium" v-model="userName" clearable @input="handleInput()">
          </el-input>
        </div>
        <div class="bottom_btns">
          <div class="top_btn" @click="gook" :class="btnClass ? 'on' : 'off'">
            <span>{{ '安全注册' }}</span>
          </div>
          <div
           class="register-form-item agree-model"
        <div class="radio-con" style="display: flex; align-items: center; font-size: 14px">
          <van-checkbox v-model="checked" @change="handleInput()">
            {{ $t("我已閱讀並同意") }}
          </van-checkbox>
          <span @click="gotoxy" style="color: #0e7ddd">
            {{ $t("《用戶服務協議》") }}
          </span>
        </div>
        <div class="bottom_btns" :class="btnClass ? 'on' : 'off'">
          <van-button type="info" :disabled="!btnClass" class="butn" @click="gook">{{ $t("立即注册") }}</van-button>
          <!-- <van-button
            type="info"
            class="butn_2"
            plain
            @click="$router.push('/login')"
          >
            <i @click="isAgree"
             :class="agree?'glyphicon glyphicon glyphicon-ok-sign blue':'glyphicon glyphicon-ok-circle'"></i>
          我已阅读并同意
          <a  style="color:#fff">《注册协议》</a>
          </div>
          <div class="mes">
            <span>{{ '已有账户?' }}</span>
            <span @click="$router.push('/NewLogin')" style="color: rgb(54,124,248);">{{ '登录>' }}</span>
          </div>
            {{ $t("已有賬號?") + $t("馬上登錄") }}
          </van-button> -->
        </div>
      </div>
    </div>
@@ -54,247 +58,439 @@
</template>
<script>
  import headers from "./components/header.vue";
  import Logo from "@/assets/img/LOGO2.png";
  import { isNull, isPhone, pwdReg } from '@/utils/utils'
  import { Toast } from 'mint-ui'
  import * as api from '@/axios/api'
   export default {
    components: {
      headers
import headers from "./components/header.vue";
import { isNull, isPhone, pwdReg } from "@/utils/utils";
import * as api from "@/axios/api";
import { Notify } from "vant";
import { mapMutations } from "vuex";
import deTh from "@/utils/deTh";
export default {
  components: {
    headers
  },
  name: "newRegister",
  data() {
    return {
      checked: false,
      verification: this.$t("hj25"),
      loginWay: this.$t("hj26"),
      loginWay: this.$t("hj26"),
      placeholder: this.$t("hj16"),
      phone: "",
      userName: "",
      yzmCode: '6666',
      code: "",
      userPassword: "",
      btnClass: false,
      rePassword: "",
      medium: "medium",
      djs: 0,
    };
  },
  mounted() {
    this.userName = this.$route.query.agentCode
      ? this.$route.query.agentCode
      : "";
  },
  methods: {
    gotoxy() {
      this.$router.push("/help_fwxy");
    },
     name: "newRegister",
     data () {
        return{
        verification:"验证码",
        loginWay: "手机号注册",
        loginWay: "手机号注册",
        placeholder: "手机号",
        Logo,
        phone:"",
        userName: "",
        code:"",
        userPassword: "",
        btnClass: true,
        codeshow: true,
        count: '', // 倒计时
        clickFalg: 0, //  点击次数
        rePassword:"",
        agree:false,
        }},
     mounted(){
    handleInput() {
      if (
        this.userPassword !== "" &&
        this.yzmCode !== "" &&
        this.phone !== "" &&
        this.userPassword == this.rePassword &&
        this.userName != "" &&
        this.checked
      ) {
        this.btnClass = true;
      } else {
        this.btnClass = false;
      }
    },
    async getYzm() {
     },
     methods:{
      checkCodeBox () {
        if (isNull(this.phone) || !isPhone(this.phone)) {
          Toast('请输入正确的手机号')
        } else {
          this.checkPhone()
        }
      },
      async getcode () {
        // if(!this.checkCode()){
        //     // 验证图形码是否正确
        //     Toast('请输入正确图形验证码')
        //     return
        // }
        // 获取验证码
        if (this.clickFalg !== 0) {
          this.clickFalg = 0
          return
        }
        this.clickFalg++
        //   var reg = 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/
        let reg = /^[0-9]{11}$/ // 手机号码验证
        if (isNull(this.phone)) {
          Toast('手机号不可为空')
        } else {
          if (!reg.test(this.phone)) {
            Toast('请输入正确的手机号码')
          } else {
            //   var sign  = this.$md5(this.phone+'W&WzL42v').toUpperCase()
            let result = await api.getCode({ phoneNum: this.phone })
            if (result.status === 0) {
              const TIME_COUNT = 60
              if (!this.timer) {
                this.count = TIME_COUNT
                this.codeshow = false
                this.clickFalg = 0
                this.timer = setInterval(() => {
                  if (this.count > 0 && this.count <= TIME_COUNT) {
                    this.count--
                  } else {
                    this.codeshow = true
                    clearInterval(this.timer)
                    this.timer = null
                  }
                }, 1000)
              } else {
                Toast(result.msg)
              }
            } else {
              Toast(result.msg)
            }
      let data = await api.getsendmail({ email: this.phone });
      if (data.status == 0) {
        Notify({ type: 'primary', message: data.msg });
        this.djs = 60;
        let time = setInterval(() => {
          this.djs--;
          if (this.djs <= 0) {
            clearInterval(time);
          }
        }
      },
      async gook () {
        // 注册
        if (!this.agree) {
          Toast('需同意注册协议才能注册!')
        } else if (isNull(this.phone) || !isPhone(this.phone)) {
          Toast('请输入正确的手机号码')
        } else if (isNull(this.userPassword)) {
          Toast('请输入密码')
        } else if (isNull(this.rePassword)) {
          Toast('请确认密码')
        } else if (isNull(this.code)) {
          Toast('请输入验证码')
        } else if (this.userPassword !== this.rePassword) {
          Toast('两次输入的密码不一致')
          this.password = 0
          this.password2 = 0
        }, 1000);
      } else {
        Notify({ type: "warning", message: data.msg });
      }
    },
    async gook() {
      if (this.phone.length == 0) {
        Notify({ type: "warning", message: this.$t("hj28") });
      } else if (isNull(this.userPassword)) {
        Notify({ type: "warning", message: this.$t("hj30") });
      } else if (isNull(this.rePassword)) {
        Notify({ type: "warning", message: this.$t("hj31") });
      } else {
        if (this.userPassword !== this.rePassword) {
          this.password = 0;
          this.password2 = 0;
          Notify({ type: "warning", message: this.$t("hj32") });
        } else if (!pwdReg(this.userPassword)) {
          Toast('密码为6~12位,数字、字母或符号')
          Notify({ type: "warning", message: this.$t("hj19") });
        } else if (isNull(this.userName)) {
          Toast('请输入机构代码')
          Notify({ type: "warning", message: this.$t("hj33") });
        } else {
          let opts = {
            // agentCode:'4023', // SR330001
            phone: this.phone,
            yzmCode: this.code,
            yzmCode: this.yzmCode,
            userPwd: this.userPassword,
            agentCode: this.userName
          }
          let data = await api.register(opts)
          };
          let data = await api.register(opts);
          if (data.status === 0) {
            Toast('注册成功,请登录')
            this.$router.push('/NewLogin')
            setTimeout(() => {
              this.$router.push("/login");
            }, 1000);
          } else {
            Toast(data.msg)
            Notify({ type: "warning", message: data.msg });
          }
        }
      },
      isAgree () {
        this.agree=!this.agree
      },
      async checkPhone () {
        // 先验证是否已经注册
        let data = await api.checkPhone({ phoneNum: this.phone })
        if (data.status === 0) {
          // 如果用户已存在返回 0
          Toast('用户已注册,请登录')
          this.$router.push('/login')
        } else {
          // this.dialogShow = false
          // this.adminUrl = process.env.API_HOST
          // if (this.adminUrl === undefined) {
          //   this.adminUrl = ''
          // }
          // this.gook()
          this.getcode()
        }
      },
     },
     }
      }
      if (navigator.vibrate) {
        // 支持
        navigator.vibrate([55]);
      }
    }
  }
};
</script>
<style  scoped lang="less">
  .logins_content {
    width: 100%;
    height: 9.7436rem;
    margin-top: 0.4359rem;
    padding: 0 0.2564rem;
    .login_title {
      width: 100%;
      height: 2.0513rem;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 0.6923rem;
      color: #fff;
    }
    .login_forms {
      width: 100%;
      height: 7.9231rem;
      .top_forms {
        width: 100%;
        height: 4.5128rem;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
        .user_name,.captcha,
        .password {
          width: 100%;
          height: 35%;
          background: #1e1e1e;
          border-radius: 0.3564rem;
          margin-top: 0.2rem;
          > input {
            width: 100%;
            height: 100%;
            padding-left: 0.3564rem;
            font-size: 0.4615rem;
          }
        }
        .captcha{
          display: flex;
          align-items: center;
          > input {
            width: 80%!important;
<style scoped lang="less">
@green: #0e7ddd;
@Black1: #13161e;
          }
        }
      }
      .bottom_btns {
        width: 100%;
        height: 3.3333rem;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        margin-top: 4.8128rem;
        .top_btn {
          width: 100%;
          height: 40%;
          border-radius: 0.3564rem;
          background: rgb(131, 174, 243);
          display: flex;
          align-items: center;
          justify-content: center;
          font-size: 0.5128rem;
        }
        .top_btn.on {
          background: rgb(0, 71, 187);
        }
        .mes {
          width: 100%;
          height: 40%;
          display: flex;
          justify-content: flex-end;
          align-items: center;
          font-size: 0.3846rem;
        }
      }
    }
  }
  .img_mess {
.register {
  font-style: normal;
  font-weight: 500;
  font-size: 0.37333rem;
  color: #8c9fad;
  text-align: center;
  margin: 20px auto;
  // margin-top: 10px;
}
.radio-con {
  margin-top: 0.32rem;
}
/deep/ .el-input-group__append {
  background: #13161e;
  border: none !important;
  size: .3rem;
}
/deep/ .van-checkbox__icon--checked .van-icon {
  background: @green;
  border-color: @green;
}
/deep/ .van-checkbox__label {
  font-style: normal;
  font-weight: 500;
  font-size: 0.37333rem;
  line-height: 0.53333rem;
  color: #8c9fad;
}
/deep/ .van-button__text {
  font-size: 24px;
  font-family: "DINPro";
}
.login_title {
  font-family: "DINPro", serif;
  font-style: normal;
  font-weight: 500;
  font-size: 0.48rem;
  line-height: 0.66667rem;
  padding: 0.6rem 0.6rem 0;
}
.login_page {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  height: 100vh;
}
.logins_content {
  display: flex;
  flex-direction: column;
  flex: 1;
  width: 100%;
  height: 9.7436rem;
  padding: 0.4rem 0.6rem 0;
  border-top-left-radius: 0.26667rem;
  border-top-right-radius: 0.26667rem;
  .login_title {
    width: 100%;
    height: 4.0513rem;
    height: 2.0513rem;
    display: flex;
    justify-content: center;
    padding: 0.6rem 0.6rem 0;
    align-items: center;
    .logo_content {
      width: 3rem;
      height: 3.5769rem;
      > img {
    font-size: 0.7023rem;
    color: #000;
    font-weight: 600 !important;
    >span {
      font-weight: 600 !important;
    }
  }
  .login_forms {
    width: 100%;
    border-top-left-radius: 0.26667rem;
    border-top-right-radius: 0.26667rem;
    flex: 1;
    display: flex;
    flex-direction: column;
    .top_forms {
      width: 100%;
      height: auto;
      display: flex;
      align-items: center;
      flex-wrap: wrap;
      .forms_title {
        font-size: 0.3rem;
        margin-top: 0.5rem;
        margin-bottom: 0.2rem;
        font-weight: 300;
        opacity: 0.7;
      }
      .user_name,
      .password {
        width: 100%;
        height: 100%;
        height: 35%;
        background: rgb(246, 246, 247);
        // background: #1e1e1e;
        border-radius: 0.3564rem;
        >input {
          width: 100%;
          height: 100%;
          padding-left: 0.3564rem;
          font-size: 0.4615rem;
        }
      }
    }
    /deep/.el-input__inner {
      width: 100%;
      height: 70px;
      background-color: @Black1 !important;
      font-size: 0.3rem !important;
      border: @Black1 solid 1px;
      color: #fff;
      border-bottom: rgba(#fff, 0.7) solid 1px;
    }
    .bottom_btns {
      width: 100%;
      height: 3.3333rem;
      // margin-top: 0.8528rem;
      .butn {
        width: 100%;
        margin-top: 40px;
        height: 60px;
        border-radius: 8px;
        background-color: @green;
        border-color: @green;
      }
      .butn_2 {
        width: 100%;
        margin-top: 40px;
        height: 60px;
        border-radius: 8px;
        color: @green;
        border-color: @green;
        margin-top: 0.4rem;
      }
      .mes {
        width: 100%;
        height: 20%;
        margin-top: 0.4rem;
        display: flex;
        justify-content: flex-end;
        align-items: center;
        font-size: 0.3846rem;
      }
    }
  }
  .agree-model{
    margin-top: 0.2rem;
}
.login_bom {
  position: absolute;
  bottom: 2.6rem;
  width: 100%;
  height: 4rem;
  padding: 0 2rem;
}
.line {
  //分割线
  width: 100%;
  height: 0.3846rem;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 0.3846rem;
  .left_line {
    width: 20%;
    height: 0.01rem;
    background: #e5e5e5;
  }
  .center_line {
    width: 50%;
    height: 0.01rem;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    >span {
      font-size: 0.3046rem;
      color: #000;
      background-color: #fff;
    }
  }
  .right_line {
    width: 20%;
    height: 0.01rem;
    background: #e5e5e5;
  }
}
.myzh {
  width: calc(100% - 4rem);
  position: absolute;
  bottom: 0.01rem;
  text-align: center;
  .mes {
    width: 100%;
    height: 40%;
    font-size: 0.3846rem;
  }
}
.imgDemo {
  display: flex;
  justify-content: space-between;
  position: relative;
  transform: translateY(50%);
}
.appImg {
  width: 1.4rem;
  height: 1.4rem;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: rgb(246, 246, 247);
  border-radius: 100%;
}
.appImg img {
  width: 0.8rem;
  height: 0.8rem;
}
.img_mess {
  width: 100%;
  height: 4.0513rem;
  display: flex;
  justify-content: center;
  align-items: center;
  .logo_content {
    width: 3rem;
    height: 3.5769rem;
    >img {
      width: 100%;
      height: 100%;
    }
  }
}
/deep/.el-alert {
  width: 70% !important;
  height: 1rem !important;
  position: absolute !important;
  top: 0 !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  margin: auto !important;
  font-size: 0.3rem !important;
}
/deep/.el-alert__title {
  font-size: 0.3rem !important;
}
/deep/el-input__suffix {
  width: 1rem !important;
}
/deep/.el-input__suffix-inner {
  width: 1rem !important;
}
/deep/.el-input__icon {
  width: 1rem !important;
}
/deep/.el-icon-circle-close::before {
  font-size: 0.5rem !important;
}
/deep/.el-input__clear {
  font-size: 0.5rem !important;
}
/deep/ .el-input-group__prepend {
  border: none !important;
  border-radius: 0 !important;
  font-size: 0.45rem !important;
}
.on .top_btn {
  background: #2d8cf0 !important;
}
.agree-model {
  margin-top: 0.2rem;
}
</style>