# 手环位置功能开发文档 ## 功能概述 为学生端增加了获取手环位置的功能入口,支持基站ID、位置信息和fence(围栏)功能。 ## 新增文件 ### 1. 位置服务 (`utils/locationService.uts`) 包含以下主要功能: - **获取当前位置**: `getCurrentLocation(deviceId: string)` - **获取基站列表**: `getBaseStations()` - **围栏管理**: `getFences()`, `createFence()`, `updateFence()`, `deleteFence()` - **位置历史**: `getLocationHistory()` - **围栏事件**: `getFenceEvents()`, `markEventAsRead()` #### 数据结构 ```typescript // 基站信息 interface BaseStationInfo { id: string name: string location: string longitude: number latitude: number signalStrength: number isOnline: boolean range: number } // 位置信息 interface LocationInfo { deviceId: string baseStation: BaseStationInfo | null estimatedLocation: { longitude: number latitude: number accuracy: number } | null lastUpdate: string status: 'online' | 'offline' | 'unknown' } // 围栏信息 interface FenceInfo { id: string name: string type: 'circle' | 'polygon' center?: { longitude: number, latitude: number } radius?: number points?: Array<{ longitude: number, latitude: number }> isActive: boolean eventType: 'enter' | 'exit' | 'both' createdAt: string } ``` ### 2. 位置详情页面 (`pages/sport/student/location.uvue`) 功能特性: - **实时位置显示**: 显示当前连接的基站和估算位置 - **基站管理**: 查看附近基站状态和信息 - **围栏管理**: 创建、编辑、删除围栏设置 - **事件监控**: 查看围栏进入/离开事件 - **位置历史**: 查看设备位置变化历史 ### 3. 测试页面 (`pages/sport/student/location-test.uvue`) 用于测试位置服务的各项功能是否正常工作。 ## Dashboard 修改 ### 1. 新增功能入口 在学生dashboard的快速操作区域添加了"手环位置"入口: - 图标:📍 - 显示当前位置状态(在线/离线) - 点击跳转到位置详情页面 ### 2. 页面布局调整 - 将快速操作卡片从每行2个调整为每行2个(适应5个操作项) - 优化卡片间距和样式 - 添加位置状态指示器 ## 路由配置 在 `pages.json` 中新增路由: ```json { "path": "pages/sport/student/location", "style": { "navigationBarTitleText": "手环位置", "navigationBarTextStyle": "white", "navigationBarBackgroundColor": "#667eea" } } ``` ## 使用方法 ### 1. 从Dashboard进入 1. 打开学生dashboard 2. 在快速操作区域点击"手环位置"卡片 3. 进入位置详情页面 ### 2. 功能操作 #### 查看当前位置 - 页面自动加载当前位置信息 - 显示连接的基站、信号强度、估算坐标等 - 点击"刷新位置"按钮更新信息 #### 管理围栏 - 查看现有围栏列表 - 点击"+"按钮创建新围栏(开发中) - 编辑或删除现有围栏 #### 查看事件记录 - 自动显示最近的围栏事件 - 点击事件可标记为已读 - 支持清空所有事件 #### 位置历史 - 显示最近的位置变化记录 - 点击"查看更多"查看完整历史(开发中) ## 技术实现 ### 1. 类型安全 - 所有接口返回统一的 `AkReqResponse` 格式 - 使用TypeScript接口定义数据结构 - 支持泛型和类型推断 ### 2. 错误处理 ```typescript // 统一错误响应格式 export function createLocationErrorResponse(message: string): AkReqResponse { return createLocationResponse(500, message, null) } ``` ### 3. 模拟数据 当前使用模拟数据进行演示,包括: - 4个模拟基站(教学楼A/B栋、操场、宿舍楼) - 3个预设围栏(校园安全区域、教学区域、危险区域) - 模拟的位置历史和围栏事件 ## 后续开发计划 ### 短期目标 1. **围栏创建/编辑界面**: 实现可视化围栏设置 2. **地图集成**: 集成地图组件显示位置和围栏 3. **实时推送**: 位置变化和围栏事件的实时通知 ### 中期目标 1. **数据持久化**: 连接后端API进行数据存储 2. **批量管理**: 支持批量创建和管理围栏 3. **报表功能**: 位置统计和活动报告 ### 长期目标 1. **智能围栏**: 基于AI的智能围栏推荐 2. **轨迹分析**: 学生活动轨迹分析和健康建议 3. **家长端集成**: 家长端查看学生位置功能 ## 测试说明 ### 功能测试 1. 访问 `/pages/sport/student/location-test` 进行功能测试 2. 测试各项API接口的响应和数据格式 3. 验证错误处理和边界情况 ### 页面测试 1. 从dashboard正常跳转到位置页面 2. 测试各项功能按钮和交互 3. 验证数据加载和刷新功能 ## 注意事项 1. **设备ID获取**: 当前使用 `device_${userId}` 格式的模拟ID 2. **权限控制**: 需要确保学生只能查看自己的设备位置 3. **数据安全**: 位置信息属于敏感数据,需要适当的加密和权限控制 4. **性能优化**: 位置数据更新频率需要平衡实时性和电池消耗 ## 文件结构 ``` h:\blews\akmon\ ├── utils/ │ └── locationService.uts # 位置服务 ├── pages/sport/student/ │ ├── dashboard.uvue # 学生dashboard(已修改) │ ├── location.uvue # 位置详情页面 │ └── location-test.uvue # 功能测试页面 └── pages.json # 路由配置(已修改) ``` 所有代码都按照UTS/uni-app规范编写,确保类型安全和兼容性。