新增后台管理系统(答辩用

This commit is contained in:
2026-06-24 05:07:32 +08:00
parent 2251f31524
commit 1f209e6761
98 changed files with 25099 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
/**
* 教练端认证状态管理
* 风格参考 gym-manage-cuit 的 stores/auth.ts
*/
import { reactive } from 'vue'
import { login as loginApi } from '@/api/auth.js'
import { TOKEN_KEY, USER_INFO_KEY, setToken, setRefreshToken, clearAuth } from '@/utils/request.js'
// 使用 reactive 在 Vue3 Uniapp 中做简易状态管理
const state = reactive({
accessToken: uni.getStorageSync(TOKEN_KEY) || '',
userInfo: uni.getStorageSync(USER_INFO_KEY) ? JSON.parse(uni.getStorageSync(USER_INFO_KEY)) : null,
isLoggedIn: !!uni.getStorageSync(TOKEN_KEY)
})
function saveUserInfo(info) {
state.userInfo = info
uni.setStorageSync(USER_INFO_KEY, JSON.stringify(info))
}
async function login(username, password) {
const res = await loginApi({ username, password })
// 兼容两种响应格式:{ code, message, data } 包裹 或 直接返回 login data
const data = res.data || res
state.accessToken = data.accessToken
state.userInfo = data.userInfo
state.isLoggedIn = true
setToken(data.accessToken)
setRefreshToken(data.refreshToken)
saveUserInfo(data.userInfo)
return data
}
function logout() {
state.accessToken = ''
state.userInfo = null
state.isLoggedIn = false
clearAuth()
}
function getCoachId() {
return state.userInfo?.id || null
}
export function useAuthStore() {
return {
state,
login,
logout,
getCoachId,
saveUserInfo
}
}