<template>
  <div class="ldm-login">
    <van-overlay :show="show" @click="show = false">
      <div class="wrapper flex justify-center items-center" @click.stop>
        <div class="block flex items-center flex-col">
          <div class="close" @click="onClose"></div>
          <img
            class="logo"
            src="https://static.caimei365.com/www/authentic/pc/ldm-logo-rect.png"
            alt=""
          />
          <div class="forlogoutm">
            <div class="form-item mb-4">
              <input
                type="text"
                placeholder="手机号"
                v-model="formData.mobile"
                maxlength="11"
              />
            </div>
            <div class="form-item mb-4">
              <input
                type="text"
                placeholder="验证码"
                class="code"
                v-model="formData.verifyCode"
                maxlength="6"
              />
              <span class="send" @click="onSend">{{ sendCodeBtnText }}</span>
            </div>
            <div class="submit" @click="onSubmit">登录</div>
          </div>
        </div>
      </div>
    </van-overlay>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'
import { isMobile } from '@/utils/validator'
export default {
  name: 'simple-login',
  data() {
    return {
      show: false,
      sendStatus: 0,
      formData: {
        authUserId: '',
        mobile: '',
        verifyCode: '',
      },
      timer: null,
    }
  },
  computed: {
    ...mapGetters(['loginVisiable', 'authUserId', 'routePrefix']),
    sendCodeBtnText() {
      return this.sendStatus === 0
        ? '发送验证码'
        : `再次发送${this.sendStatus}s`
    },
  },
  watch: {
    loginVisiable() {
      this.show = this.loginVisiable
    },
  },
  methods: {
    async onSubmit() {
      // 验证手机号是否合法
      if (!isMobile(this.formData.mobile)) {
        this.$toast('请输入正确的手机号')
        return
      }
      if (!this.formData.verifyCode) {
        this.$toast('请输入验证码')
        return
      }
      try {
        this.formData.authUserId = this.authUserId
        const res = await this.$http.api.customLogin(this.formData)
        this.$store.dispatch('user/login', res.data)
        this.$setStorage(this.routePrefix, 'userInfo', res.data)
        // 关闭登录窗口
        this.onClose()
        // 重定向
        const login_redicret = this.$getStorage(
          this.routePrefix,
          'login_redicret'
        )
        if (login_redicret) {
          this.$router.push(login_redicret)
        }
      } catch (error) {
        console.log(error)
      }
    },
    // 关闭登录窗口
    onClose() {
      this.$store.commit('app/HIDE_LOGIN')
      this.formData.mobile = ''
      this.formData.verifyCode = ''
      this.formData.authUserId = ''
    },
    async onSend() {
      if (this.sendStatus > 0) return
      // 验证手机号是否合法
      if (!isMobile(this.formData.mobile)) {
        this.$toast('请输入正确的手机号')
        return
      }
      try {
        // 发送验证码
        const res = await this.$http.api.sendVerifyCode({
          mobile: this.formData.mobile,
          authUserId: this.authUserId,
          type: 1,
        })
        this.$toast('验证码已发送')
        // 开启倒计时
        this.countdown()
      } catch (error) {
        console.log(error)
      }
    },
    countdown() {
      this.sendStatus = 30
      this.timer = setInterval(() => {
        if (this.sendStatus === 0) {
          clearInterval(this.timer)
          return
        }
        this.sendStatus--
      }, 1000)
    },
  },
}
</script>

<style scoped lang="scss">
@media screen and (min-width: 768px) {
  .wrapper {
    height: 100vh;

    .block {
      position: relative;
      width: 532px;
      background: linear-gradient(180deg, #d7dbe6, #ffffff);
      border-radius: 45px;

      .close {
        position: absolute;
        right: 16px;
        top: 16px;
        width: 24px;
        height: 24px;
        background: url(https://static.caimei365.com/www/authentic/h5/icon-close.png)
          center no-repeat;
        background-size: 24px 24px;
        cursor: pointer;
      }

      .logo {
        width: 294px;
        height: 57px;
        margin: 98px 0 82px;
      }

      .form-item {
        position: relative;
        width: 464px;

        input {
          width: 464px;
          height: 50px;
          display: block;
          padding: 16px 24px;
          font-size: 14px;
          border: 1px solid #000000;
          box-sizing: border-box;
          background: transparent;
          font-size: 19px;
        }

        .code {
          padding-right: 220px;
        }

        .send {
          position: absolute;
          right: 18px;
          top: 50%;
          transform: translateY(-50%);
          font-size: 16px;
          color: #a62645;
          cursor: pointer;
        }
      }
      .submit {
        height: 58px;
        margin: 0 auto;
        background: #000;
        font-size: 16px;
        color: #fff;
        text-align: center;
        line-height: 58px;
        cursor: pointer;
        margin-top: 39px;
        margin-bottom: 59px;
      }
    }
  }
}
@media screen and (max-width: 768px) {
  .wrapper {
    height: 100vh;

    .block {
      position: relative;
      width: 76vw;
      background: linear-gradient(180deg, #d7dbe6, #ffffff);
      border-radius: 4.5vw;

      .close {
        position: absolute;
        right: 2.4vw;
        top: 2.4vw;
        width: 5.6vw;
        height: 5.6vw;
        background: url(https://static.caimei365.com/www/authentic/h5/icon-close.png)
          center no-repeat;
        background-size: 4.8vw 4.8vw;
        cursor: pointer;
      }

      .logo {
        width: 42vw;
        height: 8.2vw;
        margin: 14vw 0 11.6vw;
      }

      .form-item {
        position: relative;
        width: 66.1vw;

        input {
          width: 66.1vw;
          height: 7.1vw;
          display: block;
          padding: 2.2vw 3.4vw;
          font-size: 2.7vw;
          border: 0.1vw solid #000;
          background: transparent;
          box-sizing: border-box;
          font-size: 2.7vw;
        }

        .code {
          padding-right: 30vw;
        }
        .send {
          position: absolute;
          right: 3vw;
          top: 50%;
          transform: translateY(-50%);
          font-size: 3.2vw;
          color: #bc1724;
          cursor: pointer;
        }
      }
      .submit {
        height: 8.2vw;
        margin: 0 auto;
        background: #000;
        font-size: 3.2vw;
        color: #fff;
        text-align: center;
        line-height: 8.2vw;
        margin-top: 5.6vw;
        margin-bottom: 8.4vw;
      }
    }
  }
}
</style>
