巴青农资商城

user.js 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. const data = res.data || {}
  30. const token = data.token
  31. if (!token) {
  32. return Promise.reject(new Error('登录失败,未返回令牌'))
  33. }
  34. setToken(token)
  35. state.token = token
  36. state.memberId = data.memberId || ''
  37. return res
  38. })
  39. }
  40. /** 会员资料 */
  41. const fetchUserInfo = () => {
  42. return getMemberProfile().then((res) => {
  43. const m = res.data || {}
  44. state.memberId = m.memberId
  45. state.memberCode = m.memberCode || ''
  46. state.name = m.memberCode || ''
  47. state.nickName = m.nickName || ''
  48. state.mobile = m.mobile || ''
  49. state.avatar = resolveAvatar(m.avatar)
  50. return res
  51. })
  52. }
  53. /** 本地退出(C 端会员暂无 logout 接口) */
  54. const logOut = () => {
  55. return fedLogOut()
  56. }
  57. const fedLogOut = () => {
  58. state.token = ''
  59. state.memberId = ''
  60. state.name = ''
  61. state.nickName = ''
  62. state.mobile = ''
  63. state.avatar = ''
  64. state.memberCode = ''
  65. removeToken()
  66. return Promise.resolve()
  67. }
  68. const displayName = () => state.nickName || state.memberCode || state.mobile || '会员'
  69. const isLoggedIn = () => !!state.token
  70. return {
  71. state,
  72. login,
  73. fetchUserInfo,
  74. logOut,
  75. fedLogOut,
  76. displayName,
  77. isLoggedIn
  78. }
  79. }