seaislee1209 dba4c55322 chore: 娣诲姞 .gitignore 娓呯悊缂撳瓨鏂囦欢鍜屾暟鎹簱
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 14:48:09 +08:00

42 lines
1.2 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import { authApi } from '../api'
export const useAuthStore = defineStore('auth', () => {
const user = ref(null)
const token = ref(localStorage.getItem('token') || '')
async function login(username, password) {
const res = await authApi.login({ username, password })
token.value = res.access_token
localStorage.setItem('token', res.access_token)
// 登录后立即获取用户信息,失败不影响登录流程
try {
user.value = await authApi.me()
} catch (e) {
console.error('fetchUser after login failed:', e)
}
}
async function fetchUser() {
if (!token.value) return
try {
user.value = await authApi.me()
} catch {
logout()
}
}
function logout() {
user.value = null
token.value = ''
localStorage.removeItem('token')
}
const isOwner = () => user.value?.role === 'Owner'
const isSupervisor = () => ['Owner', '主管'].includes(user.value?.role)
const isLeaderOrAbove = () => ['Owner', '主管', '组长'].includes(user.value?.role)
return { user, token, login, fetchUser, logout, isOwner, isSupervisor, isLeaderOrAbove }
})