feat: 改造 user store(微信登录),新增 card store

- user store 增加 refreshToken 状态、wxLogin 微信登录(条件编译)、降级登录
- card store 封装年卡列表/详情/我的年卡/激活/绑定/入园码等状态和操作

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-06-14 17:24:19 +08:00
co-authored by Claude Opus 4.8
parent ec045249ff
commit cdec6ef299
2 changed files with 101 additions and 4 deletions
+37 -4
View File
@@ -1,40 +1,73 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { getToken, setToken, removeToken } from '../api/request'
import { getUserInfo, login as apiLogin, type UserInfo, type LoginParams } from '../api/user'
import { wxLogin as apiWxLogin, login as apiLogin, getUserInfo as apiGetUserInfo } from '../api/user'
import type { UserInfo, LoginParams } from '../api/types'
import { TOKEN_KEY, REFRESH_TOKEN_KEY } from '../config'
export const useUserStore = defineStore('user', () => {
const token = ref<string>(getToken())
const refreshToken = ref<string>(uni.getStorageSync(REFRESH_TOKEN_KEY) || '')
const userInfo = ref<UserInfo | null>(null)
const isLogin = computed(() => !!token.value)
/** 微信授权登录 */
async function wxLogin() {
// #ifdef MP-WEIXIN
const loginRes = await new Promise<UniApp.LoginRes>((resolve, reject) => {
uni.login({
provider: 'weixin',
success: resolve,
fail: reject
})
})
const result = await apiWxLogin(loginRes.code)
token.value = result.accessToken
refreshToken.value = result.refreshToken
setToken(result.accessToken)
uni.setStorageSync(REFRESH_TOKEN_KEY, result.refreshToken)
return result
// #endif
// #ifdef H5
throw new Error('H5 登录暂未开放,请在微信小程序中使用')
// #endif
}
/** 账号密码登录(降级方案) */
async function login(params: LoginParams) {
const result = await apiLogin(params)
token.value = result.accessToken
refreshToken.value = result.refreshToken
setToken(result.accessToken)
// 登录成功后获取用户信息
await fetchUserInfo()
uni.setStorageSync(REFRESH_TOKEN_KEY, result.refreshToken)
return result
}
/** 获取用户信息 */
async function fetchUserInfo() {
if (!token.value) return
const info = await getUserInfo()
const info = await apiGetUserInfo()
userInfo.value = info
return info
}
/** 退出登录 */
function logout() {
token.value = ''
refreshToken.value = ''
userInfo.value = null
removeToken()
uni.removeStorageSync(REFRESH_TOKEN_KEY)
}
return {
token,
refreshToken,
userInfo,
isLogin,
wxLogin,
login,
fetchUserInfo,
logout