user.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import { login, getUserInfo, setSelfInfo,login2 } from '@/api/user'
  2. import { jsonInBlacklist } from '@/api/jwt'
  3. import router from '@/router/index'
  4. import { ElLoading, ElMessage } from 'element-plus'
  5. import { defineStore } from 'pinia'
  6. import { ref, computed, watch } from 'vue'
  7. import { useRouterStore } from './router'
  8. export const useUserStore = defineStore('user', () => {
  9. const loadingInstance = ref(null)
  10. const userInfo = ref({
  11. uuid: '',
  12. nickName: '',
  13. headerImg: '',
  14. authority: {},
  15. sideMode: 'dark',
  16. activeColor: 'var(--el-color-primary)',
  17. baseColor: '#fff'
  18. })
  19. const token = ref(window.localStorage.getItem('token') || '')
  20. const setUserInfo = (val) => {
  21. userInfo.value = val
  22. }
  23. const setToken = (val) => {
  24. token.value = val
  25. }
  26. const NeedInit = () => {
  27. token.value = ''
  28. window.localStorage.removeItem('token')
  29. localStorage.clear()
  30. router.push({ name: 'Init', replace: true })
  31. }
  32. const ResetUserInfo = (value = {}) => {
  33. userInfo.value = {
  34. ...userInfo.value,
  35. ...value
  36. }
  37. }
  38. /* 获取用户信息*/
  39. const GetUserInfo = async() => {
  40. const res = await getUserInfo()
  41. if (res.code === 0) {
  42. setUserInfo(res.data.userInfo)
  43. }
  44. return res
  45. }
  46. /* 登录*/
  47. const LoginIn = async(loginInfo) => {
  48. loadingInstance.value = ElLoading.service({
  49. fullscreen: true,
  50. text: '登录中,请稍候...',
  51. })
  52. try {
  53. const res = await login(loginInfo)
  54. console.log(loginInfo)
  55. console.log(res)
  56. if (res.code === 0) {
  57. setUserInfo(res.data.user)
  58. setToken(res.data.token)
  59. const routerStore = useRouterStore()
  60. await routerStore.SetAsyncRouter()
  61. const asyncRouters = routerStore.asyncRouters
  62. asyncRouters.forEach(asyncRouter => {
  63. router.addRoute(asyncRouter)
  64. })
  65. if (!router.hasRoute(userInfo.value.authority.defaultRouter)) {
  66. ElMessage.error('请联系管理员进行授权')
  67. } else {
  68. await router.replace({ name: userInfo.value.authority.defaultRouter })
  69. }
  70. loadingInstance.value.close()
  71. const isWin = ref(/windows/i.test(navigator.userAgent))
  72. if (isWin.value) {
  73. window.localStorage.setItem('osType', 'WIN')
  74. } else {
  75. window.localStorage.setItem('osType', 'MAC')
  76. }
  77. return true
  78. }
  79. } catch (e) {
  80. loadingInstance.value.close()
  81. }
  82. loadingInstance.value.close()
  83. }
  84. const LoginIn2 = async(loginInfo) => {
  85. loadingInstance.value = ElLoading.service({
  86. fullscreen: true,
  87. text: '登录中,请稍候...',
  88. })
  89. try {
  90. const res = await login2(loginInfo)
  91. console.log(loginInfo)
  92. console.log(res)
  93. if (res.code === 0) {
  94. setUserInfo(res.data.user)
  95. setToken(res.data.token)
  96. const routerStore = useRouterStore()
  97. await routerStore.SetAsyncRouter()
  98. const asyncRouters = routerStore.asyncRouters
  99. asyncRouters.forEach(asyncRouter => {
  100. router.addRoute(asyncRouter)
  101. })
  102. if (!router.hasRoute(userInfo.value.authority.defaultRouter)) {
  103. ElMessage.error('请联系管理员进行授权')
  104. } else {
  105. await router.replace({ name: userInfo.value.authority.defaultRouter })
  106. }
  107. loadingInstance.value.close()
  108. const isWin = ref(/windows/i.test(navigator.userAgent))
  109. if (isWin.value) {
  110. window.localStorage.setItem('osType', 'WIN')
  111. } else {
  112. window.localStorage.setItem('osType', 'MAC')
  113. }
  114. return true
  115. }
  116. } catch (e) {
  117. loadingInstance.value.close()
  118. }
  119. loadingInstance.value.close()
  120. }
  121. /* 登出*/
  122. const LoginOut = async() => {
  123. const res = await jsonInBlacklist()
  124. if (res.code === 0) {
  125. token.value = ''
  126. sessionStorage.clear()
  127. localStorage.clear()
  128. router.push({ name: 'Login', replace: true })
  129. window.location.reload()
  130. }
  131. }
  132. /* 清理数据 */
  133. const ClearStorage = async() => {
  134. token.value = ''
  135. sessionStorage.clear()
  136. localStorage.clear()
  137. }
  138. /* 设置侧边栏模式*/
  139. const changeSideMode = async(data) => {
  140. const res = await setSelfInfo({ sideMode: data })
  141. if (res.code === 0) {
  142. userInfo.value.sideMode = data
  143. ElMessage({
  144. type: 'success',
  145. message: '设置成功'
  146. })
  147. }
  148. }
  149. const mode = computed(() => userInfo.value.sideMode)
  150. const sideMode = computed(() => {
  151. if (userInfo.value.sideMode === 'dark') {
  152. return '#191a23'
  153. } else if (userInfo.value.sideMode === 'light') {
  154. return '#fff'
  155. } else {
  156. return userInfo.value.sideMode
  157. }
  158. })
  159. const baseColor = computed(() => {
  160. if (userInfo.value.sideMode === 'dark') {
  161. return '#fff'
  162. } else if (userInfo.value.sideMode === 'light') {
  163. return '#191a23'
  164. } else {
  165. return userInfo.value.baseColor
  166. }
  167. })
  168. const activeColor = computed(() => {
  169. return 'var(--el-color-primary)'
  170. })
  171. watch(() => token.value, () => {
  172. window.localStorage.setItem('token', token.value)
  173. })
  174. return {
  175. userInfo,
  176. token,
  177. NeedInit,
  178. ResetUserInfo,
  179. GetUserInfo,
  180. LoginIn,
  181. LoginIn2,
  182. LoginOut,
  183. changeSideMode,
  184. mode,
  185. sideMode,
  186. setToken,
  187. baseColor,
  188. activeColor,
  189. loadingInstance,
  190. ClearStorage
  191. }
  192. })