From a27327c7fa7a9869c904a08dddc800bf420c69cb Mon Sep 17 00:00:00 2001 From: qiube <18969599531@163.com> Date: Thu, 25 Dec 2025 15:55:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=A4=E8=AF=81=E5=8A=9F=E8=83=BD=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建登录页面组件,包含账号密码输入和验证功能 - 创建注册页面组件,支持用户注册和信息填写验证 - 添加用户状态管理store,实现token和用户信息的本地存储 - 集成用户认证API接口,包括登录、注册、信息获取等功能 - 实现用户信息管理页面,支持个人信息修改和密码更改 - 添加表单验证规则,确保输入数据格式正确性 - 实现登录状态持久化和自动恢复功能 --- src/api/user.js | 76 +++++++ src/store/user.js | 74 +++++++ src/views/Login.vue | 164 ++++++++++++++ src/views/Register.vue | 245 +++++++++++++++++++++ src/views/UserProfile.vue | 443 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1002 insertions(+) create mode 100644 src/api/user.js create mode 100644 src/store/user.js create mode 100644 src/views/Login.vue create mode 100644 src/views/Register.vue create mode 100644 src/views/UserProfile.vue diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..444ecde --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,76 @@ +import request from './request' + +/** + * 用户注册 + */ +export function register(data) { + return request({ + url: '/erp/user/register', + method: 'post', + data + }) +} + +/** + * 用户登录 + */ +export function login(data) { + return request({ + url: '/erp/user/login', + method: 'post', + data + }) +} + +/** + * 获取当前用户信息(通过Token) + */ +export function getCurrentUser() { + return request({ + url: '/erp/user/info', + method: 'get' + }) +} + +/** + * 获取当前用户信息 + */ +export function getCurrentUserInfo() { + return request({ + url: '/erp/user/info', + method: 'get' + }) +} + +/** + * 更新用户信息 + */ +export function updateUserInfo(data) { + return request({ + url: '/erp/user/info', + method: 'put', + data + }) +} + +/** + * 修改密码 + */ +export function changePassword(data) { + return request({ + url: '/erp/user/change-password', + method: 'post', + data + }) +} + +/** + * 退出登录 + */ +export function logout() { + return request({ + url: '/erp/user/logout', + method: 'post' + }) +} + diff --git a/src/store/user.js b/src/store/user.js new file mode 100644 index 0000000..2a403e6 --- /dev/null +++ b/src/store/user.js @@ -0,0 +1,74 @@ +import { reactive } from 'vue' + +/** + * 用户状态管理 + */ +const state = reactive({ + // 用户信息 + user: null, + // Token + token: null, + // 是否已登录 + isLoggedIn: false +}) + +// 从localStorage恢复用户信息 +function initUser() { + const token = localStorage.getItem('token') + const userInfo = localStorage.getItem('userInfo') + + if (token && userInfo) { + try { + state.token = token + state.user = JSON.parse(userInfo) + state.isLoggedIn = true + } catch (e) { + console.error('恢复用户信息失败:', e) + clearUser() + } + } +} + +// 设置用户信息和Token +function setUser(user, token) { + state.user = user + state.token = token + state.isLoggedIn = true + + // 保存到localStorage + if (token) { + localStorage.setItem('token', token) + } + if (user) { + localStorage.setItem('userInfo', JSON.stringify(user)) + } +} + +// 清除用户信息 +function clearUser() { + state.user = null + state.token = null + state.isLoggedIn = false + + // 清除localStorage + localStorage.removeItem('token') + localStorage.removeItem('userInfo') +} + +// 更新用户信息 +function updateUser(user) { + state.user = { ...state.user, ...user } + localStorage.setItem('userInfo', JSON.stringify(state.user)) +} + +// 初始化 +initUser() + +export default { + state, + setUser, + clearUser, + updateUser, + initUser +} + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..e39b009 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/src/views/Register.vue b/src/views/Register.vue new file mode 100644 index 0000000..3bd643d --- /dev/null +++ b/src/views/Register.vue @@ -0,0 +1,245 @@ + + + + + + diff --git a/src/views/UserProfile.vue b/src/views/UserProfile.vue new file mode 100644 index 0000000..b67f360 --- /dev/null +++ b/src/views/UserProfile.vue @@ -0,0 +1,443 @@ + + + + + +