# 登录弹窗实现说明 ## 功能概述 实现了用户访问系统时,如果未登录则自动弹出登录弹窗,要求用户登录后才能使用系统功能。 ## 实现方式 ### 1. 创建登录弹窗组件 **文件**: `xinlidsj/components/LoginModal.vue` **功能特点**: - 美观的弹窗UI设计 - 支持账号密码登录 - 登录状态加载提示 - 登录成功后自动关闭弹窗并刷新页面 - 可配置是否允许关闭(`closable`属性) - 自动记住上次登录的账号 **使用方法**: ```vue ``` **Props**: - `show`: Boolean - 是否显示弹窗 - `closable`: Boolean - 是否允许关闭弹窗(默认false,强制登录) **Events**: - `success`: 登录成功时触发 - `close`: 关闭弹窗时触发 ### 2. 首页集成登录弹窗 **文件**: `xinlidsj/pages/index/index.vue` **修改内容**: 1. 引入 `LoginModal` 组件 2. 添加 `showLoginModal` 数据属性 3. 在 `onLoad` 和 `onShow` 生命周期中检查登录状态 4. 未登录时显示登录弹窗 5. 登录成功后初始化应用数据 **核心逻辑**: ```javascript onLoad() { // 检查登录状态 const token = getToken() if (!token) { this.showLoginModal = true // 显示登录弹窗 return } this.initApp() // 已登录,初始化应用 } ``` ### 3. 登录成功处理 登录成功后的流程: 1. 保存token到本地存储 2. 触发 `success` 事件 3. 父组件调用 `onLoginSuccess()` 方法 4. 初始化应用数据(加载视频、消息、数据等) 5. 自动关闭登录弹窗 6. 刷新当前页面 ## 用户体验 ### 未登录状态 - 访问首页时自动弹出登录弹窗 - 弹窗遮罩层阻止用户操作页面内容 - 不允许关闭弹窗(`closable=false`),必须登录 - 点击遮罩层会提示"请先登录后才能使用" ### 登录过程 - 输入账号密码 - 点击登录按钮或按回车键提交 - 显示"登录中..."加载状态 - 登录失败显示错误提示 - 登录成功显示成功提示并自动关闭弹窗 ### 已登录状态 - 直接进入系统,不显示登录弹窗 - 正常使用所有功能 ## 样式特点 - 现代化的弹窗设计 - 半透明黑色遮罩层 - 圆角卡片式弹窗 - 输入框聚焦时高亮效果 - 响应式布局,适配不同屏幕尺寸 ## 扩展性 如果需要在其他页面也使用登录弹窗,只需: 1. 引入 `LoginModal` 组件 2. 添加 `showLoginModal` 数据属性 3. 在页面加载时检查登录状态 4. 根据需要设置 `closable` 属性 ## 注意事项 1. 登录弹窗使用 `z-index: 9999` 确保在最上层显示 2. 弹窗不可关闭时,点击遮罩层会有友好提示 3. 登录成功后会自动刷新当前页面数据 4. 密码输入框使用 `password` 类型,确保安全性