vue机验登录

<template>
  <!-- 登录 -->
  <div id="login">
    <headers></headers>
    <div class="comm_100">
      <div class="auto_1200 goplastic_name">
        <router-link tag="a" :to="'/'" class="a_left"></router-link>
        <span>{{$t('login.login1')}}</span>
      </div>
    </div>
    <div class="content_back">
      <ul>
        <li class="li_a">
          <span>{{$t('login.login1')}}</span>
          <span>
            {{$t('login.login8')}}
            <router-link tag="a" :to="'/signin'">{{$t('home.home4')}}</router-link>
          </span>
        </li>
        <li class="li_pi">
          <p>{{$t('login.login2')}}</p>
          <input
            type="text"
            :placeholder="$t('login.login3')"
            v-model="userMobile"
            @keyup.enter="evnameFun($event)"
          />
        </li>
        <li class="li_pi">
          <p>{{$t('login.login4')}}</p>
          <input
            type="password"
            :placeholder="$t('login.login5')"
            v-model="password"
            @keyup.enter="evpassFun($event)"
            id="pas_name"
          />
        </li>
        <li class="li_jy">
          <div id="captchaLogin"></div>
          <div v-show="waitShow" id="wait">{{$t('signin.signin25')}}</div>
        </li>
        <li class="li_login">
          <el-button type="button" @click="onLogin" :loading="btnStatus">{{$t('login.login1')}}</el-button>
        </li>
        <li class="li_wjmm clearfloat">
          <p>
            <input type="checkbox" v-model="isShow" class="check_box" />
            <span>{{$t('login.login6')}}</span>
          </p>
          <a href="/nopassword">{{$t('login.login7')}}?</a>
        </li>
      </ul>
    </div>
    <footers></footers>
  </div>
</template>

<script>
import { fetchGet, fetchPost, userapi, messageapi, logins } from "@/https";
// import { mapActions } from "vuex";
import vuex from "vuex";
import gtInit from "@/gt";
import headers from "@/views/headers";
import footers from "@/views/footers";
export default {
  name: "login",
  components: {
    headers,
    footers
  },
  data() {
    return {
      userMobile: "",
      password: "",
      isShow: true,
      waitShow: true,
      captchaObj: {},
      result: {},
      btnStatus: false,
      loggingStatus: 2
    };
  },
  created() {
    this.getInitGtTest();
  },
  methods: {
    //跳去首页
    gohome() {
      this.$router.push({
        path: "/indexs"
      });
    },
    //账号回车
    evnameFun(ev) {
      if (ev.keyCode == 13) {
        const nextDom = document.getElementById("pas_name");
        nextDom.focus();
      }
    },
    //密码回车
    evpassFun(ev) {
      if (ev.keyCode == 13) {
        this.onLogin();
      }
    },
    //登录
    onLogin() {
      //判断用户名
      if (
        !this.userMobile ||
        this.userMobile == "" ||
        this.userMobile == null
      ) {
        this.$notify({
          message: this.$t("login.login3"),
          type: "warning"
        });
        return;
      }
      //判断密码
      if (!this.password || this.password == "" || this.password == null) {
        this.$notify({
          message: this.$t("login.login5"),
          type: "warning"
        });
        return;
      }
      //判断极验
      if (
        !this.result.geetest_challenge &&
        !this.result.geetest_validate &&
        !this.result.geetest_seccode
      ) {
        return this.$notify({
          message: this.$t("login.login9"),
          type: "warning"
        });
      } else {
        this.btnStatus = true;
        var _this = this;
        if (_this.isShow == true) {
          _this.loggingStatus = 1;
        } else {
          _this.loggingStatus = 2;
        }
        let form = {
          mobile: _this.userMobile,
          password: _this.password,
          geetest_challenge: _this.result.geetest_challenge,
          geetest_validate: _this.result.geetest_validate,
          geetest_seccode: _this.result.geetest_seccode,
          holeLogin: _this.loggingStatus
        };
        fetchPost(userapi + "/customer/login", form)
          .then(data => {
            this.btnStatus = false;
            this.captchaObj.reset();
            this.result = {};
            if (data.data.code == 200) {
              _this.$notify.success({
                message: this.$t("login.login10")
              });
              localStorage.setItem("gptoken", data.data.data.token);
              localStorage.setItem("gpusername", data.data.data.user.mobile);
              localStorage.setItem("userId", data.data.data.user.id);
              localStorage.setItem("userName", data.data.data.user.name);
              localStorage.setItem("gsId", data.data.data.companyId);
              localStorage.setItem("gsName", data.data.data.companyName);
              localStorage.setItem("cyType", data.data.data.companyType);
              this.gohome();
            } else {
              _this.$notify.error({
                message: data.data.msg
              });
            }
          })
          .catch(err => {});
      }
    },
    getInitGtTest() {
      fetchGet(userapi + "/gt/register?t=" + new Date().getTime())
        .then(res => {
          if (res.status === 200) {
            const data = res.data;
            window.initGeetest(
              {
                gt: data.gt,
                challenge: data.challenge,
                offline: !data.success, // 用户后台检测极验服务器是否宕机
                new_captcha: data.new_captcha, // 用于宕机时表示新验证码的宕机是
                product: "popup", // 产品形式, float, popup
                width: "100%", //  width: "300px" 极验显示宽度
                lang: localStorage.getItem("gPLang")
              },
              captchaObj => {
                // 箭头函数 若使用function 使用this报错
                this.captchaObj = captchaObj;
                captchaObj.appendTo("#captchaLogin");
                captchaObj.onReady(() => {
                  this.waitShow = false; // 隐藏等待提示
                });
                captchaObj.onSuccess(() => {
                  /**
                   * 将极验结果赋值给result 便于在点击登录按钮时做判断 是否已经完成极验
                   */
                  this.result = captchaObj.getValidate();
                });
                captchaObj.onError(() => {});
              }
            );
          }
        })
        .catch(err => {});
    }
  }
};
</script>

