完成部分页面UI
This commit is contained in:
54
src/stores/user.js
Normal file
54
src/stores/user.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
const user = ref(JSON.parse(localStorage.getItem('user') || 'null'))
|
||||
|
||||
// 添加初始化状态校验
|
||||
const initUser = () => {
|
||||
const userData = localStorage.getItem('user')
|
||||
if (!userData) return null
|
||||
try {
|
||||
return JSON.parse(userData)
|
||||
} catch {
|
||||
localStorage.removeItem('user')
|
||||
localStorage.removeItem('token')
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
const isAuthenticated = computed(() => !!user.value?.token)
|
||||
|
||||
function login(credentials) {
|
||||
return new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
if (credentials.username === 'admin' && credentials.password === 'admin123') {
|
||||
const userData = {
|
||||
username: credentials.username,
|
||||
role: 'admin',
|
||||
token: 'mock_token_' + Math.random().toString(36).slice(2)
|
||||
}
|
||||
localStorage.setItem('user', JSON.stringify(userData))
|
||||
user.value = userData // 添加响应式状态更新
|
||||
localStorage.setItem('token', userData.token)
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error('用户名或密码错误'))
|
||||
}
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
function logout() {
|
||||
user.value = null
|
||||
localStorage.removeItem('user')
|
||||
localStorage.removeItem('token')
|
||||
}
|
||||
|
||||
return {
|
||||
user,
|
||||
isAuthenticated,
|
||||
login,
|
||||
logout
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user