user.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import { getUserDetailApi, updateUserApi, getUserListApi } from '@/service/user'
  4. import { useAppStore } from '@/store/app'
  5. import type { UserType } from '@/types/user'
  6. import { until } from '@vueuse/core'
  7. const initState = {
  8. nickName: '',
  9. gender: 0,
  10. language: '',
  11. city: '',
  12. province: '',
  13. country: '',
  14. avatarUrl: '',
  15. is_demote: true,
  16. }
  17. export const useUserStore = defineStore(
  18. 'user',
  19. () => {
  20. const userInfo = ref<IUserInfo>({ ...initState }) // 登录用户信息(微信小程序)
  21. const userDetail = ref<UserType>({} as UserType) // 用户详细信息(系统)
  22. // 是否已完善资料 (身份证或统一社会信用代码是否为空)
  23. const isAuthComplete = computed(() => {
  24. if (!userDetail.value.userstype) return false
  25. return !!userDetail.value.usersidcardnumber || !!userDetail.value.usersshtyxydm
  26. })
  27. const setUserInfo = (val: IUserInfo) => {
  28. userInfo.value = val
  29. }
  30. const clearUserInfo = () => {
  31. userInfo.value = { ...initState }
  32. }
  33. // 一般没有reset需求,不需要的可以删除
  34. const reset = () => {
  35. userInfo.value = { ...initState }
  36. }
  37. const getUserInfo = async () => {
  38. const appStore = useAppStore()
  39. return getUserDetailApi(appStore.appInfo.userid)
  40. }
  41. const setUserDetail = (val: UserType) => {
  42. userDetail.value = val
  43. }
  44. const updateUser = async (data: Partial<UserType> & { usersid: string }) => {
  45. const { Data, Message, Status } = await updateUserApi(data)
  46. if (Status === 0) {
  47. // 更新用户信息
  48. userDetail.value = Object.assign(userDetail.value, data)
  49. }
  50. return { Data, Message, Status }
  51. }
  52. // 获取销售网点列表
  53. const getSellUserList = async () => {
  54. const { data: userList, loading } = useRequest(
  55. () => getUserListApi({ usersnature: '渠道' }, { pageindex: 1, rows: 999 }),
  56. {
  57. immediate: true,
  58. },
  59. )
  60. await until(loading).toBe(false)
  61. return userList.value.Data
  62. }
  63. return {
  64. userInfo,
  65. setUserInfo,
  66. clearUserInfo,
  67. reset,
  68. getUserInfo,
  69. userDetail,
  70. setUserDetail,
  71. isAuthComplete,
  72. updateUser,
  73. getSellUserList,
  74. }
  75. },
  76. {
  77. persist: true,
  78. },
  79. )