Phase 1 (基础设施与用户认证) 全部 11 个 Task 开发完成: 后端 (Go): - Auth 模块: 注册/登录/JWT(有状态)/Profile/密码修改 - Admin 模块: 用户列表/详情/禁用/启用/角色分配/创建用户 - 中间件: JWT认证 + RBAC角色权限 + 请求日志 + CORS + Panic恢复 - Dockerfile 多阶段构建 + Docker Compose 全栈部署 前台 (uni-app): - 登录/注册页面 + 自定义 TabBar + 个人中心 - 请求封装 + 状态管理 (Pinia) 管理端 (Vue 3 + Element Plus): - 登录/仪表盘/用户列表/用户详情 - Axios 封装 + 路由守卫 + Pinia 状态管理 验证: - 全流程 API 端到端测试通过 - Playwright 页面自动化验证通过 - code-reviewer 代码审查通过 Made-with: Cursor
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
/**
|
|
* 管理后台用户 Store
|
|
*
|
|
* 管理管理员认证状态、个人信息
|
|
* 使用 Pinia 3.x + Composition API 风格
|
|
*/
|
|
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import { login as loginApi, logout as logoutApi, getProfile as getProfileApi } from '@/api/auth'
|
|
import { saveToken, getToken, removeToken, saveUserInfo, getUserInfo, removeUserInfo, clearAll } from '@/utils/storage'
|
|
|
|
export const useUserStore = defineStore('admin-user', () => {
|
|
/** Access Token */
|
|
const token = ref(getToken() || '')
|
|
|
|
/** 管理员信息 */
|
|
const userInfo = ref(getUserInfo() || null)
|
|
|
|
/** 是否已登录 */
|
|
const isLoggedIn = computed(() => !!token.value)
|
|
|
|
/** 管理员用户名 */
|
|
const username = computed(() => userInfo.value?.username || '')
|
|
|
|
/** 角色列表 */
|
|
const roles = computed(() => userInfo.value?.roles || [])
|
|
|
|
/**
|
|
* 管理员登录
|
|
* @param {Object} loginData - { account, password }
|
|
*/
|
|
const login = async (loginData) => {
|
|
const res = await loginApi(loginData)
|
|
token.value = res.data.token
|
|
userInfo.value = res.data.user
|
|
saveToken(res.data.token, res.data.refresh_token)
|
|
saveUserInfo(res.data.user)
|
|
return res.data
|
|
}
|
|
|
|
/** 退出登录 */
|
|
const logout = async () => {
|
|
try {
|
|
await logoutApi()
|
|
} catch {
|
|
// 即使后端请求失败也清除本地状态
|
|
}
|
|
token.value = ''
|
|
userInfo.value = null
|
|
clearAll()
|
|
}
|
|
|
|
/** 获取/刷新管理员信息 */
|
|
const getProfile = async () => {
|
|
const res = await getProfileApi()
|
|
userInfo.value = res.data
|
|
saveUserInfo(res.data)
|
|
return res.data
|
|
}
|
|
|
|
return {
|
|
token,
|
|
userInfo,
|
|
isLoggedIn,
|
|
username,
|
|
roles,
|
|
login,
|
|
logout,
|
|
getProfile
|
|
}
|
|
})
|