user.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 { getStoreValue, 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. import { setAppName } from '~uti/tools'
  13. import logoIcon from '~src/assets/logo/icon.png'
  14. import logoName from '~src/assets/logo/name.png'
  15. import website from '~src/config'
  16. //初始变量
  17. const store = useAppStore(pinia)
  18. //登录
  19. export const useAppLogin = async (form) => {
  20. const { error, status, res, message } = await userLogin(form)
  21. if (!error && status === 200) {
  22. const info = await setUserAppInfo(res)
  23. return { error: info.error, msg: info.msg }
  24. } else {
  25. return { error: true, msg: message }
  26. }
  27. }
  28. //设置用户信息
  29. export const setUserAppInfo = async (res) => {
  30. store.setTokenVal(res['access_token'])
  31. store.setRefreshTokenVal(res['refresh_token'])
  32. store.setTenantId(res['tenant_id'])
  33. store.setRoleId(res['role_id'])
  34. store.setUserInfo(res)
  35. const routerRes = await setRouterData()
  36. if (routerRes.length <= 0) {
  37. return { error: true, msg: '路由异常' }
  38. }
  39. await getHomeRouter()
  40. await initUserConfigInfo()
  41. return { error: false, msg: '成功' }
  42. }
  43. //设置租户信息
  44. export const setUserTenantInfo = async (res = {}) => {
  45. const { tenantAvatar, tenantAvatarText, tenantTitle, tenantId } = res
  46. //设置标题
  47. const title = tenantTitle ? tenantTitle : website.title
  48. store.setTitle(title)
  49. setAppName(title)
  50. //设置logo图标
  51. const icon = tenantAvatar ? tenantAvatar : logoIcon
  52. store.setLogoIcon(icon)
  53. //设置logo文字
  54. const name = tenantAvatarText ? tenantAvatarText : logoName
  55. store.setLogoName(name)
  56. //设置租户ID
  57. const id = tenantId ? tenantId : '000000'
  58. store.setTenantId(id)
  59. //返回数据
  60. return { title, icon, name, id }
  61. }
  62. //用户信息初始化
  63. export const initUserConfigInfo = async () => {
  64. const { error, data } = await userConfigInfo()
  65. if (error) {
  66. return Promise.reject(false)
  67. }
  68. const res = getObjValue(data)
  69. if (res?.theme) {
  70. const { theme, color, opinionView } = res
  71. //设置主题
  72. store.setTheme(theme)
  73. //设置模式
  74. if (theme === 'auto') {
  75. store.setThemeVal(useOsTheme())
  76. } else {
  77. store.setThemeVal(theme)
  78. }
  79. //获取主色调和首页主题数据
  80. let themeColor = themeData.color
  81. let colorIndex = arrIndex(themeColor, 'name', color)
  82. //设置主色调
  83. if (colorIndex !== -1) {
  84. store.setColor(themeColor[colorIndex])
  85. }
  86. //设置工单服务的弹出框
  87. store.setOrderServiceTipModal(opinionView ?? 1)
  88. return Promise.resolve(true)
  89. } else {
  90. await userConfigSave({
  91. theme: appConfig?.theme || '',
  92. color: appConfig?.color?.name || '',
  93. opinionView: 1,
  94. })
  95. return Promise.resolve(true)
  96. }
  97. }
  98. //设置路由信息
  99. export const setRouterData = async () => {
  100. //请求接口,获取路由数据
  101. const { error, data } = await getRoutes()
  102. if (error) return []
  103. const resData = getArrValue(data)
  104. //数据转换
  105. let routesObj = {}, routesArr = []
  106. await ArrToOneObj(resData, 'code', routesObj, routesArr)
  107. const routes = [...tokenData, ...routesArr] //合并
  108. //数据缓存
  109. store.setMenus(resData)
  110. setStoreValue('route', routesObj)
  111. setStoreValue('routes', routes)
  112. setStoreValue('routesArr', routesArr)
  113. return resData
  114. }
  115. //获取路由菜单的主入口路径
  116. const getHomeRouter = async () => {
  117. const routes = getStoreValue('routesArr') ?? []
  118. //没有菜单路由数据
  119. if (routes.length <= 0) {
  120. store.setHomeUrl('home')
  121. return 'home'
  122. }
  123. //设置主入口
  124. const isUsingStats = routes.indexOf('using-stats')
  125. const code = isUsingStats !== -1 ? 'using-stats' : routes[0]
  126. store.setHomeUrl(code)
  127. return code
  128. }
  129. //刷新token
  130. export const RefreshToken = async () => {
  131. try {
  132. window.console.log('刷新 token')
  133. const { dept_id, role_id } = store.getUserInfo
  134. const refresh = store.getRefreshToken
  135. const tenantId = store.getTenantId
  136. const { error, status, res } = await refreshToken(refresh, tenantId, dept_id, role_id)
  137. if (!error && status === 200) {
  138. store.setTokenVal(res['access_token'])
  139. store.setRefreshTokenVal(res['refresh_token'])
  140. store.setTenantId(res['tenant_id'])
  141. store.setUserInfo(res)
  142. return Promise.resolve(res)
  143. } else {
  144. return Promise.reject(res)
  145. }
  146. } catch (e) {
  147. window.console.warn('token 刷新失败: ', e)
  148. return Promise.reject(e)
  149. }
  150. }
  151. //登出
  152. export const LogOut = async () => {
  153. return await logout()
  154. }