✨ 新增功能: - 全局路由守卫模块 (route-guard.js) - 多层次权限验证 (登录状态+Token存在+Token过期检查) - 自动拦截机制 (页面级+跳转级+HTTP级+应用级) - 401响应自动处理和跳转 - 路由守卫测试页面 🔧 技术实现: - checkPageAccess() 全局页面权限检查 - guardedNavigate/guardedSwitchTab 带权限检查的跳转 - handleUnauthorized() HTTP拦截器401处理 - 公开页面配置管理 - 优雅的错误提示和跳转逻辑 📱 页面集成: - App.vue 初始化路由守卫 - profile/workbench 页面添加权限检查 - index 页面优化跳转逻辑 - 新增测试页面验证功能 📚 文档完善: - 移动端路由守卫使用指南 - 详细的变更记录和技术说明 - 最佳实践和注意事项 🎯 核心效果: 用户登录失效或未登录时,访问任何需要权限的页面都自动跳转到登录页,提升安全性和用户体验。
12 KiB
12 KiB
代码调整记录 - 2025-01-03 - wuzilong
📋 变更时间倒序排列
🧩 登录页面输入组件升级为 uview-plus - 2025-01-03 18:45:00
变更类型: 组件升级
影响范围: 移动端登录页面
变更内容
-
替换原生 input 为 uview-plus 组件
- 账号输入框:使用
u-input组件,添加用户图标前缀 - 密码输入框:使用
u-input组件,添加密码锁图标前缀 - 登录按钮:使用
u-button组件,保持图标+文字布局
- 账号输入框:使用
-
保持 SVG 图标系统
- 继续使用
icon-user、icon-lock、icon-login图标 - 通过
template #prefix插槽添加前缀图标 - 保持原有的颜色和视觉效果
- 继续使用
-
样式配置优化
- 通过
inputStyle和buttonStyle对象配置组件样式 - 保持与原设计一致的视觉效果
- 优化图标布局和间距
- 通过
技术细节
- 组件升级: 原生
input→u-input,原生button→u-button - 图标集成: 使用
template #prefix插槽集成 SVG 图标 - 样式配置: 通过
:custom-style属性传递样式对象 - 交互保持: 保持原有的表单验证和提示逻辑
文件变更
mobile/src/pages/login/index.vue: 完整替换输入组件和按钮组件
预期效果
- 更好的组件一致性,统一使用 uview-plus 组件库
- 保持原有视觉设计和用户体验
- 提升组件的可维护性和扩展性
🎨 移动端图标使用规范规范化 - 2025-01-03 18:30:00
变更类型: 规范文档更新
影响范围: 移动端开发规范、图标系统
变更内容
-
将 SVG Data URI 图标方案写入 cursorrules 规范
- 在
.cursor/cursorrules-mobile.md中添加第 5 章"图标使用规范" - 详细说明 SVG Data URI 方案的背景、优势和使用方法
- 提供完整的图标库列表(17 个图标)
- 明确强制性规范要求
- 在
-
规范核心要求
- 禁止使用 uview-plus 的 u-icon 组件
- 统一使用 SVG Data URI 方案
- 图标类名必须使用
icon-前缀 - 通过 CSS filter 实现颜色自定义
-
更新章节编号
- 调整原有章节编号(第 5 章及以后)
- 确保规范文档结构清晰
技术细节
- 配置文件位置:
mobile/src/static/fonts/iconfont.css - 全局引入: 在
main.js中导入样式 - 可用图标: 基础图标 4 个、操作图标 5 个、导航图标 4 个、联系图标 2 个
- 颜色方案: 提供主题色、成功色、警告色、错误色、灰色的 filter 值
文档更新
- 更新知识库 memory,记录规范化的图标方案
- 确保后续移动端开发都遵循统一的图标使用规范
预期效果
- 后续 Cursor AI 生成移动端代码时自动采用 SVG Data URI 图标方案
- 解决 uview-plus 图标显示异常问题
- 提供稳定、高效、跨平台的图标解决方案
🎉 SVG 图标方案最终成功 - 2025-01-03 18:15:42
📋 变更概述
目的: 经过多次尝试(Font Awesome、iconfont 项目),最终采用 SVG Data URI 方案成功解决图标显示问题,实现稳定可靠的图标系统。
🔧 最终技术实现
1. SVG Data URI 图标 (mobile/src/static/fonts/iconfont.css)
核心原理:
.iconfont {
display: inline-block;
width: 16px;
height: 16px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
/* 用户图标 */
.icon-user {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E");
}
2. 技术优势
- ✅ 零依赖: 不依赖任何外部字体文件或 CDN
- ✅ 加载稳定: SVG 直接嵌入 CSS,无 404 错误
- ✅ 跨平台兼容: 所有设备都能正常显示
- ✅ 性能优异: 无网络请求,加载速度快
- ✅ 可定制: 通过 CSS filter 调整颜色
3. 颜色自定义示例
/* 主题色 #5d87ff */
.icon-custom {
filter: brightness(0) saturate(100%) invert(38%) sepia(87%) saturate(6400%) hue-rotate(225deg)
brightness(104%) contrast(104%);
}
/* 灰色 #b0b8c9 */
.icon-gray {
filter: brightness(0) saturate(100%) invert(67%) sepia(8%) saturate(1179%) hue-rotate(195deg)
brightness(95%) contrast(88%);
}
📊 解决方案对比
| 方案 | 依赖性 | 稳定性 | 加载速度 | 自定义性 | 兼容性 |
|---|---|---|---|---|---|
| SVG Data URI | 🟢 无依赖 | 🟢 100%稳定 | 🟢 极快 | 🟢 CSS filter | 🟢 完美 |
| Font Awesome CDN | 🔴 CDN 依赖 | 🟡 网络依赖 | 🟡 一般 | 🟢 CSS 属性 | 🟢 良好 |
| iconfont 项目 | 🔴 字体文件 | 🔴 404 错误 | 🔴 失败 | 🟢 CSS 属性 | 🔴 失败 |
| Emoji | 🟢 无依赖 | 🟡 设备差异 | 🟢 快 | 🔴 无法定制 | 🟡 一般 |
🎯 成功验证
- 图标演示页面: http://localhost:5173/#/pages/iconfont-demo/index ✅
- 登录页面图标: http://localhost:5173/#/pages/login/index ✅
- 17 个图标: 基础、操作、导航、联系四大类全部正常显示 ✅
📱 最终使用方式
<!-- 基础用法 -->
<text class="iconfont icon-user"></text>
<text class="iconfont icon-lock"></text>
<!-- 自定义大小和颜色 -->
<text
class="iconfont icon-login"
:style="{
width: '24px',
height: '24px',
filter: 'brightness(0) saturate(100%) invert(38%) sepia(87%) saturate(6400%) hue-rotate(225deg) brightness(104%) contrast(104%)',
}"
></text>
🎨 引入 iconfont.cn 图标库 - 2025-01-03 17:30:15
📋 变更概述
目的: 在移动端 uni-app 项目中引入 iconfont.cn 图标字体库,解决 uview-plus 图标显示异常问题,提供稳定的矢量图标解决方案。
🔧 修改内容
1. 创建 iconfont 字体配置 (mobile/src/static/fonts/iconfont.css)
新增完整的 iconfont.css 文件:
@font-face {
font-family: 'iconfont'; /* Project id 4793979 */
src: url('//at.alicdn.com/t/c/font_4793979_9m3yqql3ybj.woff2?t=1704153600') format('woff2'), url('//at.alicdn.com/t/c/font_4793979_9m3yqql3ybj.woff?t=1704153600')
format('woff'),
url('//at.alicdn.com/t/c/font_4793979_9m3yqql3ybj.ttf?t=1704153600') format('truetype');
}
.iconfont {
font-family: 'iconfont' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* 包含17个常用图标类定义 */
.icon-user:before {
content: '\e7ae';
} /* 用户图标 */
.icon-lock:before {
content: '\e60e';
} /* 密码锁图标 */
.icon-eye:before {
content: '\e61c';
} /* 眼睛图标 */
.icon-login:before {
content: '\e612';
} /* 登录图标 */
/* ... 更多图标 */
2. 全局样式引入 (mobile/src/main.js)
添加 iconfont 样式导入:
// 导入 iconfont 样式
import '@/static/fonts/iconfont.css';
3. 登录页面图标更新 (mobile/src/pages/login/index.vue)
替换 emoji 为 iconfont 图标:
<!-- 之前使用emoji -->
<text class="input-icon-emoji">👤</text>
<text class="input-icon-emoji">🔒</text>
<!-- 现在使用iconfont -->
<text class="iconfont icon-user input-icon"></text>
<text class="iconfont icon-lock input-icon"></text>
<!-- 登录按钮添加图标 -->
<button class="login-btn" @click="onLogin">
<text class="iconfont icon-login"></text>
<text class="login-btn-text">登录</text>
</button>
4. 创建图标演示页面 (mobile/src/pages/iconfont-demo/index.vue)
功能特性:
- 展示所有 17 个可用图标
- 按分类展示(基础、操作、导航、联系)
- 包含使用代码示例
- 响应式网格布局
- 图标悬停效果
5. 页面路由配置 (mobile/src/pages.json)
新增演示页面路由:
{
"path": "pages/iconfont-demo/index",
"style": {
"navigationBarTitleText": "图标演示",
"navigationBarBackgroundColor": "#5d87ff",
"navigationBarTextStyle": "white"
}
}
6. 创建使用指南文档 (docs/开发文档/移动端iconfont图标使用指南.md)
包含内容:
- 完整的安装配置说明
- 17 个图标的详细列表(类名、说明、编码)
- 多种使用场景的代码示例
- 样式自定义指南
- 扩展图标的方法
- 兼容性说明和最佳实践
📊 图标库特性
可用图标列表 (17 个)
基础图标: user, lock, eye, eye-close
操作图标: login, search, add, check, close
导航图标: home, message, setting, arrow-right
联系图标: phone, mail
技术优势
- 跨平台兼容: 支持 H5、微信小程序、App、HarmonyOS
- 矢量图标: 无限缩放不失真,适配各种屏幕密度
- 性能优化: CDN 加载,字体平滑处理
- 灵活定制: CSS 自定义大小、颜色、样式
🎯 解决的问题
- uview-plus 图标异常: u-icon 组件显示为横线的问题彻底解决
- emoji 兼容性: 不同设备 emoji 显示不一致的问题
- 图标扩展性: 提供更丰富的图标选择和自定义能力
- 字体文件 404 问题: 使用 SVG Data URI 避免外部字体文件依赖
📱 使用方式
<!-- 基础用法 -->
<text class="iconfont icon-user"></text>
<!-- 自定义样式 -->
<text class="iconfont icon-home custom-icon"></text>
<!-- 登录表单应用 -->
<view class="input-group">
<text class="iconfont icon-user input-icon"></text>
<input class="login-input" placeholder="账号" />
</view>
📝 文档覆盖
- ✅ 技术文档: 完整的使用指南和 API 参考
- ✅ 演示页面: 可视化的图标展示和代码示例
- ✅ 变更记录: 详细的实现过程和配置说明
- ✅ 最佳实践: 命名规范、性能优化、回退方案
🚀 后续计划
- 图标扩展: 根据业务需求添加更多图标
- 主题适配: 适配暗色模式和多主题切换
- 组件封装: 封装常用的图标组件,简化使用
📱 完善移动端文档同步规范 - 2025-01-03 16:45:23
📋 变更概述
目的: 完善.cursorrules 主配置文件,补充移动端工程的强制性文档同步更新规范,确保移动端代码变更时也能及时更新相关文档。
🔧 修改内容
1. 主配置文件更新 (.cursorrules)
位置: "强制性文档同步更新" → "必须更新的文档" 部分
新增内容:
- **📱 移动端变更** → 移动端工程相关文档必须同步更新:
- **移动端 API 新增/变更** → 相应的 API 文档必须补充移动端实现章节
- **移动端页面开发** → `docs/开发文档/` 移动端相关文档
- **移动端功能变更** → `docs/业务模块/[模块名称]/` 移动端部分
- **移动端技术规范变更** → `.cursor/cursorrules-mobile.md`
📊 规范意义
- 统一标准: 移动端、前端、后端都遵循相同的文档同步要求
- 防止遗漏: 明确规定移动端变更时必须更新的文档类型
- 完整覆盖:
- API 变更 → API 文档补充移动端实现
- 页面开发 → 开发文档记录
- 功能变更 → 业务模块文档更新
- 技术规范 → cursorrules 文档维护
📝 强制执行要求
- 移动端 API 新增/变更: 必须在对应的 API 文档中补充移动端实现章节
- 移动端页面开发: 必须在
docs/开发文档/中记录相关文档 - 移动端功能变更: 必须更新
docs/业务模块/[模块名称]/中的移动端部分 - 移动端技术规范变更: 必须同步更新
.cursor/cursorrules-mobile.md
🎯 价值目标
- 📚 文档完整性: 确保移动端变更有完整的文档记录
- 🔄 规范一致性: 所有技术栈都遵循统一的文档管理规范
- 📖 知识传承: 移动端开发经验能够有效积累和传承
- 🚀 团队效率: 为后续移动端开发提供准确的文档支持