loading.vue 8.2 KB

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