user.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import pinia from '~src/store/init'
  2. import appConfig from '~src/config/app'
  3. import { useAppStore } from '~src/store'
  4. import { getRoutes } from '~api/menu'
  5. import themeData from '~src/config/theme'
  6. import tokenData from '~src/router/modules/token'
  7. import { setStoreValue } from '~src/utils/storage'
  8. import { logout, refreshToken, userLogin } from '~api/user'
  9. import { userConfigInfo, userConfigSave } from '~api/other'
  10. import { ArrToOneObj, arrIndex, getArrValue, getObjValue } from 'js-fast-way'
  11. import { useOsTheme } from 'hc-vue3-ui'
  12. //初始变量
  13. const store = useAppStore(pinia)
  14. //登录
  15. export const useAppLogin = async (form) => {
  16. const { error, status, res } = await userLogin(form)
  17. if (!error && status === 200) {
  18. store.setTokenVal(res['access_token'])
  19. store.setRefreshTokenVal(res['refresh_token'])
  20. store.setTenantId(res['tenant_id'])
  21. store.setUserInfo(res)
  22. const routerRes = await setRouterData()
  23. if (!routerRes) {
  24. return Promise.reject({ msg: '路由异常' })
  25. }
  26. await initUserConfigInfo()
  27. return Promise.resolve({ error, status, res })
  28. } else {
  29. return Promise.reject({ error, status, res })
  30. }
  31. }
  32. //用户信息初始化
  33. export const initUserConfigInfo = async () => {
  34. const { error, data } = await userConfigInfo()
  35. if (error) {
  36. return Promise.reject(false)
  37. }
  38. const res = getObjValue(data)
  39. if (res?.theme) {
  40. const { theme, color, homeTheme, shotWebRtc, fullScreen, opinionView } = res
  41. //设置主题
  42. store.setTheme(theme)
  43. //设置模式
  44. if (theme === 'auto') {
  45. store.setThemeVal(useOsTheme())
  46. } else {
  47. store.setThemeVal(theme)
  48. }
  49. //获取主色调和首页主题数据
  50. let themeColor = themeData.color, themeHome = themeData.home
  51. let colorIndex = arrIndex(themeColor, 'name', color)
  52. let homeIndex = arrIndex(themeHome, 'name', homeTheme)
  53. //设置主色调
  54. if (colorIndex !== -1) {
  55. store.setColor(themeColor[colorIndex])
  56. }
  57. //设置首页主题
  58. if (homeIndex !== -1) {
  59. store.setHomeTheme(themeHome[homeIndex])
  60. }
  61. //设置工单服务的弹出框
  62. store.setOrderServiceTipModal(opinionView ?? 1)
  63. store.setShotWebRtc(shotWebRtc)
  64. store.setShotWebRtc(fullScreen)
  65. return Promise.resolve(true)
  66. } else {
  67. await userConfigSave({
  68. theme: appConfig?.theme || '',
  69. color: appConfig?.color?.name || '',
  70. homeTheme: appConfig?.homeTheme?.name || '',
  71. shotWebRtc: '0',
  72. fullScreen: '1',
  73. opinionView: 1,
  74. indexModel:'1',
  75. })
  76. return Promise.resolve(true)
  77. }
  78. }
  79. //设置路由信息
  80. export const setRouterData = async () => {
  81. //请求接口,获取路由数据
  82. const { error, data } = await getRoutes()
  83. if (error) {
  84. return Promise.reject(false)
  85. }
  86. const resData = getArrValue(data)
  87. //数据转换
  88. let routesObj = {}, routesArr = []
  89. await ArrToOneObj(resData, 'code', routesObj, routesArr)
  90. const routes = [...tokenData, ...routesArr] //合并
  91. //数据缓存
  92. store.setMenus(resData)
  93. setStoreValue('route', routesObj)
  94. setStoreValue('routes', routes)
  95. return Promise.resolve(true)
  96. }
  97. //刷新token
  98. export const RefreshToken = async () => {
  99. try {
  100. window.console.log('刷新 token')
  101. const { dept_id, role_id } = store.getUserInfo
  102. const refresh = store.getRefreshToken
  103. const tenantId = store.getTenantId
  104. const { error, status, res } = await refreshToken(refresh, tenantId, dept_id, role_id)
  105. if (!error && status === 200) {
  106. store.setTokenVal(res['access_token'])
  107. store.setRefreshTokenVal(res['refresh_token'])
  108. store.setTenantId(res['tenant_id'])
  109. store.setUserInfo(res)
  110. return Promise.resolve(res)
  111. } else {
  112. return Promise.reject(res)
  113. }
  114. } catch (e) {
  115. window.console.warn('token 刷新失败: ', e)
  116. return Promise.reject(e)
  117. }
  118. }
  119. //登出
  120. export const LogOut = async () => {
  121. return await logout()
  122. }