重命名前端项目目录:web-flowith -> web

- 将前端项目目录从 web-flowith 重命名为 web,使目录结构更简洁
- 保持所有前端代码和配置文件不变
- 统一项目目录命名规范
This commit is contained in:
2025-07-24 22:20:19 +08:00
parent ca42a7d9a4
commit bbe8fcd776
57 changed files with 0 additions and 0 deletions
+157
View File
@@ -0,0 +1,157 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { authService, authUtils } from '@/services/auth'
import type { User } from '@/types'
import type { UserInfo, LoginRequest } from '@/types/auth'
export const useUserStore = defineStore('user', () => {
// 用户状态
const user = ref<User | null>(null)
const userInfo = ref<UserInfo | null>(null)
const token = ref<string>('')
const isLoading = ref(false)
const isLoggedIn = computed(() => !!token.value && (!!user.value || !!userInfo.value))
// 方法
const setUser = (userData: User) => {
user.value = userData
}
const setToken = (tokenValue: string) => {
token.value = tokenValue
// 存储到localStorage
if (tokenValue) {
localStorage.setItem('token', tokenValue)
} else {
localStorage.removeItem('token')
}
}
const setUserInfo = (userInfoData: UserInfo | null) => {
userInfo.value = userInfoData
// 存储到localStorage
if (userInfoData) {
localStorage.setItem('userInfo', JSON.stringify(userInfoData))
} else {
localStorage.removeItem('userInfo')
}
}
// 新的登录方法,支持认证服务
const loginWithAuth = async (loginData: LoginRequest) => {
isLoading.value = true
try {
const data = await authService.login(loginData)
setToken(data.accessToken)
setUserInfo(data.userInfo)
return data
} catch (error: any) {
throw error
} finally {
isLoading.value = false
}
}
const login = async (credentials: { username: string; password: string }) => {
try {
// TODO: 调用登录API
// const response = await authApi.login(credentials)
// setToken(response.data.token)
// setUser(response.data.user)
// 临时模拟登录
setToken('mock-token')
setUser({
id: '1',
username: credentials.username,
email: 'user@example.com',
nickname: '用户',
createTime: new Date().toISOString(),
updateTime: new Date().toISOString()
})
return true
} catch (error) {
console.error('Login failed:', error)
return false
}
}
const logout = async () => {
try {
await authService.logout()
} catch (error) {
console.error('Logout error:', error)
} finally {
// 清除状态和本地存储
user.value = null
userInfo.value = null
setToken('')
authUtils.clearAuth()
}
}
const updateProfile = (profileData: Partial<User>) => {
if (user.value) {
user.value = { ...user.value, ...profileData }
// TODO: 调用更新API
}
}
// 初始化用户状态
const initUser = () => {
const savedToken = authUtils.getToken()
const savedUserInfo = authUtils.getUserInfo()
console.log('初始化用户状态:', { savedToken: !!savedToken, savedUserInfo })
if (savedToken) {
setToken(savedToken)
}
if (savedUserInfo) {
setUserInfo(savedUserInfo)
}
console.log('用户状态初始化完成:', {
token: !!token.value,
userInfo: userInfo.value,
isLoggedIn: isLoggedIn.value
})
}
// 刷新用户信息
const refreshUserInfo = async () => {
if (!token.value) return
try {
const response = await authService.getUserInfo()
if (response.success) {
userInfo.value = response.data
authUtils.setUserInfo(response.data)
}
} catch (error) {
console.error('Refresh user info error:', error)
}
}
return {
// 状态
user,
userInfo,
token,
isLoading,
isLoggedIn,
// 方法
setUser,
setToken,
setUserInfo,
login,
loginWithAuth,
logout,
updateProfile,
initUser,
refreshUserInfo
}
})