user.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import { Base64 } from 'js-base64'
  4. import defHead from '@img/icons/turnk_number_head.png'
  5. interface TUser extends Token认证用户实体 {
  6. /** 令牌 */
  7. token?: string
  8. /** 组织机构id */
  9. orgId?: string
  10. /** 角色id */
  11. roleId?: string
  12. /** 请求时携带的标识符 */
  13. Identifier?: string
  14. mobileDes?: string
  15. }
  16. const service = 'miniprogram'
  17. const initState = {
  18. Identifier: Base64.encode(service + ':org:user:role'),
  19. head_url: defHead,
  20. user_name: '登录/注册',
  21. }
  22. const useUserStore = defineStore(
  23. 'user',
  24. () => {
  25. const userInfo = ref<TUser>({ ...initState })
  26. const isLogined = computed(() => !!userInfo.value.token)
  27. /** 初始化用户信息 */
  28. const initUserInfo = (val: Token认证返回实体) => {
  29. const data = { ...val.user }
  30. delete data.authorities
  31. if (!data.head_url) {
  32. data.head_url = defHead
  33. }
  34. userInfo.value = data
  35. userInfo.value.mobileDes = func.convert.mobileDes(data.mobile)
  36. if (store.common.data.mockScenes === config.common.mockScenes.examine) {
  37. userInfo.value.mobileDes = ''
  38. }
  39. userInfo.value.token = val.access_token
  40. userInfo.value.orgId = val.user.authorities[0].orgId
  41. userInfo.value.roleId = val.user.authorities[0].roles[0].roleId
  42. userInfo.value.Identifier = Base64.encode(
  43. `${service}:${userInfo.value.orgId}:${userInfo.value.user_id}:${userInfo.value.roleId}`,
  44. )
  45. }
  46. /** 设置部分用户信息 */
  47. const setUserInfo = (ui: User对象) => {
  48. if (ui.userName) {
  49. userInfo.value.user_name = ui.userName
  50. }
  51. if (ui.headUrl) {
  52. userInfo.value.head_url = ui.headUrl
  53. }
  54. }
  55. const clearUserInfo = (type = 0) => {
  56. userInfo.value = { ...initState }
  57. ay.goHome()
  58. }
  59. const Authorization = computed(() => {
  60. if (isLogined.value) {
  61. return 'Bearer ' + userInfo.value.token
  62. } else {
  63. return 'Basic ' + Base64.encode(service + ':123456')
  64. }
  65. })
  66. return {
  67. userInfo,
  68. initUserInfo,
  69. setUserInfo,
  70. /** 清理身份信息-跳登录页面
  71. * @parmas type 0:手机号快捷 1:账号、密码
  72. */
  73. clearUserInfo,
  74. /** 已登录 */
  75. isLogined,
  76. /** 授权信息 */
  77. Authorization,
  78. /** 小程序类型标识 */
  79. service,
  80. }
  81. },
  82. {
  83. persist: true,
  84. },
  85. )
  86. export default useUserStore