loading.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  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, isTenantExist } 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. setConfig(config) {
  27. let {
  28. loginPageTitle,
  29. loginPageDescription,
  30. loginPageLogo,
  31. loginPageBackgroundImage,
  32. windowTitle,
  33. windowLogo,
  34. } = config;
  35. if (loginPageTitle) {
  36. window.sessionStorage.setItem("title", loginPageTitle);
  37. }
  38. if (loginPageLogo) {
  39. window.sessionStorage.setItem("logo", loginPageLogo);
  40. }
  41. },
  42. // 获取配置信息
  43. async getConfig(tenantCode) {
  44. if (tenantCode != null) {
  45. // 得到tenantId 查询裤中是否存在该租户
  46. let res = await isTenantExist({ tenantCode: tenantCode });
  47. if (res == undefined) {
  48. this.$router.push({ path: "/401" });
  49. } else if (res.data?.tenantId) {
  50. // 判断当前编号是否存在库中
  51. // this.tenantId = res.data.tenantId;
  52. // this.loginForm.tenantID = this.tenantId;
  53. if (res.data?.loginPageConfiguration) {
  54. this.setConfig(res.data.loginPageConfiguration || {});
  55. }
  56. } else {
  57. console.log("租户有问题!");
  58. // 当前访问链接中的租户编号不存在
  59. this.$router.push({ path: "/401" });
  60. }
  61. } else {
  62. this.$router.push({ path: "/401" });
  63. }
  64. },
  65. // 校验时间是否过时
  66. validateTime(timeStamp) {
  67. if (!timeStamp) return false;
  68. let nowTime = parseInt(new Date().getTime() / 1000);
  69. let limit = 120;
  70. timeStamp = parseInt(timeStamp);
  71. console.log(nowTime, timeStamp);
  72. return nowTime - timeStamp < limit;
  73. },
  74. async initUserInfo() {
  75. console.log(window.location.href);
  76. console.log(this.$route.query);
  77. let { bWVz } = this.$route.query;
  78. if (bWVz) {
  79. let loginData = Base64.decode(bWVz).split("^_^");
  80. console.log(loginData);
  81. let tenantCode = loginData[0];
  82. let username = loginData[1];
  83. let timeStamp = loginData[2];
  84. let isOutTime = this.validateTime(timeStamp);
  85. console.log(isOutTime);
  86. if (isOutTime) {
  87. try {
  88. await this.getConfig(tenantCode);
  89. let res = await loginBySso(bWVz);
  90. if (res.code == 200) {
  91. // this.token = res.token;
  92. this.$store
  93. .dispatch("LoginBySso", {
  94. username: username,
  95. token: res.token,
  96. })
  97. .then(() => {
  98. this.$router
  99. .push({ path: this.redirect || "/" })
  100. .catch(() => {});
  101. });
  102. } else {
  103. this.$message.error("网络异常,请重新跳转");
  104. this.$router.push("/401");
  105. }
  106. } catch (error) {
  107. this.$message.error("网络异常,请重新跳转");
  108. this.$router.push("/401");
  109. }
  110. } else {
  111. this.$message.error("链接已过期,请重新跳转");
  112. this.$router.push("/401");
  113. }
  114. } else {
  115. this.$message.error("参数异常,请重新跳转");
  116. this.$router.push("/401");
  117. }
  118. },
  119. async authorizeHandler() {
  120. try {
  121. let res = await authorize();
  122. console.log(res);
  123. if (res.code == 200) {
  124. window.location.href = res.data;
  125. } else {
  126. this.$router.push("/401");
  127. }
  128. } catch (error) {}
  129. },
  130. },
  131. mounted() {
  132. // this.getConfig("kjjt01");
  133. // return;
  134. if (this.$route.query.bWVz) {
  135. this.initUserInfo();
  136. }
  137. if (this.$route.query.type == "oauth") {
  138. this.authorizeHandler();
  139. }
  140. },
  141. };
  142. </script>
  143. <style scoped lang="scss">
  144. html,
  145. body,
  146. #app {
  147. height: 100%;
  148. margin: 0px;
  149. padding: 0px;
  150. }
  151. .chromeframe {
  152. margin: 0.2em 0;
  153. background: #ccc;
  154. color: #000;
  155. padding: 0.2em 0;
  156. }
  157. #loader-wrapper {
  158. position: fixed;
  159. top: 0;
  160. left: 0;
  161. width: 100%;
  162. height: 100%;
  163. z-index: 999999;
  164. }
  165. #loader {
  166. display: block;
  167. position: relative;
  168. left: 50%;
  169. top: 50%;
  170. width: 150px;
  171. height: 150px;
  172. margin: -75px 0 0 -75px;
  173. border-radius: 50%;
  174. border: 3px solid transparent;
  175. border-top-color: #fff;
  176. -webkit-animation: spin 2s linear infinite;
  177. -ms-animation: spin 2s linear infinite;
  178. -moz-animation: spin 2s linear infinite;
  179. -o-animation: spin 2s linear infinite;
  180. animation: spin 2s linear infinite;
  181. z-index: 1001;
  182. }
  183. #loader:before {
  184. content: "";
  185. position: absolute;
  186. top: 5px;
  187. left: 5px;
  188. right: 5px;
  189. bottom: 5px;
  190. border-radius: 50%;
  191. border: 3px solid transparent;
  192. border-top-color: #fff;
  193. -webkit-animation: spin 3s linear infinite;
  194. -moz-animation: spin 3s linear infinite;
  195. -o-animation: spin 3s linear infinite;
  196. -ms-animation: spin 3s linear infinite;
  197. animation: spin 3s linear infinite;
  198. }
  199. #loader:after {
  200. content: "";
  201. position: absolute;
  202. top: 15px;
  203. left: 15px;
  204. right: 15px;
  205. bottom: 15px;
  206. border-radius: 50%;
  207. border: 3px solid transparent;
  208. border-top-color: #fff;
  209. -moz-animation: spin 1.5s linear infinite;
  210. -o-animation: spin 1.5s linear infinite;
  211. -ms-animation: spin 1.5s linear infinite;
  212. -webkit-animation: spin 1.5s linear infinite;
  213. animation: spin 1.5s linear infinite;
  214. }
  215. @-webkit-keyframes spin {
  216. 0% {
  217. -webkit-transform: rotate(0deg);
  218. -ms-transform: rotate(0deg);
  219. transform: rotate(0deg);
  220. }
  221. 100% {
  222. -webkit-transform: rotate(360deg);
  223. -ms-transform: rotate(360deg);
  224. transform: rotate(360deg);
  225. }
  226. }
  227. @keyframes spin {
  228. 0% {
  229. -webkit-transform: rotate(0deg);
  230. -ms-transform: rotate(0deg);
  231. transform: rotate(0deg);
  232. }
  233. 100% {
  234. -webkit-transform: rotate(360deg);
  235. -ms-transform: rotate(360deg);
  236. transform: rotate(360deg);
  237. }
  238. }
  239. #loader-wrapper .loader-section {
  240. position: fixed;
  241. top: 0;
  242. width: 51%;
  243. height: 100%;
  244. background: #7171c6;
  245. z-index: 1000;
  246. -webkit-transform: translateX(0);
  247. -ms-transform: translateX(0);
  248. transform: translateX(0);
  249. }
  250. #loader-wrapper .loader-section.section-left {
  251. left: 0;
  252. }
  253. #loader-wrapper .loader-section.section-right {
  254. right: 0;
  255. }
  256. .loaded #loader-wrapper .loader-section.section-left {
  257. -webkit-transform: translateX(-100%);
  258. -ms-transform: translateX(-100%);
  259. transform: translateX(-100%);
  260. -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  261. transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  262. }
  263. .loaded #loader-wrapper .loader-section.section-right {
  264. -webkit-transform: translateX(100%);
  265. -ms-transform: translateX(100%);
  266. transform: translateX(100%);
  267. -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  268. transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
  269. }
  270. .loaded #loader {
  271. opacity: 0;
  272. -webkit-transition: all 0.3s ease-out;
  273. transition: all 0.3s ease-out;
  274. }
  275. .loaded #loader-wrapper {
  276. visibility: hidden;
  277. -webkit-transform: translateY(-100%);
  278. -ms-transform: translateY(-100%);
  279. transform: translateY(-100%);
  280. -webkit-transition: all 0.3s 1s ease-out;
  281. transition: all 0.3s 1s ease-out;
  282. }
  283. .no-js #loader-wrapper {
  284. display: none;
  285. }
  286. .no-js h1 {
  287. color: #222222;
  288. }
  289. #loader-wrapper .load_title {
  290. font-family: "Open Sans";
  291. color: #fff;
  292. font-size: 19px;
  293. width: 100%;
  294. text-align: center;
  295. z-index: 9999999999999;
  296. position: absolute;
  297. top: 60%;
  298. opacity: 1;
  299. line-height: 30px;
  300. }
  301. #loader-wrapper .load_title span {
  302. font-weight: normal;
  303. font-style: italic;
  304. font-size: 13px;
  305. color: #fff;
  306. opacity: 0.5;
  307. }
  308. </style>