user.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import { login, getUserInfo } from '@/api/auth'
  2. import {loadDepartmentList, getDepartmentAccount} from '@/api/user.js'
  3. import { getToken, setToken, removeToken } from '@/utils/auth'
  4. import router, { resetRouter } from '@/router'
  5. import { authDB } from '@/db'
  6. const state = {
  7. userInfo: {},
  8. token: authDB.get('token'),
  9. name: '',
  10. avatar: '',
  11. introduction: '',
  12. roles: [],
  13. departments:[],
  14. department: {},
  15. articals: {}
  16. }
  17. const mutations = {
  18. SET_INFO: (state, user) => {
  19. authDB.set('userId', user.userId)
  20. authDB.set('nickname', user.nickname)
  21. state.userInfo = user
  22. },
  23. SET_TOKEN: (state, token) => {
  24. setToken(token)
  25. authDB.set('token', token)
  26. state.token = token
  27. },
  28. SET_INTRODUCTION: (state, introduction) => {
  29. state.introduction = introduction
  30. },
  31. SET_NAME: (state, name) => {
  32. state.name = name
  33. },
  34. SET_AVATAR: (state, avatar) => {
  35. state.avatar = avatar
  36. },
  37. SET_ROLES: (state, roles) => {
  38. state.roles = roles
  39. },
  40. SET_DEPARTMENTS( state, departments){
  41. state.departments = departments
  42. },
  43. SET_DEPARTMENT( state, department){
  44. state.department = department
  45. },
  46. Logout(state) {
  47. state.userInfo = {}
  48. state.token = ""
  49. removeToken()
  50. router.push({ path: '/login', replace: true })
  51. // window.location.reload()
  52. },
  53. APPEND_ARTICAL: (state, articals) => {
  54. for( let i in articals){
  55. let item = articals[i]
  56. state.articals[item.articalId] = item;
  57. }
  58. }
  59. }
  60. const actions = {
  61. // user login
  62. login({ commit }, userInfo) {
  63. const { username, password } = userInfo
  64. return new Promise((resolve, reject) => {
  65. login({ username: username.trim(), password }).then(response => {
  66. const { token, user } = response.data;
  67. commit('SET_TOKEN', token)
  68. commit('SET_INFO', user)
  69. resolve( user )
  70. }).catch(error => {
  71. console.log("catch", error)
  72. reject(error)
  73. })
  74. })
  75. },
  76. // get user info
  77. getInfo({ commit, state }) {
  78. return new Promise((resolve, reject) => {
  79. getUserInfo().then(response => {
  80. if (!response) {
  81. reject('Verification failed, please Login again.')
  82. }
  83. const { token, roles, ...userInfo } = response;
  84. commit('SET_TOKEN', token)
  85. commit('SET_INFO', userInfo)
  86. commit('SET_ROLES', roles)
  87. resolve(response)
  88. }).catch(error => {
  89. reject(error)
  90. })
  91. })
  92. },
  93. // user logout
  94. logout({ commit, state, dispatch }) {
  95. commit('SET_TOKEN', '')
  96. commit('SET_ROLES', [])
  97. commit('SET_INFO', {})
  98. removeToken()
  99. commit("Logout")
  100. },
  101. setArticals( {commit}, articals){
  102. commit('APPEND_ARTICAL', articals )
  103. },
  104. setDepartment( {commit}, department){
  105. commit('SET_DEPARTMENT', department )
  106. },
  107. loadDepartment( {commit, state} ){
  108. let userId = authDB.get('userId')||0;
  109. loadDepartmentList( {userId} ).then( res=>{
  110. if( res.code == 200){
  111. commit('SET_DEPARTMENTS', res.data);
  112. for( let i in res.data){
  113. let department = res.data[i]
  114. if( department.isLeader>0){
  115. commit('SET_DEPARTMENT', department);
  116. return;
  117. }
  118. }
  119. }
  120. })
  121. },
  122. // remove token
  123. resetToken({ commit }) {
  124. return new Promise(resolve => {
  125. commit('SET_TOKEN', '')
  126. commit('SET_ROLES', [])
  127. removeToken()
  128. resolve()
  129. })
  130. },
  131. // dynamically modify permissions
  132. async changeRoles({ commit, dispatch }, role) {
  133. const token = role + '-token'
  134. commit('SET_TOKEN', token)
  135. setToken(token)
  136. const { roles } = await dispatch('getInfo')
  137. resetRouter()
  138. // generate accessible routes map based on roles
  139. const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
  140. // dynamically add accessible routes
  141. router.addRoutes(accessRoutes)
  142. // reset visited views and cached views
  143. dispatch('tagsView/delAllViews', null, { root: true })
  144. }
  145. }
  146. const getters= {
  147. getArticals(state) {
  148. return state.articals
  149. },
  150. userDepartment(state){
  151. return state.department
  152. },
  153. userInfo(state){
  154. if( state.userInfo && state.userInfo.userId ){
  155. return state.userInfo;
  156. }
  157. let userId = authDB.get("userId")
  158. let nickname = authDB.get("nickname")
  159. let token = authDB.get("token")
  160. return {userId, nickname, token}
  161. },
  162. userDepartments(state){
  163. return state.departments
  164. },
  165. departmentMap(){
  166. let departments = {}
  167. for (let i in state.departments ) {
  168. let item = state.departments[i]
  169. departments[item.departmentId] = item.department;
  170. }
  171. return departments
  172. }
  173. }
  174. export default {
  175. namespaced: true,
  176. state,
  177. getters,
  178. mutations,
  179. actions
  180. }