87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import {loginApi, registerApi} from "@/api/request/user.js";
|
|
import {message, notification} from "ant-design-vue";
|
|
|
|
export const useUserStore = defineStore('user', () => {
|
|
const user = ref(JSON.parse(localStorage.getItem('user') || 'null'))
|
|
const modal = ref(localStorage.getItem('authModal') || 'false')
|
|
|
|
// 添加初始化状态校验
|
|
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?.nick_name)
|
|
|
|
function login(credentials, functionName) {
|
|
console.log(functionName, 'sssssssssssss')
|
|
loginApi({
|
|
account: credentials.username,
|
|
password: credentials.password,
|
|
remember: credentials.remember,
|
|
}).then((res) => {
|
|
const userData = {
|
|
nick_name: res.nick_name,
|
|
role_name: res.role_name,
|
|
role_value: res.role_value,
|
|
}
|
|
user.value = userData;
|
|
localStorage.setItem('user', JSON.stringify(userData))
|
|
localStorage.setItem('token', res.token)
|
|
notification.success({
|
|
message: '登录成功',
|
|
description: `欢迎回来${res.nick_name}`,
|
|
})
|
|
functionName()
|
|
})
|
|
}
|
|
function register(credentials, functionName) {
|
|
registerApi({
|
|
account: credentials.username,
|
|
password: credentials.password,
|
|
email: credentials.email,
|
|
code: credentials.code,
|
|
}).then((res) => {
|
|
const userData = {
|
|
nick_name: res.nick_name,
|
|
role_name: res.role_name,
|
|
role_value: res.role_value,
|
|
}
|
|
user.value = userData;
|
|
localStorage.setItem('user', JSON.stringify(userData))
|
|
localStorage.setItem('token', res.token)
|
|
message.success('注册成功')
|
|
functionName()
|
|
})
|
|
}
|
|
|
|
function logout() {
|
|
user.value = null
|
|
localStorage.removeItem('user')
|
|
localStorage.removeItem('token')
|
|
}
|
|
|
|
function setModal(value) {
|
|
modal.value = modal.value === 'false' ? 'true' : 'false';
|
|
localStorage.setItem('authModal', value)
|
|
}
|
|
|
|
return {
|
|
modal,
|
|
user,
|
|
isAuthenticated,
|
|
setModal,
|
|
login,
|
|
register,
|
|
logout
|
|
}
|
|
}) |