<template>
  <div class="register-container">
    <!-- <van-icon name="arrow-left" @click="$router.go(-1)" /> -->
    <img src="@/assets/images/logo.png" class="logo-img" alt="" />
    <div class="form-content">
      <van-cell-group>
        <van-field
          v-model="form.userId"
          placeholder="请输入手机号"
          type="number"
          maxlength="11"
          :border="hasBorder"
        >
          <img
            class="icon-user"
            src="@/assets/images/icon-user.png"
            slot="left-icon"
            alt=""
          />
        </van-field>
        <van-field
          v-model="form.sms"
          placeholder="请输入验证码"
          :border="hasBorder"
        >
          <img
            class="icon-user"
            src="@/assets/images/icon-code.png"
            slot="left-icon"
            alt=""
          />
          <van-button
            slot="button"
            size="small"
            type="primary"
            class="verify-code"
            :disabled="disabled"
            @click="sendSms"
          >
            <span v-if="!disabled">发送验证码</span>
            <span v-else>{{ time }}秒后重新发送</span>
          </van-button>
        </van-field>
        <van-field
          v-model="form.beInvitedCode"
          placeholder="请输入推荐人邀请码（非必填）"
          :border="hasBorder"
        >
          <img
            class="icon-user"
            src="@/assets/images/icon-invite-code.png"
            slot="left-icon"
            alt=""
          />
        </van-field>
      </van-cell-group>
      <van-button
        class="btn-submit"
        :disabled="registerBtnDisabled"
        @click="handleResister"
      >
        注册
      </van-button>
    </div>
    <van-overlay :show="show" class-name="registerEorr" @click="onClickHide">
      <div class="wrapper" @click.stop>
        <div class="title">{{ title }}</div>
        <div v-if="title == '注册失败'" class="error-tip"></div>
        <div v-else class="success-tip">
          <img src="@/assets/images/成功.png" alt />
        </div>
        <div v-if="title == '注册失败'" class="tip">{{ tip }}</div>
        <div v-else class="tip">
          <a :href="androidUrl">下载安卓版App</a> |
          <a :href="iosUrl">下载IOS版App</a>
        </div>
        <van-button @click="show = false">确定</van-button>
      </div>
    </van-overlay>
  </div>
