feat: Phase 1 完成 — 基础设施 + 用户认证 + 管理端 + 端到端验证
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
This commit is contained in:
71
admin/src/store/user.js
Normal file
71
admin/src/store/user.js
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* 管理后台用户 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
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user