<template>
  <div id="app">
    <div id="loader-wrapper">
      <div id="loader"></div>
      <div class="loader-section section-left"></div>
      <div class="loader-section section-right"></div>
      <div class="load_title">正在加载系统资源，请耐心等待</div>
    </div>
  </div>
</template>

<script>
import { loginBySso, authorize } from "@/api/login";
import { Base64 } from "js-base64";
export default {
  name: "loading",
  props: [],
  components: {},
  data() {
    return {
      token: "",
    };
  },
  computed: {},
  methods: {
    // 校验时间是否过时
    validateTime(timeStamp) {
      if (!timeStamp) return false;
      let nowTime = parseInt(new Date().getTime() / 1000);
      let limit = 120;
      timeStamp = parseInt(timeStamp);
      console.log(nowTime, timeStamp);
      return nowTime - timeStamp < limit;
    },
    async initUserInfo() {
      console.log(window.location.href);
      console.log(this.$route.query);

      let { bWVz } = this.$route.query;
      if (bWVz) {
        console.log("tenantCode", Base64.decode(bWVz));
        let loginData = Base64.decode(bWVz).split("^_^");
        console.log(loginData);
        let code = loginData[0];
        let username = loginData[1];
        let timeStamp = loginData[2];
        let isOutTime = this.validateTime(timeStamp);
        isOutTime = true;
        console.log(isOutTime);
        if (isOutTime) {
          try {
            let res = await loginBySso(bWVz);
            if (res.code == 200) {
              // this.token = res.token;
              this.$store
                .dispatch("LoginBySso", {
                  username: username,
                  token: res.token,
                })
                .then(() => {
                  this.$router
                    .push({ path: this.redirect || "/" })
                    .catch(() => {});
                });
            } else {
              this.$message.error("网络异常,请重新跳转");
              this.$router.push("/401");
            }
          } catch (error) {
            this.$message.error("网络异常,请重新跳转");
            this.$router.push("/401");
          }
        } else {
          this.$message.error("链接已过期,请重新跳转");
          this.$router.push("/401");
        }
      } else {
        this.$message.error("参数异常,请重新跳转");
        this.$router.push("/401");
      }
    },
    async authorizeHandler() {
      try {
        let res = await authorize();
        console.log(res);
        if (res.code == 200) {
          window.location.href = res.data;
        } else {
          this.$router.push("/401");
        }
      } catch (error) {}
    },
  },

  mounted() {
    if (this.$route.query.bWVz) {
      this.initUserInfo();
    }
    if (this.$route.query.type == "oauth") {
      this.authorizeHandler();
    }
  },
};
</script>

<style scoped lang="scss">
html,
body,
#app {
  height: 100%;
  margin: 0px;
  padding: 0px;
}

.chromeframe {
  margin: 0.2em 0;
  background: #ccc;
  color: #000;
  padding: 0.2em 0;
}

#loader-wrapper {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 999999;
}

#loader {
  display: block;
  position: relative;
  left: 50%;
  top: 50%;
  width: 150px;
  height: 150px;
  margin: -75px 0 0 -75px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #fff;
  -webkit-animation: spin 2s linear infinite;
  -ms-animation: spin 2s linear infinite;
  -moz-animation: spin 2s linear infinite;
  -o-animation: spin 2s linear infinite;
  animation: spin 2s linear infinite;
  z-index: 1001;
}

#loader:before {
  content: "";
  position: absolute;
  top: 5px;
  left: 5px;
  right: 5px;
  bottom: 5px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #fff;
  -webkit-animation: spin 3s linear infinite;
  -moz-animation: spin 3s linear infinite;
  -o-animation: spin 3s linear infinite;
  -ms-animation: spin 3s linear infinite;
  animation: spin 3s linear infinite;
}

#loader:after {
  content: "";
  position: absolute;
  top: 15px;
  left: 15px;
  right: 15px;
  bottom: 15px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #fff;
  -moz-animation: spin 1.5s linear infinite;
  -o-animation: spin 1.5s linear infinite;
  -ms-animation: spin 1.5s linear infinite;
  -webkit-animation: spin 1.5s linear infinite;
  animation: spin 1.5s linear infinite;
}

@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    transform: rotate(0deg);
  }

  100% {
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    transform: rotate(0deg);
  }

  100% {
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

#loader-wrapper .loader-section {
  position: fixed;
  top: 0;
  width: 51%;
  height: 100%;
  background: #7171c6;
  z-index: 1000;
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
}

#loader-wrapper .loader-section.section-left {
  left: 0;
}

#loader-wrapper .loader-section.section-right {
  right: 0;
}

.loaded #loader-wrapper .loader-section.section-left {
  -webkit-transform: translateX(-100%);
  -ms-transform: translateX(-100%);
  transform: translateX(-100%);
  -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}

.loaded #loader-wrapper .loader-section.section-right {
  -webkit-transform: translateX(100%);
  -ms-transform: translateX(100%);
  transform: translateX(100%);
  -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}

.loaded #loader {
  opacity: 0;
  -webkit-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
}

.loaded #loader-wrapper {
  visibility: hidden;
  -webkit-transform: translateY(-100%);
  -ms-transform: translateY(-100%);
  transform: translateY(-100%);
  -webkit-transition: all 0.3s 1s ease-out;
  transition: all 0.3s 1s ease-out;
}

.no-js #loader-wrapper {
  display: none;
}

.no-js h1 {
  color: #222222;
}

#loader-wrapper .load_title {
  font-family: "Open Sans";
  color: #fff;
  font-size: 19px;
  width: 100%;
  text-align: center;
  z-index: 9999999999999;
  position: absolute;
  top: 60%;
  opacity: 1;
  line-height: 30px;
}

#loader-wrapper .load_title span {
  font-weight: normal;
  font-style: italic;
  font-size: 13px;
  color: #fff;
  opacity: 0.5;
}
</style>