<style scoped lang="scss">
#login {
  .content_back {
    background-image: url("https://oss.goplastic.cn/goplasticCommon/login_banner.png");
    background-size: 100% 100%;
    width: 100%;
    height: 510px;
    padding-top: 74px;
    box-sizing: border-box;
    margin-bottom: 125px;
    ul {
      width: 380px;
      height: 365px;
      background: rgba(255, 255, 255, 1);
      box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.03);
      border-radius: 4px;
      margin: 0 auto;
      .li_a {
        height: 52px;
        line-height: 52px;
        overflow: hidden;
        border-bottom: 1px solid #f5f5f5;
        padding: 0 34px;
        span:nth-child(1) {
          float: left;
          font-size: 16px;
          color: #333333;
        }
        span:nth-child(2) {
          float: right;
          font-size: 12px;
          color: #7d7d7d;
          a {
            color: #2590ff;
            text-decoration: underline;
          }
        }
      }
      .li_pi {
        font-size: 12px;
        padding: 0 34px;
        p {
          color: #333333;
          height: 42px;
          line-height: 42px;
        }
        input {
          background: #f5f5f5;
          width: 100%;
          height: 38px;
          border-radius: 1px;
          padding: 0 10px;
          box-sizing: border-box;
          border: none;
        }
        ::-webkit-input-placeholder {
          color: #a7a7a7;
        }
        input[type="text"]:focus,
        input[type="password"]:focus {
          border: 1px solid rgba(228, 228, 228, 1);
        }
      }
      .li_jy {
        padding: 10px 34px 10px;
      }
      .li_login {
        padding: 0 34px;
        button {
          width: 100%;
          height: 38px;
          background: #2590ff;
          color: white;
          font-size: 14px;
          border: none;
          border-radius: 1px;
          opacity: 0.8;
        }
        button:hover {
          opacity: 1;
        }
      }
      .li_wjmm {
        font-size: 12px;
        padding: 12px 34px 0;
        p {
          float: left;
          span {
            color: #7d7d7d;
          }
        }
        a {
          color: #2590ff;
          float: right;
          text-decoration: underline;
        }
      }
    }
  }
}
</style>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容