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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改密码
+
+ 重置
+
+
+
+
+
+
+
+
+ {{ userInfo.username }}
+
+
+ {{ userInfo.nickName || '未设置' }}
+
+
+ {{ userInfo.phone || '未设置' }}
+
+
+ {{ userInfo.email || '未设置' }}
+
+
+ {{ userInfo.storeCode }}
+
+
+
+ {{ userInfo.status === 'ACTIVE' ? '激活' : '禁用' }}
+
+
+
+ {{ formatDateTime(userInfo.lastLoginTime) }}
+
+
+ {{ userInfo.lastLoginIp || '未知' }}
+
+
+ {{ formatDateTime(userInfo.createTime) }}
+
+
+
+
+
+
+
+
+
+
+
+