巴青农资商城

user.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { reactive } from 'vue'
  2. import { memberLogin, getMemberProfile } from '@/api/member'
  3. import { getToken, setToken, removeToken } from '@/utils/auth'
  4. import { joinApiUrl } from '@/config'
  5. const state = reactive({
  6. token: getToken(),
  7. memberId: '',
  8. name: '',
  9. nickName: '',
  10. mobile: '',
  11. avatar: '',
  12. memberCode: ''
  13. })
  14. function isHttp(url) {
  15. return /^https?:\/\//i.test(url || '')
  16. }
  17. function resolveAvatar(path) {
  18. if (!path) return ''
  19. if (isHttp(path)) return path
  20. return joinApiUrl(path)
  21. }
  22. export function useUserStore() {
  23. /** 会员登录:account = 手机号或会员名称 */
  24. const login = (payload) => {
  25. const account = (payload.account || payload.username || '').trim()
  26. const password = payload.password
  27. const agreementAccepted = !!payload.agreementAccepted
  28. return memberLogin({ account, password, agreementAccepted }).then((res) => {
  29. // v1.3:与平台 /login 一致,token、memberId 在响应根级;兼容旧版 data 包裹
  30. const token = res.token || (res.data && res.data.token)
  31. const memberId = res.memberId != null && res.memberId !== ''
  32. ? res.memberId
  33. : (res.data && res.data.memberId)
  34. if (!token) {
  35. return Promise.reject(new Error('登录失败,未返回令牌'))
  36. }
  37. setToken(token)
  38. state.token = token
  39. state.memberId = memberId != null ? memberId : ''
  40. return res
  41. })
  42. }
  43. /** 会员资料 */
  44. const fetchUserInfo = () => {
  45. return getMemberProfile().then((res) => {
  46. const m = res.data || {}
  47. state.memberId = m.memberId
  48. state.memberCode = m.memberCode || ''
  49. state.name = m.memberCode || ''
  50. state.nickName = m.nickName || ''
  51. state.mobile = m.mobile || ''
  52. state.avatar = resolveAvatar(m.avatar)
  53. return res
  54. })
  55. }
  56. /** 本地退出(C 端会员暂无 logout 接口) */
  57. const logOut = () => {
  58. return fedLogOut()
  59. }
  60. const fedLogOut = () => {
  61. state.token = ''
  62. state.memberId = ''
  63. state.name = ''
  64. state.nickName = ''
  65. state.mobile = ''
  66. state.avatar = ''
  67. state.memberCode = ''
  68. removeToken()
  69. return Promise.resolve()
  70. }
  71. const displayName = () => state.nickName || state.memberCode || state.mobile || '会员'
  72. const isLoggedIn = () => !!state.token
  73. return {
  74. state,
  75. login,
  76. fetchUserInfo,
  77. logOut,
  78. fedLogOut,
  79. displayName,
  80. isLoggedIn
  81. }
  82. }