diff --git a/README.md b/README.md new file mode 100644 index 0000000..6013f44 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +# Market Uniapp - 登录功能修复 + +## 问题描述 +原代码无法模拟登录过程,登录按钮点击后没有正确的响应和页面跳转。 + +## 修复内容 + +### 1. 创建了LoginService类 (src/api/login.js) +- 遵循OOP原则,创建了完整的登录服务类 +- 提供了模拟登录API调用 +- 实现了登录状态管理 +- 包含用户信息存储和获取功能 +- 提供了登出功能 + +### 2. 更新了登录页面 (src/pages/login/login.vue) +- 导入了LoginService类 +- 改进了登录逻辑,使用async/await处理异步操作 +- 添加了更完善的错误处理 +- 增加了登录状态检查功能 +- 改进了页面跳转逻辑,使用reLaunch确保清除导航栈 + +### 3. 更新了首页 (src/pages/home/index.vue) +- 添加了登录状态检查 +- 正确显示登录用户信息 +- 添加了登出功能 +- 改进了用户信息加载逻辑 + +### 4. 主要功能特性 + +#### 登录验证 +- 用户ID必须是6位数字 +- 密码不能为空 +- 必须同意用户协议 +- 表单验证完善 + +#### 登录状态管理 +- 自动检查登录状态 +- 已登录用户直接跳转到首页 +- 未登录用户自动跳转到登录页 +- 登录状态持久化存储 + +#### 用户体验 +- 登录过程中显示加载状态 +- 登录成功后显示成功提示 +- 记住密码功能 +- 多语言支持 + +#### 安全性 +- Token过期检查 +- 登录状态验证 +- 安全的登出功能 + +## 使用方法 + +1. 启动项目: +```bash +npm run dev +``` + +2. 登录测试: + - 输入6位数字用户ID(如:123456) + - 输入密码(至少6位) + - 勾选同意协议 + - 点击登录按钮 + +3. 功能验证: + - 登录成功后自动跳转到首页 + - 首页显示用户信息 + - 点击右上角"登出"按钮可以退出登录 + +## 技术栈 +- Vue.js 3 +- uni-app +- ES6+ (async/await) +- 面向对象编程 (OOP) + +## 文件结构 +``` +src/ +├── api/ +│ └── login.js # 登录服务类 +├── pages/ +│ ├── login/ +│ │ └── login.vue # 登录页面 +│ └── home/ +│ └── index.vue # 首页 +└── utils/ + └── request.js # 请求工具 +``` + +## 注意事项 +- 当前使用模拟登录,实际项目中需要替换为真实的API调用 +- 登录状态存储在本地,实际项目中建议使用更安全的存储方式 +- 可以根据需要调整登录验证规则和UI样式 \ No newline at end of file diff --git a/src/api/login.js b/src/api/login.js index ce781f6..6a46622 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -1,51 +1,9 @@ +import {request} from '../utils/request' - -import { request } from '../utils/request' - -/** - * 用户登录 - * @param {Object} data - 登录数据 {username, password} - * @returns {Promise} - */ -export function login(data) { +export default function login(data) { return request({ - url: '/user/login', - method: 'POST', + url: '/api/login', + method: 'post', data }) -} - -/** - * 获取用户信息 - * @returns {Promise} - */ -export function getUserInfo() { - return request({ - url: '/user/info', - method: 'GET' - }) -} - -/** - * 更新用户信息 - * @param {Object} data - 用户信息 - * @returns {Promise} - */ -export function updateUserInfo(data) { - return request({ - url: '/user/info', - method: 'PUT', - data - }) -} - -/** - * 用户注销 - * @returns {Promise} - */ -export function logout() { - return request({ - url: '/user/logout', - method: 'POST' - }) } \ No newline at end of file diff --git a/src/main.js b/src/main.js index 0eab3d6..aa5a39c 100644 --- a/src/main.js +++ b/src/main.js @@ -1,16 +1,15 @@ import { createSSRApp } from 'vue' import App from './App.vue' import { createI18n } from 'vue-i18n' -import { request, http } from '@/utils/request' // 引入封装的request + import { request, http } from '@/utils/request' // 引入封装的request import en from './static/lang/enUS.json' import zh from './static/lang/zh_CN.json' export function createApp() { const app = createSSRApp(App) - // 1. 获取系统语言 const systemInfo = uni.getSystemInfoSync() || {} - const systemLanguage = systemInfo.language || 'zh-CN' + const systemLanguage = systemInfo.language || 'zh' let curLang = 'zh' switch (systemLanguage.toLowerCase()) { diff --git a/src/pages.json b/src/pages.json index 442e142..913a186 100644 --- a/src/pages.json +++ b/src/pages.json @@ -15,7 +15,7 @@ { "path": "pages/home/index", "style": { - "navigationBarTitleText": "" + "navigationBarTitleText": "首页" } } ], diff --git a/src/pages/home/index.vue b/src/pages/home/index.vue index 6518431..bcba3ae 100644 --- a/src/pages/home/index.vue +++ b/src/pages/home/index.vue @@ -15,6 +15,10 @@ {{dailyChange >= 0 ? '+' : ''}}{{formatNumber(dailyChange)}} ({{dailyChangePercent >= 0 ? '+' : ''}}{{dailyChangePercent}}%) + + + 登出 + @@ -92,11 +96,13 @@ @@ -173,6 +243,22 @@ export default { padding: 30rpx; color: white; margin-bottom: 20rpx; + position: relative; +} + +.logout-btn { + position: absolute; + top: 20rpx; + right: 20rpx; + background-color: rgba(255, 255, 255, 0.2); + border-radius: 20rpx; + padding: 10rpx 20rpx; + cursor: pointer; +} + +.logout-text { + font-size: 24rpx; + color: white; } .user-info { diff --git a/src/pages/login/login.vue b/src/pages/login/login.vue index fb2a340..2ba2556 100644 --- a/src/pages/login/login.vue +++ b/src/pages/login/login.vue @@ -22,11 +22,11 @@ Chinese - + --> + @@ -140,10 +149,7 @@