feat: 集成 Permission Store 到登录流程
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import request from '@/utils/request'
|
||||
|
||||
export interface MenuItem {
|
||||
id: number
|
||||
@@ -86,6 +87,23 @@ export const usePermissionStore = defineStore('permission', {
|
||||
console.error('从 localStorage 恢复权限数据失败:', error)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async fetchUserMenus() {
|
||||
try {
|
||||
const res: any = await request.get('/menus/user')
|
||||
|
||||
if (res && res.data) {
|
||||
this.setPermissionData({
|
||||
roles: JSON.parse(localStorage.getItem('roles') || '[]'),
|
||||
permissions: res.data.permissions || [],
|
||||
menus: res.data.menus || []
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取用户菜单失败:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -52,9 +52,12 @@ import { useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '@/utils/request'
|
||||
import { onMounted } from 'vue'
|
||||
import { jwtDecode } from 'jwt-decode'
|
||||
import { usePermissionStore } from '@/stores/permission'
|
||||
|
||||
const router = useRouter()
|
||||
const loading = ref(false)
|
||||
const permissionStore = usePermissionStore()
|
||||
|
||||
const formState = reactive({
|
||||
username: '',
|
||||
@@ -65,6 +68,14 @@ onMounted(() => {
|
||||
document.title = '登录 - Novalon 管理系统'
|
||||
})
|
||||
|
||||
interface JwtPayload {
|
||||
userId: number
|
||||
username: string
|
||||
roles: string[]
|
||||
exp: number
|
||||
iat: number
|
||||
}
|
||||
|
||||
const onFinish = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
@@ -83,6 +94,21 @@ const onFinish = async () => {
|
||||
localStorage.setItem('username', res.username)
|
||||
}
|
||||
|
||||
try {
|
||||
const decoded = jwtDecode<JwtPayload>(res.token)
|
||||
if (decoded.roles && Array.isArray(decoded.roles)) {
|
||||
localStorage.setItem('roles', JSON.stringify(decoded.roles))
|
||||
}
|
||||
} catch (decodeError) {
|
||||
console.warn('解析Token中的角色信息失败:', decodeError)
|
||||
}
|
||||
|
||||
try {
|
||||
await permissionStore.fetchUserMenus()
|
||||
} catch (fetchError) {
|
||||
console.warn('获取用户菜单失败:', fetchError)
|
||||
}
|
||||
|
||||
ElMessage.success('登录成功')
|
||||
|
||||
await router.push('/')
|
||||
|
||||
Reference in New Issue
Block a user