123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import { defineStore } from 'pinia'
- import { ref } from 'vue'
- import { getUserInfo as _getUserInfo, login as _login } from '@/api/login'
- import { goBack, toPage } from '@/utils/page'
- import { toast } from '@/utils/toast'
- // 初始化状态
- const userInfoState: any = {
- avatar: '/static/images/default-avatar.png',
- }
- export const useUserStore = defineStore(
- 'user',
- () => {
- // 定义用户信息
- const userInfo = ref<any>({ ...userInfoState })
- const token = ref<string>('')
- // 设置用户信息
- const setUserInfo = (val: any) => {
- console.log('设置用户信息', val)
- userInfo.value = val
- }
- // 删除用户信息
- const removeUserInfo = () => {
- userInfo.value = { ...userInfoState }
- uni.removeStorageSync('userInfo')
- uni.removeStorageSync('token')
- }
- /**
- * 获取用户信息
- */
- const getUserInfo = async () => {
- const res = await _getUserInfo()
- const userInfo = res.data
- setUserInfo(userInfo)
- uni.setStorageSync('userInfo', userInfo)
- return res
- }
- /**
- * 用户登录
- * @param loginData 登录数据
- * @param redirectUrl 登录成功后的跳转地址,默认跳转到首页
- */
- const login = async (loginData: any, redirectUrl?: string) => {
- try {
- // 显示加载状态
- uni.showLoading({
- title: 'Logging in...',
- mask: true,
- })
- // 调用登录接口
- const res = await _login(loginData)
- uni.hideLoading()
- // 登录成功,保存 token
- if (res.code === '200' && res.data && res.data.token) {
- token.value = res.data.token
- uni.setStorageSync('token', res.data.token)
- // 获取用户信息
- await getUserInfo()
- }
- // 登录成功提示
- toast.success('Login successful!')
- // 跳转到指定页面或默认首页
- setTimeout(() => {
- if (redirectUrl) {
- // 使用 toPage 方法,自动判断是否为 tabBar 页面
- toPage(decodeURIComponent(redirectUrl), {}, true)
- }
- else {
- // 默认跳转到首页
- goBack()
- }
- }, 1500)
- return res
- }
- catch (error) {
- uni.hideLoading()
- toast.error(error.message || 'Login failed')
- throw error
- }
- }
- return {
- userInfo,
- token,
- getUserInfo,
- setUserInfo,
- removeUserInfo,
- login,
- }
- },
- {
- persist: true,
- },
- )
|