index.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. throw err
  39. } else {
  40. this.logoutOther(response, params)
  41. }
  42. })
  43. } else {
  44. this.logoutOther(response, params, 3000)
  45. }
  46. }
  47. })
  48. },
  49. getJsonp: function (url, timeout = 500) {
  50. return new Promise((resolve, reject) => {
  51. this.$jsonp(url, {
  52. name: 'successCallback',
  53. timeout: timeout
  54. }, function (err, data) {
  55. if (err) {
  56. reject(err)
  57. throw err
  58. } else {
  59. resolve(data)
  60. }
  61. })
  62. })
  63. },
  64. crossAfter (url) {
  65. try {
  66. window.location.href = url
  67. } catch (err) {
  68. console.log(err)
  69. }
  70. },
  71. logoutOther (response, a, timeout) {
  72. const crossAfter = this.crossAfter
  73. let promises = []
  74. for (let i in response.data.content.logoutUrls) {
  75. if (this.$route.query.baseUrl !== response.data.content.logoutUrls[i]) {
  76. promises.push(this.getJsonp(`${response.data.content.logoutUrls[i]}`))
  77. }
  78. }
  79. Promise.all(promises).then(() => {
  80. crossAfter(response.data.content.returnURL || 'http://www.ubtob.com', timeout)
  81. }).catch(() => {
  82. crossAfter(response.data.content.returnURL || 'http://www.ubtob.com', timeout)
  83. })
  84. }
  85. }
  86. }
  87. </script>
  88. <style type="text/scss" lang="scss" scoped>
  89. .logout{
  90. p{
  91. position: fixed;
  92. left: 0;
  93. right:0;
  94. top: 54%;
  95. z-index: 1000;
  96. text-align: center;
  97. font-size: 14px;
  98. color:#333;
  99. }
  100. }
  101. </style>