</template>
<script>
import { smsCode, getAppDownUrl } from "@/api/base";
import { register } from "@/api/user";
export default {
  name: "Register",
  data() {
    return {
      androidUrl: "",
      iosUrl: "",
      form: {
        userId: "",
        sms: "",
        beInvitedCode: ""
      },
      disabled: false,
      registerBtnDisabled: false,
      sendMsg: "发送验证码",
      value: "",
      hasBorder: false,
      show: false,
      title: "注册失败",
      tip: "",
      time: 60,
      timer: null
    };
  },
  mounted() {
    let params = window.location.search;
    if (params) {
      let beInvitedCode = params.split("=")[1];
      if (beInvitedCode) {
        this.form.beInvitedCode = beInvitedCode;
      }
    }
    if (this.timer) {
      clearInterval(this.timer);
    }
  },
  methods: {
    getDownUrl() {
      getAppDownUrl().then(res => {
        if (res.code == 0) {
          res.data.forEach(item => {
            if (item.type == 1) {
              this.iosUrl = item.url;
            } else if (item.type == 2) {
              this.androidUrl = item.url;
            }
          });
        }
      });
    },
    onClickHide() {
      this.show = false;
    },
    sendSms() {
      const _this = this;
      // 校验手机号
      let phoneReg = /^(0|86|17951)?(13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[57])[0-9]{8}$/;
      //如果手机号码输入为空
      if (!_this.form.userId) {
        _this.$toast("请输入手机号");
        return false;
      }
      //验证输入的电话号码是否是11位数字
      if (!phoneReg.test(_this.form.userId)) {
        _this.$toast("请输入正确手机号");
        return false;
      }
      _this.time = 60;
      _this.disabled = true;
      _this.handelSendSmsApi();
      _this.timer = setInterval(() => {
        if (_this.time === 0) {
          clearInterval(_this.timer);
          _this.disabled = false;
        }
        _this.time--;
      }, 1000);
    },
    handelSendSmsApi() {
      // 检验手机号
      const params = {
        codeType: 0,
        phone: this.form.userId
      };
      smsCode(params).then(res => {
        console.log(res);
      });
    },
    handleResister() {
      // 校验文本框必填项
      const _this = this;
      if (!_this.form.userId) {
        this.$toast("请输入手机号");
        return false;
      }
      if (!_this.form.sms) {
        this.$toast("请输入验证码");
        return false;
      }
      _this.registerBtnDisabled = true;
      this.$toast.loading({
        duration: 5000, // 持续展示 toast
        message: "加载中...",
        forbidClick: true
      });
      register(_this.form).then(res => {
        this.$toast.clear();
        _this.registerBtnDisabled = false;
        if (res.code === 0) {
          this.$toast.success("注册成功");
          _this.show = true;
          _this.title = "注册成功";
          this.getDownUrl();
        } else {
          _this.title = "注册失败";
          _this.show = true;
          _this.tip = res.msg;
        }
      });
    }
  }
};
</script>
<style lang="scss" scoped>
.register-container {
  height: 100vh;
  background-color: #ffffff;
  padding: 54px 15px 0 15px;
  box-sizing: border-box;
  overflow: hidden;
  .van-icon-arrow-left {
    position: absolute;
    left: 15px;
    top: 9px;
    &::before {
      font-size: 20px;
      color: #333;
    }
  }
  .logo-img {
    width: 102px;
    height: 102px;
    display: block;
    margin: 0 auto 50px;
  }
  .form-content {
    padding: 0 15px;
    ::v-deep .van-field__left-icon {
      display: flex;
      align-items: center;
    }
    .van-cell-group::after {
      display: none;
    }
    .van-cell {
      background-color: #f9f9f9;
      border-radius: 25px;
      margin-bottom: 20px;
    }
  }
  .icon-user {
    width: 18px;
    height: 18px;
  }
  .icon-code {
    width: 16px;
    height: 18px;
  }
  .icon-code {
    width: 17px;
    height: 17px;
  }
  .btn-submit {
    width: 100%;
    height: 44px;
    background-image: linear-gradient(72deg, #88c678 0%, #95e87f 100%),
      linear-gradient(#999999, #999999);
    background-blend-mode: normal, normal;
    border-radius: 22px;
    color: #ffffff;
    font-size: 18px;
    margin-top: 20px;
  }
  .verify-code {
    background-color: transparent;
    border: none;
    color: #88c677;
  }
  .van-overlay.registerEorr {
    .wrapper {
      width: 315px;
      height: 293px;
      position: absolute;
      background-color: #ffffff;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -60%);
      padding: 30px 0;
      text-align: center;
      box-sizing: border-box;
      border-radius: 4px;
      .title {
        font-size: 20px;
        font-weight: normal;
        font-stretch: normal;
        line-height: 20px;
        letter-spacing: 0px;
        color: #333333;
      }
      .success-tip {
        margin: 25px auto;
        img {
          width: 72px;
          height: 72px;
        }
      }
      .error-tip {
        width: 72px;
        height: 72px;
        border: 6px solid #ff0000;
        border-radius: 50%;
        font-size: 48px;
        font-weight: bold;
        color: #ff0000;
        margin: 25px auto;
        position: relative;
        &:before,
        &:after {
          content: "";
          display: inline-block;
          width: 6px;
          height: 30px;
          background-color: #ff0000;
          border-radius: 4px;
          transform-origin: center;
          position: absolute;
          left: 50%;
          top: 50%;
        }
        &:before {
          transform: translate(-50%, -50%) rotate(45deg);
        }
        &:after {
          transform: translate(-50%, -50%) rotate(-45deg);
        }
      }
      .tip {
        font-size: 14px;
        font-weight: normal;
        font-stretch: normal;
        line-height: 20px;
        color: #999999;
      }
      .van-button {
        width: 160px;
        height: 36px;
        background-color: #88c678;
        border-radius: 18px;
        color: #ffffff;
        margin-top: 25px;
      }
    }
  }
}
</style>
