user.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import { login, logout, getInfo } from '@/api/user'
  2. import { initData } from '@/api/dashboard'
  3. import { getToken, setToken, removeToken } from '@/utils/auth'
  4. import { initNumberHtml } from '@/utils/costum'
  5. import router, { resetRouter } from '@/router'
  6. // refreshtoken
  7. const state = {
  8. token: getToken(),
  9. name: '',
  10. avatar: '',
  11. introduction: '',
  12. roles: [],
  13. permissions: [],
  14. permisaction: []
  15. }
  16. const mutations = {
  17. SET_TOKEN: (state, token) => {
  18. state.token = token
  19. },
  20. SET_INTRODUCTION: (state, introduction) => {
  21. state.introduction = introduction
  22. },
  23. SET_NAME: (state, name) => {
  24. state.name = name
  25. },
  26. SET_USERID: (state, userId) => {
  27. state.userId = userId
  28. },
  29. SET_AVATAR: (state, avatar) => {
  30. if (avatar.indexOf('http') !== -1) {
  31. state.avatar = avatar
  32. } else {
  33. state.avatar = process.env.VUE_APP_BASE_API + avatar
  34. }
  35. },
  36. SET_ROLES: (state, roles) => {
  37. state.roles = roles
  38. },
  39. SET_PERMISSIONS: (state, permisaction) => {
  40. state.permisaction = permisaction
  41. },
  42. SET_REFRESH_TOKEN: (state, refreshToken) => {
  43. state.refreshToken = refreshToken
  44. },
  45. SET_EXPIRES_IN: (state, expiresIn) => {
  46. state.expiresIn = expiresIn
  47. }
  48. }
  49. const actions = {
  50. // user login
  51. login({ commit }, userInfo) {
  52. const { username, password } = userInfo
  53. return new Promise((resolve, reject) => {
  54. login({ username: username.trim(), password: password, clientId: 'oa', clientSecret: 'oa' }).then(response => {
  55. const { data } = response
  56. if (response.code == 200) {
  57. console.log(data)
  58. const token = data.authentication.token_type + ' ' + data.authentication.access_token
  59. commit('SET_REFRESH_TOKEN', data.authentication.refresh_token)
  60. commit('SET_EXPIRES_IN', data.authentication.expires_in)
  61. commit('SET_TOKEN', token)
  62. setToken(token)
  63. resolve()
  64. }
  65. // const { token } = response
  66. }).catch(error => {
  67. reject(error)
  68. })
  69. })
  70. },
  71. setAvatar({commit}, url) {
  72. commit('SET_AVATAR', url)
  73. },
  74. // get user info
  75. getInfo({ commit, state }) {
  76. return new Promise((resolve, reject) => {
  77. getInfo().then(response => {
  78. if (!response || !response.data) {
  79. commit('SET_TOKEN', '')
  80. removeToken()
  81. resolve()
  82. }
  83. const { userId, roles, name, avatar, introduction, permissions } = response.data
  84. // roles must be a non-empty array
  85. if (!roles || roles.length <= 0) {
  86. reject('getInfo: roles must be a non-null array!')
  87. }
  88. commit('SET_PERMISSIONS', permissions)
  89. commit('SET_ROLES', roles)
  90. commit('SET_NAME', name)
  91. commit('SET_USERID', userId)
  92. commit('SET_AVATAR', avatar)
  93. commit('SET_INTRODUCTION', introduction)
  94. resolve(response)
  95. }).catch(() => {
  96. commit('SET_TOKEN', '')
  97. setToken('')
  98. router.push({ path: '/' })
  99. })
  100. })
  101. },
  102. getInitData({ commit, state }) {
  103. return new Promise((resolve, reject) => {
  104. initData().then(response => {
  105. const result = response.data
  106. // 添加我的代办显示数据
  107. if(result.count.upcoming && result.count.upcoming > 0) {
  108. initNumberHtml(result.count.upcoming)
  109. }
  110. })
  111. resolve(response)
  112. }).catch(() => {
  113. })
  114. },
  115. // 退出系统
  116. LogOut({ commit, state }) {
  117. return new Promise((resolve, reject) => {
  118. logout(state.token).then(() => {
  119. commit('SET_TOKEN', '')
  120. commit('SET_ROLES', [])
  121. commit('SET_PERMISSIONS', [])
  122. removeToken()
  123. resolve()
  124. }).catch(error => {
  125. reject(error)
  126. })
  127. })
  128. },
  129. // 刷新token
  130. // refreshToken({ commit, state }) {
  131. // return new Promise((resolve, reject) => {
  132. // refreshtoken({ token: state.token }).then(response => {
  133. // const { token } = response
  134. // commit('SET_TOKEN', token)
  135. // setToken(token)
  136. // resolve()
  137. // }).catch(error => {
  138. // reject(error)
  139. // })
  140. // })
  141. // },
  142. // remove token
  143. resetToken({ commit }) {
  144. return new Promise(resolve => {
  145. commit('SET_TOKEN', '')
  146. removeToken()
  147. resolve()
  148. })
  149. },
  150. // dynamically modify permissions
  151. changeRoles({ commit, dispatch }, role) {
  152. return new Promise(async resolve => {
  153. const token = role + '-token'
  154. commit('SET_TOKEN', token)
  155. setToken(token)
  156. const { roles } = await dispatch('getInfo')
  157. resetRouter()
  158. // generate accessible routes map based on roles
  159. const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
  160. // dynamically add accessible routes
  161. router.addRoutes(accessRoutes)
  162. // reset visited views and cached views
  163. dispatch('tagsView/delAllViews', null, { root: true })
  164. resolve()
  165. })
  166. }
  167. }
  168. export default {
  169. namespaced: true,
  170. state,
  171. mutations,
  172. actions
  173. }