index.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <div class="logout">
  3. <loading/>
  4. <p>退出中,请稍后...</p>
  5. </div>
  6. </template>
  7. <script>
  8. import Loading from '~components/common/loading/Loading.vue'
  9. export default {
  10. name: 'logout',
  11. layout: 'mobile',
  12. components: {
  13. Loading
  14. },
  15. mounted () {
  16. this.$nextTick(() => {
  17. this.logquit()
  18. })
  19. },
  20. methods: {
  21. logquit () {
  22. this.$http.get('/sso/login/logout', {params: this.$route.query})
  23. .then(response => {
  24. if (response.data.success) {
  25. let param = response.data.content.logoutUrls
  26. let a = ''
  27. for (let n in param) {
  28. a += (n + '=' + encodeURIComponent(param[n]) + '&')
  29. }
  30. let params = a.substr(0, a.length - 1)
  31. if (this.$route.query.baseUrl) {
  32. this.$jsonp(this.$route.query.baseUrl, {
  33. name: 'successCallback',
  34. timeout: 3000
  35. }, (err, data) => {
  36. if (err) {
  37. this.$message.error('登录超时,请重试')
  38. this.isShowLoading = false
  39. throw err
  40. } else {
  41. this.logoutOther(response, params)
  42. }
  43. })
  44. } else {
  45. this.logoutOther(response, params, 3000)
  46. }
  47. }
  48. })
  49. },
  50. getJsonp: function (url, timeout = 500) {
  51. return new Promise((resolve, reject) => {
  52. this.$jsonp(url, {
  53. name: 'successCallback',
  54. timeout: timeout
  55. }, function (err, data) {
  56. if (err) {
  57. reject(err)
  58. throw err
  59. } else {
  60. resolve(data)
  61. }
  62. })
  63. })
  64. },
  65. crossAfter (url) {
  66. try {
  67. window.location.href = url
  68. } catch (err) {
  69. console.log(err)
  70. }
  71. },
  72. logoutOther (response, a, timeout) {
  73. const crossAfter = this.crossAfter
  74. let promises = []
  75. for (let i in response.data.content.logoutUrls) {
  76. if (this.$route.query.baseUrl !== response.data.content.logoutUrls[i]) {
  77. promises.push(this.getJsonp(`${response.data.content.logoutUrls[i]}`))
  78. }
  79. }
  80. Promise.all(promises).then(() => {
  81. crossAfter(response.data.content.returnURL || 'http://www.ubtob.com', timeout)
  82. }).catch(() => {
  83. crossAfter(response.data.content.returnURL || 'http://www.ubtob.com', timeout)
  84. })
  85. }
  86. }
  87. }
  88. </script>
  89. <style type="text/scss" lang="scss" scoped>
  90. .logout{
  91. p{
  92. position: fixed;
  93. left: 0;
  94. right:0;
  95. top: 54%;
  96. z-index: 1000;
  97. text-align: center;
  98. font-size: 14px;
  99. color:#333;
  100. }
  101. }
  102. </style>