loading.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <div id="app">
  3. <div id="loader-wrapper">
  4. <div id="loader"></div>
  5. <div class="loader-section section-left"></div>
  6. <div class="loader-section section-right"></div>
  7. <div class="load_title">正在加载系统资源,请耐心等待</div>
  8. </div>
  9. </div>
  10. </template>
  11. <script>
  12. import { loginBySso, authorize } from "@/api/login";
  13. import { Base64 } from "js-base64";
  14. export default {
  15. name: "loading",
  16. props: [],
  17. components: {},
  18. data() {
  19. return {
  20. token: "",
  21. };
  22. },
  23. computed: {},
  24. methods: {
  25. // 校验时间是否过时
  26. validateTime(timeStamp) {
  27. if (!timeStamp) return false;
  28. let nowTime = parseInt(new Date().getTime() / 1000);
  29. let limit = 120;
  30. timeStamp = parseInt(timeStamp);
  31. console.log(nowTime, timeStamp);
  32. return nowTime - timeStamp < limit;
  33. },
  34. async initUserInfo() {
  35. console.log(window.location.href);
  36. console.log(this.$route.query);
  37. let { bWVz } = this.$route.query;
  38. if (bWVz) {
  39. console.log("tenantCode", Base64.decode(bWVz));
  40. let loginData = Base64.decode(bWVz).split("^_^");
  41. console.log(loginData);
  42. let code = loginData[0];
  43. let username = loginData[1];
  44. let timeStamp = loginData[2];
  45. let isOutTime = this.validateTime(timeStamp);
  46. isOutTime = true;
  47. console.log(isOutTime);
  48. if (isOutTime) {
  49. try {
  50. let res = await loginBySso(bWVz);
  51. if (res.code == 200) {
  52. // this.token = res.token;
  53. this.$store
  54. .dispatch("LoginBySso", {
  55. username: username,
  56. token: res.token,
  57. })
  58. .then(() => {
  59. this.$router
  60. .push({ path: this.redirect || "/" })
  61. .catch(() => {});
  62. });
  63. } else {
  64. this.$message.error("网络异常,请重新跳转");
  65. this.$router.push("/401");
  66. }
  67. } catch (error) {
  68. this.$message.error("网络异常,请重新跳转");
  69. this.$router.push("/401");
  70. }
  71. } else {
  72. this.$message.error("链接已过期,请重新跳转");
  73. this.$router.push("/401");
  74. }
  75. } else {
  76. this.$message.error("参数异常,请重新跳转");
  77. this.$router.push("/401");
  78. }
  79. },
  80. async authorizeHandler() {
  81. try {
  82. let res = await authorize();
  83. console.log(res);
  84. if (res.code == 200) {
  85. window.location.href = res.data;
  86. } else {
  87. this.$router.push("/401");
  88. }
  89. } catch (error) {}
  90. },
  91. },
  92. mounted() {
  93. if (this.$route.query.bWVz) {
  94. this.initUserInfo();
  95. }
  96. if (this.$route.query.type == "oauth") {
  97. this.authorizeHandler();
  98. }
  99. },
  100. };
  101. </script>
  102. <style scoped lang="scss">
  103. html,
  104. body,
  105. #app {
  106. height: 100%;
  107. margin: 0px;
  108. padding: 0px;
  109. }
  110. .chromeframe {
  111. margin: 0.2em 0;
  112. background: #ccc;
  113. color: #000;
  114. padding: 0.2em 0;
  115. }
  116. #loader-wrapper {
  117. position: fixed;
  118. top: 0;
  119. left: 0;
  120. width: 100%;
  121. height: 100%;
  122. z-index: 999999;
  123. }
  124. #loader {
  125. display: block;
  126. position: relative;
  127. left: 50%;
  128. top: 50%;
  129. width: 150px;
  130. height: 150px;
  131. margin: -75px 0 0 -75px;
  132. border-radius: 50%;
  133. border: 3px solid transparent;
  134. border-top-color: #fff;
  135. -webkit-animation: spin 2s linear infinite;
  136. -ms-animation: spin 2s linear infinite;
  137. -moz-animation: spin 2s linear infinite;
  138. -o-animation: spin 2s linear infinite;
  139. animation: spin 2s linear infinite;
  140. z-index: 1001;
  141. }
  142. #loader:before {
  143. content: "";
  144. position: absolute;
  145. top: 5px;
  146. left: 5px;
  147. right: 5px;
  148. bottom: 5px;
  149. border-radius: 50%;
  150. border: 3px solid transparent;
  151. border-top-color: #fff;
  152. -webkit-animation: spin 3s linear infinite;
  153. -moz-animation: spin 3s linear infinite;
  154. -o-animation: spin 3s linear infinite;
  155. -ms-animation: spin 3s linear infinite;
  156. animation: spin 3s linear infinite;
  157. }
  158. #loader:after {
  159. content: "";
  160. position: absolute;
  161. top: 15px;
  162. left: 15px;
  163. right: 15px;
  164. bottom: 15px;
  165. border-radius: 50%;
  166. border: 3px solid transparent;
  167. border-top-color: #fff;
  168. -moz-animation: spin 1.5s linear infinite;
  169. -o-animation: spin 1.5s linear infinite;
  170. -ms-animation: spin 1.5s linear infinite;
  171. -webkit-animation: spin 1.5s linear infinite;
  172. animation: spin 1.5s linear infinite;
  173. }
  174. @-webkit-keyframes spin {
  175. 0% {
  176. -webkit-transform: rotate(0deg);
  177. -ms-transform: rotate(0deg);
  178. transform: rotate(0deg);
  179. }
  180. 100% {
  181. -webkit-transform: rotate(360deg);
  182. -ms-transform: rotate(360deg);
  183. transform: rotate(360deg);
  184. }
  185. }
  186. @keyframes spin {
  187. 0% {
  188. -webkit-transform: rotate(0deg);
  189. -ms-transform: rotate(0deg);
  190. transform: rotate(0deg);
  191. }
  192. 100% {
  193. -webkit-transform: rotate(360deg);
  194. -ms-transform: rotate(360deg);
  195. transform: rotate(360deg);
  196. }
  197. }
  198. #loader-wrapper .loader-section {
  199. position: fixed;
  200. top: 0;
  201. width: 51%;
  202. height: 100%;
  203. background: #7171c6;
  204. z-index: 1000;
  205. -webkit-transform: translateX(0);
  206. -ms-transform: translateX(0);
  207. transform: translateX(0);
  208. }
  209. #loader-wrapper .loader-section.section-left {
  210. left: 0;
  211. }
  212. #loader-wrapper .loader-section.section-right {
  213. right: 0;
  214. }
  215. .loaded #loader-wrapper .loader-section.section-left {
  216. -webkit-transform: translateX(-100%);
  217. -ms-transform: translateX(-100%);
  218. transform: translateX(-100%);
  219. -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  220. transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  221. }
  222. .loaded #loader-wrapper .loader-section.section-right {
  223. -webkit-transform: translateX(100%);
  224. -ms-transform: translateX(100%);
  225. transform: translateX(100%);
  226. -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  227. transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  228. }
  229. .loaded #loader {
  230. opacity: 0;
  231. -webkit-transition: all 0.3s ease-out;
  232. transition: all 0.3s ease-out;
  233. }
  234. .loaded #loader-wrapper {
  235. visibility: hidden;
  236. -webkit-transform: translateY(-100%);
  237. -ms-transform: translateY(-100%);
  238. transform: translateY(-100%);
  239. -webkit-transition: all 0.3s 1s ease-out;
  240. transition: all 0.3s 1s ease-out;
  241. }
  242. .no-js #loader-wrapper {
  243. display: none;
  244. }
  245. .no-js h1 {
  246. color: #222222;
  247. }
  248. #loader-wrapper .load_title {
  249. font-family: "Open Sans";
  250. color: #fff;
  251. font-size: 19px;
  252. width: 100%;
  253. text-align: center;
  254. z-index: 9999999999999;
  255. position: absolute;
  256. top: 60%;
  257. opacity: 1;
  258. line-height: 30px;
  259. }
  260. #loader-wrapper .load_title span {
  261. font-weight: normal;
  262. font-style: italic;
  263. font-size: 13px;
  264. color: #fff;
  265. opacity: 0.5;
  266. }
  267. </style>