123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- <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">正在加载系统资源,请耐心等待123</div>
- </div>
- </div>
- </template>
- <script>
- import { loginBySso, authorize, isTenantExist } from "@/api/login";
- import { Base64 } from "js-base64";
- export default {
- name: "loading",
- props: [],
- components: {},
- data() {
- return {
- token: "",
- };
- },
- computed: {},
- methods: {
- // 存储配置信息
- setConfig(config) {
- let {
- loginPageTitle,
- loginPageDescription,
- loginPageLogo,
- loginPageBackgroundImage,
- windowTitle,
- windowLogo,
- } = config;
- if (loginPageTitle) {
- window.sessionStorage.setItem("title", loginPageTitle);
- } else {
- window.sessionStorage.removeItem("title");
- }
- if (loginPageLogo) {
- window.sessionStorage.setItem("logo", loginPageLogo);
- } else {
- window.sessionStorage.removeItem("logo");
- }
- },
- // 获取配置信息
- async getConfig(tenantCode) {
- if (tenantCode != null) {
- // 得到tenantId 查询裤中是否存在该租户
- let res = await isTenantExist({ tenantCode: tenantCode });
- console.log("isTenantExist", res);
- if (res == undefined) {
- this.$router.push({ path: "/401" });
- } else if (res?.data?.tenantId) {
- // 判断当前编号是否存在库中
- // this.tenantId = res.data.tenantId;
- // this.loginForm.tenantID = this.tenantId;
- if (res?.data?.loginPageConfiguration) {
- this.setConfig(res.data.loginPageConfiguration || {});
- } else {
- window.sessionStorage.removeItem("title");
- window.sessionStorage.removeItem("logo");
- }
- } else {
- console.log("租户有问题!");
- // 当前访问链接中的租户编号不存在
- this.$router.push({ path: "/401" });
- }
- } else {
- this.$router.push({ path: "/401" });
- }
- },
- // 校验时间是否过时
- 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) {
- let loginData = Base64.decode(bWVz).split("^_^");
- console.log(loginData);
- let tenantCode = loginData[0];
- let username = loginData[1];
- let timeStamp = loginData[2];
- let isOutTime = this.validateTime(timeStamp);
- console.log(isOutTime);
- if (isOutTime) {
- try {
- await this.getConfig(tenantCode);
- 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() {
- // this.getConfig("kjjt01");
- // return;
- 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>
|